MonetDB: remote_auth - Properly release the lock if something fails

2018-05-15 Thread Panagiotis Koutsourakis
Changeset: b2db84d7abc6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2db84d7abc6
Modified Files:
sql/backends/monet5/sql.c
Branch: remote_auth
Log Message:

Properly release the lock if something fails

(Thanks Perdo)


diffs (34 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -3605,16 +3605,16 @@ sql_rt_credentials_wrap(Client cntxt, Ma
goto bailout;
}
 
-   MT_lock_set(_contextLock);
if ((msg = AUTHgetRemoteTableCredentials(*table, , , 
)) != MAL_SUCCEED)
goto bailout;
 
+   MT_lock_set(_contextLock);
if (BUNappend(urib, uris, FALSE) != GDK_SUCCEED)
-   goto bailout;
+   goto lbailout;
if (BUNappend(unameb, unames, FALSE) != GDK_SUCCEED)
-   goto bailout;
+   goto lbailout;
if (BUNappend(hashb, hashs, FALSE) != GDK_SUCCEED)
-   goto bailout;
+   goto lbailout;
MT_lock_unset(_contextLock);
BBPkeepref(*uri = urib->batCacheid);
BBPkeepref(*uname = unameb->batCacheid);
@@ -3622,6 +3622,9 @@ sql_rt_credentials_wrap(Client cntxt, Ma
 
return MAL_SUCCEED;
 
+  lbailout:
+   MT_lock_unset(_contextLock);
+   msg = createException(SQL, "sql.remote_table_credentials", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
   bailout:
if (urib) BBPunfix(urib->batCacheid);
if (unameb) BBPunfix(unameb->batCacheid);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: remote_auth - Merge with default

2018-05-15 Thread Panagiotis Koutsourakis
Changeset: 812bd878c4ca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=812bd878c4ca
Added Files:
sql/test/Dump/Tests/clean-again.reqtests
sql/test/Dump/Tests/clean-again.sql.src
sql/test/Dump/Tests/clean-again.stable.err
sql/test/Dump/Tests/clean-again.stable.out
sql/test/Dump/Tests/dump-again.SQL.py
sql/test/Dump/Tests/dump-again.reqtests
sql/test/Dump/Tests/dump-again.stable.err
sql/test/Dump/Tests/dump-again.stable.out
sql/test/Dump/Tests/reload-again.SQL.py
sql/test/Dump/Tests/reload-again.reqtests
sql/test/Dump/Tests/reload-again.stable.err
sql/test/Dump/Tests/reload-again.stable.out
sql/test/Dump/Tests/test-again.reqtests
sql/test/Dump/Tests/test-again.sql.src
sql/test/Dump/Tests/test-again.stable.err.src
sql/test/Dump/Tests/test-again.stable.out.src
Modified Files:
clients/mapiclient/dump.c
clients/mapiclient/msqldump.c
clients/odbc/driver/Makefile.ag
clients/odbc/driver/SQLExecute.c
configure.ag
sql/test/Dump/Tests/All
Branch: remote_auth
Log Message:

Merge with default


diffs (truncated from 1070 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -121,15 +121,15 @@ get_schema(Mapi mid)
 }
 
 /* return TRUE if the HUGEINT type exists */
-static int
+static bool
 has_hugeint(Mapi mid)
 {
MapiHdl hdl;
-   int ret;
+   bool ret;
static int hashge = -1;
 
if (hashge >= 0)
-   return hashge;
+   return (bool) hashge;
 
if ((hdl = mapi_query(mid,
  "SELECT id "
@@ -145,7 +145,7 @@ has_hugeint(Mapi mid)
if (mapi_error(mid))
goto bailout;
mapi_close_handle(hdl);
-   hashge = ret;
+   hashge = (int) ret;
return ret;
 
   bailout:
@@ -383,8 +383,8 @@ static int dump_column_definition(
const char *schema,
const char *tname,
const char *tid,
-   int foreign,
-   int hashge);
+   bool foreign,
+   bool hashge);
 
 static const char *geomsubtypes[] = {
NULL,   /* 0 */
@@ -399,7 +399,7 @@ static const char *geomsubtypes[] = {
 };
 
 static int
-dump_type(Mapi mid, stream *toConsole, const char *c_type, const char 
*c_type_digits, const char *c_type_scale, int hashge)
+dump_type(Mapi mid, stream *toConsole, const char *c_type, const char 
*c_type_digits, const char *c_type_scale, bool hashge)
 {
int space = 0;
 
@@ -533,7 +533,7 @@ dump_type(Mapi mid, stream *toConsole, c
 }
 
 static int
-dump_column_definition(Mapi mid, stream *toConsole, const char *schema, const 
char *tname, const char *tid, int foreign, int hashge)
+dump_column_definition(Mapi mid, stream *toConsole, const char *schema, const 
char *tname, const char *tid, bool foreign, bool hashge)
 {
MapiHdl hdl = NULL;
char *query;
@@ -782,7 +782,7 @@ describe_table(Mapi mid, const char *sch
int type = 0;
size_t maxquerylen;
char *sname = NULL;
-   int hashge;
+   bool hashge;
 
if (schema == NULL) {
if ((sname = strchr(tname, '.')) != NULL) {
@@ -1281,7 +1281,36 @@ dump_table_data(Mapi mid, const char *sc
s = mapi_fetch_field(hdl, i);
if (s == NULL)
mnstr_printf(toConsole, "NULL");
-   else if (string[i]) {
+   else if (useInserts) {
+   const char *tp = mapi_get_type(hdl, i);
+   if (strcmp(tp, "sec_interval") == 0) {
+   const char *p = strchr(s, '.');
+   if (p == NULL)
+   p = s + strlen(s);
+   mnstr_printf(toConsole, "INTERVAL 
'%.*s' SECOND", (int) (p - s), s);
+   } else if (strcmp(tp, "month_interval") == 0)
+   mnstr_printf(toConsole, "INTERVAL '%s' 
MONTH", s);
+   else if (strcmp(tp, "timestamptz") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP WITH 
TIME ZONE '%s'", s);
+   else if (strcmp(tp, "timestamp") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP 
'%s'", s);
+   else if (strcmp(tp, "timetz") == 0)
+   mnstr_printf(toConsole, "TIME WITH TIME 
ZONE '%s'", s);
+   else if (strcmp(tp, "time") == 0)
+   mnstr_printf(toConsole, "TIME '%s'", s);
+   else if (strcmp(tp, "date") == 0)
+  

MonetDB: remote_auth - Fix msqldump to support remote table cred...

2018-05-15 Thread Panagiotis Koutsourakis
Changeset: 31b227e1acca for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31b227e1acca
Modified Files:
clients/mapiclient/dump.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql.mal
sql/scripts/22_clients.sql
Branch: remote_auth
Log Message:

Fix msqldump to support remote table credentials

When dumping a database we need to output the username and the
encrypted password, as we do with database users.


diffs (135 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -870,8 +870,21 @@ describe_table(Mapi mid, const char *sch
 
if (dump_column_definition(mid, toConsole, schema, tname, NULL, 
foreign, hashge))
goto bailout;
-   if (type == 5)
-   mnstr_printf(toConsole, " ON '%s'", view);
+   if (type == 5) { /* remote table */
+   char *rt_user = NULL;
+   char *rt_hash = NULL;
+   snprintf(query, maxquerylen,
+"SELECT * FROM 
sys.remote_table_credentials('%s.%s')",
+schema, tname);
+   if ((hdl = mapi_query(mid, query)) == NULL || 
mapi_error(mid))
+   goto bailout;
+   cnt = 0;
+   while(mapi_fetch_row(hdl) != 0) {
+   rt_user = mapi_fetch_field(hdl, 1);
+   rt_hash = mapi_fetch_field(hdl, 2);
+   }
+   mnstr_printf(toConsole, " ON '%s' WITH USER '%s' 
ENCRYPTED PASSWORD '%s'", view, rt_user, rt_hash);
+   }
mnstr_printf(toConsole, ";\n");
comment_on(toConsole, "TABLE", schema, tname, NULL, remark);
 
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -37,6 +37,7 @@
 #include "clients.h"
 #include "mal_instruction.h"
 #include "mal_resource.h"
+#include "mal_authorize.h"
 
 static int
 rel_is_table(sql_rel *rel)
@@ -3579,6 +3580,57 @@ sql_sessions_wrap(Client cntxt, MalBlkPt
 }
 
 str
+sql_rt_credentials_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
+{
+   BAT *urib = NULL;
+   BAT *unameb = NULL;
+   BAT *hashb = NULL;
+   bat *uri = getArgReference_bat(stk, pci, 0);
+   bat *uname = getArgReference_bat(stk, pci, 1);
+   bat *hash = getArgReference_bat(stk, pci, 2);
+   str *table = getArgReference_str(stk, pci, 3);
+   str uris;
+   str unames;
+   str hashs;
+   str msg = MAL_SUCCEED;
+   (void)mb;
+   (void)cntxt;
+
+   urib = COLnew(0, TYPE_str, 0, TRANSIENT);
+   unameb = COLnew(0, TYPE_str, 0, TRANSIENT);
+   hashb = COLnew(0, TYPE_str, 0, TRANSIENT);
+
+   if (urib == NULL || unameb == NULL || hashb == NULL) {
+   msg = createException(SQL, "sql.remote_table_credentials", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+   goto bailout;
+   }
+
+   MT_lock_set(_contextLock);
+   if ((msg = AUTHgetRemoteTableCredentials(*table, , , 
)) != MAL_SUCCEED)
+   goto bailout;
+
+   if (BUNappend(urib, uris, FALSE) != GDK_SUCCEED)
+   goto bailout;
+   if (BUNappend(unameb, unames, FALSE) != GDK_SUCCEED)
+   goto bailout;
+   if (BUNappend(hashb, hashs, FALSE) != GDK_SUCCEED)
+   goto bailout;
+   MT_lock_unset(_contextLock);
+   BBPkeepref(*uri = urib->batCacheid);
+   BBPkeepref(*uname = unameb->batCacheid);
+   BBPkeepref(*hash = hashb->batCacheid);
+
+   return MAL_SUCCEED;
+
+  bailout:
+   if (urib) BBPunfix(urib->batCacheid);
+   if (unameb) BBPunfix(unameb->batCacheid);
+   if (hashb) BBPunfix(hashb->batCacheid);
+   return msg;
+}
+
+
+str
 sql_querylog_catalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
int i;
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -131,6 +131,7 @@ sql5_export str dump_cache(Client cntxt,
 sql5_export str dump_opt_stats(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str dump_trace(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str sql_sessions_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+sql5_export str sql_rt_credentials_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str sql_storage(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 sql5_export str sql_querylog_catalog(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str sql_querylog_calls(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
diff --git a/sql/backends/monet5/sql.mal 

MonetDB: remote_auth - Improve error message

2018-05-15 Thread Panagiotis Koutsourakis
Changeset: e61a590591bc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e61a590591bc
Modified Files:
monetdb5/mal/mal_authorize.c
Branch: remote_auth
Log Message:

Improve error message


diffs (12 lines):

diff --git a/monetdb5/mal/mal_authorize.c b/monetdb5/mal/mal_authorize.c
--- a/monetdb5/mal/mal_authorize.c
+++ b/monetdb5/mal/mal_authorize.c
@@ -1001,7 +1001,7 @@ AUTHgetRemoteTableCredentials(const char
 
p = lookupRemoteTableKey(local_table);
if (p == BUN_NONE) {
-   throw(MAL, "getRemoteTableCredentials", "No credentials for 
table %s found", local_table);
+   throw(MAL, "getRemoteTableCredentials", "No credentials for 
remote table %s found", local_table);
}
 
assert(rt_key);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: remote_auth - Merge with default

2018-05-15 Thread Panagiotis Koutsourakis
Changeset: e56350abb97f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e56350abb97f
Added Files:

sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.SQL.py

sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.stable.err

sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.stable.out

sql/test/BugTracker-2018/Tests/sqlitelogictest-complex-case-not-in.Bug-6594.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-complex-case-not-in.Bug-6594.stable.out

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-distinct-duplicate.Bug-6603.sql

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-distinct-duplicate.Bug-6603.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-groupby-distinct-duplicate.Bug-6603.stable.out

sql/test/BugTracker-2018/Tests/sqlitelogictest-select-errors.Bug-6600.sql

sql/test/BugTracker-2018/Tests/sqlitelogictest-select-errors.Bug-6600.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-select-errors.Bug-6600.stable.out

sql/test/BugTracker-2018/Tests/sqlitelogictest-select-not-in-wrong.Bug-6602.sql

sql/test/BugTracker-2018/Tests/temp-table-performance.Bug-6577.stable.err

sql/test/BugTracker-2018/Tests/temp-table-performance.Bug-6577.stable.out
Modified Files:
clients/mapiclient/dump.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statement.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_optimizer.h
sql/server/rel_partition.c
sql/server/rel_select.c
sql/server/rel_updates.c
sql/server/sql_atom.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/server/sql_parser.y
sql/test/BugTracker-2015/Tests/schemadiff.Bug-3778.stable.out
sql/test/BugTracker-2018/Tests/All

sql/test/BugTracker-2018/Tests/sqlitelogictest-coalesce-division-by-zero.Bug-6556.sql

sql/test/BugTracker-2018/Tests/sqlitelogictest-coalesce-division-by-zero.Bug-6556.stable.err

sql/test/BugTracker-2018/Tests/sqlitelogictest-coalesce-division-by-zero.Bug-6556.stable.out

sql/test/BugTracker-2018/Tests/sqlitelogictest-complex-case-not-in.Bug-6594.sql

sql/test/BugTracker-2018/Tests/sqlitelogictest-mal-calc-undefined.Bug-6566.stable.out
sql/test/BugTracker-2018/Tests/temp-table-performance.Bug-6577.sql
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out.int128
sql/test/Tests/systemfunctions.stable.out
sql/test/Tests/systemfunctions.stable.out.int128
sql/test/mergetables/Tests/mergequery.stable.out
Branch: remote_auth
Log Message:

Merge with default


diffs (truncated from 2685 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -256,7 +256,7 @@ dump_foreign_keys(Mapi mid, const char *
  "pkt.schema_id = ps.id AND "
  "fkt.schema_id = fs.id AND "
  "fkt.system = FALSE "
-   "ORDER BY fs.name,fkt.name, "
+   "ORDER BY fs.name, fkt.name, "
  "fkk.name, nr";
}
hdl = mapi_query(mid, query);
@@ -804,7 +804,7 @@ describe_table(Mapi mid, const char *sch
 
query = malloc(maxquerylen);
snprintf(query, maxquerylen,
-"%s\n"
+"%s "
 "SELECT t.name, t.query, t.type, c.remark "
 "FROM sys.schemas s, sys._tables t LEFT OUTER JOIN comments c 
ON t.id = c.id "
 "WHERE s.name = '%s' AND "
@@ -949,8 +949,12 @@ describe_table(Mapi mid, const char *sch
if (cnt)
mnstr_printf(toConsole, ");\n");
snprintf(query, maxquerylen,
-   "%s\n"
-"SELECT i.name, c.remark FROM sys.idxs i, comments c 
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",
+   "%s "
+"SELECT i.name, c.remark "
+"FROM sys.idxs i, comments c "
+"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),
 schema, tname);
if ((hdl = mapi_query(mid, query)) 

MonetDB: default - Merge with Mar2018 branch.

2018-05-15 Thread Sjoerd Mullender
Changeset: 046b4c1a659e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=046b4c1a659e
Added Files:
sql/test/Dump/Tests/clean-again.reqtests
sql/test/Dump/Tests/clean-again.sql.src
sql/test/Dump/Tests/clean-again.stable.err
sql/test/Dump/Tests/clean-again.stable.out
sql/test/Dump/Tests/dump-again.SQL.py
sql/test/Dump/Tests/dump-again.reqtests
sql/test/Dump/Tests/dump-again.stable.err
sql/test/Dump/Tests/dump-again.stable.out
sql/test/Dump/Tests/reload-again.SQL.py
sql/test/Dump/Tests/reload-again.reqtests
sql/test/Dump/Tests/reload-again.stable.err
sql/test/Dump/Tests/reload-again.stable.out
sql/test/Dump/Tests/test-again.reqtests
sql/test/Dump/Tests/test-again.sql.src
sql/test/Dump/Tests/test-again.stable.err.src
sql/test/Dump/Tests/test-again.stable.out.src
Modified Files:
clients/mapiclient/dump.c
clients/odbc/driver/Makefile.ag
clients/odbc/driver/SQLExecute.c
configure.ag
sql/test/Dump/Tests/All
Branch: default
Log Message:

Merge with Mar2018 branch.


diffs (truncated from 565 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1268,7 +1268,36 @@ dump_table_data(Mapi mid, const char *sc
s = mapi_fetch_field(hdl, i);
if (s == NULL)
mnstr_printf(toConsole, "NULL");
-   else if (string[i]) {
+   else if (useInserts) {
+   const char *tp = mapi_get_type(hdl, i);
+   if (strcmp(tp, "sec_interval") == 0) {
+   const char *p = strchr(s, '.');
+   if (p == NULL)
+   p = s + strlen(s);
+   mnstr_printf(toConsole, "INTERVAL 
'%.*s' SECOND", (int) (p - s), s);
+   } else if (strcmp(tp, "month_interval") == 0)
+   mnstr_printf(toConsole, "INTERVAL '%s' 
MONTH", s);
+   else if (strcmp(tp, "timestamptz") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP WITH 
TIME ZONE '%s'", s);
+   else if (strcmp(tp, "timestamp") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP 
'%s'", s);
+   else if (strcmp(tp, "timetz") == 0)
+   mnstr_printf(toConsole, "TIME WITH TIME 
ZONE '%s'", s);
+   else if (strcmp(tp, "time") == 0)
+   mnstr_printf(toConsole, "TIME '%s'", s);
+   else if (strcmp(tp, "date") == 0)
+   mnstr_printf(toConsole, "DATE '%s'", s);
+   else if (strcmp(tp, "blob") == 0)
+   mnstr_printf(toConsole, "BINARY LARGE 
OBJECT '%s'", s);
+   else if (strcmp(tp, "inet") == 0 ||
+strcmp(tp, "json") == 0 ||
+strcmp(tp, "url") == 0 ||
+strcmp(tp, "uuid") == 0 ||
+string[i])
+   quoted_print(toConsole, s, true);
+   else
+   mnstr_printf(toConsole, "%s", s);
+   } else if (string[i]) {
/* write double or single-quoted
   string with certain characters
   escaped */
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
@@ -107,7 +107,7 @@ lib_MonetODBC = {
SQLTransact.c \
driver.rc \
ODBC.syms
-   LIBS = ../../mapilib/libmapi $(LTLIBICONV) $(ODBCINST_LIBS) 
$(SOCKET_LIBS)
+   LIBS = ../../mapilib/libmapi ../../../common/stream/libstream 
$(LTLIBICONV) $(ODBCINST_LIBS) $(SOCKET_LIBS) $(openssl_LIBS)
 }
 
 EXTRA_DIST = Copyright
diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c
--- a/clients/odbc/driver/SQLExecute.c
+++ b/clients/odbc/driver/SQLExecute.c
@@ -43,7 +43,9 @@ static struct msql_types {
{"decimal", SQL_DECIMAL},
{"double", SQL_DOUBLE},
{"hugeint", SQL_HUGEINT},
+   /* {"inet", SQL_WCHAR}, */
{"int", SQL_INTEGER},
+   /* {"json", SQL_WCHAR}, */
{"month_interval", SQL_INTERVAL_MONTH},
{"oid", SQL_BIGINT},
{"real", SQL_REAL},
@@ -55,7 +57,7 @@ static struct 

MonetDB: merge-partitions - Allow range partitions to held only ...

2018-05-15 Thread Pedro Ferreira
Changeset: 75280a18cc58 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75280a18cc58
Added Files:
sql/test/merge-partitions/Tests/mergepart15.sql
sql/test/merge-partitions/Tests/mergepart15.stable.err
sql/test/merge-partitions/Tests/mergepart15.stable.out
Modified Files:
sql/backends/monet5/sql_cat.c
sql/server/rel_schema.c
sql/server/sql_parser.y
sql/storage/store.c
sql/test/merge-partitions/Tests/All
Branch: merge-partitions
Log Message:

Allow range partitions to held only null values.


diffs (truncated from 516 to 300 lines):

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
@@ -191,7 +191,7 @@ alter_table_add_range_partition(mvc *sql
ptr pmin = NULL, pmax = NULL;
size_t smin = 0, smax = 0, serr_min = 0, serr_max = 0;
ssize_t (*atomtostr)(str *, size_t *, const void *);
-   int accesses[3] = {RDONLY, RD_INS, RD_UPD_VAL};
+   int accesses[3] = {RDONLY, RD_INS, RD_UPD_VAL}, free_pmin = 1, 
free_pmax = 1;
 
if((msg = validate_alter_table_add_table(sql, 
"sql.alter_table_add_range_partition", msname, mtname, psname, ptname, , 
))) {
return msg;
@@ -209,45 +209,54 @@ alter_table_add_range_partition(mvc *sql
 
col = mt->pcol;
tp1 = col->type.type->localtype;
-   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;
-   }
-   if(ATOMfromstr(tp1, , , escaped_min) < 0) {
-   msg = 
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) 
"ALTER TABLE: error while parsing minimum value");
+   if(ATOMcmp(TYPE_str, min, ATOMnilptr(TYPE_str))) {
+   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 (ATOMfromstr(tp1, , , escaped_min) < 0) {
+   msg = createException(SQL, 
"sql.alter_table_add_range_partition",
+ 
SQLSTATE(42000) "ALTER TABLE: error while parsing minimum value");
+   goto finish;
+   }
+   } else if (ATOMfromstr(tp1, , , min) < 0) {
+   msg = createException(SQL, 
"sql.alter_table_add_range_partition",
+ 
SQLSTATE(42000) "ALTER TABLE: error while parsing minimum value");
goto finish;
}
} else {
-   if (ATOMfromstr(tp1, , , min) < 0) {
-   msg = 
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) 
"ALTER TABLE: error while parsing minimum value");
-   goto finish;
-   }
+   //if the ranges are not set, the partition is for null values 
only
+   assert(with_nills && !ATOMcmp(TYPE_str, max, 
ATOMnilptr(TYPE_str)));
}
 
-   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, , , escaped_max) < 0) {
-   msg = 
createException(SQL,"sql.alter_table_add_range_partition",SQLSTATE(42000) 
"ALTER TABLE: error while parsing maximum value");
+   if(ATOMcmp(TYPE_str, max, ATOMnilptr(TYPE_str))) {
+   if (tp1 == TYPE_str) {
+   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, , , 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, , , max) < 0) {
+   msg = 
createException(SQL,"sql.alter_table_add_range_partition",
+   

MonetDB: Mar2018 - Typo.

2018-05-15 Thread Sjoerd Mullender
Changeset: 2071f969b5e9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2071f969b5e9
Modified Files:
configure.ag
Branch: Mar2018
Log Message:

Typo.


diffs (12 lines):

diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -3084,7 +3084,7 @@ for comp in \
'zlib   ' \
 ; do
AS_VAR_COPY([org], [org_have_$comp])
-   AS_VAR_COPY([have], [org_have_$comp])
+   AS_VAR_COPY([have], [have_$comp])
AS_VAR_COPY([why_not], [why_not_$comp])
 
AS_CASE([$why_not-$have-$org],
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Mar2018 - Get dumping using inserts to work for all sor...

2018-05-15 Thread Sjoerd Mullender
Changeset: 7e47f81a6416 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e47f81a6416
Modified Files:
clients/mapiclient/dump.c
sql/test/Dump/Tests/dump-again.SQL.py
sql/test/Dump/Tests/dump-again.stable.out
Branch: Mar2018
Log Message:

Get dumping using inserts to work for all sorts of types.
Not the most efficient solution...


diffs (72 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1268,7 +1268,36 @@ dump_table_data(Mapi mid, const char *sc
s = mapi_fetch_field(hdl, i);
if (s == NULL)
mnstr_printf(toConsole, "NULL");
-   else if (string[i]) {
+   else if (useInserts) {
+   const char *tp = mapi_get_type(hdl, i);
+   if (strcmp(tp, "sec_interval") == 0) {
+   const char *p = strchr(s, '.');
+   if (p == NULL)
+   p = s + strlen(s);
+   mnstr_printf(toConsole, "INTERVAL 
'%.*s' SECOND", (int) (p - s), s);
+   } else if (strcmp(tp, "month_interval") == 0)
+   mnstr_printf(toConsole, "INTERVAL '%s' 
MONTH", s);
+   else if (strcmp(tp, "timestamptz") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP WITH 
TIME ZONE '%s'", s);
+   else if (strcmp(tp, "timestamp") == 0)
+   mnstr_printf(toConsole, "TIMESTAMP 
'%s'", s);
+   else if (strcmp(tp, "timetz") == 0)
+   mnstr_printf(toConsole, "TIME WITH TIME 
ZONE '%s'", s);
+   else if (strcmp(tp, "time") == 0)
+   mnstr_printf(toConsole, "TIME '%s'", s);
+   else if (strcmp(tp, "date") == 0)
+   mnstr_printf(toConsole, "DATE '%s'", s);
+   else if (strcmp(tp, "blob") == 0)
+   mnstr_printf(toConsole, "BINARY LARGE 
OBJECT '%s'", s);
+   else if (strcmp(tp, "inet") == 0 ||
+strcmp(tp, "json") == 0 ||
+strcmp(tp, "url") == 0 ||
+strcmp(tp, "uuid") == 0 ||
+string[i])
+   quoted_print(toConsole, s, true);
+   else
+   mnstr_printf(toConsole, "%s", s);
+   } else if (string[i]) {
/* write double or single-quoted
   string with certain characters
   escaped */
diff --git a/sql/test/Dump/Tests/dump-again.SQL.py 
b/sql/test/Dump/Tests/dump-again.SQL.py
--- a/sql/test/Dump/Tests/dump-again.SQL.py
+++ b/sql/test/Dump/Tests/dump-again.SQL.py
@@ -7,7 +7,6 @@ except ImportError:
 p = process.client('sqldump', args = ['--inserts'], stdout = process.PIPE, 
stderr = process.PIPE)
 dump, err = p.communicate()
 
-print(os.path.join(os.environ['TSTTRGDIR'], 'dumpoutput2.sql'))
 f = open(os.path.join(os.environ['TSTTRGDIR'], 'dumpoutput2.sql'), 'w')
 f.write(dump)
 f.close()
diff --git a/sql/test/Dump/Tests/dump-again.stable.out 
b/sql/test/Dump/Tests/dump-again.stable.out
--- a/sql/test/Dump/Tests/dump-again.stable.out
+++ b/sql/test/Dump/Tests/dump-again.stable.out
@@ -24,7 +24,6 @@ Ready.
 # 22:27:57 >  "/usr/bin/python" "dump-again.SQL.py" "dump-again"
 # 22:27:57 >  
 
-/home/sjoerd/@Monet-stable/mTests/sql/test/Dump/dumpoutput2.sql
 START TRANSACTION;
 CREATE SEQUENCE "sys"."test_seq" AS INTEGER;
 SET SCHEMA "sys";
@@ -88,7 +87,7 @@ CREATE TABLE "sys"."typestest" (
"url55"  URL(55),
"uuid"   UUID
 );
-INSERT INTO "sys"."typestest" VALUES (true, 10, 1, 100, 100, 
1e+30, 1e+20, 1.000, 123456789, 12345.678, 3.1415, 3.1415, 3.1415, DATE 
'2009-04-15', INTERVAL '2' YEAR, INTERVAL '1-06' YEAR TO MONTH, INTERVAL '3' 
MONTH, INTERVAL '20' DAY, INTERVAL '1 06' DAY TO HOUR, INTERVAL '1 09:20' DAY 
TO MINUTE, INTERVAL '1 03:46:40' DAY TO SECOND, INTERVAL '10' HOUR, INTERVAL 
'1:40' HOUR TO MINUTE, INTERVAL '0:33:20' HOUR TO SECOND, INTERVAL '10' MINUTE, 
INTERVAL '1:40' MINUTE TO SECOND, INTERVAL '10' SECOND, TIMESTAMP '1995-07-15 
07:30', TIMESTAMP '1995-07-15 07:30', TIMESTAMP '1995-07-15 07:30', TIMESTAMP 
'1995-07-15 07:30', TIME '07:30', TIME '07:30', TIME '07:30', TIME '07:30', 
BLOB '123456', BLOB '123456', '123456', '123456', 'x', 

MonetDB: Mar2018 - Document missing SQL types.

2018-05-15 Thread Sjoerd Mullender
Changeset: bf0eb253676d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf0eb253676d
Modified Files:
clients/odbc/driver/SQLExecute.c
Branch: Mar2018
Log Message:

Document missing SQL types.


diffs (22 lines):

diff --git a/clients/odbc/driver/SQLExecute.c b/clients/odbc/driver/SQLExecute.c
--- a/clients/odbc/driver/SQLExecute.c
+++ b/clients/odbc/driver/SQLExecute.c
@@ -43,7 +43,9 @@ static struct msql_types {
{"decimal", SQL_DECIMAL},
{"double", SQL_DOUBLE},
{"hugeint", SQL_HUGEINT},
+   /* {"inet", SQL_WCHAR}, */
{"int", SQL_INTEGER},
+   /* {"json", SQL_WCHAR}, */
{"month_interval", SQL_INTERVAL_MONTH},
{"oid", SQL_BIGINT},
{"real", SQL_REAL},
@@ -55,7 +57,7 @@ static struct msql_types {
{"timestamp", SQL_TYPE_TIMESTAMP},
{"timestamptz", SQL_TYPE_TIMESTAMP},
{"tinyint", SQL_TINYINT},
-/* {"ubyte", SQL_TINYINT}, */
+   /* {"url", SQL_WCHAR}, */
{"uuid", SQL_GUID},
{"varchar", SQL_WVARCHAR},
{0, 0}, /* sentinel */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Mar2018 - Fix libraries.

2018-05-15 Thread Sjoerd Mullender
Changeset: d92a399b112b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d92a399b112b
Modified Files:
clients/odbc/driver/Makefile.ag
Branch: Mar2018
Log Message:

Fix libraries.


diffs (12 lines):

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
@@ -107,7 +107,7 @@ lib_MonetODBC = {
SQLTransact.c \
driver.rc \
ODBC.syms
-   LIBS = ../../mapilib/libmapi $(LTLIBICONV) $(ODBCINST_LIBS) 
$(SOCKET_LIBS)
+   LIBS = ../../mapilib/libmapi ../../../common/stream/libstream 
$(LTLIBICONV) $(ODBCINST_LIBS) $(SOCKET_LIBS) $(openssl_LIBS)
 }
 
 EXTRA_DIST = Copyright
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list