MonetDB: remote_auth - Properly release the lock if something fails
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
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...
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
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
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.
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 ...
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.
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...
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.
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.
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