MonetDB: merge-partitions - COLcopy is even better to duplicate ...

2018-02-28 Thread Pedro Ferreira
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.

2018-02-28 Thread Sjoerd Mullender
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.

2018-02-28 Thread Sjoerd Mullender
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.

2018-02-28 Thread Sjoerd Mullender
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.

2018-02-28 Thread Sjoerd Mullender
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

2018-02-28 Thread Niels Nes
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

2018-02-28 Thread Pedro Ferreira
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 ...

2018-02-28 Thread Pedro Ferreira
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...

2018-02-28 Thread Niels Nes
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){
+