Esempio n. 1
0
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;
}
Esempio n. 2
0
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();
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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
Esempio n. 5
0
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;
}