Changeset: b0446abccacf for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b0446abccacf Branch: unlock Log Message:
merged diffs (truncated from 903 to 300 lines): diff --git a/monetdb5/optimizer/opt_postfix.c b/monetdb5/optimizer/opt_postfix.c --- a/monetdb5/optimizer/opt_postfix.c +++ b/monetdb5/optimizer/opt_postfix.c @@ -76,16 +76,16 @@ OPTpostfixImplementation(Client cntxt, M ValRecord *x = &getVarConstant(mb, getArg(p, 6)), cst = {.vtype = TYPE_int}; switch (x->val.ival) { case JOIN_LT: - cst.val.ival = JOIN_GE; - break; - case JOIN_LE: cst.val.ival = JOIN_GT; break; + case JOIN_LE: + cst.val.ival = JOIN_GE; + break; case JOIN_GT: - cst.val.ival = JOIN_LE; + cst.val.ival = JOIN_LT; break; case JOIN_GE: - cst.val.ival = JOIN_LT; + cst.val.ival = JOIN_LE; break; default: cst.val.ival = x->val.ival; diff --git a/sql/backends/monet5/Tests/Mbeddedsql5--help.bat b/sql/backends/monet5/Tests/Mbeddedsql5--help.bat --- a/sql/backends/monet5/Tests/Mbeddedsql5--help.bat +++ b/sql/backends/monet5/Tests/Mbeddedsql5--help.bat @@ -1,4 +1,3 @@ -@echo on @prompt # $t $g Mbeddedsql5 --help diff --git a/sql/benchmarks/arno_flt/Tests/doAll.SQL.bat b/sql/benchmarks/arno_flt/Tests/doAll.SQL.bat --- a/sql/benchmarks/arno_flt/Tests/doAll.SQL.bat +++ b/sql/benchmarks/arno_flt/Tests/doAll.SQL.bat @@ -1,5 +1,4 @@ @prompt # $t $g -@echo on %SQL_CLIENT% < "%TSTSRCDIR%\check0.sql" diff --git a/sql/benchmarks/arno_flt/Tests/doAll_sorted.SQL.bat b/sql/benchmarks/arno_flt/Tests/doAll_sorted.SQL.bat --- a/sql/benchmarks/arno_flt/Tests/doAll_sorted.SQL.bat +++ b/sql/benchmarks/arno_flt/Tests/doAll_sorted.SQL.bat @@ -1,5 +1,4 @@ @prompt # $t $g -@echo on %SQL_CLIENT% < "%TSTSRCDIR%\check0.sql" diff --git a/sql/benchmarks/arno_flt/Tests/init.SQL.bat b/sql/benchmarks/arno_flt/Tests/init.SQL.bat --- a/sql/benchmarks/arno_flt/Tests/init.SQL.bat +++ b/sql/benchmarks/arno_flt/Tests/init.SQL.bat @@ -1,5 +1,4 @@ @prompt # $t $g -@echo on %SQL_CLIENT% < "%TSTSRCBASE%\%TSTDIR%\create_tables.flt.sql" diff --git a/sql/jdbc/tests/Tests/Test.SQL.bat b/sql/jdbc/tests/Tests/Test.SQL.bat --- a/sql/jdbc/tests/Tests/Test.SQL.bat +++ b/sql/jdbc/tests/Tests/Test.SQL.bat @@ -3,6 +3,5 @@ set URL=jdbc:monetdb://%HOST%:%MAPIPORT%/%TSTDB%?user=monetdb^&password=monetdb%JDBC_EXTRA_ARGS% prompt # $t $g -echo on java %TST% "%URL%" diff --git a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat --- a/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat +++ b/sql/jdbc/tests/Tests/Test_JdbcClient.SQL.bat @@ -4,7 +4,6 @@ echo user=monetdb> .monetdb echo password=monetdb>> .monetdb prompt # $t $g -echo on java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d "%TSTDB%" --help diff --git a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.bat b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.bat --- a/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.bat +++ b/sql/jdbc/tests/Tests/ValidateSystemCatalogTables.SQL.bat @@ -4,7 +4,6 @@ echo user=monetdb> .monetdb echo password=monetdb>> .monetdb prompt # $t $g -echo on call java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d %TSTDB% -e -f "%TSTSRCBASE%\%TSTDIR%\Tests\ValidateSystemCatalogTables.sql" diff --git a/sql/jdbc/tests/Tests/bogus-auto-generated-keys.SQL.bat b/sql/jdbc/tests/Tests/bogus-auto-generated-keys.SQL.bat --- a/sql/jdbc/tests/Tests/bogus-auto-generated-keys.SQL.bat +++ b/sql/jdbc/tests/Tests/bogus-auto-generated-keys.SQL.bat @@ -4,7 +4,6 @@ echo user=monetdb> .monetdb echo password=monetdb>> .monetdb prompt # $t $g -echo on call java nl.cwi.monetdb.client.JdbcClient -h %HOST% -p %MAPIPORT% -d %TSTDB% -e -f "%TSTSRCBASE%\%TSTDIR%\Tests\bogus-auto-generated-keys.sql" diff --git a/sql/odbc/samples/Tests/odbcsample1.SQL.bat b/sql/odbc/samples/Tests/odbcsample1.SQL.bat --- a/sql/odbc/samples/Tests/odbcsample1.SQL.bat +++ b/sql/odbc/samples/Tests/odbcsample1.SQL.bat @@ -1,6 +1,5 @@ @echo off prompt # $t $g -echo on odbcsample1.exe diff --git a/sql/odbc/samples/Tests/testgetinfo.SQL.bat b/sql/odbc/samples/Tests/testgetinfo.SQL.bat --- a/sql/odbc/samples/Tests/testgetinfo.SQL.bat +++ b/sql/odbc/samples/Tests/testgetinfo.SQL.bat @@ -1,6 +1,5 @@ @echo off prompt # $t $g -echo on testgetinfo.exe diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -14,11 +14,17 @@ struct versionhead ; -#define active (0) -#define under_destruction (1<<1) -#define block_destruction (1<<2) -#define deleted (1<<3) -#define rollbacked (1<<4) +#define active (0) +#define under_destruction (1<<1) +#define block_destruction (1<<2) +#define deleted (1<<3) +#define rollbacked (1<<4) + +/* This objectversion owns its associated versionhead. + * When this objectversion gets destroyed, + * the cleanup procedure should also destroy the associated (name|id) based versionhead.*/ +#define name_based_versionhead_owner (1<<5) +#define id_based_versionhead_owner (1<<6) typedef struct objectversion { ulng ts; @@ -40,7 +46,6 @@ typedef struct versionhead { objectversion* ov; } versionhead ; -// TODO: this might be moved to the objectversion struct itself. typedef struct RW_lock { //readers-writer lock int reader_cnt; MT_Lock readers_lock; @@ -102,28 +107,20 @@ unlock_writer(objectset* os) MT_lock_unset(&os->rw_lock.general_lock); } +static bte os_atmc_get_state(objectversion *ov) { + bte state = (bte) ATOMIC_GET(&ov->state); + return state; +} + +static void os_atmc_set_state(objectversion *ov, bte state) { + ATOMIC_SET(&ov->state, state); +} + static versionhead * find_id(objectset *os, sqlid id) { if (os) { - lock_writer(os); - if ((!os->id_map || os->id_map->size*16 < os->id_based_cnt) && os->id_based_cnt > HASH_MIN_SIZE && os->sa) { - hash_destroy(os->id_map); - os->id_map = hash_new(os->sa, os->id_based_cnt, (fkeyvalue)&os_id_key); - if (os->id_map == NULL) { - unlock_writer(os); - return NULL; - } - - for (versionhead *n = os->id_based_h; n; n = n->next ) { - int key = os_id_key(n); - - if (hash_add(os->id_map, key, n) == NULL) { - unlock_writer(os); - return NULL; - } - } - } + lock_reader(os); if (os->id_map) { int key = (int) BATatoms[TYPE_int].atomHash(&id); sql_hash_e *he = os->id_map->buckets[key&(os->id_map->size-1)]; @@ -132,23 +129,26 @@ find_id(objectset *os, sqlid id) versionhead *n = he->value; if (n && n->ov->b->id == id) { - unlock_writer(os); + unlock_reader(os); return n; } } - unlock_writer(os); + unlock_reader(os); return NULL; } - unlock_writer(os); + for (versionhead *n = os->id_based_h; n; n = n->next) { objectversion *ov = n->ov; /* check if ids match */ if (id == ov->b->id) { + unlock_reader(os); return n; } } } + + unlock_reader(os); return NULL; } @@ -179,11 +179,11 @@ node_destroy(objectset *os, sqlstore *st } static versionhead * -os_remove_name_based_chain(objectset *os, sqlstore *store, versionhead *n) +os_remove_name_based_chain(objectset *os, objectversion* ov) { - assert(n); + lock_writer(os); + versionhead *n = ov->name_based_head; versionhead *p = os->name_based_h; - if (p != n) while (p && p->next != n) p = p->next; @@ -201,19 +201,23 @@ os_remove_name_based_chain(objectset *os if (n == os->name_based_t) os->name_based_t = p; - lock_writer(os); if (os->name_map && n) hash_delete(os->name_map, n); + + os->name_based_cnt--; unlock_writer(os); - node_destroy(os, store, n); + bte state = os_atmc_get_state(ov); + state |= name_based_versionhead_owner; + os_atmc_set_state(ov, state); return p; } static versionhead * -os_remove_id_based_chain(objectset *os, sqlstore *store, versionhead *n) +os_remove_id_based_chain(objectset *os, objectversion* ov) { - assert(n); + lock_writer(os); + versionhead *n = ov->id_based_head; versionhead *p = os->id_based_h; if (p != n) @@ -233,12 +237,15 @@ os_remove_id_based_chain(objectset *os, if (n == os->id_based_t) os->id_based_t = p; - lock_writer(os); if (os->id_map && n) hash_delete(os->id_map, n); + + os->name_based_cnt--; unlock_writer(os); - node_destroy(os, store, n); + bte state = os_atmc_get_state(ov); + state |= id_based_versionhead_owner; + os_atmc_set_state(ov, state); return p; } @@ -255,11 +262,34 @@ node_create(sql_allocator *sa, objectver return n; } +static int +os_name_key(versionhead *n) +{ + return hash_key(n->ov->b->name); +} + static objectset * - os_append_node_name(objectset *os, versionhead *n) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list