bool SM_Manager::hasIndex(const char *relName,const char *AttrName,int &offset,int &length,AttrType &attrtype){ RM_FileScan attribute_scanner(attribute_fh, STRING, RELNAME_LENGTH, 0, EQ_OP, (void*)relName, strlen(relName)); RC ret; RM_Record record; Byte *mem; while( (ret=attribute_scanner.GetNextRec(record)) != NOT_FOUND ){ // record.GetRid(rid); // attribute_fh.DeleteRec(rid); record.GetData(mem); if (GenString((char *)(mem+RELNAME_LENGTH),ATTRNAME_LENGTH)==GenString((char *)AttrName,strlen(AttrName))){ offset=*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH); length=*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+8); attrtype=(AttrType)*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+4); //cout<<(*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+12))<<endl; return ((*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+12))%2)!=0; } } return OK; }
void SM_Manager::DropIndex(const char *relName, const char* AttrName) { RM_FileScan attribute_scanner(attribute_fh, STRING, RELNAME_LENGTH, 0, EQ_OP, (void*)relName, strlen(relName)); RC ret; RM_Record record; Byte *mem; RID rid; int mark=0; while( (ret=attribute_scanner.GetNextRec(record)) != NOT_FOUND ){ record.GetRid(rid); // attribute_fh.DeleteRec(rid); record.GetData(mem); if (GenString((char *)(mem+RELNAME_LENGTH),ATTRNAME_LENGTH)==GenString((char *)AttrName,strlen(AttrName))){ mark=*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+12); if(mark&1) mark=mark-1; memcpy((mem+RELNAME_LENGTH+ATTRNAME_LENGTH+12), &mark , 4); RM_Record rec=RM_Record(mem, attribute_fh.GetRecordSize(), rid); attribute_fh.UpdateRec(rec); } } attribute_fh.ForcePages(); }
RC SM_Manager::Print(const char *relName){ RM_FileScan attribute_scanner(attribute_fh, STRING, RELNAME_LENGTH, 0, EQ_OP, (void*)relName, strlen(relName)); RC ret; RM_Record record; Byte *mem; while( (ret=attribute_scanner.GetNextRec(record)) != NOT_FOUND ){ // record.GetRid(rid); // attribute_fh.DeleteRec(rid); record.GetData(mem); cout<<GenString((char *)(mem+RELNAME_LENGTH),ATTRNAME_LENGTH)<<"("<<*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+8)<<")"<<*(int*)(mem+RELNAME_LENGTH+ATTRNAME_LENGTH+4)<<endl; } return OK; }
RC SM_Manager::ShowTable (){ RM_FileScan system_scanner(system_fh, STRING, RELNAME_LENGTH, 0, EQ_OP, NULL, 0); //cout<<"1"<<endl; RC ret; RM_Record record; Byte *mem; //cout<<"1.1"<<endl; while( (ret=system_scanner.GetNextRec_NoComp(record)) != NOT_FOUND ){ // record.GetRid(rid); // attribute_fh.DeleteRec(rid); // cout<<"2"<<endl; record.GetData(mem); // cout<<"3"<<endl; cout<<GenString((char *)(mem),RELNAME_LENGTH)<<"("<<*(int*)(mem+RELNAME_LENGTH)<<")"<<endl; //cout<<"4"<<endl; } return OK; } // Print table
std::string StatsPoster::ToJson(const GameStats& s) { // Use yajl to get the string encoding right #ifdef DEBUG yajl_gen_config yajl_config = { 1, " " }; #else yajl_gen_config yajl_config = { 0, NULL }; #endif yajl_gen g = yajl_gen_alloc(&yajl_config); yajl_gen_map_open(g); GenNum(g, "server_id", s.server_id); GenNum(g, "server_start", s.server_start); GenNum(g, "gameid", s.gameid); GenNum(g, "packid_id", s.params.packid.id); GenString(g, "packid_hash", base::Format::ToHex(s.params.packid.hash, sizeof(s.params.packid.hash))); GenString(g, "title", s.info.title()); GenString(g, "filename", s.info.filename()); GenNum(g, "game_speed", s.params.tGameSpeed); GenNum(g, "min_players", s.info.minplayers()); GenNum(g, "max_players", s.info.maxplayers()); GenNum(g, "start_utc", s.start_utc); GenNum(g, "end_utc", s.end_utc); const char *str = "player_stats"; yajl_gen_string(g, (const unsigned char *)str, strlen(str)); yajl_gen_array_open(g); for (int i = 0; i < s.player_count; i++) { yajl_gen_map_open(g); GenString(g, "name", s.player_stats[i].name); GenNum(g, "pid", s.player_stats[i].pid); GenString(g, "ip", s.player_stats[i].ip); GenString(g, "did", s.player_stats[i].did); str = "winstats"; yajl_gen_string(g, (const unsigned char *)str, strlen(str)); yajl_gen_map_open(g); GenNum(g, "side_mask", s.player_stats[i].ws.sidm); GenNum(g, "side_mask_allies", s.player_stats[i].ws.sidmAllies); GenNum(g, "credits_acquired", s.player_stats[i].ws.cCreditsAcquired); GenNum(g, "credits_consumed", s.player_stats[i].ws.cCreditsConsumed); GenNum(g, "enemy_munts_killed", s.player_stats[i].ws.cEnemyMobileUnitsKilled); GenNum(g, "enemy_structs_killed", s.player_stats[i].ws.cEnemyStructuresKilled); GenNum(g, "munts_lost", s.player_stats[i].ws.cMobileUnitsLost); GenNum(g, "structs_lost", s.player_stats[i].ws.cStructuresLost); GenNum(g, "ff", s.player_stats[i].ws.ff); str = "unit_counts"; yajl_gen_string(g, (const unsigned char *)str, strlen(str)); yajl_gen_array_open(g); for (int ut = 0; ut < ARRAYSIZE(s.player_stats[i].ws.acut); ut++) { yajl_gen_integer(g, s.player_stats[i].ws.acut[ut]); } yajl_gen_array_close(g); str = "built_counts"; yajl_gen_string(g, (const unsigned char *)str, strlen(str)); yajl_gen_array_open(g); for (int ut = 0; ut < ARRAYSIZE(s.player_stats[i].ws.acutBuilt); ut++) { yajl_gen_integer(g, s.player_stats[i].ws.acutBuilt[ut]); } yajl_gen_array_close(g); yajl_gen_map_close(g); yajl_gen_map_close(g); } yajl_gen_array_close(g); yajl_gen_map_close(g); const char *buf; unsigned int len; yajl_gen_get_buf(g, (const unsigned char **)&buf, &len); std::string result(buf); yajl_gen_free(g); return result; }