MonetDB: merge-partitions - COLcopy is even better to duplicate ...
Changeset: 545283ab883a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=545283ab883a Modified Files: sql/storage/store.c Branch: merge-partitions Log Message: COLcopy is even better to duplicate a BAT. Thanks Roberto diffs (31 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1496,12 +1496,7 @@ dup_sql_part(sql_allocator *sa, sql_tabl BAT *b = NULL, *o = NULL; if((o = BATdescriptor(opt->part.values)) == NULL) /* TODO the bat operations might fail :( */ return NULL; - if ((b = COLnew(0, opt->tpe, BATcount(o), TRANSIENT)) == NULL) { - BBPunfix(o->batCacheid); - return NULL; - } - if(BATappend(b, o, NULL, FALSE) != GDK_SUCCEED) { - BBPunfix(b->batCacheid); + if ((b = COLcopy(o, opt->tpe, 0, TRANSIENT)) == NULL) { BBPunfix(o->batCacheid); return NULL; } @@ -2483,12 +2478,7 @@ part_dup(sql_trans *tr, int flag, sql_pa BAT *b = NULL, *o = NULL; if((o = BATdescriptor(opt->part.values)) == NULL) /* TODO the bat operations might fail :( */ return NULL; - if ((b = COLnew(0, opt->tpe, BATcount(o), TRANSIENT)) == NULL) { - BBPunfix(o->batCacheid); - return NULL; - } - if(BATappend(b, o, NULL, FALSE) != GDK_SUCCEED) { - BBPunfix(b->batCacheid); + if ((b = COLcopy(o, opt->tpe, 0, TRANSIENT)) == NULL) { BBPunfix(o->batCacheid); return NULL; } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Merge with Mar2018 branch.
Changeset: 7d93776ac912 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d93776ac912 Added Files: clients/odbc/driver/ODBCQueries.h Modified Files: clients/ChangeLog.Mar2018 clients/odbc/driver/Makefile.ag clients/odbc/driver/ODBCDbc.c clients/odbc/driver/ODBCDbc.h clients/odbc/driver/SQLColumnPrivileges.c clients/odbc/driver/SQLColumns.c clients/odbc/driver/SQLConnect.c clients/odbc/driver/SQLDisconnect.c clients/odbc/driver/SQLGetFunctions.c clients/odbc/driver/SQLGetInfo.c clients/odbc/driver/SQLProcedureColumns.c clients/odbc/driver/SQLProcedures.c clients/odbc/driver/SQLSpecialColumns.c clients/odbc/driver/SQLTablePrivileges.c clients/odbc/driver/SQLTables.c monetdb5/modules/mal/Tests/remote13.stable.err monetdb5/modules/mal/Tests/remote13.stable.out sql/common/sql_keyword.c sql/server/rel_schema.c sql/server/sql_parser.y sql/server/sql_scan.c sql/storage/store.c sql/test/BugTracker-2018/Tests/truncate_bam_tables.Bug-6543.stable.err sql/test/BugTracker-2018/Tests/truncate_sys_netcdf_tables.Bug-6543.stable.err sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.stable.err sql/test/BugTracker-2018/Tests/truncate_sys_tables.Bug-6543.stable.out sql/test/mergetables/Tests/alter.stable.err testing/Mtest.py.in tools/mserver/mserver5.c Branch: default Log Message: Merge with Mar2018 branch. diffs (truncated from 2174 to 300 lines): diff --git a/clients/ChangeLog.Mar2018 b/clients/ChangeLog.Mar2018 --- a/clients/ChangeLog.Mar2018 +++ b/clients/ChangeLog.Mar2018 @@ -1,6 +1,9 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Wed Feb 28 2018 Sjoerd Mullender +- ODBC: The driver function SQLProcedureColumns was implemented. + * Thu Feb 1 2018 Sjoerd Mullender - ODBC: Changed table types as used by SQLTables from "LOCAL TEMPORARY" and "GLOBAL TEMPORARY" to "LOCAL TEMPORARY TABLE" and "GLOBAL TEMPORARY diff --git a/clients/odbc/driver/Makefile.ag b/clients/odbc/driver/Makefile.ag --- a/clients/odbc/driver/Makefile.ag +++ b/clients/odbc/driver/Makefile.ag @@ -24,6 +24,7 @@ lib_MonetODBC = { ODBCError.c \ ODBCError.h \ ODBCGlobal.h \ + ODBCQueries.h \ ODBCStmt.c \ ODBCStmt.h \ ODBCUtil.c \ diff --git a/clients/odbc/driver/ODBCDbc.c b/clients/odbc/driver/ODBCDbc.c --- a/clients/odbc/driver/ODBCDbc.c +++ b/clients/odbc/driver/ODBCDbc.c @@ -66,7 +66,8 @@ newODBCDbc(ODBCEnv *env) dbc->port = 0; dbc->dbname = NULL; - dbc->Connected = 0; + dbc->Connected = false; + dbc->has_comment = false; dbc->sql_attr_autocommit = SQL_AUTOCOMMIT_ON; /* default is autocommit */ dbc->sql_attr_metadata_id = SQL_FALSE; dbc->sql_attr_connection_timeout = 0; diff --git a/clients/odbc/driver/ODBCDbc.h b/clients/odbc/driver/ODBCDbc.h --- a/clients/odbc/driver/ODBCDbc.h +++ b/clients/odbc/driver/ODBCDbc.h @@ -53,7 +53,8 @@ typedef struct tODBCDRIVERDBC { char *host; /* Server host */ int port; /* Server port */ char *dbname; /* Database Name or NULL */ - int Connected; /* 1 is Yes, 0 is No */ + bool Connected; /* whether we are connecte to a server */ + bool has_comment; /* whether the server has sys.comments */ SQLUINTEGER sql_attr_autocommit; SQLUINTEGER sql_attr_metadata_id; SQLUINTEGER sql_attr_connection_timeout; diff --git a/clients/odbc/driver/ODBCQueries.h b/clients/odbc/driver/ODBCQueries.h new file mode 100644 --- /dev/null +++ b/clients/odbc/driver/ODBCQueries.h @@ -0,0 +1,292 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + */ + +/* this file contains parts of queries that are used in multiple + * places */ + +#define DATA_TYPE(t) \ + "case " #t ".type " \ +"when 'bigint' then %d " \ +"when 'blob' then %d " \ +"when 'boolean' then %d " \ +"when 'char' then %d " \ +"when 'clob' then %d " \ +"when 'date' then %d " \ +"when 'decimal' then %d " \ +"when 'double' then %d " \ +"when 'hugeint' then %d " \ +"when 'int' then %d " \ +"when 'month_interval' then " \ +
MonetDB: Mar2018 - Merge with Jul2017 branch.
Changeset: f8357589dd10 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f8357589dd10 Modified Files: sql/server/rel_schema.c sql/server/sql_parser.y sql/storage/store.c sql/test/mergetables/Tests/alter.stable.err Branch: Mar2018 Log Message: Merge with Jul2017 branch. diffs (103 lines): diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -1352,15 +1352,19 @@ sql_alter_table(mvc *sql, dlist *qname, sname = s->base.name; if (te && (te->token == SQL_TABLE || te->token == SQL_DROP_TABLE)) { - char *ntname = te->data.lval->h->data.sval; + dlist *nqname = te->data.lval->h->data.lval; + char *nsname = qname_schema(nqname); + char *ntname = qname_table(nqname); - /* TODO partition sname */ + /* partition sname */ + if (!nsname) + nsname = sname; if (te->token == SQL_TABLE) { - return rel_alter_table(sql->sa, DDL_ALTER_TABLE_ADD_TABLE, sname, tname, sname, ntname, 0); + return rel_alter_table(sql->sa, DDL_ALTER_TABLE_ADD_TABLE, sname, tname, nsname, ntname, 0); } else { int drop_action = te->data.lval->h->next->data.i_val; - return rel_alter_table(sql->sa, DDL_ALTER_TABLE_DEL_TABLE, sname, tname, sname, ntname, drop_action); + return rel_alter_table(sql->sa, DDL_ALTER_TABLE_DEL_TABLE, sname, tname, nsname, ntname, drop_action); } } diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -1055,7 +1055,7 @@ alter_statement: | ALTER TABLE qname ADD TABLE qname { dlist *l = L(); append_list(l, $3); - append_symbol(l, _symbol_create_list( SQL_TABLE, $6)); + append_symbol(l, _symbol_create_list( SQL_TABLE, append_list(L(),$6))); $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); } | ALTER TABLE qname ALTER alter_table_element { dlist *l = L(); @@ -1168,9 +1168,9 @@ drop_table_element: append_string(l, $2 ); append_int(l, $3 ); $$ = _symbol_create_list( SQL_DROP_CONSTRAINT, l ); } - | TABLE ident drop_action + | TABLE qname drop_action { dlist *l = L(); - append_string(l, $2 ); + append_list(l, $2 ); append_int(l, $3 ); append_int(l, 0); append_int(l, FALSE ); /* no if exists check */ diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -565,7 +565,6 @@ load_part(sql_trans *tr, sql_table *t, o v = table_funcs.column_find_value(tr, find_sql_column(objects, "nr"), rid); id = *(sqlid*)v; _DELETE(v); v = table_funcs.column_find_value(tr, find_sql_column(objects, "name"), rid); - /* limitation, parts can only be within the same schema */ base_init(tr->sa, &pt->base, id, TR_OLD, v);_DELETE(v); cs_add(&t->members, pt, TR_OLD); } @@ -1015,7 +1014,6 @@ load_schema(sql_trans *tr, sqlid id, oid for(rid = table_funcs.rids_next(rs); !is_oid_nil(rid); rid = table_funcs.rids_next(rs)) cs_add(&s->seqs, load_seq(tr, s, rid), TR_OLD); table_funcs.rids_destroy(rs); - set_members(&s->tables); return s; } @@ -1068,6 +1066,7 @@ load_trans(sql_trans* tr, sqlid id) sql_column *sysschema_ids = find_sql_column(sysschema, "id"); rids *schemas = table_funcs.rids_select(tr, sysschema_ids, NULL, NULL); oid rid; + node *n; if (bs_debug) fprintf(stderr, "#load trans\n"); @@ -1077,6 +1076,12 @@ load_trans(sql_trans* tr, sqlid id) if (ns && ns->base.id > id) cs_add(&tr->schemas, ns, TR_OLD); } + /* members maybe from different schemas */ + for (n = tr->schemas.set->h; n; n = n->next) { + sql_schema *s = n->data; + + set_members(&s->tables); + } table_funcs.rids_destroy(schemas); } diff --git a/sql/test/mergetables/Tests/alter.stable.err b/sql/test/mergetables/Tests/alter.stable.err --- a/sql/test/mergetables/Tests/alter.stable.err +++ b/sql/test/mergetables/Tests/alter.stable.err @@ -40,7 +40,7 @@ ERROR = !ALTER TABLE: no such table 'par CODE = 42S02 MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685 QUERY = alter table mys.smalltable add table mys.part1; -ERROR = !ALTER TABLE: no such table 'mys' in schema 'mys' +ERROR = !ALTER TABLE: no such table 'part1' in schema 'mys' CODE = 42S02 MAPI = (monetdb) /var/tmp
MonetDB: Mar2018 - Cleanup of some ODBC queries.
Changeset: 64fc9cb5d862 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64fc9cb5d862 Modified Files: clients/odbc/driver/SQLColumnPrivileges.c clients/odbc/driver/SQLSpecialColumns.c clients/odbc/driver/SQLTablePrivileges.c Branch: Mar2018 Log Message: Cleanup of some ODBC queries. diffs (truncated from 382 to 300 lines): diff --git a/clients/odbc/driver/SQLColumnPrivileges.c b/clients/odbc/driver/SQLColumnPrivileges.c --- a/clients/odbc/driver/SQLColumnPrivileges.c +++ b/clients/odbc/driver/SQLColumnPrivileges.c @@ -141,52 +141,50 @@ MNDBColumnPrivileges(ODBCStmt *stmt, is_grantable VARCHAR */ - strcpy(query_end, - "select e.value as table_cat, " - "s.name as table_schem, " - "t.name as table_name, " - "c.name as column_name, " - "case a.id " - "when s.owner " - "then '_SYSTEM' " - "else g.name " - "end as grantor, " - "case a.name " - "when 'public' " - "then 'PUBLIC' " - "else a.name " - "end as grantee, " - "pc.privilege_code_name as privilege, " - "case p.grantable " - "when 1 " - "then 'YES' " - "when 0 " - "then 'NO' " - "end as is_grantable " - "from sys.schemas as s, " - "sys._tables as t, " - "sys._columns as c, " - "sys.auths as a, " - "sys.privileges as p, " - "sys.auths as g, " - "sys.env() as e, " - /* this can eventually be replaced by - * sys.privilege_codes as pc - * see 51_sys_schema_extensionl.sql */ - "(values (1, 'SELECT'), " - "(2, 'UPDATE'), " - "(4, 'INSERT'), " - "(8, 'DELETE'), " - "(16, 'EXECUTE'), " - "(32, 'GRANT')) as pc(privilege_code_id, privilege_code_name) " - "where p.obj_id = c.id and " -"c.table_id = t.id and " -"p.auth_id = a.id and " -"t.schema_id = s.id and " -"t.system = false and " -"p.grantor = g.id and " -"e.name = 'gdk_dbname' and " -"p.privileges = pc.privilege_code_id"); + sprintf(query_end, + "select e.value as table_cat, " + "s.name as table_schem, " + "t.name as table_name, " + "c.name as column_name, " + "case a.id " + "when s.owner " + "then '_SYSTEM' " + "else g.name " + "end as grantor, " + "case a.name " + "when 'public' then 'PUBLIC' " + "else a.name " + "end as grantee, " + "pc.privilege_code_name as privilege, " + "case p.grantable " + "when 1 then 'YES' " + "when 0 then 'NO' " + "end as is_grantable " + "from sys.schemas as s, " +"sys._tables as t, " +"sys._columns as c, " +"sys.auths as a, " +"sys.privileges as p, " +"sys.auths as g, " +"sys.env() as e, " +"%s " + "where p.obj_id = c.id and " + "c.table_id = t.id and " + "p.auth_id = a.id and " + "t.schema_id = s.id and " + "not t.system and " + "p.grantor = g.id and " + "e.name = 'gdk_dbname' and " + "p.privileges = pc.privilege_code_id", + /* a server that supports sys.columns also supports +* sys.privilege_codes */ + stmt->Dbc->has_comment ? "sys.privilege_codes as pc" : +"(values (1, 'SELECT'), " +"(2, 'UPDATE'), " +"(4, 'INSERT'), " +"(8, 'DELETE'), " +"(16, 'EXECUTE'), " +"(32, 'GRANT')) as pc(privilege_code_id, privilege_code_name)"); assert(strlen(query) < 1100); query_end += strlen(query_end); @@ -218,7 +216,8 @@ MNDBColumnPrivileges(ODBCStmt *stm
MonetDB: Mar2018 - Implemented SQLProcedureColumns.
Changeset: a55059413281 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a55059413281 Added Files: clients/odbc/driver/ODBCQueries.h Modified Files: clients/ChangeLog.Mar2018 clients/odbc/driver/Makefile.ag clients/odbc/driver/SQLColumns.c clients/odbc/driver/SQLGetFunctions.c clients/odbc/driver/SQLProcedureColumns.c Branch: Mar2018 Log Message: Implemented SQLProcedureColumns. diffs (truncated from 930 to 300 lines): diff --git a/clients/ChangeLog.Mar2018 b/clients/ChangeLog.Mar2018 --- a/clients/ChangeLog.Mar2018 +++ b/clients/ChangeLog.Mar2018 @@ -1,6 +1,9 @@ # ChangeLog file for clients # This file is updated with Maddlog +* Wed Feb 28 2018 Sjoerd Mullender +- ODBC: The driver function SQLProcedureColumns was implemented. + * Thu Feb 1 2018 Sjoerd Mullender - ODBC: Changed table types as used by SQLTables from "LOCAL TEMPORARY" and "GLOBAL TEMPORARY" to "LOCAL TEMPORARY TABLE" and "GLOBAL TEMPORARY diff --git a/clients/odbc/driver/Makefile.ag b/clients/odbc/driver/Makefile.ag --- a/clients/odbc/driver/Makefile.ag +++ b/clients/odbc/driver/Makefile.ag @@ -24,6 +24,7 @@ lib_MonetODBC = { ODBCError.c \ ODBCError.h \ ODBCGlobal.h \ + ODBCQueries.h \ ODBCStmt.c \ ODBCStmt.h \ ODBCUtil.c \ diff --git a/clients/odbc/driver/ODBCQueries.h b/clients/odbc/driver/ODBCQueries.h new file mode 100644 --- /dev/null +++ b/clients/odbc/driver/ODBCQueries.h @@ -0,0 +1,292 @@ +/* + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * Copyright 1997 - July 2008 CWI, August 2008 - 2018 MonetDB B.V. + */ + +/* this file contains parts of queries that are used in multiple + * places */ + +#define DATA_TYPE(t) \ + "case " #t ".type " \ +"when 'bigint' then %d " \ +"when 'blob' then %d " \ +"when 'boolean' then %d " \ +"when 'char' then %d " \ +"when 'clob' then %d " \ +"when 'date' then %d " \ +"when 'decimal' then %d " \ +"when 'double' then %d " \ +"when 'hugeint' then %d " \ +"when 'int' then %d " \ +"when 'month_interval' then " \ + "case " #t ".type_digits "\ + "when 1 then %d "\ + "when 2 then %d "\ + "when 3 then %d "\ + "end "\ +"when 'real' then %d " \ +"when 'sec_interval' then "\ + "case " #t ".type_digits "\ + "when 4 then %d "\ + "when 5 then %d "\ + "when 6 then %d "\ + "when 7 then %d "\ + "when 8 then %d "\ + "when 9 then %d "\ + "when 10 then %d " \ + "when 11 then %d " \ + "when 12 then %d " \ + "when 13 then %d " \ + "end "\ +"when 'smallint' then %d " \ +"when 'time' then %d " \ +"when 'timestamp' then %d "\ +"when 'timestamptz' then %d " \ +"when 'timetz' then %d " \ +"when 'tinyint' then %d " \ +"when 'varchar' then %d " \ + "end as data_type" +#define DATA_TYPE_ARGS \ + SQL_BIGINT, SQL_LONGVARBINARY, SQL_BIT, SQL_WCHAR, \ + SQL_WLONGVARCHAR, SQL_TYPE_DATE, SQL_DECIMAL, \ + SQL_DOUBLE, SQL_HUGEINT, SQL_INTEGER, \ + SQL_INTERVAL_YEAR, SQL_INTERVAL_YEAR_TO_MONTH, \ + SQL_INTERVAL_MONTH, SQL_REAL, SQL_INTERVAL_DAY, \ + SQL_INTERVAL_DAY_TO_HOUR, SQL_INTERVAL_DAY_TO_MINUTE, \ + SQL_INTERVAL_DAY_TO_SECOND, SQL_INTERVAL_HOUR, \ + SQL_INTERVAL_HOUR_TO_MINUTE,\ + SQL_INTERVAL_HOUR_TO_SECOND, SQL_INTERVAL_MINUTE, \ + SQL_INTERVAL_MINUTE_TO_SECOND, SQL_INTERVAL_SECOND
MonetDB: Jul2017 - fixed qualified names for merge table partitions
Changeset: 3dd1c1a9f82b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3dd1c1a9f82b Modified Files: sql/server/rel_schema.c sql/server/sql_parser.y sql/storage/store.c sql/test/mergetables/Tests/alter.stable.err Branch: Jul2017 Log Message: fixed qualified names for merge table partitions diffs (105 lines): diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -1312,15 +1312,19 @@ sql_alter_table(mvc *sql, dlist *qname, sname = s->base.name; if (te && (te->token == SQL_TABLE || te->token == SQL_DROP_TABLE)) { - char *ntname = te->data.lval->h->data.sval; + dlist *nqname = te->data.lval->h->data.lval; + char *nsname = qname_schema(nqname); + char *ntname = qname_table(nqname); - /* TODO partition sname */ + /* partition sname */ + if (!nsname) + nsname = sname; if (te->token == SQL_TABLE) { - return rel_alter_table(sql->sa, DDL_ALTER_TABLE_ADD_TABLE, sname, tname, sname, ntname, 0); + return rel_alter_table(sql->sa, DDL_ALTER_TABLE_ADD_TABLE, sname, tname, nsname, ntname, 0); } else { int drop_action = te->data.lval->h->next->data.i_val; - return rel_alter_table(sql->sa, DDL_ALTER_TABLE_DEL_TABLE, sname, tname, sname, ntname, drop_action); + return rel_alter_table(sql->sa, DDL_ALTER_TABLE_DEL_TABLE, sname, tname, nsname, ntname, drop_action); } } diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -1047,7 +1047,7 @@ alter_statement: | ALTER TABLE qname ADD TABLE qname { dlist *l = L(); append_list(l, $3); - append_symbol(l, _symbol_create_list( SQL_TABLE, $6)); + append_symbol(l, _symbol_create_list( SQL_TABLE, append_list(L(),$6))); $$ = _symbol_create_list( SQL_ALTER_TABLE, l ); } | ALTER TABLE qname ALTER alter_table_element { dlist *l = L(); @@ -1160,9 +1160,9 @@ drop_table_element: append_string(l, $2 ); append_int(l, $3 ); $$ = _symbol_create_list( SQL_DROP_CONSTRAINT, l ); } - | TABLE ident drop_action + | TABLE qname drop_action { dlist *l = L(); - append_string(l, $2 ); + append_list(l, $2 ); append_int(l, $3 ); append_int(l, 0); $$ = _symbol_create_list( SQL_DROP_TABLE, l ); } diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -569,7 +569,6 @@ load_part(sql_trans *tr, sql_table *t, o v = table_funcs.column_find_value(tr, find_sql_column(objects, "nr"), rid); id = *(sqlid*)v; _DELETE(v); v = table_funcs.column_find_value(tr, find_sql_column(objects, "name"), rid); - /* limitation, parts can only be within the same schema */ base_init(tr->sa, &pt->base, id, TR_OLD, v);_DELETE(v); cs_add(&t->members, pt, TR_OLD); } @@ -1019,7 +1018,6 @@ load_schema(sql_trans *tr, sqlid id, oid for(rid = table_funcs.rids_next(rs); rid != oid_nil; rid = table_funcs.rids_next(rs)) cs_add(&s->seqs, load_seq(tr, s, rid), TR_OLD); table_funcs.rids_destroy(rs); - set_members(&s->tables); return s; } @@ -1069,6 +1067,7 @@ load_trans(sql_trans* tr, sqlid id) sql_column *sysschema_ids = find_sql_column(sysschema, "id"); rids *schemas = table_funcs.rids_select(tr, sysschema_ids, NULL, NULL); oid rid; + node *n; if (bs_debug) fprintf(stderr, "#load trans\n"); @@ -1078,6 +1077,12 @@ load_trans(sql_trans* tr, sqlid id) if (ns && ns->base.id > id) cs_add(&tr->schemas, ns, TR_OLD); } + /* members maybe from different schemas */ + for (n = tr->schemas.set->h; n; n = n->next) { + sql_schema *s = n->data; + + set_members(&s->tables); + } table_funcs.rids_destroy(schemas); } diff --git a/sql/test/mergetables/Tests/alter.stable.err b/sql/test/mergetables/Tests/alter.stable.err --- a/sql/test/mergetables/Tests/alter.stable.err +++ b/sql/test/mergetables/Tests/alter.stable.err @@ -38,8 +38,8 @@ QUERY = alter table mys.smalltable add t ERROR = !ALTER TABLE: no such table 'part1' in schema 'mys' MAPI = (monetdb) /var/tmp/mtest-22017/.s.monetdb.30920 QUERY = alter table mys.smalltable add table mys.part1; -ERROR = !ALTER TABLE: no such table 'mys' in schema 'mys' -MAPI = (monetdb) /var/tmp/mtest-22
MonetDB: merge-partitions - Use BATappend to duplicate a bat
Changeset: 79013f33fb25 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=79013f33fb25 Modified Files: sql/storage/store.c Branch: merge-partitions Log Message: Use BATappend to duplicate a bat diffs (49 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1493,7 +1493,21 @@ dup_sql_part(sql_allocator *sa, sql_tabl pt->part.range.minlength = opt->part.range.minlength; pt->part.range.maxlength = opt->part.range.maxlength; } else if(isListPartitionTable(ot)) { - //TODO I have to find a function to duplicate a BAT :( + BAT *b = NULL, *o = NULL; + if((o = BATdescriptor(opt->part.values)) == NULL) /* TODO the bat operations might fail :( */ + return NULL; + if ((b = COLnew(0, opt->tpe, BATcount(o), TRANSIENT)) == NULL) { + BBPunfix(o->batCacheid); + return NULL; + } + if(BATappend(b, o, NULL, FALSE) != GDK_SUCCEED) { + BBPunfix(b->batCacheid); + BBPunfix(o->batCacheid); + return NULL; + } + BBPunfix(o->batCacheid); + BBPretain(b->batCacheid); + pt->part.values = b->batCacheid; } return pt; @@ -2466,7 +2480,21 @@ part_dup(sql_trans *tr, int flag, sql_pa pt->part.range.minlength = opt->part.range.minlength; pt->part.range.maxlength = opt->part.range.maxlength; } else if(isListPartitionTable(ot)) { - //TODO I have to find a function to duplicate a BAT :( + BAT *b = NULL, *o = NULL; + if((o = BATdescriptor(opt->part.values)) == NULL) /* TODO the bat operations might fail :( */ + return NULL; + if ((b = COLnew(0, opt->tpe, BATcount(o), TRANSIENT)) == NULL) { + BBPunfix(o->batCacheid); + return NULL; + } + if(BATappend(b, o, NULL, FALSE) != GDK_SUCCEED) { + BBPunfix(b->batCacheid); + BBPunfix(o->batCacheid); + return NULL; + } + BBPunfix(o->batCacheid); + BBPretain(b->batCacheid); + pt->part.values = b->batCacheid; } return pt; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: merge-partitions - Added option WITH NULL clause for a ...
Changeset: 7460da94eea6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7460da94eea6 Added Files: sql/test/merge-partitions/Tests/mergepart07.sql sql/test/merge-partitions/Tests/mergepart07.stable.err sql/test/merge-partitions/Tests/mergepart07.stable.out Modified Files: monetdb5/modules/mal/wlc.mal sql/backends/monet5/sql_cat.c sql/backends/monet5/sqlcatalog.mal sql/backends/monet5/wlr.mal sql/common/sql_list.c sql/include/sql_catalog.h sql/server/rel_schema.c sql/server/sql_atom.c sql/server/sql_mvc.c sql/server/sql_parser.y sql/storage/sql_catalog.c sql/storage/sql_storage.h sql/storage/store.c sql/test/merge-partitions/Tests/All Branch: merge-partitions Log Message: Added option WITH NULL clause for a range partition to store NULL values, and memory leak fixes. diffs (truncated from 933 to 300 lines): diff --git a/monetdb5/modules/mal/wlc.mal b/monetdb5/modules/mal/wlc.mal --- a/monetdb5/modules/mal/wlc.mal +++ b/monetdb5/modules/mal/wlc.mal @@ -222,7 +222,7 @@ pattern alter_set_table( sname:str, tnme address WLCgeneric comment "Catalog operation alter_set_table"; -pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str) +pattern alter_add_range_partition( sname:str, mtnme:str, psnme:str, ptnme:str, min:str, max:str, nills:int) address WLCgeneric comment "Catalog operation alter_add_range_partition"; diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -176,7 +176,7 @@ add_quotes(char *atom_str) /* always pro } static char * -alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char *psname, char *ptname, char *min, char *max) +alter_table_add_range_partition(mvc *sql, char *msname, char *mtname, char *psname, char *ptname, char *min, char *max, int with_nills) { sql_table *mt = NULL, *pt = NULL; sql_part *err = NULL; @@ -200,12 +200,8 @@ alter_table_add_range_partition(mvc *sql col = mt->pcol; tp1 = col->type.type->localtype; - if(tp1 == TYPE_str) { - if((escaped_min = add_quotes(min)) == NULL) { - msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001) MAL_MALLOC_FAIL); - goto finish; - } - if((escaped_max = add_quotes(max)) == NULL) { + if(tp1 == TYPE_str && ATOMcmp(tp1, min, ATOMnilptr(tp1))) { + if ((escaped_min = add_quotes(min)) == NULL) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001) MAL_MALLOC_FAIL); goto finish; } @@ -213,21 +209,36 @@ alter_table_add_range_partition(mvc *sql msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: error while parsing minimum value"); goto finish; } + } else { + if (ATOMfromstr(tp1, &pmin, &smin, min) < 0) { + msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: error while parsing minimum value"); + goto finish; + } + } + + if(tp1 == TYPE_str && ATOMcmp(tp1, max, ATOMnilptr(tp1))) { + if((escaped_max = add_quotes(max)) == NULL) { + msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(HY001) MAL_MALLOC_FAIL); + goto finish; + } if(ATOMfromstr(tp1, &pmax, &smax, escaped_max) < 0) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: error while parsing maximum value"); goto finish; } } else { - if(ATOMfromstr(tp1, &pmin, &smin, min) < 0) { - msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: error while parsing minimum value"); - goto finish; - } if(ATOMfromstr(tp1, &pmax, &smax, max) < 0) { msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: error while parsing maximum value"); goto finish; } } - if(ATOMcmp(tp1, pmin, pmax) > 0) { + + if(ATOMcmp(tp1, pmin, ATOMnilptr(tp1)) == 0) { + msg = createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) "ALTER TABLE: range bound cannot be null"); + goto finish; + } else if(ATOMcmp(tp1, pmax, ATOMnilptr(tp1)) == 0) { + msg = createException(SQL,"sq
MonetDB: default - implemented sending the time spend in the sql...
Changeset: 553ef0e09f17 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=553ef0e09f17 Added Files: monetdb5/modules/mal/Tests/remote13.stable.err monetdb5/modules/mal/Tests/remote13.stable.out sql/type.txt Modified Files: clients/Tests/exports.stable.out clients/mapiclient/mclient.c clients/mapilib/mapi.c clients/mapilib/mapi.h sql/backends/monet5/sql_result.c sql/include/sql_relation.h sql/server/rel_optimizer.c sql/server/sql_mvc.c sql/server/sql_mvc.h sql/test/FeatureRequests/Tests/All sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.sql sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.sql sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out Branch: default Log Message: implemented sending the time spend in the sql optimzer time to the client implemented removal of (outer) joins with foreign/primary keys when computing simple count(*) or projecting only columns from the foreign key side diffs (truncated from 1093 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -533,6 +533,7 @@ int64_t mapi_get_querytime(MapiHdl hdl); int mapi_get_querytype(MapiHdl hdl); int64_t mapi_get_row_count(MapiHdl hdl); int mapi_get_scale(MapiHdl hdl, int fnr); +int64_t mapi_get_sqloptimizertime(MapiHdl hdl); char *mapi_get_table(MapiHdl hdl, int fnr); int mapi_get_tableid(MapiHdl hdl); stream *mapi_get_to(Mapi mid); diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c --- a/clients/mapiclient/mclient.c +++ b/clients/mapiclient/mclient.c @@ -1844,7 +1844,7 @@ format_result(Mapi mid, MapiHdl hdl, int } // get the timings as reported by the backend - sqloptimizer = 0; + sqloptimizer = mapi_get_sqloptimizertime(hdl); maloptimizer = mapi_get_maloptimizertime(hdl); querytime = mapi_get_querytime(hdl); timerHumanStop(); diff --git a/clients/mapilib/mapi.c b/clients/mapilib/mapi.c --- a/clients/mapilib/mapi.c +++ b/clients/mapilib/mapi.c @@ -876,6 +876,7 @@ struct MapiResultSet { int64_t last_id; int64_t querytime; int64_t maloptimizertime; + int64_t sqloptimizertime; int fieldcnt; int maxfields; char *errorstr; /* error from server */ @@ -1442,6 +1443,7 @@ new_result(MapiHdl hdl) result->errorstr = NULL; result->querytime = 0; result->maloptimizertime = 0; + result->sqloptimizertime = 0; memset(result->sqlstate, 0, sizeof(result->sqlstate)); result->tuple_count = 0; @@ -3764,12 +3766,14 @@ parse_header_line(MapiHdl hdl, char *lin result->commentonly = 0; result->querytime = 0; result->maloptimizertime = 0; + result->sqloptimizertime = 0; nline++;/* skip space */ switch (qt) { case Q_SCHEMA: result->querytime = strtoll(nline, &nline, 10); result->maloptimizertime = strtoll(nline, &nline, 10); + result->sqloptimizertime = strtoll(nline, &nline, 10); break; case Q_TRANS: if (*nline == 'f') @@ -3783,14 +3787,16 @@ parse_header_line(MapiHdl hdl, char *lin queryid = strtoll(nline, &nline, 10); result->querytime = strtoll(nline, &nline, 10); result->maloptimizertime = strtoll(nline, &nline, 10); + result->sqloptimizertime = strtoll(nline, &nline, 10); break; case Q_TABLE: - if (sscanf(nline, "%d %" SCNd64 " %d %" SCNd64 " %" SCNu64 " %" SCNd64 " %" SCNd64, + if (sscanf(nline, "%d %" SCNd64 " %d %" SCNd64 " %" SCNu64 " %" SCNd64 " %" SCNd64 " %" SCNd64, &result->tableid, &result->row_count, &result->fieldcnt, &result->tuple_count, - &queryid, &result->querytime, &result->maloptimizertime) < 7){ +