Skip to content

Commit

Permalink
Updated db2sql plugin for the needs of the new itemdb
Browse files Browse the repository at this point in the history
May be used as ./map-server --db2sql or by typing "server tools db2sql" within map-server console parse.
Special Thanks to Haruna.

Signed-off-by: shennetsind <ind@henn.et>
  • Loading branch information
shennetsind authored and MishimaHaruna committed Nov 14, 2013
1 parent 59b9acb commit 091e235
Show file tree
Hide file tree
Showing 7 changed files with 216 additions and 173 deletions.
4 changes: 3 additions & 1 deletion src/common/HPM.c
Expand Up @@ -640,7 +640,9 @@ void hplugins_share_defaults(void) {
HPM->share(SQL,"SQL");
/* timer */
HPM->share(timer,"timer");

/* libconfig (temp) */
HPM->share(config_setting_lookup_string,"config_setting_lookup_string");
HPM->share(config_setting_lookup_int,"config_setting_lookup_int");
}

void hpm_init(void) {
Expand Down
3 changes: 3 additions & 0 deletions src/common/sql.c
Expand Up @@ -1005,6 +1005,9 @@ void Sql_HerculesUpdateCheck(Sql* self) {
unsigned int performed = 0;
StringBuf buf;

if( self == NULL )
return;/* return silently, build has no mysql connection */

if( !( ifp = fopen("sql-files/upgrades/index.txt", "r") ) ) {
ShowError("SQL upgrade index was not found!\n");
return;
Expand Down
123 changes: 49 additions & 74 deletions src/map/itemdb.c
Expand Up @@ -1826,43 +1826,36 @@ int itemdb_readdb_libconfig_sub(config_setting_t *it, int n, const char *source)
* Reading item from item db
* item_db2 overwriting item_db
*------------------------------------------*/
int itemdb_readdb(void) {
const char* filename[] = {
DBPATH"item_db.conf",
"item_db2.conf",
};
int itemdb_readdb(const char *filename) {
bool duplicate[MAX_ITEMDB];
int fi;
config_t item_db_conf;
config_setting_t *itdb, *it;
char filepath[256];
int i = 0, count = 0;

sprintf(filepath, "%s/%s", map->db_path, filename);
memset(&duplicate,0,sizeof(duplicate));
if( conf_read_file(&item_db_conf, filepath) || !(itdb = config_setting_get_member(item_db_conf.root, "item_db")) ) {
ShowError("can't read %s\n", filepath);
return 0;
}

for( fi = 0; fi < ARRAYLENGTH(filename); ++fi ) {
char filepath[256];
int i = 0, count = 0;
sprintf(filepath, "%s/%s", map->db_path, filename[fi]);
memset(&duplicate,0,sizeof(duplicate));
if( conf_read_file(&item_db_conf, filepath) || !(itdb = config_setting_get_member(item_db_conf.root, "item_db")) ) {
ShowError("can't read %s\n", filepath);
continue;
}

while( (it = config_setting_get_elem(itdb,i++)) ) {
int nameid = itemdb->readdb_libconfig_sub(it, i-1, filename[fi]);
while( (it = config_setting_get_elem(itdb,i++)) ) {
int nameid = itemdb->readdb_libconfig_sub(it, i-1, filename);

if( !nameid )
continue;
if( !nameid )
continue;

count++;
count++;

if( duplicate[nameid] ) {
ShowWarning("itemdb_readdb:%s: duplicate entry of ID #%d (%s/%s)\n",
filename[fi], nameid, itemdb_name(nameid), itemdb_jname(nameid));
} else
duplicate[nameid] = true;
}
config_destroy(&item_db_conf);
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename[fi]);
if( duplicate[nameid] ) {
ShowWarning("itemdb_readdb:%s: duplicate entry of ID #%d (%s/%s)\n",
filename, nameid, itemdb_name(nameid), itemdb_jname(nameid));
} else
duplicate[nameid] = true;
}
config_destroy(&item_db_conf);
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, filename);

return 0;
}
Expand Down Expand Up @@ -1956,8 +1949,15 @@ void itemdb_read(bool minimal) {

if (map->db_use_sql_item_db)
itemdb->read_sqldb();
else
itemdb->readdb();
else {
const char* filename[] = {
DBPATH"item_db.conf",
"item_db2.conf",
};

for(i = 0; i < ARRAYLENGTH(filename); i++)
itemdb->readdb(filename[i]);
}

for( i = 0; i < ARRAYLENGTH(itemdb->array); ++i ) {
if( itemdb->array[i] ) {
Expand Down Expand Up @@ -2034,18 +2034,13 @@ int itemdb_final_sub(DBKey key, DBData *data, va_list ap)

return 0;
}

void itemdb_reload(void) {
struct s_mapiterator* iter;
struct map_session_data* sd;

int i,d,k;

void itemdb_clear(bool total) {
int i;
// clear the previous itemdb data
for( i = 0; i < ARRAYLENGTH(itemdb->array); ++i )
if( itemdb->array[i] )
itemdb->destroy_item_data(itemdb->array[i], 1);

for( i = 0; i < itemdb->group_count; i++ ) {
if( itemdb->groups[i].nameid )
aFree(itemdb->groups[i].nameid);
Expand Down Expand Up @@ -2084,12 +2079,24 @@ void itemdb_reload(void) {
itemdb->packages = NULL;
itemdb->package_count = 0;

if( total )
return;

itemdb->other->clear(itemdb->other, itemdb->final_sub);

memset(itemdb->array, 0, sizeof(itemdb->array));

db_clear(itemdb->names);


}
void itemdb_reload(void) {
struct s_mapiterator* iter;
struct map_session_data* sd;

int i,d,k;

itemdb->clear(false);

// read new data
itemdb->read(false);

Expand Down Expand Up @@ -2160,41 +2167,8 @@ void itemdb_force_name_constants(void) {
dbi_destroy(iter);
}
void do_final_itemdb(void) {
int i;

for( i = 0; i < ARRAYLENGTH(itemdb->array); ++i )
if( itemdb->array[i] )
itemdb->destroy_item_data(itemdb->array[i], 1);

for( i = 0; i < itemdb->group_count; i++ ) {
if( itemdb->groups[i].nameid )
aFree(itemdb->groups[i].nameid);
}

if( itemdb->groups )
aFree(itemdb->groups);

for( i = 0; i < itemdb->chain_count; i++ ) {
if( itemdb->chains[i].items )
aFree(itemdb->chains[i].items);
}

if( itemdb->chains )
aFree(itemdb->chains);

for( i = 0; i < itemdb->package_count; i++ ) {
int c;
for( c = 0; c < itemdb->packages[i].random_qty; c++ )
aFree(itemdb->packages[i].random_groups[c].random_list);
if( itemdb->packages[i].random_groups )
aFree(itemdb->packages[i].random_groups);
if( itemdb->packages[i].must_items )
aFree(itemdb->packages[i].must_items);
}
itemdb->clear(true);

if( itemdb->packages )
aFree(itemdb->packages);

itemdb->other->destroy(itemdb->other, itemdb->final_sub);
itemdb->destroy_item_data(&itemdb->dummy, 0);
db_destroy(itemdb->names);
Expand Down Expand Up @@ -2295,4 +2269,5 @@ void itemdb_defaults(void) {
itemdb->read = itemdb_read;
itemdb->destroy_item_data = destroy_item_data;
itemdb->final_sub = itemdb_final_sub;
itemdb->clear = itemdb_clear;
}
3 changes: 2 additions & 1 deletion src/map/itemdb.h
Expand Up @@ -349,13 +349,14 @@ struct itemdb_interface {
int (*validate_entry) (struct item_data *entry, int n, const char *source);
int (*readdb_sql_sub) (Sql *handle, int n, const char *source);
int (*readdb_libconfig_sub) (config_setting_t *it, int n, const char *source);
int (*readdb) (void);
int (*readdb) (const char *filename);
int (*read_sqldb) (void);
uint64 (*unique_id) (int8 flag, int64 value);
int (*uid_load) ();
void (*read) (bool minimal);
void (*destroy_item_data) (struct item_data *self, int free_self);
int (*final_sub) (DBKey key, DBData *data, va_list ap);
void (*clear) (bool total);
};

struct itemdb_interface *itemdb;
Expand Down
9 changes: 8 additions & 1 deletion src/map/map.c
Expand Up @@ -5438,6 +5438,7 @@ int do_init(int argc, char *argv[])

HPM->event(HPET_PRE_INIT);

minimal = map->minimal;/* temp (perhaps make minimal a mask with options of what to load? e.g. plugin 1 does minimal |= mob_db; */
for( i = 1; i < argc ; i++ ) {
const char* arg = argv[i];

Expand Down Expand Up @@ -5619,12 +5620,17 @@ int do_init(int argc, char *argv[])
duel->init(minimal);
vending->init(minimal);

if (minimal) {
if (scriptcheck) {
if (npc->parsesrcfile(scriptcheck, false) == 0)
exit(EXIT_SUCCESS);
exit(EXIT_FAILURE);
}

if( minimal ) {
HPM->event(HPET_READY);
exit(EXIT_SUCCESS);
}

npc->event_do_oninit(); // Init npcs (OnInit)

if (battle_config.pk_mode)
Expand Down Expand Up @@ -5659,6 +5665,7 @@ void map_defaults(void) {
map = &map_s;

/* */
map->minimal = false;
map->count = 0;

sprintf(map->db_path ,"db");
Expand Down
1 change: 1 addition & 0 deletions src/map/map.h
Expand Up @@ -800,6 +800,7 @@ struct map_cache_map_info {
struct map_interface {

/* vars */
bool minimal;
int count;

int autosave_interval;
Expand Down

0 comments on commit 091e235

Please sign in to comment.