Changeset: 265482faa751 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=265482faa751 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/mapiclient/dump.c clients/mapiclient/mclient.c clients/mapiclient/msqldump.h sql/backends/monet5/Tests/pyloader07.stable.out.32bit sql/backends/monet5/generator/90_generator.sql sql/backends/monet5/generator/90_generator_hge.sql sql/backends/monet5/generator/generator.mal sql/backends/monet5/generator/generator_hge.mal sql/test/BugTracker-2015/Tests/sql2pcre.Bug-3800.stable.out sql/test/Tests/systemfunctions.stable.out sql/test/Tests/systemfunctions.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 Branch: default Log Message:
Merge with Aug2018 branch. diffs (truncated from 1081 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -10024,19 +10024,19 @@ Ready. [ "generator", "join", "pattern generator.join(gen:bat[:int], low:bat[:int], hgh:bat[:int], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] [ "generator", "join", "pattern generator.join(gen:bat[:lng], low:bat[:lng], hgh:bat[:lng], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] [ "generator", "join", "pattern generator.join(gen:bat[:sht], low:bat[:sht], hgh:bat[:sht], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:bte, last:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:bte, last:bte, step:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:dbl, last:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:dbl, last:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:flt, last:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:flt, last:flt, step:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:int, last:int):bat[:int] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:int, last:int, step:int):bat[:int] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:lng, last:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:lng, last:lng, step:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:sht, last:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:sht, last:sht, step:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:timestamp, last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] +[ "generator", "parameters", "pattern generator.parameters(first:bte, limit:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:bte, limit:bte, step:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:dbl, limit:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:dbl, limit:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:flt, limit:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:flt, limit:flt, step:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:int, limit:int):bat[:int] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:int, limit:int, step:int):bat[:int] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:lng, limit:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:lng, limit:lng, step:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:sht, limit:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:sht, limit:sht, step:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:timestamp, limit:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:bte]):bat[:bte] ", "VLTgenerator_projection;", "" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:dbl]):bat[:dbl] ", "VLTgenerator_projection;", "" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:flt]):bat[:flt] ", "VLTgenerator_projection;", "" ] @@ -10058,19 +10058,19 @@ Ready. [ "generator", "select", "pattern generator.select(b:bat[:sht], low:sht, high:sht, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "" ] [ "generator", "select", "pattern generator.select(b:bat[:timestamp], cand:bat[:oid], low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "Overloaded selection routine" ] [ "generator", "select", "pattern generator.select(b:bat[:timestamp], low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "Overloaded selection routine" ] -[ "generator", "series", "pattern generator.series(first:bte, last:bte):bat[:bte] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:bte, last:bte, step:bte):bat[:bte] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:dbl, last:dbl):bat[:dbl] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:dbl, last:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_table;", "Create and materialize a generator table" ] -[ "generator", "series", "pattern generator.series(first:flt, last:flt):bat[:flt] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:flt, last:flt, step:flt):bat[:flt] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:int, last:int):bat[:int] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:int, last:int, step:int):bat[:int] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:lng, last:lng):bat[:lng] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:lng, last:lng, step:lng):bat[:lng] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:sht, last:sht):bat[:sht] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:sht, last:sht, step:sht):bat[:sht] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:timestamp, last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:bte, limit:bte):bat[:bte] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:bte, limit:bte, step:bte):bat[:bte] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:dbl, limit:dbl):bat[:dbl] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:dbl, limit:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_table;", "Create and materialize a generator table" ] +[ "generator", "series", "pattern generator.series(first:flt, limit:flt):bat[:flt] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:flt, limit:flt, step:flt):bat[:flt] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:int, limit:int):bat[:int] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:int, limit:int, step:int):bat[:int] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:lng, limit:lng):bat[:lng] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:lng, limit:lng, step:lng):bat[:lng] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:sht, limit:sht):bat[:sht] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:sht, limit:sht, step:sht):bat[:sht] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:timestamp, limit:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:bte], cnd:bat[:oid], low:bte, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:bte], low:bte, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:dbl], cnd:bat[:oid], low:dbl, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -14220,21 +14220,21 @@ Ready. [ "generator", "join", "pattern generator.join(gen:bat[:int], low:bat[:int], hgh:bat[:int], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] [ "generator", "join", "pattern generator.join(gen:bat[:lng], low:bat[:lng], hgh:bat[:lng], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] [ "generator", "join", "pattern generator.join(gen:bat[:sht], low:bat[:sht], hgh:bat[:sht], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ", "VLTgenerator_rangejoin;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:bte, last:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:bte, last:bte, step:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:dbl, last:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:dbl, last:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:flt, last:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:flt, last:flt, step:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:hge, last:hge):bat[:hge] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:hge, last:hge, step:hge):bat[:hge] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] -[ "generator", "parameters", "pattern generator.parameters(first:int, last:int):bat[:int] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:int, last:int, step:int):bat[:int] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:lng, last:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:lng, last:lng, step:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:sht, last:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:sht, last:sht, step:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] -[ "generator", "parameters", "pattern generator.parameters(first:timestamp, last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] +[ "generator", "parameters", "pattern generator.parameters(first:bte, limit:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:bte, limit:bte, step:bte):bat[:bte] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:dbl, limit:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:dbl, limit:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:flt, limit:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:flt, limit:flt, step:flt):bat[:flt] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:hge, limit:hge):bat[:hge] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:hge, limit:hge, step:hge):bat[:hge] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] +[ "generator", "parameters", "pattern generator.parameters(first:int, limit:int):bat[:int] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:int, limit:int, step:int):bat[:int] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:lng, limit:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:lng, limit:lng, step:lng):bat[:lng] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:sht, limit:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:sht, limit:sht, step:sht):bat[:sht] ", "VLTgenerator_noop;", "" ] +[ "generator", "parameters", "pattern generator.parameters(first:timestamp, limit:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_noop;", "Retain the table definition, but don't materialize" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:bte]):bat[:bte] ", "VLTgenerator_projection;", "" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:dbl]):bat[:dbl] ", "VLTgenerator_projection;", "" ] [ "generator", "projection", "pattern generator.projection(b:bat[:oid], cand:bat[:flt]):bat[:flt] ", "VLTgenerator_projection;", "" ] @@ -14259,21 +14259,21 @@ Ready. [ "generator", "select", "pattern generator.select(b:bat[:sht], low:sht, high:sht, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "" ] [ "generator", "select", "pattern generator.select(b:bat[:timestamp], cand:bat[:oid], low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "Overloaded selection routine" ] [ "generator", "select", "pattern generator.select(b:bat[:timestamp], low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ", "VLTgenerator_subselect;", "Overloaded selection routine" ] -[ "generator", "series", "pattern generator.series(first:bte, last:bte):bat[:bte] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:bte, last:bte, step:bte):bat[:bte] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:dbl, last:dbl):bat[:dbl] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:dbl, last:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_table;", "Create and materialize a generator table" ] -[ "generator", "series", "pattern generator.series(first:flt, last:flt):bat[:flt] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:flt, last:flt, step:flt):bat[:flt] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:hge, last:hge):bat[:hge] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:hge, last:hge, step:hge):bat[:hge] ", "VLTgenerator_table;", "Create and materialize a generator table" ] -[ "generator", "series", "pattern generator.series(first:int, last:int):bat[:int] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:int, last:int, step:int):bat[:int] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:lng, last:lng):bat[:lng] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:lng, last:lng, step:lng):bat[:lng] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:sht, last:sht):bat[:sht] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:sht, last:sht, step:sht):bat[:sht] ", "VLTgenerator_table;", "" ] -[ "generator", "series", "pattern generator.series(first:timestamp, last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:bte, limit:bte):bat[:bte] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:bte, limit:bte, step:bte):bat[:bte] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:dbl, limit:dbl):bat[:dbl] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:dbl, limit:dbl, step:dbl):bat[:dbl] ", "VLTgenerator_table;", "Create and materialize a generator table" ] +[ "generator", "series", "pattern generator.series(first:flt, limit:flt):bat[:flt] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:flt, limit:flt, step:flt):bat[:flt] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:hge, limit:hge):bat[:hge] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:hge, limit:hge, step:hge):bat[:hge] ", "VLTgenerator_table;", "Create and materialize a generator table" ] +[ "generator", "series", "pattern generator.series(first:int, limit:int):bat[:int] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:int, limit:int, step:int):bat[:int] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:lng, limit:lng):bat[:lng] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:lng, limit:lng, step:lng):bat[:lng] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:sht, limit:sht):bat[:sht] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:sht, limit:sht, step:sht):bat[:sht] ", "VLTgenerator_table;", "" ] +[ "generator", "series", "pattern generator.series(first:timestamp, limit:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:bte], cnd:bat[:oid], low:bte, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:bte], low:bte, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] [ "generator", "thetaselect", "pattern generator.thetaselect(b:bat[:dbl], cnd:bat[:oid], low:dbl, oper:str):bat[:oid] ", "VLTgenerator_thetasubselect;", "" ] diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c --- a/clients/mapiclient/dump.c +++ b/clients/mapiclient/dump.c @@ -16,13 +16,74 @@ #include "msqldump.h" static const char * -get_compat_clause(Mapi mid) +get_with_comments_as_clause(Mapi mid) { - static const char *compat_clause = NULL; - if (!compat_clause) { - compat_clause = get_with_comments_as_clause(mid); + const char *query = /* check whether sys.comments exists */ + "SELECT t.id " + "FROM sys._tables t JOIN sys.schemas s ON t.schema_id = s.id " + "WHERE s.name = 'sys' AND t.name = 'comments'"; + const char *new_clause = + "WITH comments AS (SELECT * FROM sys.comments), " + "function_types AS (SELECT * FROM sys.function_types), " + "function_languages AS (SELECT * FROM sys.function_languages)"; + const char *old_clause = + "WITH comments AS (" + "SELECT 42 AS id, 'no comment' AS remark WHERE FALSE" + "), " + "function_types AS (" + "SELECT function_type_id, function_type_name, function_type_keyword " + "FROM sys.function_types, " + "(VALUES " + "(1, 'FUNCTION'), " + "(2, 'PROCEDURE'), " + "(3, 'AGGREGATE'), " + "(4, 'FILTER FUNCTION'), " + "(5, 'FUNCTION'), " + "(6, 'FUNCTION'), " + "(7, 'LOADER')) AS (id, function_type_keyword) " + "WHERE id = function_type_id" + "), " + "function_languages AS (" + "SELECT language_id, language_name, language_keyword " + "FROM sys.function_languages, (VALUES " + "(3, 'R'), " + "(4, 'C', 'C'), " + "(6, 'PYTHON'), " + "(7, 'PYTHON_MAP'), " + "(8, 'PYTHON2'), " + "(9, 'PYTHON2_MAP'), " + "(10, 'PYTHON3'), " + "(11, 'PYTHON3_MAP'), " + "(12, 'C++', 'CPP')) AS (id, language_keyword) " + "WHERE id = language_id" + ")"; + + MapiHdl hdl; + const char *comments_clause; + + hdl = mapi_query(mid, query); + if (mapi_error(mid)) { + if (hdl) { + mapi_explain_result(hdl, stderr); + mapi_close_handle(hdl); + } else + mapi_explain(mid, stderr); + return NULL; } - return compat_clause; + comments_clause = mapi_fetch_row(hdl) ? new_clause : old_clause; + mapi_close_handle(hdl); + + return comments_clause; +} + +const char * +get_comments_clause(Mapi mid) +{ + static const char *comments_clause = NULL; + if (comments_clause == NULL) { + comments_clause = get_with_comments_as_clause(mid); + } + return comments_clause; } static int @@ -824,6 +885,10 @@ describe_table(Mapi mid, const char *sch size_t maxquerylen; char *sname = NULL; bool hashge; + const char *comments_clause = get_comments_clause(mid); + + if (comments_clause == NULL) + return 1; if (schema == NULL) { if ((sname = strchr(tname, '.')) != NULL) { @@ -851,7 +916,7 @@ describe_table(Mapi mid, const char *sch "WHERE s.name = '%s' AND " "t.schema_id = s.id AND " "t.name = '%s'", - get_compat_clause(mid), + comments_clause, schema, tname); if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) @@ -1055,7 +1120,7 @@ describe_table(Mapi mid, const char *sch "WHERE i.id = c.id " "AND i.table_id = (SELECT id FROM sys._tables WHERE schema_id = (select id FROM sys.schemas WHERE name = '%s') AND name = '%s') " "ORDER BY i.name", - get_compat_clause(mid), + comments_clause, schema, tname); if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) goto bailout; @@ -1075,7 +1140,7 @@ describe_table(Mapi mid, const char *sch "WHERE col.id = com.id " "AND col.table_id = (SELECT id FROM sys._tables WHERE schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') AND name = '%s') " "ORDER BY number", - get_compat_clause(mid), + comments_clause, schema, tname); if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) goto bailout; @@ -1126,6 +1191,10 @@ describe_sequence(Mapi mid, const char * char *query; size_t maxquerylen; char *sname = NULL; + const char *comments_clause = get_comments_clause(mid); + + if (comments_clause == NULL) + return 1; if (schema == NULL) { if ((sname = strchr(tname, '.')) != NULL) { @@ -1160,7 +1229,7 @@ describe_sequence(Mapi mid, const char * "s.name = '%s' AND " "seq.name = '%s' " "ORDER BY s.name, seq.name", - get_compat_clause(mid), + comments_clause, schema, tname); if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid)) @@ -1224,6 +1293,10 @@ describe_schema(Mapi mid, const char *sn { MapiHdl hdl = NULL; char schemas[5120]; + const char *comments_clause = get_comments_clause(mid); + + if (comments_clause == NULL) + return 1; snprintf(schemas, sizeof(schemas), "%s " @@ -1233,7 +1306,7 @@ describe_schema(Mapi mid, const char *sn "WHERE s.\"authorization\" = a.id AND " _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list