Changeset: 818aeabc2109 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=818aeabc2109 Added Files: sql/test/BugTracker-2016/Tests/analyze-quotes-incorrectly.Bug-4021.sql sql/test/BugTracker-2016/Tests/analyze-quotes-incorrectly.Bug-4021.stable.err sql/test/BugTracker-2016/Tests/analyze-quotes-incorrectly.Bug-4021.stable.out sql/test/BugTracker-2016/Tests/boolean-evaluation.Bug-4025.sql sql/test/BugTracker-2016/Tests/boolean-evaluation.Bug-4025.stable.err sql/test/BugTracker-2016/Tests/boolean-evaluation.Bug-4025.stable.out sql/test/bugs/Tests/select_select_bug.sql sql/test/bugs/Tests/select_select_bug.stable.err sql/test/bugs/Tests/select_select_bug.stable.out Modified Files: clients/Tests/SQL-dump.stable.out clients/Tests/SQL-dump.stable.out.int128 clients/odbc/driver/SQLConnect.c clients/odbc/driver/SQLTables.c sql/backends/monet5/sql_statistics.c sql/backends/monet5/sql_upgrades.c sql/common/sql_list.c sql/server/rel_select.c sql/server/sql_privileges.c sql/test/BugTracker-2016/Tests/All sql/test/bugs/Tests/All sql/test/leaks/Tests/check1.stable.out.int128 sql/test/leaks/Tests/check2.stable.out.int128 sql/test/leaks/Tests/check3.stable.out.int128 sql/test/leaks/Tests/check4.stable.out.int128 sql/test/leaks/Tests/check5.stable.out.int128 Branch: default Log Message:
merged with jun2016 diffs (truncated from 831 to 300 lines): diff --git a/clients/Tests/SQL-dump.stable.out b/clients/Tests/SQL-dump.stable.out --- a/clients/Tests/SQL-dump.stable.out +++ b/clients/Tests/SQL-dump.stable.out @@ -5281,6 +5281,7 @@ drop function pcre_replace(string, strin [ "alpha", "public", 16, "monetdb", 0 ] [ "date_to_str", "public", 16, "monetdb", 0 ] [ "degrees", "public", 16, "monetdb", 0 ] +[ "env", "public", 16, NULL, 0 ] [ "epoch", "public", 16, "monetdb", 0 ] [ "epoch", "public", 16, "monetdb", 0 ] [ "epoch", "public", 16, "monetdb", 0 ] diff --git a/clients/Tests/SQL-dump.stable.out.int128 b/clients/Tests/SQL-dump.stable.out.int128 --- a/clients/Tests/SQL-dump.stable.out.int128 +++ b/clients/Tests/SQL-dump.stable.out.int128 @@ -5648,6 +5648,7 @@ drop function pcre_replace(string, strin [ "alpha", "public", 16, "monetdb", 0 ] [ "date_to_str", "public", 16, "monetdb", 0 ] [ "degrees", "public", 16, "monetdb", 0 ] +[ "env", "public", 16, NULL, 0 ] [ "epoch", "public", 16, "monetdb", 0 ] [ "epoch", "public", 16, "monetdb", 0 ] [ "epoch", "public", 16, "monetdb", 0 ] diff --git a/clients/odbc/driver/SQLConnect.c b/clients/odbc/driver/SQLConnect.c --- a/clients/odbc/driver/SQLConnect.c +++ b/clients/odbc/driver/SQLConnect.c @@ -258,9 +258,7 @@ MNDBConnect(ODBCDbc *dbc, mapi_setAutocommit(mid, dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON); set_timezone(mid); get_serverinfo(dbc); - if (dbc->major > 11 || - (dbc->major == 11 && dbc->minor >= 5)) - mapi_set_size_header(mid, 1); + mapi_set_size_header(mid, 1); /* set timeout after we're connected */ mapi_timeout(mid, dbc->sql_attr_connection_timeout * 1000); } diff --git a/clients/odbc/driver/SQLTables.c b/clients/odbc/driver/SQLTables.c --- a/clients/odbc/driver/SQLTables.c +++ b/clients/odbc/driver/SQLTables.c @@ -232,87 +232,69 @@ MNDBTables(ODBCStmt *stmt, strcpy(query_end, "with ot as ("); query_end += strlen(query_end); - if (stmt->Dbc->major < 11 || (stmt->Dbc->major == 11 && stmt->Dbc->minor < 21)) { - strcpy(query_end, - "select e.value as table_cat, " - "s.name as table_schem, " - "t.name as table_name, " - "case when t.type = 0 and " - "t.system = false and " - "t.temporary = 0 and " - "s.name <> 'tmp' " - "then cast('TABLE' as varchar(20)) " - "when t.type = 0 and " - "t.system = false and " - "t.temporary = 0 and " - "s.name = 'tmp' " - "then cast('GLOBAL TEMPORARY' as varchar(20)) " - "when t.type = 0 and " - "t.system = true and " - "t.temporary = 0 " - "then cast('SYSTEM TABLE' as varchar(20)) " - "when t.type = 1 and " - "t.system = true and " - "t.temporary = 0 " - "then cast('SYSTEM VIEW' as varchar(20)) " - "when t.type = 1 " - "then cast('VIEW' as varchar(20)) " - "when t.type = 0 and " - "t.system = false and " - "t.temporary = 1 " - "then cast('LOCAL TEMPORARY' as varchar(20)) " - "else cast('INTERNAL TABLE TYPE' as varchar(20)) end as table_type, " - "cast(null as varchar(1)) as remarks " - "from sys.schemas s, " - "sys.tables t, " - "sys.env() e " - "where s.id = t.schema_id and " - "e.name = 'gdk_dbname'"); - } else { - strcpy(query_end, - "select e.value as table_cat, " - "s.name as table_schem, " - "t.name as table_name, " - "case when t.type = 0 and " - "t.system = false and " - "t.temporary = 0 and " - "s.name <> 'tmp' " - "then cast('TABLE' as varchar(20)) " - "when t.type = 10 and " - "t.system = true and " - "t.temporary = 0 " - "then cast('SYSTEM TABLE' as varchar(20)) " - "when t.type = 11 and " - "t.system = true and " - "t.temporary = 0 " - "then cast('SYSTEM VIEW' as varchar(20)) " - "when t.type = 1 " - "then cast('VIEW' as varchar(20)) " - "when t.type = 3 " - "then cast('MERGE TABLE' as varchar(20)) " - "when t.type = 4 " - "then cast('STREAM TABLE' as varchar(20)) " - "when t.type = 5 " - "then cast('REMOTE TABLE' as varchar(20)) " - "when t.type = 6 " - "then cast('REPLICA TABLE' as varchar(20)) " - "when t.type = 20 and " - "t.system = false and " - "t.temporary = 1 and " - "s.name = 'tmp' " - "then cast('GLOBAL TEMPORARY' as varchar(20)) " - "when t.type = 30 and " - "t.system = false and " - "t.temporary = 1 " - "then cast('LOCAL TEMPORARY' as varchar(20)) " - "else cast('INTERNAL TABLE TYPE' as varchar(20)) end as table_type, " - "cast(null as varchar(1)) as remarks " - "from sys.schemas s, " - "sys.tables t, " - "sys.env() e " - "where s.id = t.schema_id and " - "e.name = 'gdk_dbname'"); - } + strcpy(query_end, + "select e.value as table_cat, " + "s.name as table_schem, " + "t.name as table_name, " + "case when t.type = 0 and " + "t.system = false and " + "t.temporary = 0 and " + "s.name <> 'tmp' " + "then cast('TABLE' as varchar(20)) " +/* start <= 11.21.X (at some point this code can be removed) */ + "when t.type = 0 and " + "t.system = false and " + "t.temporary = 0 and " + "s.name = 'tmp' " + "then cast('GLOBAL TEMPORARY' as varchar(20)) " + "when t.type = 0 and " + "t.system = true and " + "t.temporary = 0 " + "then cast('SYSTEM TABLE' as varchar(20)) " + "when t.type = 0 and " + "t.system = false and " + "t.temporary = 1 " + "then cast('LOCAL TEMPORARY' as varchar(20)) " + "when t.type = 1 and " + "t.system = true and " + "t.temporary = 0 " + "then cast('SYSTEM VIEW' as varchar(20)) " +/* end <= 11.21.X */ + "when t.type = 1 " + "then cast('VIEW' as varchar(20)) " + "when t.type = 3 " + "then cast('MERGE TABLE' as varchar(20)) " + "when t.type = 4 " + "then cast('STREAM TABLE' as varchar(20)) " + "when t.type = 5 " + "then cast('REMOTE TABLE' as varchar(20)) " + "when t.type = 6 " + "then cast('REPLICA TABLE' as varchar(20)) " + "when t.type = 10 and " + "t.system = true and " + "t.temporary = 0 " + "then cast('SYSTEM TABLE' as varchar(20)) " + "when t.type = 11 and " + "t.system = true and " + "t.temporary = 0 " + "then cast('SYSTEM VIEW' as varchar(20)) " + "when t.type = 20 and " + "t.system = false and " + "t.temporary = 1 and " + "s.name = 'tmp' " + "then cast('GLOBAL TEMPORARY' as varchar(20)) " + "when t.type = 30 and " + "t.system = false and " + "t.temporary = 1 " + "then cast('LOCAL TEMPORARY' as varchar(20)) " + "else cast('INTERNAL TABLE TYPE' as varchar(20)) " + "end as table_type, " + "cast(null as varchar(1)) as remarks " + "from sys.schemas s, " + "sys.tables t, " + "sys.env() e " + "where s.id = t.schema_id and " + "e.name = 'gdk_dbname'"); assert(strlen(query) < 1100); query_end += strlen(query_end); diff --git a/sql/backends/monet5/sql_statistics.c b/sql/backends/monet5/sql_statistics.c --- a/sql/backends/monet5/sql_statistics.c +++ b/sql/backends/monet5/sql_statistics.c @@ -21,6 +21,37 @@ analysis by optimizers. #include "sql_statistics.h" #include "sql_scenario.h" +#define atommem(TYPE, size) \ + do { \ + if (*dst == NULL || *len < (int) (size)) { \ + GDKfree(*dst); \ + *len = (size); \ + *dst = (TYPE *) GDKmalloc(*len); \ + if (*dst == NULL) \ + return -1; \ + } \ + } while (0) + +static int +strToStrSQuote(char **dst, int *len, const void *src) +{ + int l = 0; + + if (GDK_STRNIL((str) src)) { + atommem(char, 4); + + return snprintf(*dst, *len, "nil"); + } else { + int sz = escapedStrlen(src, NULL, NULL, '\''); + atommem(char, sz + 3); + l = escapedStr((*dst) + 1, src, *len - 1, NULL, NULL, '\''); + l++; + (*dst)[0] = (*dst)[l++] = '"'; + (*dst)[l] = 0; + } + return l; +} + str sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -86,10 +117,13 @@ sql_analyze(Client cntxt, MalBlkPtr mb, BAT *bn = store_funcs.bind_col(tr, c, RDONLY), *br; BAT *bsample; lng sz = BATcount(bn); - int (*tostr)(str*,int*,const void*) = BATatoms[bn->ttype].atomToStr; \ + int (*tostr)(str*,int*,const void*) = BATatoms[bn->ttype].atomToStr; int len = 0; void *val=0; + if (tostr == BATatoms[TYPE_str].atomToStr) + tostr = strToStrSQuote; + if (col && strcmp(bc->name, col)) continue; snprintf(dquery, 8192, "delete from sys.statistics where \"column_id\" = %d;", c->base.id); @@ -132,8 +166,8 @@ sql_analyze(Client cntxt, MalBlkPtr mb, tostr(&minval, &len,val); GDKfree(val); } else { - maxval = (char *) GDKzalloc(4); - minval = (char *) GDKzalloc(4); + maxval = GDKmalloc(4); + minval = GDKmalloc(4); snprintf(maxval, 4, "nil"); snprintf(minval, 4, "nil"); } diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -1749,6 +1749,7 @@ void SQLupgrades(Client c, mvc *m) { sql_subtype tp; + sql_subfunc *f; char *err; sql_schema *s = mvc_bind_schema(m, "sys"); @@ -1823,6 +1824,14 @@ SQLupgrades(Client c, mvc *m) } } + f = sql_bind_func_(m->sa, s, "env", NULL, F_UNION); + if (f && sql_privilege(m, ROLE_PUBLIC, f->func->base.id, PRIV_EXECUTE, 0) != PRIV_EXECUTE) { + sql_table *privs = find_sql_table(s, "privileges"); + int pub = ROLE_PUBLIC, p = PRIV_EXECUTE, zero = 0; + + table_funcs.table_insert(m->session->tr, privs, &f->func->base.id, &pub, &p, &zero, &zero); + } + /* If the point type exists, but the geometry type does not * exist any more at the "sys" schema (i.e., the first part of * the upgrade has been completed succesfully), then move on diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c --- a/sql/common/sql_list.c +++ b/sql/common/sql_list.c @@ -314,7 +314,10 @@ list_cmp(list *l1, list *l2, fcmp cmp) if (l1 == l2) return 0; - + if (!l1 && l2 && list_empty(l2)) + return 0; + if (!l2 && l1 && list_empty(l1)) + return 0; if (!l1 || !l2 || (list_length(l1) != list_length(l2))) return -1; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list