Changeset 6681
- Timestamp:
- 30/07/10 16:11:07 (6 weeks ago)
- Location:
- trunk/ARBDB
- Files:
-
- 5 modified
-
ad_core.cxx (modified) (2 diffs)
-
ad_load.cxx (modified) (1 diff)
-
ad_prot.h (modified) (1 diff)
-
arbdb.cxx (modified) (2 diffs)
-
gb_prot.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ARBDB/ad_core.cxx
r6664 r6681 459 459 */ 460 460 if (!Main->local_mode && gbd->server_id) { 461 GBS_write_numhash(Main->remote_hash, gbd->server_id, 0);461 if (Main->remote_hash) GBS_write_numhash(Main->remote_hash, gbd->server_id, 0); 462 462 } 463 463 … … 521 521 gb_assert(GB_TYPE(gb_main) == GB_DB); 522 522 523 GBQUARK sys_quark = GB_key_2_quark((GBDATA*)gb_main, GB_SYSTEM_FOLDER); 523 GBQUARK sys_quark = gb_key_2_existing_quark(GB_MAIN((GBDATA*)gb_main), GB_SYSTEM_FOLDER); 524 525 // Note: sys_quark may be 0 (happens when destroying client db which never established a connection). 526 // In this case no system folder/quark has been created (and we do no longer try to create it) 527 // Nothing will happen in pass 2 below. 524 528 525 529 for (int pass = 1; pass <= 2; pass++) { -
trunk/ARBDB/ad_load.cxx
r6678 r6681 1464 1464 ASSERT_RESULT(long, gb_create_key(Main, "main", false), 0); 1465 1465 1466 Main->dummy_father = gb_make_container(NULL, 0, -1, 0); // create "main"1466 Main->dummy_father = gb_make_container(NULL, NULL, -1, 0); // create "main" 1467 1467 Main->dummy_father->main_idx = gb_make_main_idx(Main); 1468 1468 Main->dummy_father->server_id = GBTUM_MAGIC_NUMBER; 1469 gbd = gb_make_container(Main->dummy_father, 0, -1, 0); // create "main"1469 gbd = gb_make_container(Main->dummy_father, NULL, -1, 0); // create "main" 1470 1470 1471 1471 Main->data = gbd; -
trunk/ARBDB/ad_prot.h
r6678 r6681 296 296 char *GB_read_key(GBDATA *gbd); 297 297 GB_CSTR GB_read_key_pntr(GBDATA *gbd); 298 GBQUARK GB_key_2_quark(GBDATA *gbd, const char * s);298 GBQUARK GB_key_2_quark(GBDATA *gbd, const char *key); 299 299 GBQUARK GB_get_quark(GBDATA *gbd); 300 300 bool GB_has_key(GBDATA *gbd, const char *key); -
trunk/ARBDB/arbdb.cxx
r6667 r6681 1244 1244 1245 1245 1246 GBQUARK GB_key_2_quark(GBDATA *gbd, const char *s) { 1247 long index; 1248 GB_MAIN_TYPE *Main = GB_MAIN(gbd); 1249 1250 if (!s) return -1; 1251 index = GBS_read_hash(Main->key_2_index_hash, s); 1252 if (!index) { // create new index 1253 index = gb_create_key(Main, s, true); 1254 } 1255 return (GBQUARK)index; 1256 } 1246 GBQUARK gb_key_2_existing_quark(GB_MAIN_TYPE *Main, const char *key) { 1247 /*! @return existing quark for 'key' 1248 * -1 = key is NULL 1249 * 0 = no quark exists 1250 * else = quark 1251 */ 1252 1253 GBQUARK quark = -1; 1254 if (key) quark = GBS_read_hash(Main->key_2_index_hash, key); 1255 return quark; 1256 } 1257 1258 GBQUARK GB_key_2_quark(GBDATA *gbd, const char *key) { 1259 /*! find or create quark for 'key' 1260 * @return -1 if key is NULL, else existing or created quark 1261 */ 1262 1263 GB_MAIN_TYPE *Main = GB_MAIN(gbd); 1264 GBQUARK quark = gb_key_2_existing_quark(Main, key); 1265 if (!quark) quark = gb_create_key(GB_MAIN(gbd), key, true); 1266 return quark; 1267 } 1268 1269 #if defined(DEVEL_RALF) 1270 #warning add gb_NULLkey_2_quark allowing NULL as key 1271 #endif // DEVEL_RALF 1272 1273 GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *key) { 1274 // similar to GB_key_2_quark, 1275 // but if 'key' is NULL, quark 0 will be returned. 1276 // 1277 // Use this function with care. 1278 // 1279 // Known good use: 1280 // - create main entry and its dummy father via gb_make_container() 1281 // 1282 // Other uses (maybe just to pass GB_MAIN_TYPE instead of GBDATA as GB_key_2_quark likes): 1283 // - gb_rename_entry 1284 // - gb_make_entry 1285 // - compress_sequence_tree 1286 // - dictionary compression (several calls) 1287 1288 GBQUARK quark = 0; 1289 if (key) { 1290 quark = gb_key_2_existing_quark(Main, key); 1291 if (!quark) quark = gb_create_key(Main, key, true); 1292 gb_assert(quark>0); 1293 } 1294 return quark; 1295 } 1296 1297 // --------------------------------------------- 1257 1298 1258 1299 GBQUARK GB_get_quark(GBDATA *gbd) { … … 1265 1306 } 1266 1307 1267 GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *s) { 1268 long index; 1269 if (!s) return 0; 1270 index = GBS_read_hash(Main->key_2_index_hash, s); 1271 if (!index) { // create new index 1272 index = gb_create_key(Main, s, true); 1273 } 1274 return (GBQUARK)index; 1275 } 1276 1277 1278 1279 1280 long GB_read_clock(GBDATA *gbd) 1281 { 1308 // --------------------------------------------- 1309 1310 long GB_read_clock(GBDATA *gbd) { 1282 1311 if (GB_ARRAY_FLAGS(gbd).changed) return GB_MAIN(gbd)->clock; 1283 1312 return GB_GET_EXT_UPDATE_DATE(gbd); 1284 1313 } 1285 1314 1286 long GB_read_transaction(GBDATA *gbd) 1287 { 1315 long GB_read_transaction(GBDATA *gbd) { 1288 1316 return GB_MAIN(gbd)->transaction; 1289 1317 } -
trunk/ARBDB/gb_prot.h
r6661 r6681 123 123 GB_ERROR gb_security_error(GBDATA *gbd) __ATTR__USERESULT; 124 124 GB_CSTR gb_read_key_pntr(GBDATA *gbd); 125 GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *s); 125 GBQUARK gb_key_2_existing_quark(GB_MAIN_TYPE *Main, const char *key); 126 GBQUARK gb_key_2_quark(GB_MAIN_TYPE *Main, const char *key); 126 127 GBDATA *gb_create(GBDATA *father, const char *key, GB_TYPES type); 127 128 GBDATA *gb_create_container(GBDATA *father, const char *key);
