MonetDB: nilmask - small steps towards unsigned types
Changeset: 8f85d1dd4e0f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/8f85d1dd4e0f Modified Files: gdk/gdk.h gdk/gdk_atoms.c sql/common/sql_types.c Branch: nilmask Log Message: small steps towards unsigned types diffs (152 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -431,15 +431,20 @@ enum { TYPE_msk, /* bit mask */ TYPE_bit, /* TRUE, FALSE, or nil */ TYPE_bte, + TYPE_ubte, TYPE_sht, + TYPE_usht, TYPE_int, + TYPE_uint, TYPE_oid, TYPE_ptr, /* C pointer! */ TYPE_flt, TYPE_dbl, TYPE_lng, + TYPE_ulng, #ifdef HAVE_HGE TYPE_hge, + TYPE_uhge, #endif TYPE_date, TYPE_daytime, @@ -718,6 +723,7 @@ typedef struct { bool key:1, /* no duplicate values present */ nonil:1,/* there are no nils in the column */ nil:1, /* there is a nil in the column */ + nilmask:1, /* bat has nils seperated */ sorted:1, /* column is sorted in ascending order */ revsorted:1,/* column is sorted in descending order */ ascii:1;/* string column is fully ASCII (7 bit) */ diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c --- a/gdk/gdk_atoms.c +++ b/gdk/gdk_atoms.c @@ -1691,6 +1691,19 @@ atomDesc BATatoms[MAXATOMS] = { .atomCmp = (int (*)(const void *, const void *)) bteCmp, .atomHash = (BUN (*)(const void *)) bteHash, }, + [TYPE_ubte] = { + .name = "ubte", + .storage = TYPE_bte, + .linear = true, + .size = sizeof(bte), + .atomNull = NULL, + .atomFromStr = (ssize_t (*)(const char *, size_t *, void **, bool)) bteFromStr, + .atomToStr = (ssize_t (*)(char **, size_t *, const void *, bool)) bteToStr, + .atomRead = (void *(*)(void *, size_t *, stream *, size_t)) bteRead, + .atomWrite = (gdk_return (*)(const void *, stream *, size_t)) bteWrite, + .atomCmp = (int (*)(const void *, const void *)) bteCmp, + .atomHash = (BUN (*)(const void *)) bteHash, + }, [TYPE_sht] = { .name = "sht", .storage = TYPE_sht, @@ -1704,6 +1717,19 @@ atomDesc BATatoms[MAXATOMS] = { .atomCmp = (int (*)(const void *, const void *)) shtCmp, .atomHash = (BUN (*)(const void *)) shtHash, }, + [TYPE_usht] = { + .name = "usht", + .storage = TYPE_sht, + .linear = true, + .size = sizeof(sht), + .atomNull = NULL, + .atomFromStr = (ssize_t (*)(const char *, size_t *, void **, bool)) shtFromStr, + .atomToStr = (ssize_t (*)(char **, size_t *, const void *, bool)) shtToStr, + .atomRead = (void *(*)(void *, size_t *, stream *, size_t)) shtRead, + .atomWrite = (gdk_return (*)(const void *, stream *, size_t)) shtWrite, + .atomCmp = (int (*)(const void *, const void *)) shtCmp, + .atomHash = (BUN (*)(const void *)) shtHash, + }, [TYPE_int] = { .name = "int", .storage = TYPE_int, @@ -1717,6 +1743,19 @@ atomDesc BATatoms[MAXATOMS] = { .atomCmp = (int (*)(const void *, const void *)) intCmp, .atomHash = (BUN (*)(const void *)) intHash, }, + [TYPE_uint] = { + .name = "uint", + .storage = TYPE_int, + .linear = true, + .size = sizeof(int), + .atomNull = NULL, + .atomFromStr = (ssize_t (*)(const char *, size_t *, void **, bool)) intFromStr, + .atomToStr = (ssize_t (*)(char **, size_t *, const void *, bool)) intToStr, + .atomRead = (void *(*)(void *, size_t *, stream *, size_t)) intRead, + .atomWrite = (gdk_return (*)(const void *, stream *, size_t)) intWrite, + .atomCmp = (int (*)(const void *, const void *)) intCmp, + .atomHash = (BUN (*)(const void *)) intHash, + }, [TYPE_oid] = { .name = "oid", .linear = true, @@ -1796,6 +1835,19 @@ atomDesc BATatoms[MAXATOMS] = { .atomCmp = (int (*)(const void *, const void *)) lngCmp, .atomHash = (BUN (*)(const void *)) lngHash, }, + [TYPE_ulng] = { + .name = "ulng", + .storage = TYPE_lng, + .linear = true, + .size = sizeof(lng), + .atomNull = NULL, + .atomFromStr = (ssize_t (*)(const char *, size_t *, void **, bool)) lngFromStr, + .atomToStr = (ssize_t (*)(char **, size_t *, const void *, bool
MonetDB: Dec2023 - Graft changeset 91425:e1cf401e08b1
Changeset: 12e11dbf2958 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/12e11dbf2958 Modified Files: sql/include/sql_catalog.h sql/storage/objectset.c sql/storage/store.c Branch: Dec2023 Log Message: Graft changeset 91425:e1cf401e08b1 diffs (61 lines): diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h --- a/sql/include/sql_catalog.h +++ b/sql/include/sql_catalog.h @@ -300,6 +300,8 @@ typedef struct sql_schema { } sql_schema; typedef struct sql_catalog { + ATOMIC_TYPE schema_version; + struct objectset *schemas; struct objectset *objects; } sql_catalog; @@ -753,6 +755,7 @@ typedef struct sql_session { char *def_schema_name; /* users default schema name */ char *schema_name; /* transaction's schema name */ sql_schema *schema; + ATOMIC_TYPE schema_version; char ac_on_commit; /* if 1, auto_commit should be enabled on commit, rollback, etc. */ diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c --- a/sql/storage/objectset.c +++ b/sql/storage/objectset.c @@ -643,6 +643,7 @@ tc_commit_objectversion(sql_trans *tr, s (void)oldest; if (!tr->parent) change->obj->new = 0; + ATOMIC_INC(&tr->cat->schema_version); } else { os_rollback(ov, tr->store); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -3837,6 +3837,7 @@ sql_trans_create_(sqlstore *store, sql_t store->cat = tr->cat = ZNEW(sql_catalog); store->cat->schemas = os_new(NULL, (destroy_fptr) &schema_destroy, false, true, true, true, store); store->cat->objects = os_new(NULL, (destroy_fptr) &key_destroy, false, false, true, false, store); + ATOMIC_INIT(&store->cat->schema_version, 0); } tr->tmp = store->tmp; TRC_DEBUG(SQL_STORE, "New transaction: %p\n", tr); @@ -7245,13 +7246,17 @@ sql_trans_begin(sql_session *s) } tr->active = 1; + int res = ATOMIC_GET(&s->schema_version) ? + ATOMIC_GET(&s->schema_version) != ATOMIC_GET(&tr->cat->schema_version) : 0; + ATOMIC_SET(&s->schema_version, tr->cat->schema_version); + ATOMIC_INC(&store->nr_active); list_append(store->active, tr); TRC_DEBUG(SQL_STORE, "Exit sql_trans_begin for transaction: " ULLFMT "\n", tr->tid); store_unlock(store); s->status = tr->status = 0; - return 0; + return res; } int ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Dec2023 - Add test for #7537
Changeset: 7b48eb76c4e2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/7b48eb76c4e2 Added Files: sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test Modified Files: sql/test/BugTracker-2024/Tests/All Branch: Dec2023 Log Message: Add test for #7537 diffs (32 lines): diff --git a/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test b/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test @@ -0,0 +1,19 @@ +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +create table t(c int) + +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +prepare select c * ? from t + +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +exec 0(1) + +@connection(id=c2, username=monetdb, password=monetdb) +statement ok +drop table t + +@connection(id=c1, username=monetdb, password=monetdb) +statement error 42S02!SELECT: no such table 't' +exec 0(1) diff --git a/sql/test/BugTracker-2024/Tests/All b/sql/test/BugTracker-2024/Tests/All --- a/sql/test/BugTracker-2024/Tests/All +++ b/sql/test/BugTracker-2024/Tests/All @@ -56,3 +56,4 @@ 7511-password-hash-missing-error 7512-concurrent-globaltmp-instantiate-crash 7513-uri-authority-parse-issue 7528-jarowinkler-null +7537-prepare_stmt_with_dropped_table ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Aug2024 - Merge with Dec2023
Changeset: 37ad28092f31 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/37ad28092f31 Modified Files: sql/include/sql_catalog.h sql/storage/objectset.c sql/storage/store.c sql/test/BugTracker-2024/Tests/All Branch: Aug2024 Log Message: Merge with Dec2023 diffs (32 lines): diff --git a/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test b/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2024/Tests/7537-prepare_stmt_with_dropped_table.test @@ -0,0 +1,19 @@ +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +create table t(c int) + +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +prepare select c * ? from t + +@connection(id=c1, username=monetdb, password=monetdb) +statement ok +exec 0(1) + +@connection(id=c2, username=monetdb, password=monetdb) +statement ok +drop table t + +@connection(id=c1, username=monetdb, password=monetdb) +statement error 42S02!SELECT: no such table 't' +exec 0(1) diff --git a/sql/test/BugTracker-2024/Tests/All b/sql/test/BugTracker-2024/Tests/All --- a/sql/test/BugTracker-2024/Tests/All +++ b/sql/test/BugTracker-2024/Tests/All @@ -66,3 +66,4 @@ 7535-create-view-groupby-func 7536-mclient-forgets-to-flush 7538-reduce-cast 7539-is-distinct-from +7537-prepare_stmt_with_dropped_table ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Merge with Aug2024
Changeset: 272c586a7ca4 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/272c586a7ca4 Modified Files: sql/server/rel_select.c sql/server/sql_parser.y sql/storage/store.c Branch: default Log Message: Merge with Aug2024 diffs (truncated from 1397 to 300 lines): diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -3879,6 +3879,8 @@ main(int argc, char **argv) } mapi_destroy(mid); + if (toConsole != stdout_stream && toConsole != stderr_stream) + close_stream(toConsole); mnstr_destroy(stdout_stream); mnstr_destroy(stderr_stream); if (priv.buf != NULL) diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -88,7 +88,7 @@ SQLhelp sqlhelp1[] = { "ALTER USER ident\n" "[WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string]\n" "[SET SCHEMA ident] [SCHEMA PATH string] [DEFAULT ROLE ident]\n" -"[MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]", +"[MAX_MEMORY posbytes | MAX_MEMORY sizestr | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, {"ANALYZE", @@ -252,7 +252,7 @@ SQLhelp sqlhelp1[] = { {"CREATE USER", "Create a new database user", "CREATE USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string NAME string [SCHEMA ident] [SCHEMA PATH string]\n" -"[MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]\n" +"[MAX_MEMORY posbytes | MAX_MEMORY sizestr | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]\n" "[OPTIMIZER string] [DEFAULT ROLE ident]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, diff --git a/clients/mapilib/Tests/tlssecurity.py b/clients/mapilib/Tests/tlssecurity.py --- a/clients/mapilib/Tests/tlssecurity.py +++ b/clients/mapilib/Tests/tlssecurity.py @@ -14,10 +14,8 @@ import os import re import subprocess import sys -import threading -sys.path.append(os.environ.get('TSTSRCDIR','.')) -import tlstester +from MonetDBtesting.tlstester import TLSTesterClient level = logging.WARNING # if sys.platform == 'win32': @@ -27,45 +25,20 @@ if '-v' in sys.argv: #level = logging.DEBUG logging.basicConfig(level=level) +# A tmpdir to write certificates to tgtdir = os.environ['TSTTRGDIR'] assert os.path.isdir(tgtdir) +scratchdir = os.path.join(tgtdir, "scratch") +logging.debug(f"scratchdir={scratchdir}") -hostnames = ['localhost'] -# Generate certificates and write them to the scratch dir -# Write them to the scratch dir for inspection by the user. -certs = tlstester.Certs(hostnames) -certsdir = os.path.join(tgtdir, "certs") -try: -os.mkdir(certsdir) -except FileExistsError: -pass -count = 0 -for name, content in certs.all().items(): -with open(os.path.join(certsdir, name), "wb") as a: -a.write(content) -count += 1 -logging.debug(f"Wrote {count} files to {certsdir}") +tlstester = TLSTesterClient(scratchdir) + def certpath(name): -return os.path.join(certsdir, name) -def certbytes(name): -filename = certpath(name) -with open(filename, 'rb') as f: -return f.read() - -# Start the worker threads - -server = tlstester.TLSTester( -certs=certs, -listen_addr='127.0.0.1', -preassigned=dict(), -sequential=False, -hostnames=hostnames) -server_thread = threading.Thread(target=server.serve_forever, daemon=True) -server_thread.start() +return tlstester.download(name) def attempt(experiment: str, portname: str, expected_error_regex: str, tls=True, host='localhost', **params): -port = server.get_port(portname) +port = tlstester.get_port(portname) scheme = 'monetdbs' if tls else 'monetdb' url = f"{scheme}://{host}:{port}/demo" if params: @@ -197,7 +170,7 @@ attempt('connect_server_name', 'sni', No # Connect to port 'server1' over TLS, with certhash set to a prefix of the hash # of the server certificate in DER form. Have a succesful MAPI exchange. -server1hash = sha256(certs.get_file('server1.der')).hexdigest() +server1hash = sha256(tlstester.fetch('server1.der')).hexdigest() attempt('connect_right_hash', 'server1', None, certhash='sha256:' + server1hash[:6]) # connect_wrong_hash @@ -218,7 +191,7 @@ attempt('connect_wrong_hash', 'server1', # Connect to port 'server1' over TLS, with certhash set to a prefix of the hash # of the CA1 certificate in DER form. This should fail. -ca1hash = sha256(certs.get_file('ca1.der')).hexdigest() +ca1hash = sha256(tlstester.fetch('ca1.der')).hexdigest() attempt('connect_ca_hash', 'server1', "does not match certhash",
MonetDB: nilmask - merged with default
Changeset: f016580a6ce2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/f016580a6ce2 Modified Files: clients/Tests/MAL-signatures-hge.test clients/Tests/MAL-signatures.test gdk/gdk.h gdk/gdk_batop.c sql/backends/monet5/sql.c sql/include/sql_catalog.h sql/storage/bat/bat_storage.c sql/storage/bat/bat_storage.h sql/storage/sql_storage.h sql/storage/store.c Branch: nilmask Log Message: merged with default diffs (truncated from 3864 to 300 lines): diff --git a/clients/Tests/MAL-signatures-hge.test b/clients/Tests/MAL-signatures-hge.test --- a/clients/Tests/MAL-signatures-hge.test +++ b/clients/Tests/MAL-signatures-hge.test @@ -49815,8 +49815,13 @@ SQLstddev_pop; return the standard deviation population of groups sql stop_vacuum +unsafe pattern sql.stop_vacuum(X_0:str, X_1:str):void +SQLstr_stop_vacuum; +stop auto vacuum +sql +stop_vacuum unsafe pattern sql.stop_vacuum(X_0:str, X_1:str, X_2:str):void -SQLstr_column_stop_vacuum; +SQLstr_stop_vacuum; stop auto vacuum sql storage @@ -49975,13 +49980,23 @@ SYSupdate_tables; Procedure triggered on update of the sys._tables table sql vacuum +unsafe pattern sql.vacuum(X_0:str, X_1:str, X_2:int):void +SQLstr_auto_vacuum; +auto vacuum string column of given table with interval(sec) +sql +vacuum unsafe pattern sql.vacuum(X_0:str, X_1:str, X_2:str, X_3:int):void -SQLstr_column_auto_vacuum; +SQLstr_auto_vacuum; auto vacuum string column with interval(sec) sql vacuum +unsafe pattern sql.vacuum(X_0:str, X_1:str):void +SQLstr_vacuum; +vacuum a string column +sql +vacuum unsafe pattern sql.vacuum(X_0:str, X_1:str, X_2:str):void -SQLstr_column_vacuum; +SQLstr_vacuum; vacuum a string column sql variance diff --git a/clients/Tests/MAL-signatures.test b/clients/Tests/MAL-signatures.test --- a/clients/Tests/MAL-signatures.test +++ b/clients/Tests/MAL-signatures.test @@ -38225,8 +38225,13 @@ SQLstddev_pop; return the standard deviation population of groups sql stop_vacuum +unsafe pattern sql.stop_vacuum(X_0:str, X_1:str):void +SQLstr_stop_vacuum; +stop auto vacuum +sql +stop_vacuum unsafe pattern sql.stop_vacuum(X_0:str, X_1:str, X_2:str):void -SQLstr_column_stop_vacuum; +SQLstr_stop_vacuum; stop auto vacuum sql storage @@ -38360,8 +38365,13 @@ SYSupdate_tables; Procedure triggered on update of the sys._tables table sql vacuum +unsafe pattern sql.vacuum(X_0:str, X_1:str, X_2:int):void +SQLstr_auto_vacuum; +auto vacuum string column of given table with interval(sec) +sql +vacuum unsafe pattern sql.vacuum(X_0:str, X_1:str, X_2:str, X_3:int):void -SQLstr_column_auto_vacuum; +SQLstr_auto_vacuum; auto vacuum string column with interval(sec) sql vacuum diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -3879,6 +3879,8 @@ main(int argc, char **argv) } mapi_destroy(mid); + if (toConsole != stdout_stream && toConsole != stderr_stream) + close_stream(toConsole); mnstr_destroy(stdout_stream); mnstr_destroy(stderr_stream); if (priv.buf != NULL) diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -88,7 +88,7 @@ SQLhelp sqlhelp1[] = { "ALTER USER ident\n" "[WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string]\n" "[SET SCHEMA ident] [SCHEMA PATH string] [DEFAULT ROLE ident]\n" -"[MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]", +"[MAX_MEMORY posbytes | MAX_MEMORY sizestr | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, {"ANALYZE", @@ -252,7 +252,7 @@ SQLhelp sqlhelp1[] = { {"CREATE USER", "Create a new database user", "CREATE USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string NAME string [SCHEMA ident] [SCHEMA PATH string]\n" -"[MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]\n" +"[MAX_MEMORY posbytes | MAX_MEMORY sizestr | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]\n" "[OPTIMIZER string] [DEFAULT ROLE ident]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, diff --git a/clients/mapilib/Tests/tlssecurity.py b/clients/mapilib/Tests/tlssecurity.py --- a/clients/mapilib/Tests/tlssecurity.py +++ b/clients/mapilib/Tests/tlssecurity.py @@ -14,10 +14,8 @@ import os import re import subprocess import sys -import threading -sys.path.append(os.environ.get('TSTSRCDIR','.')) -import tlstester +from MonetDBtesting.tlstester import TLSTesterClient level = logging.WARNING # if sys.platform == 'win32': @@ -27,45 +25,20 @@ if '-v' in
MonetDB: Aug2024 - Don't enforce single value BAT. Take the firs...
Changeset: 97be32b0daf2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/97be32b0daf2 Modified Files: monetdb5/modules/atoms/str.c Branch: Aug2024 Log Message: Don't enforce single value BAT. Take the first row always for icase flag. Fix #7540. diffs (12 lines): diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c --- a/monetdb5/modules/atoms/str.c +++ b/monetdb5/modules/atoms/str.c @@ -2875,7 +2875,7 @@ ignorecase(const bat *ic_id, bool *icase if ((c = BATdescriptor(*ic_id)) == NULL) throw(MAL, fname, SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); - assert(BATcount(c) == 1); + assert(BATcount(c) >= 1); BATiter bi = bat_iterator(c); *icase = *(bit *) BUNtloc(bi, 0); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Aug2024 - Don't call sys.check_constraint on older serv...
Changeset: ac9358579737 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/ac9358579737 Modified Files: clients/mapiclient/dump.c Branch: Aug2024 Log Message: Don't call sys.check_constraint on older servers. diffs (91 lines): diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -452,6 +452,45 @@ bailout: return false; } +static bool +has_check_constraint(Mapi mid) +{ + MapiHdl hdl; + bool ret; + static int answer = -1; + + if (answer >= 0) + return answer; + + if ((hdl = mapi_query(mid, + "select id from sys.functions" + " where schema_id = 2000" + " and name = 'check_constraint'")) == NULL || + mapi_error(mid)) + goto bailout; + ret = mapi_get_row_count(hdl) == 1; + while ((mapi_fetch_row(hdl)) != 0) { + if (mapi_error(mid)) + goto bailout; + } + if (mapi_error(mid)) + goto bailout; + mapi_close_handle(hdl); + answer = ret; + return ret; + +bailout: + if (hdl) { + if (mapi_result_error(hdl)) + mapi_explain_result(hdl, stderr); + else + mapi_explain_query(hdl, stderr); + mapi_close_handle(hdl); + } else + mapi_explain(mid, stderr); + return false; +} + static int dump_foreign_keys(Mapi mid, const char *schema, const char *tname, const char *tid, stream *sqlf) { @@ -1114,6 +1153,7 @@ dump_column_definition(Mapi mid, stream mapi_close_handle(hdl); hdl = NULL; + const char *cc = has_check_constraint(mid) ? "case when k.type = 4 then sys.check_constraint(s.name, k.name) else null end" : "cast(null as varchar(10))"; if (tid) snprintf(query, maxquerylen, "SELECT kc.name, " /* 0 */ @@ -1121,13 +1161,13 @@ dump_column_definition(Mapi mid, stream "k.name, " /* 2 */ "kc.id, " /* 3 */ "k.type, " /* 4 */ - "case when k.type = 4 then sys.check_constraint(s.name, k.name) else null end " /* 5 */ + "%s " /* 5 */ "FROM sys.objects kc, " "sys.keys k " "WHERE kc.id = k.id " "AND k.table_id = %s " "AND k.type = 1 " -"ORDER BY kc.id, kc.nr", tid); +"ORDER BY kc.id, kc.nr", cc, tid); else snprintf(query, maxquerylen, "SELECT kc.name, " /* 0 */ @@ -1135,7 +1175,7 @@ dump_column_definition(Mapi mid, stream "k.name, " /* 2 */ "kc.id, " /* 3 */ "k.type, " /* 4 */ - "case when k.type = 4 then sys.check_constraint(s.name, k.name) else null end " /* 5 */ + "%s " /* 5 */ "FROM sys.objects kc, " "sys.keys k, " "sys.schemas s, " @@ -1146,7 +1186,7 @@ dump_column_definition(Mapi mid, stream "AND t.schema_id = s.id " "AND s.name = '%s' " "AND t.name = '%s' " -"ORDER BY kc.id, kc.nr", s, t); +"ORDER BY kc.id, kc.nr", cc, s, t); if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) goto bailout; cnt = 0; ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org