MonetDB: default - Fix type and add some more lazy initializations
Changeset: 56bc4f330ce5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=56bc4f330ce5 Modified Files: monetdb5/mal/mal_instruction.c Branch: default Log Message: Fix type and add some more lazy initializations diffs (35 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -777,7 +777,6 @@ setVariableType(MalBlkPtr mb, const int char * getVarName(MalBlkPtr mb, int idx) { - char buf[IDLENGTH] = {0}; char *s = mb->var[idx].name; if( getVarKind(mb,idx) == 0) setVarKind(mb,idx, REFMARKER); @@ -785,7 +784,7 @@ getVarName(MalBlkPtr mb, int idx) if( *s && s[1] != '_' && (s[0] != 'X' && s[0] != 'C')) return s; if ( *s == 0) - (void) snprintf(buf, IDLENGTH,"%c_%d", getVarKind(mb, idx), mb->vid++); + (void) snprintf(s, IDLENGTH,"%c_%d", getVarKind(mb, idx), mb->vid++); return s; } @@ -828,8 +827,12 @@ cloneVariable(MalBlkPtr tm, MalBlkPtr mb int res; if (isVarConstant(mb, x)) res = cpyConstant(tm, getVar(mb, x)); - else - res = newVariable(tm, getVarName(mb, x), strlen(getVarName(mb,x)), getVarType(mb, x)); + else { + res = newTmpVariable(tm, getVarType(mb, x)); + if( *mb->var[x].name) + strcpy(tm->var[x].name, mb->var[x].name); + //res = newVariable(tm, getVarName(mb, x), strlen(getVarName(mb,x)), getVarType(mb, x)); + } if (res < 0) return res; if (isVarFixed(mb, x)) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - don't get the BATdescriptor when we are flushing
Changeset: 84d58fac6f5c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84d58fac6f5c Modified Files: gdk/gdk_logger.c Branch: default Log Message: don't get the BATdescriptor when we are flushing diffs (49 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -528,17 +528,21 @@ static gdk_return la_bat_updates(logger *lg, logaction *la) { log_bid bid = internal_find_bat(lg, la->cid); + BAT *b = NULL; if (bid == 0) return GDK_SUCCEED; /* ignore bats no longer in the catalog */ - BAT *b = BATdescriptor(bid); - if (b == NULL) - return GDK_FAIL; + if (!lg->flushing) { + b = BATdescriptor(bid); + if (b == NULL) + return GDK_FAIL; + } if (la->type == LOG_UPDATE_BULK) { - BUN cnt = BATcount(b); + BUN cnt = 0; if (!lg->flushing) { + cnt = BATcount(b); int is_msk = (b->ttype == TYPE_msk); /* handle offset 0 ie clear */ if (/* DISABLES CODE */ (0) && la->offset == 0 && cnt) @@ -583,7 +587,8 @@ la_bat_updates(logger *lg, logaction *la } cnt = (BUN)(la->offset + la->nr); if (la_bat_update_count(lg, la->cid, cnt) != GDK_SUCCEED) { - logbat_destroy(b); + if (b) + logbat_destroy(b); return GDK_FAIL; } } else if (!lg->flushing && la->type == LOG_UPDATE) { @@ -600,7 +605,8 @@ la_bat_updates(logger *lg, logaction *la } } } - logbat_destroy(b); + if (b) + logbat_destroy(b); return GDK_SUCCEED; } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Approve upgrade.
Changeset: 66794e0b06dc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=66794e0b06dc Modified Files: sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.32bit sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit Branch: default Log Message: Approve upgrade. diffs (truncated from 31200 to 300 lines): diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit --- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit +++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit @@ -2,3613 +2,3627 @@ Running database upgrade commands: set schema "sys"; delete from sys.dependencies where id < 2000; delete from sys.types where id < 2000; -insert into sys.types values (0, 'void', 'any', 0, 0, 0, 0, 2000); -insert into sys.types values (1, 'bat', 'table', 0, 0, 0, 1, 2000); -insert into sys.types values (2, 'ptr', 'ptr', 0, 0, 0, 1, 2000); -insert into sys.types values (3, 'bit', 'boolean', 1, 0, 2, 2, 2000); -insert into sys.types values (4, 'str', 'char', 0, 0, 0, 3, 2000); -insert into sys.types values (5, 'str', 'varchar', 0, 0, 0, 4, 2000); -insert into sys.types values (6, 'str', 'clob', 0, 0, 0, 4, 2000); -insert into sys.types values (7, 'oid', 'oid', 31, 0, 2, 6, 2000); -insert into sys.types values (8, 'bte', 'tinyint', 8, 1, 2, 7, 2000); -insert into sys.types values (9, 'sht', 'smallint', 16, 1, 2, 7, 2000); -insert into sys.types values (10, 'int', 'int', 32, 1, 2, 7, 2000); -insert into sys.types values (11, 'lng', 'bigint', 64, 1, 2, 7, 2000); -insert into sys.types values (12, 'bte', 'decimal', 2, 1, 10, 10, 2000); -insert into sys.types values (13, 'sht', 'decimal', 4, 1, 10, 10, 2000); -insert into sys.types values (14, 'int', 'decimal', 9, 1, 10, 10, 2000); -insert into sys.types values (15, 'lng', 'decimal', 18, 1, 10, 10, 2000); -insert into sys.types values (16, 'flt', 'real', 24, 2, 2, 11, 2000); -insert into sys.types values (17, 'dbl', 'double', 53, 2, 2, 11, 2000); -insert into sys.types values (18, 'int', 'month_interval', 3, 0, 10, 8, 2000); -insert into sys.types values (19, 'lng', 'day_interval', 4, 0, 10, 9, 2000); -insert into sys.types values (20, 'lng', 'sec_interval', 13, 1, 10, 9, 2000); -insert into sys.types values (21, 'daytime', 'time', 7, 0, 0, 12, 2000); -insert into sys.types values (22, 'daytime', 'timetz', 7, 1, 0, 13, 2000); -insert into sys.types values (23, 'date', 'date', 0, 0, 0, 14, 2000); -insert into sys.types values (24, 'timestamp', 'timestamp', 7, 0, 0, 15, 2000); -insert into sys.types values (25, 'timestamp', 'timestamptz', 7, 1, 0, 16, 2000); -insert into sys.types values (26, 'blob', 'blob', 0, 0, 0, 5, 2000); -insert into sys.types values (29, 'wkb', 'geometry', 0, 0, 0, 17, 2000); -insert into sys.types values (30, 'wkba', 'geometrya', 0, 0, 0, 18, 2000); -insert into sys.types values (31, 'mbr', 'mbr', 0, 0, 0, 18, 2000); +insert into sys.types values (1, 'void', 'any', 0, 0, 0, 0, 2000); +insert into sys.types values (2, 'bat', 'table', 0, 0, 0, 1, 2000); +insert into sys.types values (3, 'ptr', 'ptr', 0, 0, 0, 1, 2000); +insert into sys.types values (4, 'bit', 'boolean', 1, 0, 2, 2, 2000); +insert into sys.types values (5, 'str', 'clob', 0, 0, 0, 4, 2000); +insert into sys.types values (6, 'str', 'varchar', 0, 0, 0, 4, 2000); +insert into sys.types values (7, 'str', 'char', 0, 0, 0, 3, 2000); +insert into sys.types values (8, 'oid', 'oid', 31, 0, 2, 6, 2000); +insert into sys.types values (9, 'bte', 'tinyint', 8, 1, 2, 7, 2000); +insert into sys.types values (10, 'sht', 'smallint', 16, 1, 2, 7, 2000); +insert into sys.types values (11, 'int', 'int', 32, 1, 2, 7, 2000); +insert into sys.types values (12, 'lng', 'bigint', 64, 1, 2, 7, 2000); +insert into sys.types values (13, 'bte', 'decimal', 2, 1, 10, 10, 2000); +insert into sys.types values (14, 'sht', 'decimal', 4, 1, 10, 10, 2000); +insert into sys.types values (15, 'int', 'decimal', 9, 1, 10, 10, 2000); +insert into sys.types values (16, 'lng', 'decimal', 18, 1, 10, 10, 2000); +insert into sys.types values (17, 'flt', 'real', 24, 2, 2, 11, 2000); +insert into sys.types values (18, 'dbl', 'double', 53, 2, 2, 11, 2000); +insert into sys.types values (19, 'int', 'month_interval', 3, 0, 10, 8, 2000); +insert into sys.types values (20, 'lng', 'day_interval', 4, 0, 10, 9, 2000); +insert into sys.types values (21, 'lng', 'sec_interval', 13, 1, 10, 9, 2000); +insert into sys.types values (22, 'daytime', 'time', 7, 0, 0, 12, 2000); +insert into sys.types values (23, 'daytime', 'timetz', 7, 1, 0, 13, 2000); +insert into sys.types values (24, 'date', 'date', 0, 0, 0, 14, 2000); +insert into sys.types values (25, 'timestamp', 'timestamp', 7, 0, 0, 15, 2000); +insert into sys.ty
MonetDB: default - Allocate less when possible
Changeset: ef9745cc0f5d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef9745cc0f5d Modified Files: sql/backends/monet5/sql_user.c sql/server/sql_privileges.c sql/storage/bat/bat_table.c sql/storage/sql_storage.h sql/storage/store.c sql/storage/store_dependency.c Branch: default Log Message: Allocate less when possible diffs (truncated from 357 to 300 lines): diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c --- a/sql/backends/monet5/sql_user.c +++ b/sql/backends/monet5/sql_user.c @@ -617,10 +617,7 @@ monet5_user_set_def_schema(mvc *m, oid u GDKfree(username); return NULL; } - p = store->table_api.column_find_value(m->session->tr, users_schema, rid); - assert(p); - schema_id = *(sqlid *) p; - _DELETE(p); + schema_id = store->table_api.column_find_sqlid(m->session->tr, users_schema, rid); p = store->table_api.column_find_value(m->session->tr, users_schema_path, rid); assert(p); @@ -646,10 +643,7 @@ monet5_user_set_def_schema(mvc *m, oid u rid = store->table_api.column_find_row(m->session->tr, auths_name, username, NULL); if (!is_oid_nil(rid)) { sql_column *auths_id = find_sql_column(auths, "id"); - sqlid id; - p = store->table_api.column_find_value(m->session->tr, auths_id, rid); - id = *(sqlid *) p; - _DELETE(p); + sqlid id = store->table_api.column_find_sqlid(m->session->tr, auths_id, rid); m->user_id = m->role_id = id; } else { diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c --- a/sql/server/sql_privileges.c +++ b/sql/server/sql_privileges.c @@ -809,7 +809,7 @@ sql_drop_granted_users(mvc *sql, sqlid u A = store->table_api.rids_select(tr, find_sql_column(auths, "grantor"), &user_id, &user_id, NULL); /* remove them and continue the deletion */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid); rid = store->table_api.rids_next(A)) { - sqlid nuid = *(sqlid*)store->table_api.column_find_value(tr, find_sql_column(auths, "id"), rid); + sqlid nuid = store->table_api.column_find_sqlid(tr, find_sql_column(auths, "id"), rid); char* nname = store->table_api.column_find_value(tr, find_sql_column(auths, "name"), rid); sql_drop_granted_users(sql, nuid, nname, deleted_users); diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c --- a/sql/storage/bat/bat_table.c +++ b/sql/storage/bat/bat_table.c @@ -143,51 +143,34 @@ column_find_value(sql_trans *tr, sql_col return res; } -static sqlid -column_find_sqlid(sql_trans *tr, sql_column *c, oid rid) -{ - BUN q = BUN_NONE; - BAT *b; - sqlid res = -1; - - b = full_column(tr, c); - if (b) { - if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b)) - q = BUN_NONE; - else - q = rid - b->hseqbase; - } - if (q != BUN_NONE) { - BATiter bi = bat_iterator(b); - - res = *(sqlid*)BUNtail(bi, q); - } - full_destroy(c, b); - return res; +#define column_find_tpe(TPE) \ +static TPE \ +column_find_##TPE(sql_trans *tr, sql_column *c, oid rid) \ +{ \ + BUN q = BUN_NONE; \ + BAT *b; \ + TPE res = -1; \ + \ + b = full_column(tr, c); \ + if (b) { \ + if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b)) \ + q = BUN_NONE; \ + else \ + q = rid - b->hseqbase; \ + } \ + if (q != BUN_NONE) { \ + BATiter bi = bat_iterator(b); \ + res = *(TPE*)BUNtail(bi, q); \ + } \ + full_destroy(c, b); \ + return res; \ } -static sqlid -column_find_int(sql_trans *tr, sql_column *c, oid rid) -{ - BUN q = BUN_NONE; - BAT *b; - int res = -1; - - b = full_column(tr, c); - if (b) { - if (rid < b->hseqbase || rid >= b->hseqbase + BATcount(b)) - q = BUN_NONE; - else - q = rid - b->hseqbase; - } - if (q != BUN_NONE) { - BATiter bi = bat_iterator(b); - - res = *(int*)BUNtail(bi, q); - } - full_destroy(c, b); - return res; -} +column_find_tpe(sqlid) +column_find_tpe(bte) +column_find_tpe(sht) +column_find_tpe(int) +column_find_tpe(lng) static int column_update_value(sql_trans *tr, sql_column *c, oid rid, void *value) @@ -634,7 +617,10 @@ bat_table_init( table_functions *tf ) tf->column_find_row = column_find_row; tf->column_find_value = column_find_value; tf->column_find_sqlid = column_find_sqlid; +
MonetDB: default - Approve tests.
Changeset: 47e839da1c6e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=47e839da1c6e Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out Branch: default Log Message: Approve tests. diffs (truncated from 45245 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -64,5875 +64,5875 @@ stdout of test 'MAL-signatures` in direc % .%1, .%1,.%1,.%1,.%1 # table_name % module, function, signature, address,comment # name % clob,clob, clob, clob, clob # type -% 12, 28, 313,42, 0 # length -[ "aggr", "all", "command aggr.all(X_1:bat[:any_1]):any_1 ", "SQLall;", "" ] -[ "aggr", "allnotequal", "pattern aggr.allnotequal(X_1:bat[:any_1], X_2:bat[:any_1]):bit ", "SQLallnotequal;", "" ] -[ "aggr", "anyequal", "pattern aggr.anyequal(X_1:any_1, X_2:any_1):bit ", "CMDvarEQ;","" ] -[ "aggr", "anyequal", "pattern aggr.anyequal(X_1:bat[:any_1], X_2:bat[:any_1]):bit ", "SQLanyequal;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:bte], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:dbl], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:flt], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:int], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:lng], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_1:bat[:sht], X_2:bat[:oid], X_3:bat[:any_1], X_4:int):bat[:dbl] ", "AGGRavg14_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:bte], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:dbl], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:flt], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:int], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:lng], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:sht], X_3:bat[:oid], X_4:bat[:any_1]) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg23_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:bte], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg24_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:dbl], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg24_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:flt], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg24_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:int], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg24_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:lng], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]) ", "AGGRavg24_dbl;", "" ] -[ "aggr", "avg", "command aggr.avg(X_2:bat[:sht], X_3:bat[:oid], X_4:bat[:any_1], X_5:int) (X_0:bat[:dbl], X_1:bat[:lng]
monetdb-java: default - Implemented PreparedStatement.toString()...
Changeset: b9f82064fe0c for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=b9f82064fe0c Modified Files: ChangeLog src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java tests/JDBC_API_Tester.java Branch: default Log Message: Implemented PreparedStatement.toString() as requested by https://github.com/MonetDB/monetdb-java/issues/8 diffs (130 lines): diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,10 @@ # This file is updated with Maddlog * Wed Mar 3 2021 Martin van Dinther +- Implemented PreparedStatement.toString() as requested by + https://github.com/MonetDB/monetdb-java/issues/8 + +* Wed Mar 3 2021 Martin van Dinther - Implemented fix for released monetdb-jdbc-3.0.jre8.jar and monetdb-mcl-1.19.jre8.jar when it is was run using java build 1.8.0_###. It would throw: java.lang.NoSuchMethodError: diff --git a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java --- a/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java +++ b/src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java @@ -62,12 +62,13 @@ import java.util.Map; * * @author Fabian Groffen * @author Martin van Dinther - * @version 0.6 + * @version 0.7 */ public class MonetPreparedStatement extends MonetStatement implements PreparedStatement, AutoCloseable { + private final String sqlStatement; private final String[] monetdbType; private final int[] javaType; private final int[] digits; @@ -124,6 +125,7 @@ public class MonetPreparedStatement if (!super.execute("PREPARE " + prepareQuery)) throw new SQLException("Unexpected server response", "M0M10"); + sqlStatement = prepareQuery; // cheat a bit to get the ID and the number of columns id = ((MonetConnection.ResultSetResponse)header).id; size = (int)((MonetConnection.ResultSetResponse)header).tuplecount; @@ -2716,6 +2718,23 @@ public class MonetPreparedStatement close(); } + /** +* @return the prepared SQL statement including parameter types and parameter values that were already set. +*/ + public String toString​() { + final StringBuilder sb = new StringBuilder(256); + sb.append("Prepared SQL: ").append(sqlStatement).append("\n"); + int param = 1; + for (int i = 0; i < size; i++) { + /* when column[i] == null it is a parameter, when column[i] != null it is a result column of the prepared query */ + if (column[i] == null) { + sb.append(" parameter ").append(param++).append(" ").append(monetdbType[i]); + sb.append(", set value: ").append((values[i] != null) ? values[i] : "").append("\n"); + } + } + return sb.toString(); + } + //== Java 1.8 methods (JDBC 4.2) @Override @@ -2799,6 +2818,7 @@ public class MonetPreparedStatement return buf.toString(); } + /** * Small helper method that formats the "Invalid Parameter Index number ..." message * and creates a new SQLDataException object whose SQLState is set diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java --- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -1003,6 +1003,7 @@ final public class JDBC_API_Tester { pstmt.executeBatch(); sb.append(" passed\n"); + sb.append(pstmt.toString());// test showing prepared statement sb.append("2b. closing PreparedStatement..."); pstmt.close(); @@ -1058,6 +1059,11 @@ final public class JDBC_API_Tester { "0. false false\n" + "1. creating test table...success\n" + "2a. inserting 3 records as batch... passed\n" + + "Prepared SQL: INSERT INTO table_Test_PSgetObject (ti,si,i,bi) VALUES (?,?,?,?)\n" + + " parameter 1 tinyint, set value: -127\n" + + " parameter 2 smallint, set value: -12700\n" + + " parameter 3 int, set value: -127\n" + + " parameter 4 bigint, set value: -12700\n" + "2b. closing PreparedStatement... passed\n" + "3a. selecting records... passed\n" + " Retrieved row data: ti=-127 si=-12700 i=-127 bi=-12700\n" + @@ -1297,6 +1303,7 @@ final public class JDBC_API_Tester { PreparedStatement pstmt = null; try { pstmt = con.prepareStatement("SELECT CA
MonetDB: Oct2020 - Approve header changes.
Changeset: b943e7ced527 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b943e7ced527 Modified Files: sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.int128 Branch: Oct2020 Log Message: Approve header changes. diffs (144 lines): diff --git a/sql/test/emptydb/Tests/check.stable.out b/sql/test/emptydb/Tests/check.stable.out --- a/sql/test/emptydb/Tests/check.stable.out +++ b/sql/test/emptydb/Tests/check.stable.out @@ -3628,7 +3628,7 @@ drop function pcre_replace(string, strin [ "sys.db_user_info", ".snapshot","Snapshot User","sys" ] [ "sys.db_user_info", "monetdb", "MonetDB Admin","sys" ] #select 'function used by function', s1.name, f1.name, s2.name, f2.name, dt.dependency_type_name from sys.dependencies d left outer join sys.dependency_types dt on d.depend_type = dt.dependency_type_id, sys.functions f1, sys.functions f2, sys.schemas s1, sys.schemas s2 where d.id = f1.id and d.depend_id = f2.id and f1.schema_id = s1.id and f2.schema_id = s2.id order by s2.name, f2.name, s1.name, f1.name; -% .%1, sys.s1, sys.f1, sys.s2, sys.f2, .dt # table_name +% .%1, sys.s1, sys.f1, .s2,.f2,.dt # table_name % %1, name, name, name, name, dependency_type_name # name % char,varchar,varchar,varchar,varchar, varchar # type % 25, 3, 17, 3, 13, 8 # length @@ -3639,7 +3639,7 @@ drop function pcre_replace(string, strin [ "function used by function", "sys", "internaltransform","sys", "st_transform", "FUNCTION" ] [ "function used by function", "sys", "st_srid", "sys", "st_transform", "FUNCTION" ] #select 'table used by function', s1.name, t.name, s2.name, f.name, dt.dependency_type_name from sys.dependencies d left outer join sys.dependency_types dt on d.depend_type = dt.dependency_type_id, sys._tables t, sys.schemas s1, sys.functions f, sys.schemas s2 where d.id = t.id and d.depend_id = f.id and t.schema_id = s1.id and f.schema_id = s2.id order by s2.name, f.name, s1.name, t.name; -% .%1, sys.s1, sys.t, sys.s2, sys.f, .dt # table_name +% .%1, sys.s1, sys.t, .s2,.f, .dt # table_name % %1, name, name, name, name, dependency_type_name # name % char,varchar,varchar,varchar,varchar, varchar # type % 22, 3, 17, 3, 16, 9 # length @@ -3652,7 +3652,7 @@ drop function pcre_replace(string, strin [ "table used by function","sys", "storagemodelinput","sys", "storagemodelinit", "PROCEDURE" ] [ "table used by function","sys", "tables", "sys", "storagemodelinit", "PROCEDURE" ] #select 'column used by function', s1.name, t.name, c.name, s2.name, f.name, dt.dependency_type_name from sys.dependencies d left outer join sys.dependency_types dt on d.depend_type = dt.dependency_type_id, sys._columns c, sys._tables t, sys.schemas s1, sys.functions f, sys.schemas s2 where d.id = c.id and d.depend_id = f.id and c.table_id = t.id and t.schema_id = s1.id and f.schema_id = s2.id order by s2.name, f.name, s1.name, t.name, c.name; -% .%1, sys.s1, sys.t, sys.c, sys.s2, sys.f, .dt # table_name +% .%1, sys.s1, sys.t, sys.c, .s2,.f, .dt # table_name % %1, name, name, name, name, name, dependency_type_name # name % char,varchar,varchar,varchar,varchar, varchar,varchar # type % 23, 3, 17, 13, 3, 16, 9 # length @@ -4295,7 +4295,7 @@ drop function pcre_replace(string, strin [ "column used by index", "sys", "table_types", "table_type_id", "sys", "table_types", "table_types_table_type_id_pkey", "INDEX" ] [ "column used by index", "sys", "table_types", "table_type_name", "sys", "table_types", "table_types_table_type_name_unique", "INDEX" ] #select 'type used by function', t.systemname, t.sqlname, s.name, f.name, dt.dependency_type_name from sys.dependencies d left outer join sys.dependency_types dt on d.depend_type = dt.dependency_type_id, sys.types t, sys.functions f, sys.schemas s where d.id = t.id and d.depend_id = f.id and f.schema_id = s.id order by s.name, f.name, t.systemname, t.sqlname; -% .%1, sys.t, sys.t, sys.s, sys.f, .dt # table_name +% .%1, sys.t, sys.t, .s, .f, .dt # table_name % %1, systemname, sqlname,name, name, dependency_type_name # name % char,varchar,varchar,varchar,varchar, varchar # type % 21, 4, 4, 4, 18, 4 # length @@ -4509,7 +4509,7 @@ drop function pcre_replace(string, strin [ "grant on table","value_partitions", "public", "SELECT", NULL, 0 ] [ "grant on table","var_values", "public", "SELECT", "monetdb", 0 ] #select 'grant on column', t.name, c.na
MonetDB: default - Improve and approve upgrades.
Changeset: c0593fb16b19 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0593fb16b19 Modified Files: sql/backends/monet5/sql_upgrades.c sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/emptydb-upgrade/Tests/upgrade.stable.out sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128 sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.int128 sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128 sql/test/testdb-upgrade/Tests/upgrade.stable.out sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128 Branch: default Log Message: Improve and approve upgrades. diffs (truncated from 9 to 300 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2374,6 +2374,28 @@ sql_update_default(Client c, mvc *sql, c pos = snprintf(buf, bufsize, "set schema \"sys\";\n"); + /* 20_vacuum.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "drop procedure sys.shrink(string, string);\n" + "drop procedure sys.reuse(string, string);\n" + "drop procedure sys.vacuum(string, string);\n"); + + /* 25_debug.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "drop procedure sys.flush_log();\n"); + + /* 41_json.sql */ + pos += snprintf(buf + pos, bufsize - pos, + "drop function json.isobject(string);\n" + "drop function json.isarray(string);\n" + "drop function json.isvalid(json);\n" + "create function json.isvalid(js json)\n" + "returns bool begin return true; end;\n" + "grant execute on function json.isvalid(json) to public;\n" + "update sys.functions set system = true" + " where schema_id = (select id from sys.schemas where name = 'json')" + " and name = 'isvalid';\n"); + /* 51_sys_schema_extensions, remove stream table entries and update window function description */ pos += snprintf(buf + pos, bufsize - pos, "ALTER TABLE sys.keywords SET READ WRITE;\n" @@ -3113,7 +3135,7 @@ sql_update_default(Client c, mvc *sql, c "SET M = (SELECT MAX(c.id) FROM sys.columns c, sys.tables t WHERE c.table_id = t.id AND t.name = tbl);\n" "\n" "WHILE (k < M) DO\n" - "SET k = (SELECT MIN(c.id) FROM sys.columns c, tables t WHERE c.table_id = t.id AND t.name = tbl AND c.id > k);\n" + "SET k = (SELECT MIN(c.id) FROM sys.columns c, sys.tables t WHERE c.table_id = t.id AND t.name = tbl AND c.id > k);\n" "SET cname = (SELECT c.name FROM sys.columns c WHERE c.id = k);\n" "SET ctype = (SELECT c.type FROM sys.columns c WHERE c.id = k);\n" "SET COPY_INTO_STMT = (COPY_INTO_STMT || ', ' || sys.DQ(cname));\n" diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 --- a/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 +++ b/sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128 @@ -2,4208 +2,4222 @@ Running database upgrade commands: set schema "sys"; delete from sys.dependencies where id < 2000; delete from sys.types where id < 2000; -insert into sys.types values (0, 'void', 'any', 0, 0, 0
MonetDB: default - Enable upgrades.
Changeset: 220290c47531 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=220290c47531 Modified Files: sql/storage/bat/bat_logger.c Branch: default Log Message: Enable upgrades. diffs (14 lines): diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c --- a/sql/storage/bat/bat_logger.c +++ b/sql/storage/bat/bat_logger.c @@ -28,10 +28,6 @@ bl_preversion(sqlstore *store, int oldve { (void)newversion; -/* disable upgrades for now */ - if (oldversion < 52300) - return GDK_FAIL; - #ifdef CATALOG_JUN2020 if (oldversion == CATALOG_JUN2020) { /* upgrade to default releases */ ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - When adding to a system table, we need to add...
Changeset: 516c09d14eb2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=516c09d14eb2 Modified Files: sql/storage/bat/bat_logger.c Branch: default Log Message: When adding to a system table, we need to add to the deletes too. diffs (45 lines): diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c --- a/sql/storage/bat/bat_logger.c +++ b/sql/storage/bat/bat_logger.c @@ -1403,7 +1403,7 @@ upgrade(old_logger *lg) continue; if (delidx >= 0) { BAT *d = temp_descriptor(old_logger_find_bat(lg, delname, 0, 0)); - BAT *m = BATconstant(0, TYPE_msk, &(msk){0}, BATcount(b), PERSISTENT); + BAT *m = BATconstant(0, TYPE_msk, &(msk){false}, BATcount(b), PERSISTENT); if (m == NULL) { bat_destroy(d); bat_destroy(m); @@ -1590,7 +1590,7 @@ upgrade(old_logger *lg) tbid = bids[o - lg->lg->catalog_bid->hseqbase]; b = temp_descriptor(tbid); BAT *bn; - bn = BATconstant(0, TYPE_msk, &(msk){0}, len, PERSISTENT); + bn = BATconstant(0, TYPE_msk, &(msk){false}, len, PERSISTENT); if (b == NULL || bn == NULL) { bat_destroy(b); bat_destroy(bn); @@ -1665,6 +1665,7 @@ bl_postversion(void *Store, old_logger * BBPretain(sem->batCacheid); /* yep, twice */ bat_destroy(sem); if (tabins(lg, old_lg, tabins_first, -1, 0, + 2076, &(msk) {false},/* sys._columns */ 2077, &(int) {2162}, /* sys._columns.id */ 2078, "semantics", /* sys._columns.name */ 2079, "boolean", /* sys._columns.type */ @@ -1816,6 +1817,7 @@ bl_postversion(void *Store, old_logger * if (store->catalog_version <= CATALOG_OCT2020) { /* add sub column to "objects" table. This is required for merge tables */ if (tabins(lg, old_lg, tabins_first, -1, 0, + 2076, &(msk) {false},/* sys._columns */ 2077, &(int) {2163}, /* sys._columns.id */ 2078, "sub", /* sys._columns.name */ 2079, "int", /* sys._columns.type */ @@ -1830,6 +1832,7 @@ bl_postversion(void *Store, old_logger * return GDK_FAIL; tabins_first = false; if (tabins(lg, old_lg, tabins_first, -1, 0, + 2076, &(msk) {false},/* sys._columns */ 2077, &(int) {2164}, /* sys._columns.id */ 2078, "sub", /* sys._columns.name */ 2079, "int", /* sys._columns.type */ ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Use fully qualified name (and match upgrade c...
Changeset: 8b1d5199c025 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b1d5199c025 Modified Files: sql/backends/monet5/sql_user.c Branch: default Log Message: Use fully qualified name (and match upgrade code). diffs (12 lines): diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c --- a/sql/backends/monet5/sql_user.c +++ b/sql/backends/monet5/sql_user.c @@ -290,7 +290,7 @@ monet5_create_privileges(ptr _mvc, sql_s t = mvc_init_create_view(m, s, "users", "create view sys.users as select u.\"name\" as \"name\", " "ui.\"fullname\", ui.\"default_schema\", " - "ui.\"schema_path\" from db_users() as u " + "ui.\"schema_path\" from sys.db_users() as u " "left join \"sys\".\"db_user_info\" as ui " "on u.\"name\" = ui.\"name\";"); if (!t) { ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Administer change of bat for sys.objects.nr.
Changeset: 24c03c16a919 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24c03c16a919 Modified Files: sql/storage/bat/bat_logger.c Branch: default Log Message: Administer change of bat for sys.objects.nr. diffs (29 lines): diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c --- a/sql/storage/bat/bat_logger.c +++ b/sql/storage/bat/bat_logger.c @@ -1890,14 +1890,24 @@ bl_postversion(void *Store, old_logger * return GDK_FAIL; } b = COLcopy(objs_nr, objs_nr->ttype, true, PERSISTENT); + rc = BUNappend(old_lg->del, &objs_nr->batCacheid, false); bat_destroy(objs_nr); - if (b == NULL) { + if (b == NULL || rc != GDK_SUCCEED) { bat_destroy(objs_id); bat_destroy(objs_sub); bat_destroy(cands); + bat_destroy(b); return GDK_FAIL; } objs_nr = b; + if (BUNappend(old_lg->add, &objs_nr->batCacheid, false) != GDK_SUCCEED) { + bat_destroy(objs_id); + bat_destroy(objs_sub); + bat_destroy(objs_nr); + bat_destroy(cands); + return GDK_FAIL; + } + BBPretain(objs_nr->batCacheid); b = BATproject2(cands, objs_id, NULL); bat_destroy(objs_id); if (b == NULL) { ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Delay generation of MAL variable names
Changeset: 83d776ba0b5f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=83d776ba0b5f Modified Files: monetdb5/mal/mal_function.c monetdb5/mal/mal_instruction.h monetdb5/optimizer/opt_garbageCollector.c Branch: default Log Message: Delay generation of MAL variable names diffs (77 lines): diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -446,8 +446,10 @@ listFunction(stream *fd, MalBlkPtr mb, M } if ( flg == 0) return; + assert(size>=0); assert(first>=0 && first stop); + renameVariables(mb); if (flg & LIST_MAL_MAPI) { size_t len = 0; str ps; @@ -476,16 +478,18 @@ void renameVariables(MalBlkPtr mb) { int i; - /* variables get their name from the position in the symbol table */ + char *s; + + /* Temporary variables get their name from the position in the symbol table */ + /* However, also MAL input may contain temporary names. At some point you need to clean it up to avoid clashes */ + /* Certainly when you are about to print the MAL function */ /* During optimization they may be copied around, which means there name should be re-establised */ /* rename all temporaries for ease of variable table interpretation */ /* this code should not be necessary is variables always keep their position */ for( i = 0; i < mb->vtop; i++) { - if (getVarName(mb,i)[0] == 'X' && getVarName(mb,i)[1] == '_') - snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i); - else - if (getVarName(mb,i)[0] == 'C' && getVarName(mb,i)[1] == '_') - snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i); + s = getVarName(mb, i); + if( s[1] == '_' && (*s == 'C' || *s == 'X')) + snprintf(s + 2, IDLENGTH-2, "%d", i); } } @@ -493,9 +497,13 @@ void printFunction(stream *fd, MalBlkPtr { int i,j; InstrPtr p; + + // Set the used bits properly for(i=0; i< mb->vtop; i++) clrVarUsed(mb,i); + + for(i=0; i< mb->stop; i++){ p= getInstrPtr(mb,i); for(j= p->retc; jargc; j++) diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -160,9 +160,6 @@ mal_export malType getType(MalBlkPtr mb, mal_export str getArgDefault(MalBlkPtr mb, InstrPtr p, int idx); mal_export int newVariable(MalBlkPtr mb, const char *name, size_t len, malType type); mal_export int cloneVariable(MalBlkPtr dst, MalBlkPtr src, int varid); -/* generate a new variable name based on a pattern with 1 %d argument - * -- not used, but this is how to do it */ -/* #define renameVariable(mb, id, pattern, newid) snprintf(getVarName(mb,id),IDLENGTH,pattern,newid) */ mal_export void setVariableType(MalBlkPtr mb, const int idx, malType type); mal_export int newTmpVariable(MalBlkPtr mb, malType type); mal_export int newTypeVariable(MalBlkPtr mb, malType type); diff --git a/monetdb5/optimizer/opt_garbageCollector.c b/monetdb5/optimizer/opt_garbageCollector.c --- a/monetdb5/optimizer/opt_garbageCollector.c +++ b/monetdb5/optimizer/opt_garbageCollector.c @@ -40,7 +40,6 @@ OPTgarbageCollectorImplementation(Client return 0; limit = mb->stop; - renameVariables(mb); // move SQL query definition to the front for event profiling tools ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Postpone MAL variable name generation when po...
Changeset: 9f8c2981696d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f8c2981696d Modified Files: monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h Branch: default Log Message: Postpone MAL variable name generation when possible. diffs (62 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -623,7 +623,7 @@ findVariableLength(MalBlkPtr mb, const c int i; for (i = mb->vtop - 1; i >= 0; i--) { - const char *s = getVarName(mb, i); + const char *s = mb->var[i].name; if (s && strncmp(name, s, len) == 0 && s[len] == 0) return i; @@ -773,6 +773,22 @@ setVariableType(MalBlkPtr mb, const int clrVarCleanup(mb, n); } + +char * +getVarName(MalBlkPtr mb, int idx) +{ + char buf[IDLENGTH] = {0}; + char *s = mb->var[idx].name; + if( getVarKind(mb,idx) == 0) + setVarKind(mb,idx, REFMARKER); + + if( *s && s[1] != '_' && (s[0] != 'X' && s[0] != 'C')) + return s; + if ( *s == 0) + (void) snprintf(buf, IDLENGTH,"%c_%d", getVarKind(mb, idx), mb->vid++); + return s; +} + int newVariable(MalBlkPtr mb, const char *name, size_t len, malType type) { @@ -788,11 +804,11 @@ newVariable(MalBlkPtr mb, const char *na return -1; n = mb->vtop; if( name == 0 || len == 0){ - (void) snprintf(getVarName(mb,n), IDLENGTH,"%c_%d", kind, mb->vid++); + mb->var[n].name[0] = 0; } else { /* avoid calling strcpy_len since we're not interested in the * source length, and that may be very large */ - char *nme = getVarName(mb,n); + char *nme = mb->var[n].name; for (size_t i = 0; i < len; i++) nme[i] = name[i]; nme[len] = 0; diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -47,7 +47,8 @@ #define getVar(M,I)(&(M)->var[I]) #define getVarType(M,I)((M)->var[I].type) -#define getVarName(M,I)((M)->var[I].name) +mal_export char* getVarName(MalBlkPtr mb, int idx); + #define getVarKind(M,I)((M)->var[I].kind) #define getVarGDKType(M,I) getGDKType((M)->var[I].type) #define setVarType(M,I,V) ((M)->var[I].type = V) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Move the variable renaming to its logical place
Changeset: 0015b5a45265 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0015b5a45265 Modified Files: monetdb5/mal/mal_function.c monetdb5/mal/mal_function.h monetdb5/optimizer/Tests/argumenttypes.maltest monetdb5/optimizer/opt_garbageCollector.c Branch: default Log Message: Move the variable renaming to its logical place diffs (89 lines): diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c --- a/monetdb5/mal/mal_function.c +++ b/monetdb5/mal/mal_function.c @@ -471,6 +471,24 @@ listFunction(stream *fd, MalBlkPtr mb, M printInstruction(fd, mb, stk, getInstrPtr(mb, i), flg); } + +void +renameVariables(MalBlkPtr mb) +{ + int i; + /* variables get their name from the position in the symbol table */ + /* During optimization they may be copied around, which means there name should be re-establised */ + /* rename all temporaries for ease of variable table interpretation */ + /* this code should not be necessary is variables always keep their position */ + for( i = 0; i < mb->vtop; i++) { + if (getVarName(mb,i)[0] == 'X' && getVarName(mb,i)[1] == '_') + snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i); + else + if (getVarName(mb,i)[0] == 'C' && getVarName(mb,i)[1] == '_') + snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i); + } +} + void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int flg) { int i,j; diff --git a/monetdb5/mal/mal_function.h b/monetdb5/mal/mal_function.h --- a/monetdb5/mal/mal_function.h +++ b/monetdb5/mal/mal_function.h @@ -29,6 +29,7 @@ mal_export int isLoopBarrier(MalBlkPtr m mal_export int getBlockExit(MalBlkPtr mb,int pc); mal_export int getBlockBegin(MalBlkPtr mb,int pc); mal_export void setVariableScope(MalBlkPtr mb); +mal_export void renameVariables(MalBlkPtr mb); mal_export void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int flg); mal_export void traceFunction(component_t comp, MalBlkPtr mb, MalStkPtr stk, int flg); diff --git a/monetdb5/optimizer/Tests/argumenttypes.maltest b/monetdb5/optimizer/Tests/argumenttypes.maltest --- a/monetdb5/optimizer/Tests/argumenttypes.maltest +++ b/monetdb5/optimizer/Tests/argumenttypes.maltest @@ -1,8 +1,11 @@ statement ok -X:bat[:int] := bat.new(nil:int) +function foo(); +X:bat[:int] := bat.new(nil:int); +(X_115:bat[:int], X_116:bat[:oid], X_117:bat[:oid]) := algebra.sort(X:bat[:int], false:bit, false:bit, false:bit); +end foo; statement ok -(X_115:bat[:int], X_116:bat[:oid], X_117:bat[:oid]) := algebra.sort(X:bat[:int], false:bit, false:bit, false:bit) +foo() statement error (X_115:bat[:lng], X_116:bat[:oid], X_117:bat[:oid]) := algebra.sort(X:bat[:lng], false:bit, false:bit, false:bit) diff --git a/monetdb5/optimizer/opt_garbageCollector.c b/monetdb5/optimizer/opt_garbageCollector.c --- a/monetdb5/optimizer/opt_garbageCollector.c +++ b/monetdb5/optimizer/opt_garbageCollector.c @@ -22,6 +22,7 @@ * * The life time of such BATs is forcefully terminated after the block exit. */ + str OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -39,20 +40,8 @@ OPTgarbageCollectorImplementation(Client return 0; limit = mb->stop; + renameVariables(mb); - /* variables get their name from the position */ - /* rename all temporaries for ease of variable table interpretation */ - /* this code should not be necessary is variables always keep their position */ - for( i = 0; i < mb->vtop; i++) { - //strcpy(buf, getVarName(mb,i)); - if (getVarName(mb,i)[0] == 'X' && getVarName(mb,i)[1] == '_') - snprintf(getVarName(mb,i),IDLENGTH,"X_%d",i); - else - if (getVarName(mb,i)[0] == 'C' && getVarName(mb,i)[1] == '_') - snprintf(getVarName(mb,i),IDLENGTH,"C_%d",i); - //if(strcmp(buf, getVarName(mb,i)) ) - //fprintf(stderr, "non-matching name/entry %s %s\n", buf, getVarName(mb,i)); - } // move SQL query definition to the front for event profiling tools p = NULL; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Move the information on the variable type int...
Changeset: ed4a867a9d1e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ed4a867a9d1e Modified Files: monetdb5/mal/Tests/tst024.maltest monetdb5/mal/mal.h monetdb5/mal/mal_debugger.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_type.c monetdb5/optimizer/opt_remoteQueries.c Branch: default Log Message: Move the information on the variable type into its own field. A step to reduce the dependency on the MAL variable name diffs (244 lines): diff --git a/monetdb5/mal/Tests/tst024.maltest b/monetdb5/mal/Tests/tst024.maltest --- a/monetdb5/mal/Tests/tst024.maltest +++ b/monetdb5/mal/Tests/tst024.maltest @@ -1,17 +1,12 @@ statement ok -i:= 12 - -statement ok -_2:=55 - -statement ok -_3:= 23 - -statement ok -_5:=23 +function foo(); +X_5:=32; +X_5:=23; +io.print(X_5); +end foo; query T rowsort -io.print(_5) +user.foo(); 23 diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h --- a/monetdb5/mal/mal.h +++ b/monetdb5/mal/mal.h @@ -117,9 +117,10 @@ typedef struct SYMDEF { } *Symbol, SymRecord; typedef struct VARRECORD { - char id[IDLENGTH]; /* use the space for the full name */ + char name[IDLENGTH];/* use the space for the full name */ + char kind; /* Could be either _, X or C to stamp the variable type */ malType type; /* internal type signature */ -bool constant:1, + bool constant:1, typevar:1, fixedtype:1, //FREE SPOT NOW:1, diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c --- a/monetdb5/mal/mal_debugger.c +++ b/monetdb5/mal/mal_debugger.c @@ -56,11 +56,9 @@ typedef struct MDBSTATE{ static void printStackHdr(stream *f, MalBlkPtr mb, ValPtr v, int index) { - VarPtr n = getVar(mb, index); - if (v == 0 && isVarConstant(mb, index)) v = &getVarConstant(mb, index); - mnstr_printf(f, "#[%2d] %5s", index, n->id); + mnstr_printf(f, "#[%2d] %5s", index, getVarName(mb,index)); mnstr_printf(f, " (%d,%d,%d) = ", getBeginScope(mb,index), getLastUpdate(mb,index),getEndScope(mb, index)); if (v) ATOMprint(v->vtype, VALptr(v), f); @@ -592,7 +590,6 @@ mdbSetBreakRequest(Client cntxt, MalBlkP } /* the final step is to break on a variable */ i = findVariable(mb, request); - /* ignore a possible dummy TMPMARKER character */ if ( i < 0) i = findVariable(mb, request+1); if (i < 0) diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -777,6 +777,7 @@ int newVariable(MalBlkPtr mb, const char *name, size_t len, malType type) { int n; + int kind = REFMARKER; if( len >= IDLENGTH){ mb->errors = createMalException(mb,0,TYPE, "newVariable: id too long"); @@ -787,7 +788,7 @@ newVariable(MalBlkPtr mb, const char *na return -1; n = mb->vtop; if( name == 0 || len == 0){ - (void) snprintf(getVarName(mb,n), IDLENGTH,"%c%c%d", REFMARKER, TMPMARKER,mb->vid++); + (void) snprintf(getVarName(mb,n), IDLENGTH,"%c_%d", kind, mb->vid++); } else { /* avoid calling strcpy_len since we're not interested in the * source length, and that may be very large */ @@ -795,9 +796,11 @@ newVariable(MalBlkPtr mb, const char *na for (size_t i = 0; i < len; i++) nme[i] = name[i]; nme[len] = 0; + kind = nme[0]; } mb->vtop++; + setVarKind(mb, n, kind); setVariableType(mb, n, type); return n; } @@ -824,6 +827,7 @@ cloneVariable(MalBlkPtr tm, MalBlkPtr mb if (isVarCleanup(mb, x)) setVarCleanup(tm, res); getVarSTC(tm,x) = getVarSTC(mb,x); + setVarKind(tm,x, getVarKind(mb,x)); return res; } @@ -928,7 +932,7 @@ trimMalVariables_(MalBlkPtr mb, MalStkPt mb->vid = 0; for( i =0; i< cnt; i++) if( isTmpVar(mb,i)) -(void) snprintf(mb->var[i].id, IDLENGTH,"%c%c%d", REFMARKER, TMPMARKER,mb->vid++); + (void) snprintf(getVarName(mb,i), IDLENGTH,"%c_%d", getVarKind(mb,i), mb->vid++); GDKfree(alias); mb->vtop = cnt; diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h --- a/monetdb5/mal/mal_instruction.h +++ b/monetdb5/mal/mal_instruction.h @@ -45,60 +45,62 @@ #define getModName(M) getModuleId(getInstrPtr(M,0)) #define getPrgSize(M) (M)->stop -#define getVar(M,I)(&(M)->var[I]) +#define getVar(M,I)(&(M)->var[I]) #define getVarType(M,I)((M)->var[I].type) -#define getVarName(M,I)
MonetDB: default - At the moment, error messages are not tested
Changeset: 23a20cccfba9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23a20cccfba9 Modified Files: sql/test/Tests/foreign_key.test sql/test/Tests/savepoints1.test sql/test/Tests/savepoints2.test Branch: default Log Message: At the moment, error messages are not tested diffs (42 lines): diff --git a/sql/test/Tests/foreign_key.test b/sql/test/Tests/foreign_key.test --- a/sql/test/Tests/foreign_key.test +++ b/sql/test/Tests/foreign_key.test @@ -19,7 +19,7 @@ INSERT INTO maps VALUES (1, NULL, 1, 'wo statement ok INSERT INTO maps VALUES (2, 1, 1, 'world-map-1600-1700.jpg', 0, 0, 0, 0) -statement error 40002!INSERT INTO: FOREIGN KEY constraint 'maps.maps_parent_fkey' violated +statement error INSERT INTO maps VALUES (3, 10, 1, 'world-map-1600-1700.jpg', 0, 0, 0, 0) query IIIT rowsort diff --git a/sql/test/Tests/savepoints1.test b/sql/test/Tests/savepoints1.test --- a/sql/test/Tests/savepoints1.test +++ b/sql/test/Tests/savepoints1.test @@ -153,6 +153,6 @@ drop table savepointtest statement ok commit -statement error 42S02!SELECT: no such table 'savepointtest' +statement error select * from savepointtest diff --git a/sql/test/Tests/savepoints2.test b/sql/test/Tests/savepoints2.test --- a/sql/test/Tests/savepoints2.test +++ b/sql/test/Tests/savepoints2.test @@ -72,12 +72,12 @@ 7 8 9 -statement error 42000!ROLLBACK TO SAVEPOINT: no such savepoint: 'name1' +statement error rollback to savepoint name1 -statement error 25005!Current transaction is aborted (please ROLLBACK) +statement error select * from savepointtest -statement error 4!COMMIT: transaction is aborted, will ROLLBACK instead +statement error commit ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
monetdb-java: default - Implemented fix for released monetdb-jdb...
Changeset: 5ddfc0aa7f0e for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=5ddfc0aa7f0e Modified Files: ChangeLog src/main/java/org/monetdb/mcl/parser/StartOfHeaderParser.java Branch: default Log Message: Implemented fix for released monetdb-jdbc-3.0.jre8.jar and monetdb-mcl-1.19.jre8.jar when it is was run using java build 1.8.0_###. It would throw: java.lang.NoSuchMethodError: java.nio.CharBuffer.mark()Ljava/nio/CharBuffer;i at org.monetdb.mcl.parser.StartOfHeaderParser.getNextAsString(Unknown Source) at org.monetdb.jdbc.MonetConnection$ResponseList.executeQuery(Unknown Source) at org.monetdb.jdbc.MonetConnection$ResponseList.processQuery(Unknown Source) at org.monetdb.jdbc.MonetStatement.internalExecute(Unknown Source) at org.monetdb.jdbc.MonetStatement.execute(Unknown Source) The problem is caused by a change in java.nio.CharBuffer API (return types of methods mark() and reset() have changed from Buffer to CharBuffer) from Java 8 to Java 9+. diffs (51 lines): diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,22 @@ # ChangeLog file for monetdb-java # This file is updated with Maddlog +* Wed Mar 3 2021 Martin van Dinther +- Implemented fix for released monetdb-jdbc-3.0.jre8.jar and + monetdb-mcl-1.19.jre8.jar when it is was run using java build + 1.8.0_###. It would throw: java.lang.NoSuchMethodError: + java.nio.CharBuffer.mark()Ljava/nio/CharBuffer; at + org.monetdb.mcl.parser.StartOfHeaderParser.getNextAsString(Unknown + Source) at + org.monetdb.jdbc.MonetConnection$ResponseList.executeQuery(Unknown + Source) at + org.monetdb.jdbc.MonetConnection$ResponseList.processQuery(Unknown + Source) at org.monetdb.jdbc.MonetStatement.internalExecute(Unknown + Source) at org.monetdb.jdbc.MonetStatement.execute(Unknown Source) + The problem is caused by a change in java.nio.CharBuffer API (return + types of methods mark() and reset() have changed from Buffer to + CharBuffer) from Java 8 to Java 9+. + * Wed Feb 17 2021 Martin van Dinther - Compiled and released new jar files: monetdb-jdbc-3.0.jre8.jar, monetdb-mcl-1.19.jre8.jar and jdbcclient.jre8.jar diff --git a/src/main/java/org/monetdb/mcl/parser/StartOfHeaderParser.java b/src/main/java/org/monetdb/mcl/parser/StartOfHeaderParser.java --- a/src/main/java/org/monetdb/mcl/parser/StartOfHeaderParser.java +++ b/src/main/java/org/monetdb/mcl/parser/StartOfHeaderParser.java @@ -8,6 +8,7 @@ package org.monetdb.mcl.parser; +import java.nio.Buffer;// needed as some CharBuffer overridden methods (mark() and reset()) return type changed between Java 8 (return Buffer) and 9 (or higher) (return CharBuffer) import java.nio.CharBuffer; /** @@ -147,11 +148,11 @@ public final class StartOfHeaderParser { throw new MCLParseException("unexpected end of string", soh.position() - 1); int cnt = 0; - soh.mark(); + ((Buffer)soh).mark(); while (soh.hasRemaining() && soh.get() != ' ') { cnt++; } - soh.reset(); + ((Buffer)soh).reset(); return soh.subSequence(0, cnt).toString(); } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Approved output
Changeset: 55183d3b4786 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=55183d3b4786 Modified Files: sql/test/sql_dump/Tests/dump.test Branch: default Log Message: Approved output diffs (22 lines): diff --git a/sql/test/sql_dump/Tests/dump.test b/sql/test/sql_dump/Tests/dump.test --- a/sql/test/sql_dump/Tests/dump.test +++ b/sql/test/sql_dump/Tests/dump.test @@ -381,12 +381,12 @@ COMMENT ON INDEX "sys"."ind3" IS 'This COMMENT ON SEQUENCE "sys"."seq1" IS 'This is a comment on a sequence.' ; COMMENT ON WINDOW "sys"."stddev" IS 'This is a comment on a window function.' ; TRUNCATE sys.privileges; -INSERT INTO sys.privileges VALUES ((SELECT t.id FROM sys.schemas s, tables t WHERE s.id = t.schema_id AND s.name || '.' || t.name = 'sys.foo' ),(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'SELECT' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),0); -INSERT INTO sys.privileges VALUES ((SELECT c.id FROM sys.schemas s, tables t, columns c WHERE s.id = t.schema_id AND t.id = c.table_id AND s.name || '.' || t.name || '.' || c.name = 'sys.foo.i' ),(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'UPDATE' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),0); -INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1(INTEGER)' AND fqn.tpe = 'FUNCTION' ),(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),0); -INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1(INTEGER)' AND fqn.tpe = 'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),0); -INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1()' AND fqn.tpe = 'PROCEDURE' ),(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),1); -INSERT INTO sys.privileges VALUES (0,(SELECT id FROM auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM privilege_codes pc WHERE pc.privilege_code_name = 'UPDATE' ),(SELECT id FROM auths g WHERE g.name = 'monetdb' ),0); +INSERT INTO sys.privileges VALUES ((SELECT t.id FROM sys.schemas s, sys.tables t WHERE s.id = t.schema_id AND s.name || '.' || t.name = 'sys.foo' ),(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'SELECT' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),0); +INSERT INTO sys.privileges VALUES ((SELECT c.id FROM sys.schemas s, sys.tables t, sys.columns c WHERE s.id = t.schema_id AND t.id = c.table_id AND s.name || '.' || t.name || '.' || c.name = 'sys.foo.i' ),(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'UPDATE' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),0); +INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM sys.fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1(INTEGER)' AND fqn.tpe = 'FUNCTION' ),(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),0); +INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM sys.fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1(INTEGER)' AND fqn.tpe = 'PROCEDURE' ),(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),0); +INSERT INTO sys.privileges VALUES ((SELECT fqn.id FROM sys.fully_qualified_functions fqn WHERE fqn.nme = 'sys.f1()' AND fqn.tpe = 'PROCEDURE' ),(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'EXECUTE' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),1); +INSERT INTO sys.privileges VALUES (0,(SELECT id FROM sys.auths a WHERE a.name = 'voc' ),(SELECT pc.privilege_code_id FROM sys.privilege_codes pc WHERE pc.privilege_code_name = 'UPDATE' ),(SELECT id FROM sys.auths g WHERE g.name = 'monetdb' ),0); COPY 3 RECORDS INTO "sys"."tbl_with_data"("c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "c10", "c11", "c12", "c13", "c14", "c18", "c19", "c20",
MonetDB: default - This test is no longer failing
Changeset: 695489afcc2d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=695489afcc2d Modified Files: sql/test/Triggers/Tests/All Branch: default Log Message: This test is no longer failing diffs (10 lines): diff --git a/sql/test/Triggers/Tests/All b/sql/test/Triggers/Tests/All --- a/sql/test/Triggers/Tests/All +++ b/sql/test/Triggers/Tests/All @@ -7,5 +7,5 @@ trigger_activation trigger_owner triggers_schema_operations trigger_insert -KNOWNFAIL?trigger_projection +trigger_projection trigger_schema ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Merged with Oct2020
Changeset: 701eb0e24417 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=701eb0e24417 Modified Files: gdk/gdk_logger.c gdk/gdk_string.c sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_unnest.c sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-0join-query.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.test sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.test Branch: default Log Message: Merged with Oct2020 diffs (truncated from 836 to 300 lines): diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c --- a/gdk/gdk_string.c +++ b/gdk/gdk_string.c @@ -176,6 +176,46 @@ strLocate(Heap *h, const char *v) return 0; } +static inline gdk_return +checkUTF8(const char *v) +{ + if (v[0] != '\200' || v[1] != '\0') { + /* check that string is correctly encoded UTF-8; there +* was no need to do this earlier: if the string was +* found above, it must have gone through here in the +* past */ + int nutf8 = 0; + int m = 0; + for (size_t i = 0; v[i]; i++) { + if (nutf8 > 0) { + if ((v[i] & 0xC0) != 0x80 || + (m != 0 && (v[i] & m) == 0)) + goto badutf8; + m = 0; + nutf8--; + } else if ((v[i] & 0xE0) == 0xC0) { + nutf8 = 1; + if ((v[i] & 0x1E) == 0) + goto badutf8; + } else if ((v[i] & 0xF0) == 0xE0) { + nutf8 = 2; + if ((v[i] & 0x0F) == 0) + m = 0x20; + } else if ((v[i] & 0xF8) == 0xF0) { + nutf8 = 3; + if ((v[i] & 0x07) == 0) + m = 0x30; + } else if ((v[i] & 0x80) != 0) { + goto badutf8; + } + } + } + return GDK_SUCCEED; + + badutf8: + return GDK_FAIL; +} + var_t strPut(BAT *b, var_t *dst, const void *V) { @@ -221,39 +261,9 @@ strPut(BAT *b, var_t *dst, const void *V } /* the string was not found in the heap, we need to enter it */ - if (v[0] != '\200' || v[1] != '\0') { - /* check that string is correctly encoded UTF-8; there -* was no need to do this earlier: if the string was -* found above, it must have gone through here in the -* past */ - int nutf8 = 0; - int m = 0; - for (size_t i = 0; v[i]; i++) { - if (nutf8 > 0) { - if ((v[i] & 0xC0) != 0x80 || - (m != 0 && (v[i] & m) == 0)) { - badutf8: - GDKerror("incorrectly encoded UTF-8"); - return 0; - } - m = 0; - nutf8--; - } else if ((v[i] & 0xE0) == 0xC0) { - nutf8 = 1; - if ((v[i] & 0x1E) == 0) - goto badutf8; - } else if ((v[i] & 0xF0) == 0xE0) { - nutf8 = 2; - if ((v[i] & 0x0F) == 0) - m = 0x20; - } else if ((v[i] & 0xF8) == 0xF0) { - nutf8 = 3; - if ((v[i] & 0x07) == 0) - m = 0x30; - } else if ((v[i] & 0x80) != 0) { - goto badutf8; - } - } + if (checkUTF8(v) != GDK_SUCCEED) { + GDKerror("incorrectly encoded UTF-8\n"); + return 0; } pad = GDK_VARALIGN - (h->free & (GDK_VARALIGN - 1)); @@ -789,6 +799,10 @@ strWrite(const char *a, stream *s, size_ (void) cnt; assert(cnt == 1); + if (checkUTF8(a) != GDK_SUCCEED) { + GDKerror("incorrectly encoded UTF-8\
MonetDB: default - approved output
Changeset: 85e6033cdc07 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=85e6033cdc07 Modified Files: clients/Tests/exports.stable.out Branch: default Log Message: approved output diffs (12 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 @@ -16,7 +16,7 @@ BAT *BATanyequal_grp(BAT *l, BAT *r, BAT BAT *BATanyequal_grp2(BAT *l, BAT *r, BAT *rid, BAT *g, BAT *e, BAT *s); gdk_return BATappend(BAT *b, BAT *n, BAT *s, bool force) __attribute__((__warn_unused_result__)); void BATassertProps(BAT *b); -atomDesc BATatoms[]; +atomDesc BATatoms[MAXATOMS]; BAT *BATattach(int tt, const char *heapfile, role_t role); gdk_return BATbandjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, const void *c1, const void *c2, bool li, bool hi, BUN estimate) __attribute__((__warn_unused_result__)); BAT *BATcalcabsolute(BAT *b, BAT *s); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - merged
Changeset: af5901f68578 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af5901f68578 Branch: default Log Message: merged diffs (135 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -3208,36 +3208,36 @@ sql_update_default(Client c, mvc *sql, c "(\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_name = 'Function returning a table') AND\n" - "(\n" - "name = 'dump_database' OR\n" - "name = 'describe_table' OR\n" - "name = 'describe_columns' OR\n" - "name = 'describe_function'\n" + "name in (\n" + "'dump_database',\n" + "'describe_table',\n" + "'describe_columns',\n" + "'describe_function'\n" ")\n" ") OR\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_name = 'Scalar function') AND\n" - "(\n" - "name = 'sq' OR\n" - "name = 'dq' OR\n" - "name = 'fqn' OR\n" - "name = 'alter_table' OR\n" - "name = 'replace_first' OR\n" - "name = 'schema_guard' OR\n" - "name = 'get_merge_table_partition_expressions' OR\n" - "name = 'get_remote_table_expressions' OR\n" - "name = 'esc' OR\n" - "name = 'prepare_esc' OR\n" - "name = 'current_size_dump_statements' OR\n" - "name = 'describe_type'\n" + "name in (\n" + "'sq',\n" + "'dq',\n" + "'fqn',\n" + "'alter_table',\n" + "'replace_first',\n" + "'schema_guard',\n" + " 'get_merge_table_partition_expressions',\n" + " 'get_remote_table_expressions',\n" + "'esc',\n" + "'prepare_esc',\n" + " 'current_size_dump_statements',\n" + "'describe_type'\n" ")\n" ") OR\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_keyword = 'PROCEDURE') AND\n" - "(\n" - "name = 'eval' OR\n" - "name = '_dump_table_data' OR\n" - "name = 'dump_table_data'\n" + "name in (\n" + "'eval',\n" + "'_dump_table_data',\n" + "'dump_table_data'\n" ")\n" ")\n" ");\n" @@
MonetDB: default - approved output
Changeset: 9cbde54ea33a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9cbde54ea33a Modified Files: sql/test/Dependencies/Tests/dependency_owner_schema_3.test Branch: default Log Message: approved output diffs (21 lines): diff --git a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test --- a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test +++ b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test @@ -48,7 +48,7 @@ DEP_SCHEMA query TTT rowsort SELECT t.name, v.name, 'DEP_VIEW' from sys.tables as t, sys.tables as v, sys.dependencies as dep where t.id = dep.id AND v.id = dep.depend_id AND dep.depend_type = 5 AND v.type in (1, 11, 21, 31) order by t.name, v.name -564 values hashing to 2296fb6b8831002f7203b6982a75ac62 +564 values hashing to cff98513dfae81673eb5b21ca15700dc query TTT rowsort SELECT t.name, i.name, 'DEP_INDEX' from sys.tables as t, sys.idxs as i where i.table_id = t.id and i.name not in (select name from sys.keys) and t.type in (0, 10, 20, 30) order by t.name, i.name @@ -126,7 +126,7 @@ DEP_FUNC query TTT rowsort SELECT c.name, v.name, 'DEP_VIEW' from sys.columns as c, sys.tables as v, sys.dependencies as dep where c.id = dep.id AND v.id = dep.depend_id AND dep.depend_type = 5 AND v.type in (1, 11, 21, 31) order by c.name, v.name -2028 values hashing to e4d83e2392d2ba2271d72e36cf09a7ae +2028 values hashing to b6e1dda84af6e29efe27713e347cf87d query TTT rowsort SELECT c.name, k.name, 'DEP_KEY' from sys.columns as c, sys.objects as kc, sys.keys as k where kc."name" = c.name AND kc.id = k.id AND k.table_id = c.table_id AND k.rkey = -1 order by c.name, k.name ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - approved output
Changeset: 2f485f04b108 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f485f04b108 Modified Files: sql/test/Dependencies/Tests/dependency_DBobjects.test Branch: default Log Message: approved output diffs (12 lines): diff --git a/sql/test/Dependencies/Tests/dependency_DBobjects.test b/sql/test/Dependencies/Tests/dependency_DBobjects.test --- a/sql/test/Dependencies/Tests/dependency_DBobjects.test +++ b/sql/test/Dependencies/Tests/dependency_DBobjects.test @@ -352,7 +352,7 @@ DEP_FUNC dump_functions dump_database DEP_FUNC -dump_grant_user_priviledges +dump_grant_user_privileges dump_database DEP_FUNC dump_indices ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Slight change to upgrade queries.
Changeset: a91e3e0050c3 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a91e3e0050c3 Modified Files: sql/backends/monet5/sql_upgrades.c Branch: default Log Message: Slight change to upgrade queries. diffs (135 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -3208,36 +3208,36 @@ sql_update_default(Client c, mvc *sql, c "(\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_name = 'Function returning a table') AND\n" - "(\n" - "name = 'dump_database' OR\n" - "name = 'describe_table' OR\n" - "name = 'describe_columns' OR\n" - "name = 'describe_function'\n" + "name in (\n" + "'dump_database',\n" + "'describe_table',\n" + "'describe_columns',\n" + "'describe_function'\n" ")\n" ") OR\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_name = 'Scalar function') AND\n" - "(\n" - "name = 'sq' OR\n" - "name = 'dq' OR\n" - "name = 'fqn' OR\n" - "name = 'alter_table' OR\n" - "name = 'replace_first' OR\n" - "name = 'schema_guard' OR\n" - "name = 'get_merge_table_partition_expressions' OR\n" - "name = 'get_remote_table_expressions' OR\n" - "name = 'esc' OR\n" - "name = 'prepare_esc' OR\n" - "name = 'current_size_dump_statements' OR\n" - "name = 'describe_type'\n" + "name in (\n" + "'sq',\n" + "'dq',\n" + "'fqn',\n" + "'alter_table',\n" + "'replace_first',\n" + "'schema_guard',\n" + " 'get_merge_table_partition_expressions',\n" + " 'get_remote_table_expressions',\n" + "'esc',\n" + "'prepare_esc',\n" + " 'current_size_dump_statements',\n" + "'describe_type'\n" ")\n" ") OR\n" "(\n" "type = (select function_type_id from sys.function_types where function_type_keyword = 'PROCEDURE') AND\n" - "(\n" - "name = 'eval' OR\n" - "name = '_dump_table_data' OR\n" - "name = 'dump_table_data'\n" + "name in (\n" + "'eval',\n" + "'_dump_table_data',\n" + "'dump_table_data'\n" ")\n"
MonetDB: Oct2020 - Merged with Jun2020
Changeset: f9823b730e7d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f9823b730e7d Modified Files: sql/benchmarks/tpcds/Tests/40.stable.out sql/benchmarks/tpcds/Tests/40.stable.out.int128 Branch: Oct2020 Log Message: Merged with Jun2020 diffs (24 lines): diff --git a/sql/benchmarks/tpcds/Tests/40.stable.out b/sql/benchmarks/tpcds/Tests/40.stable.out --- a/sql/benchmarks/tpcds/Tests/40.stable.out +++ b/sql/benchmarks/tpcds/Tests/40.stable.out @@ -35,7 +35,7 @@ stdout of test '40` in directory 'sql/be # END) AS sales_after #FROM catalog_sales #LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number -% sys.warehouse, sys.item, ., . # table_name +% sys.warehouse, .item, ., . # table_name % w_state, i_item_id, sales_before, sales_after # name % char,char, decimal,decimal # type % 2, 16, 20, 20 # length diff --git a/sql/benchmarks/tpcds/Tests/40.stable.out.int128 b/sql/benchmarks/tpcds/Tests/40.stable.out.int128 --- a/sql/benchmarks/tpcds/Tests/40.stable.out.int128 +++ b/sql/benchmarks/tpcds/Tests/40.stable.out.int128 @@ -35,7 +35,7 @@ stdout of test '40` in directory 'sql/be # END) AS sales_after #FROM catalog_sales #LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number -% sys.warehouse, sys.item, ., . # table_name +% sys.warehouse, .item, ., . # table_name % w_state, i_item_id, sales_before, sales_after # name % char,char, decimal,decimal # type % 2, 16, 40, 40 # length ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - approved output
Changeset: e350b18ca635 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e350b18ca635 Modified Files: sql/test/Dependencies/Tests/dependency_owner_schema_3.test Branch: default Log Message: approved output diffs (12 lines): diff --git a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test --- a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test +++ b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test @@ -226,7 +226,7 @@ DEP_FUNC dump_functions dump_database DEP_FUNC -dump_grant_user_priviledges +dump_grant_user_privileges dump_database DEP_FUNC dump_indices ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Approved output
Changeset: 78498a26d715 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=78498a26d715 Modified Files: sql/benchmarks/tpcds/Tests/40.stable.out sql/benchmarks/tpcds/Tests/40.stable.out.int128 Branch: Jun2020 Log Message: Approved output diffs (24 lines): diff --git a/sql/benchmarks/tpcds/Tests/40.stable.out b/sql/benchmarks/tpcds/Tests/40.stable.out --- a/sql/benchmarks/tpcds/Tests/40.stable.out +++ b/sql/benchmarks/tpcds/Tests/40.stable.out @@ -35,7 +35,7 @@ stdout of test '40` in directory 'sql/be # END) AS sales_after #FROM catalog_sales #LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number -% sys.warehouse, sys.item, sys., sys. # table_name +% sys.warehouse, .item, sys., sys. # table_name % w_state, i_item_id, sales_before, sales_after # name % char,char, decimal,decimal # type % 2, 16, 20, 20 # length diff --git a/sql/benchmarks/tpcds/Tests/40.stable.out.int128 b/sql/benchmarks/tpcds/Tests/40.stable.out.int128 --- a/sql/benchmarks/tpcds/Tests/40.stable.out.int128 +++ b/sql/benchmarks/tpcds/Tests/40.stable.out.int128 @@ -35,7 +35,7 @@ stdout of test '40` in directory 'sql/be # END) AS sales_after #FROM catalog_sales #LEFT OUTER JOIN catalog_returns ON (cs_order_number = cr_order_number -% sys.warehouse, sys.item, sys., sys. # table_name +% sys.warehouse, .item, sys., sys. # table_name % w_state, i_item_id, sales_before, sales_after # name % char,char, decimal,decimal # type % 2, 16, 40, 40 # length ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - only don't add a change too the transactions ...
Changeset: 20b98fb8f6fe for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=20b98fb8f6fe Modified Files: sql/storage/bat/bat_storage.c Branch: default Log Message: only don't add a change too the transactions log, if the object is already added with a content change (not just on the object set) diffs (12 lines): diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -14,7 +14,7 @@ #include "gdk_atoms.h" #include "matomic.h" -#define inTransaction(tr,t) (isLocalTemp(t) || os_obj_intransaction(t->s->tables, tr, &t->base)) +#define inTransaction(tr,t) (isLocalTemp(t)) static int log_update_col( sql_trans *tr, sql_change *c); static int log_update_idx( sql_trans *tr, sql_change *c); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Oct2020 - Don't expand the cardinality on global groupi...
Changeset: 29af9dedbaf7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=29af9dedbaf7 Modified Files: sql/server/rel_unnest.c Branch: Oct2020 Log Message: Don't expand the cardinality on global groupings (I will fix the merge conflict) diffs (12 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -1761,6 +1761,8 @@ exp_reset_card_and_freevar(visitor *v, s } if (is_simple_project(rel->op) && need_distinct(rel)) /* Need distinct, all expressions should have CARD_AGGR at max */ e->card = MIN(e->card, CARD_AGGR); + if (!is_groupby(rel->op) || !list_empty(rel->r)) /* global groupings have atomic cardinality */ + rel->card = MAX(e->card, rel->card); /* the relation cardinality may get updated too */ return e; } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
monetdb-java: default - Converted and added example program SQLc...
Changeset: d7bac8d0fb93 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=d7bac8d0fb93 Modified Files: tests/JDBC_API_Tester.java Branch: default Log Message: Converted and added example program SQLcopyinto() to JDBC_API_Tester.java diffs (truncated from 1283 to 300 lines): diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java --- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -94,6 +94,7 @@ final public class JDBC_API_Tester { jt.Bug_PrepStmt_With_Errors_Jira292(); jt.BugResultSetMetaData_Bug_6183(); jt.BugSetQueryTimeout_Bug_3357(); + jt.SQLcopyinto(); jt.closeConx(jt.con); } @@ -252,7 +253,7 @@ final public class JDBC_API_Tester { stmt = con.createStatement(); // sending big script with many simple queries - sb.append("1. executing script").append("\n"); + sb.append("1. executing script\n"); stmt.execute(bigq.toString()); int i = 1; // we skip the first "getResultSet()" @@ -260,12 +261,12 @@ final public class JDBC_API_Tester { i++; } if (stmt.getUpdateCount() != -1) { - sb.append("Error: found an update count for a SELECT query").append("\n"); + sb.append("Error: found an update count for a SELECT query\n"); } if (i != size) { sb.append("Error: expecting ").append(size).append(" tuples, only got ").append(i).append("\n"); } - sb.append("2. queries processed").append("\n"); + sb.append("2. queries processed\n"); } catch (SQLException e) { sb.append("FAILED: ").append(e.getMessage()).append("\n"); } @@ -345,16 +346,16 @@ final public class JDBC_API_Tester { // test commit by checking if a change is visible in another connection sb.append("1. create... "); stmt1.executeUpdate("CREATE TABLE table_Test_Creplysize ( id int )"); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("2. populating with 21 records... "); for (int i = 0; i < 21; i++) stmt1.executeUpdate("INSERT INTO table_Test_Creplysize (id) values (" + (i + 1) + ")"); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("3. hinting the driver to use fetchsize 10... "); stmt1.setFetchSize(10); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("4. selecting all values... "); rs = stmt1.executeQuery("SELECT * FROM table_Test_Creplysize"); @@ -371,11 +372,11 @@ final public class JDBC_API_Tester { sb.append("5. resetting driver fetchsize hint... "); stmt1.setFetchSize(0); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("6. instructing the driver to return at max 10 rows... "); stmt1.setMaxRows(10); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("7. selecting all values... "); rs = stmt1.executeQuery("SELECT * FROM table_Test_Creplysize"); @@ -392,7 +393,7 @@ final public class JDBC_API_Tester { sb.append("8. hinting the driver to use fetchsize 5... "); stmt1.setFetchSize(5); - sb.append("passed").append("\n"); + sb.append("passed\n"); sb.append("9. selecting all values... "); rs = stmt1.executeQuery("SELECT * FROM table_Test_Creplysize"); @@ -409,7 +410,7 @@ final public class JDBC_API_Tester { sb.append("10. drop... "); stmt1.executeUpdate("DROP TABLE table_Test_Creplysize"); - sb.append("passed").append("\n"); + sb.append("passed\n"); con.rollback(); @@ -461,14 +462,14 @@ final public class JDBC_API_Tester { sb.append("2. savepoint..."); /* make a savepoint, and discard it */ con.setSavepoint(); - sb.append("passed").app
MonetDB: Oct2020 - Merged with Jun2020
Changeset: 5389bf9e901d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5389bf9e901d Modified Files: gdk/gdk_logger.c gdk/gdk_string.c sql/server/rel_optimizer.c sql/server/rel_rel.c 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.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: Oct2020 Log Message: Merged with Jun2020 diffs (truncated from 725 to 300 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -2898,7 +2898,7 @@ log_delta(logger *lg, BAT *uid, BAT *uva fprintf(stderr, "#Logged %s " LLFMT " inserts\n", name, l.nr); } if (ok != GDK_SUCCEED) - TRC_CRITICAL(GDK, "write failed\n"); + TRC_CRITICAL(GDK, "write failed for %s\n", name); return ok; } @@ -2946,7 +2946,7 @@ log_bat(logger *lg, BAT *b, const char * } if (ok != GDK_SUCCEED) - TRC_CRITICAL(GDK, "write failed\n"); + TRC_CRITICAL(GDK, "write failed for %s\n", name); return ok; } diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c --- a/gdk/gdk_string.c +++ b/gdk/gdk_string.c @@ -176,6 +176,46 @@ strLocate(Heap *h, const char *v) return 0; } +static inline gdk_return +checkUTF8(const char *v) +{ + if (v[0] != '\200' || v[1] != '\0') { + /* check that string is correctly encoded UTF-8; there +* was no need to do this earlier: if the string was +* found above, it must have gone through here in the +* past */ + int nutf8 = 0; + int m = 0; + for (size_t i = 0; v[i]; i++) { + if (nutf8 > 0) { + if ((v[i] & 0xC0) != 0x80 || + (m != 0 && (v[i] & m) == 0)) + goto badutf8; + m = 0; + nutf8--; + } else if ((v[i] & 0xE0) == 0xC0) { + nutf8 = 1; + if ((v[i] & 0x1E) == 0) + goto badutf8; + } else if ((v[i] & 0xF0) == 0xE0) { + nutf8 = 2; + if ((v[i] & 0x0F) == 0) + m = 0x20; + } else if ((v[i] & 0xF8) == 0xF0) { + nutf8 = 3; + if ((v[i] & 0x07) == 0) + m = 0x30; + } else if ((v[i] & 0x80) != 0) { + goto badutf8; + } + } + } + return GDK_SUCCEED; + + badutf8: + return GDK_FAIL; +} + var_t strPut(Heap *h, var_t *dst, const char *v) { @@ -219,39 +259,9 @@ strPut(Heap *h, var_t *dst, const char * } /* the string was not found in the heap, we need to enter it */ - if (v[0] != '\200' || v[1] != '\0') { - /* check that string is correctly encoded UTF-8; there -* was no need to do this earlier: if the string was -* found above, it must have gone through here in the -* past */ - int nutf8 = 0; - int m = 0; - for (size_t i = 0; v[i]; i++) { - if (nutf8 > 0) { - if ((v[i] & 0xC0) != 0x80 || - (m != 0 && (v[i] & m) == 0)) { - badutf8: - GDKerror("incorrectly encoded UTF-8"); - return 0; - } - m = 0; - nutf8--; - } else if ((v[i] & 0xE0) == 0xC0) { - nutf8 = 1; - if ((v[i] & 0x1E) == 0) - goto badutf8; - } else if ((v[i] & 0xF0) == 0xE0) { - nutf8 = 2; - if ((v[i] & 0x0F) == 0) - m = 0x20; - } else if ((v[i] & 0xF8) == 0xF0) { - nutf8 = 3; - if ((v[i] & 0x07) == 0) -
MonetDB: default - Merge with Oct2020 branch.
Changeset: 3f67a13935ea for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3f67a13935ea Modified Files: gdk/gdk_hash.c Branch: default Log Message: Merge with Oct2020 branch. diffs (truncated from 329 to 300 lines): diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c --- a/gdk/gdk_hash.c +++ b/gdk/gdk_hash.c @@ -740,8 +740,8 @@ BAThash_impl(BAT *restrict b, struct can } if ((h = GDKzalloc(sizeof(*h))) == NULL || - (h->heaplink.farmid = BBPselectfarm(b->batRole, b->ttype, hashheap)) < 0 || - (h->heapbckt.farmid = BBPselectfarm(b->batRole, b->ttype, hashheap)) < 0) { + (h->heaplink.farmid = BBPselectfarm(hascand ? TRANSIENT : b->batRole, b->ttype, hashheap)) < 0 || + (h->heapbckt.farmid = BBPselectfarm(hascand ? TRANSIENT : b->batRole, b->ttype, hashheap)) < 0) { GDKfree(h); return NULL; } diff --git a/sql/jdbc/tests/Tests/All b/sql/jdbc/tests/Tests/All --- a/sql/jdbc/tests/Tests/All +++ b/sql/jdbc/tests/Tests/All @@ -5,17 +5,5 @@ HAVE_JDBCTESTS&HAVE_HGE?Test_Int128 HAVE_JDBCCLIENT_JAR?Test_JdbcClient HAVE_JDBCCLIENT_JAR?bogus-auto-generated-keys #HAVE_JDBCTESTS?Test_PSlargeamount # scalabity test which is disabled by default (it takes a long time to run and does not need to be run everytime, only before a new release) -HAVE_JDBCTESTS?BugConcurrent_clients_SF_1504657 -HAVE_JDBCTESTS?BugConcurrent_sequences -HAVE_JDBCTESTS?BugExecuteUpdate_Bug_3350 -HAVE_JDBCTESTS?BugDatabaseMetaData_Bug_3356 -HAVE_JDBCTESTS?BugSetQueryTimeout_Bug_3357 -HAVE_JDBCTESTS?BugDecimalRound_Bug_3561 -HAVE_JDBCTESTS?BugResultSetMetaData_Bug_6183 -HAVE_JDBCTESTS?Bug_PrepStmtSetObject_CLOB_6349 -HAVE_JDBCTESTS?Bug_Connect_as_voc_getMetaData_Failure_Bug_6388 -HAVE_JDBCTESTS?Bug_LargeQueries_6571_6693 -HAVE_JDBCTESTS?Bug_IsValid_Timeout_Bug_6782 -HAVE_JDBCTESTS?Bug_PrepStmt_With_Errors_Jira292 # next test should be done AFTER all the other tests have completed HAVE_JDBCCLIENT_JAR?ValidateSystemCatalogTables diff --git a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat b/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat +++ /dev/null @@ -1,1 +0,0 @@ -@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.sh b/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.sh deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -$TSTSRCDIR/Test.SQL.sh $* diff --git a/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.bat b/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.bat +++ /dev/null @@ -1,1 +0,0 @@ -@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.sh b/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.sh deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -$TSTSRCDIR/Test.SQL.sh $* diff --git a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.bat b/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.bat +++ /dev/null @@ -1,1 +0,0 @@ -@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.sh b/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.sh deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -$TSTSRCDIR/Test.SQL.sh $* diff --git a/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.bat b/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.bat +++ /dev/null @@ -1,1 +0,0 @@ -@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.sh b/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.sh deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -$TSTSRCDIR/Test.SQL.sh $* diff --git a/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.bat b/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.bat +++ /dev/null @@ -1,1 +0,0 @@ -@call "%TSTSRCDIR%\Test.SQL.bat" %* diff --git a/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.sh b/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.sh deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -$TSTSRCDIR/Test.SQL.sh $* diff --git a/sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.SQL.bat b/sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_618
MonetDB: Oct2020 - Use same algorithm for determining IPv4/v6 in...
Changeset: 8f73d344661d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f73d344661d Modified Files: tools/merovingian/daemon/connections.c tools/merovingian/daemon/connections.h tools/merovingian/daemon/merovingian.c Branch: Oct2020 Log Message: Use same algorithm for determining IPv4/v6 in monetdbd as in mserver5. localhost/all is both v4 and v6 (or whichever is available). 127.0.0.1/0.0.0.0 is only v4. ::1/:: is only v6. hostname is whatever the system (DNS) tells us. diffs (126 lines): diff --git a/tools/merovingian/daemon/connections.c b/tools/merovingian/daemon/connections.c --- a/tools/merovingian/daemon/connections.c +++ b/tools/merovingian/daemon/connections.c @@ -25,7 +25,7 @@ #include "connections.h" err -openConnectionIP(int *socks, bool udp, bool bind_ipv6, const char *bindaddr, unsigned short port, FILE *log) +openConnectionIP(int *socks, bool udp, const char *bindaddr, unsigned short port, FILE *log) { struct addrinfo *result = NULL, *rp = NULL; int sock = -1, check = 0; @@ -35,9 +35,10 @@ openConnectionIP(int *socks, bool udp, b char host[512] = ""; int e = 0; const char *msghost = bindaddr ? bindaddr : "any"; /* for messages */ + int ipv6_vs6only = -1; struct addrinfo hints = (struct addrinfo) { - .ai_family = bind_ipv6 ? AF_INET6 : AF_INET, + .ai_family = AF_INET6, .ai_socktype = udp ? SOCK_DGRAM : SOCK_STREAM, .ai_flags = AI_PASSIVE | AI_NUMERICSERV, .ai_protocol = udp ? 0 : IPPROTO_TCP, @@ -46,6 +47,38 @@ openConnectionIP(int *socks, bool udp, b socks[0] = socks[1] = -1; + if (bindaddr == NULL || strcmp(bindaddr, "localhost") == 0) { + hints.ai_family = AF_INET6; + hints.ai_flags |= AI_NUMERICHOST; + ipv6_vs6only = 0; + bindaddr = "::1"; + strcpy_len(host, "localhost", sizeof(host)); + } else if (strcmp(bindaddr, "all") == 0) { + hints.ai_family = AF_INET6; + ipv6_vs6only = 0; + bindaddr = NULL; + } else if (strcmp(bindaddr, "::") == 0) { + hints.ai_family = AF_INET6; + ipv6_vs6only = 1; + bindaddr = NULL; + } else if (strcmp(bindaddr, "0.0.0.0") == 0) { + hints.ai_family = AF_INET; + hints.ai_flags |= AI_NUMERICHOST; + bindaddr = NULL; + } else if (strcmp(bindaddr, "::1") == 0) { + hints.ai_family = AF_INET6; + hints.ai_flags |= AI_NUMERICHOST; + ipv6_vs6only = 1; + strcpy_len(host, "localhost", sizeof(host)); + } else if (strcmp(bindaddr, "127.0.0.1") == 0) { + hints.ai_family = AF_INET; + hints.ai_flags |= AI_NUMERICHOST; + strcpy_len(host, "localhost", sizeof(host)); + } else { + hints.ai_family = AF_INET6; + ipv6_vs6only = 0; + } + for (;;) { /* max twice */ check = getaddrinfo(bindaddr, sport, &hints, &result); if (check != 0) @@ -122,9 +155,12 @@ openConnectionIP(int *socks, bool udp, b break; /* working */ } freeaddrinfo(result); - if (hints.ai_family == AF_INET6) + if (ipv6_vs6only == 0) { + ipv6_vs6only = -1; hints.ai_family = AF_INET; - else + if (bindaddr && strcmp(bindaddr, "::1") == 0) + bindaddr = "127.0.0.1"; + } else break; } diff --git a/tools/merovingian/daemon/connections.h b/tools/merovingian/daemon/connections.h --- a/tools/merovingian/daemon/connections.h +++ b/tools/merovingian/daemon/connections.h @@ -11,7 +11,7 @@ #include "merovingian.h" -err openConnectionIP(int *socks, bool udp, bool use_ipv6, const char *bindaddr, unsigned short port, FILE *log); +err openConnectionIP(int *socks, bool udp, const char *bindaddr, unsigned short port, FILE *log); err openConnectionUNIX(int *ret, const char *path, int mode, FILE *log); #endif diff --git a/tools/merovingian/daemon/merovingian.c b/tools/merovingian/daemon/merovingian.c --- a/tools/merovingian/daemon/merovingian.c +++ b/tools/merovingian/daemon/merovingian.c @@ -350,7 +350,6 @@ main(int argc, char *argv[]) FILE *oerr = NULL; int thret; bool merodontfork = false; - bool use_ipv6 = false; confkeyval ckv[] = { {"logfile", strdup("merovingian.log"), 0, STR}, {"pidfile", strdup("merovingian.pid"), 0, STR}, @@ -655,12 +654,6 @@ main(int argc, char *argv[]) } host = kv->v
MonetDB: Oct2020 - Temporary hash files go to TRANSIENT farm.
Changeset: 17edd1f2dd83 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=17edd1f2dd83 Modified Files: gdk/gdk_hash.c Branch: Oct2020 Log Message: Temporary hash files go to TRANSIENT farm. diffs (14 lines): diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c --- a/gdk/gdk_hash.c +++ b/gdk/gdk_hash.c @@ -740,8 +740,8 @@ BAThash_impl(BAT *restrict b, struct can } if ((h = GDKzalloc(sizeof(*h))) == NULL || - (h->heaplink.farmid = BBPselectfarm(b->batRole, b->ttype, hashheap)) < 0 || - (h->heapbckt.farmid = BBPselectfarm(b->batRole, b->ttype, hashheap)) < 0) { + (h->heaplink.farmid = BBPselectfarm(hascand ? TRANSIENT : b->batRole, b->ttype, hashheap)) < 0 || + (h->heapbckt.farmid = BBPselectfarm(hascand ? TRANSIENT : b->batRole, b->ttype, hashheap)) < 0) { GDKfree(h); return NULL; } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - Flag changes only when they happen
Changeset: a47f90b0b1cb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a47f90b0b1cb Modified Files: sql/server/rel_optimizer.c Branch: Jun2020 Log Message: Flag changes only when they happen diffs (35 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -1850,7 +1850,6 @@ rel_simplify_project_fk_join(mvc *sql, s return r; } - (*changes)++; /* rewrite, ie remove pkey side if possible */ le = (sql_exp*)je->l, re = (sql_exp*)je->l; @@ -1858,6 +1857,7 @@ rel_simplify_project_fk_join(mvc *sql, s if (is_semantics(je) && has_nil(le) && has_nil(re)) return r; + (*changes)++; /* if the foreign key column doesn't have NULL values, then return it */ if (!has_nil(le) || is_full(r->op) || (fk_left && is_left(r->op)) || (!fk_left && is_right(r->op))) return fk_left ? r->l : r->r; @@ -1911,7 +1911,6 @@ rel_simplify_count_fk_join(mvc *sql, sql r->r = rr; } - (*changes)++; /* rewrite, ie remove pkey side if possible */ le = (sql_exp*)je->l, re = (sql_exp*)je->l; @@ -1919,6 +1918,7 @@ rel_simplify_count_fk_join(mvc *sql, sql if (is_semantics(je) && has_nil(le) && has_nil(re)) return r; + (*changes)++; /* if the foreign key column doesn't have NULL values, then return it */ if (!has_nil(le) || is_full(r->op) || (fk_left && is_left(r->op)) || (!fk_left && is_right(r->op))) return fk_left ? r->l : r->r; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Jun2020 - If a column of an index has NULL values, set ...
Changeset: ae6674917107 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ae6674917107 Modified Files: sql/server/rel_optimizer.c sql/server/rel_rel.c 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.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.sql sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out sql/test/xquery/Tests/q01.stable.out Branch: Jun2020 Log Message: If a column of an index has NULL values, set the index as nullable. At the foreign key join simplification, if the foreign key has NULL values and the other side doesn't, then filter those out diffs (truncated from 598 to 300 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -1801,12 +1801,12 @@ rel_simplify_project_fk_join(mvc *sql, s { sql_rel *rl = r->l; sql_rel *rr = r->r; - sql_exp *je; + sql_exp *je, *le, *nje, *re; node *n; int fk_left = 1; /* check for foreign key join */ - if (!r->exps || list_length(r->exps) != 1) + if (list_length(r->exps) != 1) return r; je = r->exps->h->data; if (je && !find_prop(je->p, PROP_JOINIDX)) @@ -1851,10 +1851,23 @@ rel_simplify_project_fk_join(mvc *sql, s } (*changes)++; - /* rewrite, ie remove pkey side */ - if (fk_left) - return r->l; - return r->r; + /* rewrite, ie remove pkey side if possible */ + le = (sql_exp*)je->l, re = (sql_exp*)je->l; + + /* both have NULL and there are semantics, the join cannot be removed */ + if (is_semantics(je) && has_nil(le) && has_nil(re)) + return r; + + /* if the foreign key column doesn't have NULL values, then return it */ + if (!has_nil(le) || is_full(r->op) || (fk_left && is_left(r->op)) || (!fk_left && is_right(r->op))) + return fk_left ? r->l : r->r; + + /* remove NULL values, ie generate a select not null */ + nje = exp_compare(sql->sa, exp_ref(sql, le), exp_atom(sql->sa, atom_general(sql->sa, exp_subtype(le), NULL)), cmp_equal); + set_anti(nje); + set_has_no_nil(nje); + set_semantics(nje); + return rel_select(sql->sa, fk_left ? r->l : r->r, nje); } static sql_rel * @@ -1862,11 +1875,11 @@ rel_simplify_count_fk_join(mvc *sql, sql { sql_rel *rl = r->l; sql_rel *rr = r->r; - sql_exp *oce, *je; + sql_exp *je, *le, *nje, *re, *oce; int fk_left = 1; /* check for foreign key join */ - if (!r->exps || list_length(r->exps) != 1) + if (list_length(r->exps) != 1) return r; je = r->exps->h->data; if (je && !find_prop(je->p, PROP_JOINIDX)) @@ -1899,10 +1912,23 @@ rel_simplify_count_fk_join(mvc *sql, sql } (*changes)++; - /* rewrite, ie remove pkey side */ - if (fk_left) - return r->l; - return r->r; + /* rewrite, ie remove pkey side if possible */ + le = (sql_exp*)je->l, re = (sql_exp*)je->l; + + /* both have NULL and there are semantics, the join cannot be removed */ + if (is_semantics(je) && has_nil(le) && has_nil(re)) + return r; + + /* if the foreign key column doesn't have NULL values, then return it */ + if (!has_nil(le) || is_full(r->op) || (fk_left && is_left(r->op)) || (!fk_left && is_right(r->op))) + return fk_left ? r->l : r->r; + + /* remove NULL values, ie generate a select not null */ + nje = exp_compare(sql->sa, exp_ref(sql, le), exp_atom(sql->sa, atom_general(sql->sa, exp_subtype(le), NULL)), cmp_equal); + set_anti(nje); + set_has_no_nil(nje); + set_semantics(nje); + return rel_select(sql->sa, fk_left ? r->l : r->r, nje); } /* diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c --- a/sql/server/rel_rel.c +++ b/sql/server/rel_rel.c @@ -835,6 +835,7 @@ rel_basetable(mvc *sql, sql_table *t, co sql_idx *i = cn->data; sql_subtype *t = sql_bind_localtype("lng"); /* hash "lng" */ char *iname = NULL; + int has_nils = 0; /* do not include empty indices in the plan */ if (hash_index(i->type) && list_length(i->columns) <= 1) @@ -844,7 +845,13 @@ rel_basetable(mvc *sql, sql_table *t, co
MonetDB: Oct2020 - Removal of 12 JDBC Bug* tests which have been...
Changeset: 7d60fafbc6c0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d60fafbc6c0 Removed Files: sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.sh sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.stable.err sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.stable.out sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.bat sql/jdbc/tests/Tests/BugConcurrent_sequences.SQL.sh sql/jdbc/tests/Tests/BugConcurrent_sequences.stable.err sql/jdbc/tests/Tests/BugConcurrent_sequences.stable.out sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.bat sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.SQL.sh sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.err sql/jdbc/tests/Tests/BugDatabaseMetaData_Bug_3356.stable.out sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.bat sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.SQL.sh sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.stable.err sql/jdbc/tests/Tests/BugDecimalRound_Bug_3561.stable.out sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.bat sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.SQL.sh sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.stable.err sql/jdbc/tests/Tests/BugExecuteUpdate_Bug_3350.stable.out sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.SQL.bat sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.SQL.sh sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.stable.err sql/jdbc/tests/Tests/BugResultSetMetaData_Bug_6183.stable.out sql/jdbc/tests/Tests/BugSetQueryTimeout_Bug_3357.SQL.bat sql/jdbc/tests/Tests/BugSetQueryTimeout_Bug_3357.SQL.sh sql/jdbc/tests/Tests/BugSetQueryTimeout_Bug_3357.stable.err sql/jdbc/tests/Tests/BugSetQueryTimeout_Bug_3357.stable.out sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.SQL.bat sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.SQL.sh sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.stable.err sql/jdbc/tests/Tests/Bug_Connect_as_voc_getMetaData_Failure_Bug_6388.stable.out sql/jdbc/tests/Tests/Bug_IsValid_Timeout_Bug_6782.SQL.bat sql/jdbc/tests/Tests/Bug_IsValid_Timeout_Bug_6782.SQL.sh sql/jdbc/tests/Tests/Bug_IsValid_Timeout_Bug_6782.stable.err sql/jdbc/tests/Tests/Bug_IsValid_Timeout_Bug_6782.stable.out sql/jdbc/tests/Tests/Bug_LargeQueries_6571_6693.SQL.bat sql/jdbc/tests/Tests/Bug_LargeQueries_6571_6693.SQL.sh sql/jdbc/tests/Tests/Bug_LargeQueries_6571_6693.stable.err sql/jdbc/tests/Tests/Bug_LargeQueries_6571_6693.stable.out sql/jdbc/tests/Tests/Bug_PrepStmtSetObject_CLOB_6349.SQL.bat sql/jdbc/tests/Tests/Bug_PrepStmtSetObject_CLOB_6349.SQL.sh sql/jdbc/tests/Tests/Bug_PrepStmtSetObject_CLOB_6349.stable.err sql/jdbc/tests/Tests/Bug_PrepStmtSetObject_CLOB_6349.stable.out sql/jdbc/tests/Tests/Bug_PrepStmt_With_Errors_Jira292.SQL.bat sql/jdbc/tests/Tests/Bug_PrepStmt_With_Errors_Jira292.SQL.sh sql/jdbc/tests/Tests/Bug_PrepStmt_With_Errors_Jira292.stable.err sql/jdbc/tests/Tests/Bug_PrepStmt_With_Errors_Jira292.stable.out Modified Files: sql/jdbc/tests/Tests/All Branch: Oct2020 Log Message: Removal of 12 JDBC Bug* tests which have been converted and added to JDBC_API_Tester.java diffs (truncated from 1880 to 300 lines): diff --git a/sql/jdbc/tests/Tests/All b/sql/jdbc/tests/Tests/All --- a/sql/jdbc/tests/Tests/All +++ b/sql/jdbc/tests/Tests/All @@ -5,17 +5,5 @@ HAVE_JDBCTESTS&HAVE_HGE?Test_Int128 HAVE_JDBCCLIENT_JAR?Test_JdbcClient HAVE_JDBCCLIENT_JAR?bogus-auto-generated-keys #HAVE_JDBCTESTS?Test_PSlargeamount # scalabity test which is disabled by default (it takes a long time to run and does not need to be run everytime, only before a new release) -HAVE_JDBCTESTS?BugConcurrent_clients_SF_1504657 -HAVE_JDBCTESTS?BugConcurrent_sequences -HAVE_JDBCTESTS?BugExecuteUpdate_Bug_3350 -HAVE_JDBCTESTS?BugDatabaseMetaData_Bug_3356 -HAVE_JDBCTESTS?BugSetQueryTimeout_Bug_3357 -HAVE_JDBCTESTS?BugDecimalRound_Bug_3561 -HAVE_JDBCTESTS?BugResultSetMetaData_Bug_6183 -HAVE_JDBCTESTS?Bug_PrepStmtSetObject_CLOB_6349 -HAVE_JDBCTESTS?Bug_Connect_as_voc_getMetaData_Failure_Bug_6388 -HAVE_JDBCTESTS?Bug_LargeQueries_6571_6693 -HAVE_JDBCTESTS?Bug_IsValid_Timeout_Bug_6782 -HAVE_JDBCTESTS?Bug_PrepStmt_With_Errors_Jira292 # next test should be done AFTER all the other tests have completed HAVE_JDBCCLIENT_JAR?ValidateSystemCatalogTables diff --git a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat b/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat deleted file mode 100755 --- a/sql/jdbc/tests/Tests/BugConcurrent_clients_SF_1504657.SQL.bat +++ /dev/null @
monetdb-java: default - Converted and added Test_Int128() to JDB...
Changeset: 7147d1252828 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java?cmd=changeset;node=7147d1252828 Modified Files: tests/JDBC_API_Tester.java Branch: default Log Message: Converted and added Test_Int128() to JDBC_API_Tester.java. As it is dependent on the availability of support of datatype hugeint an extra check for hugeint is added. diffs (108 lines): diff --git a/tests/JDBC_API_Tester.java b/tests/JDBC_API_Tester.java --- a/tests/JDBC_API_Tester.java +++ b/tests/JDBC_API_Tester.java @@ -10,6 +10,7 @@ import java.sql.*; import java.io.StringReader; import java.math.BigDecimal; +import java.math.BigInteger; import java.nio.charset.Charset; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -59,7 +60,7 @@ final public class JDBC_API_Tester { jt.Test_Ctransaction(); jt.Test_Dobjects(); jt.Test_FetchSize(); - // jt.Test_Int128(); + jt.Test_Int128(); jt.Test_PSgeneratedkeys(); jt.Test_PSgetObject(); jt.Test_PSlargebatchval(); @@ -808,6 +809,87 @@ final public class JDBC_API_Tester { "ResultSet fetch size after set: 16384\n"); } + private void Test_Int128() { + sb.setLength(0);// clear the output log buffer + + Statement stmt = null; + ResultSet rs = null; + + // check first if datatype hugeint is supported on this server + boolean supportsHugeInt = false; + try { + stmt = con.createStatement(); + // query sys.types to find out if sql datatype hugeint is supported + rs = stmt.executeQuery("SELECT sqlname from sys.types where sqlname = 'hugeint';"); + if (rs != null && rs.next()) { + String sqlname = rs.getString(1); + if ("hugeint".equals(sqlname)) + supportsHugeInt = true; + } + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + + if (!supportsHugeInt) { + closeStmtResSet(stmt, rs); + compareExpectedOutput("Test_Int128", ""); + return; // skip the rest of the test + } + + // test whether we can represent a full-size int128 as JDBC results + PreparedStatement insertStatement = null; + try { + stmt.executeUpdate("CREATE TABLE HUGEINTT (I HUGEINT)"); + stmt.executeUpdate("CREATE TABLE HUGEDECT (I DECIMAL(38,19))"); + + BigInteger bi = new BigInteger("123456789012345678909876543210987654321"); + BigDecimal bd = new BigDecimal("1234567890123456789.9876543210987654321"); + + insertStatement = con.prepareStatement("INSERT INTO HUGEINTT VALUES (?)"); + insertStatement.setBigDecimal(1, new BigDecimal(bi)); + insertStatement.executeUpdate(); + insertStatement.close(); + + stmt.executeUpdate("INSERT INTO HUGEDECT VALUES (" + bd + ");"); + + rs = stmt.executeQuery("SELECT I FROM HUGEINTT"); + rs.next(); + BigInteger biRes = rs.getBigDecimal(1).toBigInteger(); + rs.close(); + sb.append("Expecting " + bi + ", got " + biRes).append("\n"); + if (!bi.equals(biRes)) { + sb.append("value of bi is NOT equal to biRes!").append("\n"); + } + + rs = stmt.executeQuery("SELECT I FROM HUGEDECT"); + rs.next(); + BigDecimal bdRes = rs.getBigDecimal(1); + rs.close(); + sb.append("Expecting " + bd + ", got " + bdRes).append("\n"); + if (!bd.equals(bdRes)) { + sb.append("value of bd is NOT equal to bdRes!").append("\n"); + } + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + + // cleanup + try { + stmt.executeUpdate("DROP TABLE IF EXISTS HUGEINTT"); + stmt.executeUpdate("DROP TABLE IF EXISTS HUGEDECT"); + sb.append("SUCCESS").append("\n"); + } catch (SQLException e) { + sb.append("FAILED: ").append(e.getMessage()).append("\n"); + } + closeStmtResSet(insertStatement, null); + clos
MonetDB: default - When dumping the BBP contents (BBPdump) dump ...
Changeset: 396bfceb1a5a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=396bfceb1a5a Modified Files: gdk/gdk_bbp.c gdk/gdk_private.h Branch: default Log Message: When dumping the BBP contents (BBPdump) dump all bats, not just cached ones. diffs (89 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1490,39 +1490,42 @@ BBPdump(void) int n = 0, nc = 0; for (i = 0; i < (bat) ATOMIC_GET(&BBPsize); i++) { - BAT *b = BBP_cache(i); - if (b == NULL) + if (BBP_refs(i) == 0 && BBP_lrefs(i) == 0) continue; + BAT *b = BBP_desc(i); fprintf(stderr, - "# %d: " ALGOBATFMT " " + "# %d: " ALGOOPTBATFMT " " "refs=%d lrefs=%d " - "status=%u", + "status=%u%s", i, - ALGOBATPAR(b), + ALGOOPTBATPAR(b), BBP_refs(i), BBP_lrefs(i), - BBP_status(i)); + BBP_status(i), + BBP_cache(i) ? "" : " not cached"); if (b->batSharecnt > 0) fprintf(stderr, " shares=%d", b->batSharecnt); if (b->batDirtydesc) fprintf(stderr, " DirtyDesc"); - if (b->theap->parentid != b->batCacheid) { - fprintf(stderr, " Theap -> %d", b->theap->parentid); - } else { - fprintf(stderr, - " Theap=[%zu,%zu,f=%d]%s", - HEAPmemsize(b->theap), - HEAPvmsize(b->theap), - b->theap->farmid, - b->theap->dirty ? "(Dirty)" : ""); - if (BBP_logical(i) && BBP_logical(i)[0] == '.') { - cmem += HEAPmemsize(b->theap); - cvm += HEAPvmsize(b->theap); - nc++; + if (b->theap) { + if (b->theap->parentid != b->batCacheid) { + fprintf(stderr, " Theap -> %d", b->theap->parentid); } else { - mem += HEAPmemsize(b->theap); - vm += HEAPvmsize(b->theap); - n++; + fprintf(stderr, + " Theap=[%zu,%zu,f=%d]%s", + HEAPmemsize(b->theap), + HEAPvmsize(b->theap), + b->theap->farmid, + b->theap->dirty ? "(Dirty)" : ""); + if (BBP_logical(i) && BBP_logical(i)[0] == '.') { + cmem += HEAPmemsize(b->theap); + cvm += HEAPvmsize(b->theap); + nc++; + } else { + mem += HEAPmemsize(b->theap); + vm += HEAPvmsize(b->theap); + n++; + } } } if (b->tvheap) { diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -280,7 +280,7 @@ BAT *virtualize(BAT *bn) b ? "[" : "", \ b ? ATOMname(b->ttype) : "",\ b ? "]" : "", \ - b ? !b->batTransient ? "P" : b->theap->parentid ? "V" : b->tvheap && b->tvheap->parentid != b->batCacheid ? "v" : "T" : "", \ + b ? !b->batTransient ? "P" : b->theap && b->theap->parentid ? "V" : b->tvheap && b->tvheap->parentid != b->batCacheid ? "v" : "T" : "", \ b ? BATtdense(b) ? "D" : b->ttype == TYPE_void && b->tvheap ? "X" : ATOMstorage(b->ttype) == TYPE_str && GDK_ELIMDOUBLES(b->tvheap) ? "E" : "" : "", \ b ? b->tsorted ? "S" : b->tnosorted ? "!s" : "" : "", \ b ? b->trevsorted ? "R" : b->tnorevsorted ? "!r" : "" : "", \ @@ -288,7 +288,7 @@ BAT *virtualize(BAT *bn) b && b->tnonil ? "N" : "", \ b && b->thash ? "H" : "", \ b && b->torderidx ? "O" : "", \ - b ? b->timprints ? "I" : b->theap->parentid && BBP_cache(b->theap->parentid)->timprints ? "(I)" : "" : "" + b ? b->timprints ? "I" : b->theap && b->theap->parentid && BBP_cache(b->theap->parent
MonetDB: default - More sys and fix type (it's "privilege", not ...
Changeset: 06685aae3a6b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=06685aae3a6b Modified Files: sql/backends/monet5/sql_upgrades.c sql/scripts/52_describe.sql sql/scripts/76_dump.sql sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.int128 Branch: default Log Message: More sys and fix type (it's "privilege", not "priviledge"). diffs (truncated from 786 to 300 lines): diff --git a/sql/backends/monet5/sql_upgrades.c b/sql/backends/monet5/sql_upgrades.c --- a/sql/backends/monet5/sql_upgrades.c +++ b/sql/backends/monet5/sql_upgrades.c @@ -2678,11 +2678,11 @@ sql_update_default(Client c, mvc *sql, c "WHERE c.table_id = t.id) col,\n" "CASE\n" "WHEN ts.table_type_name = 'REMOTE TABLE' THEN\n" - " get_remote_table_expressions(s.name, t.name)\n" + " sys.get_remote_table_expressions(s.name, t.name)\n" "WHEN ts.table_type_name = 'MERGE TABLE' THEN\n" - " get_merge_table_partition_expressions(t.id)\n" + " sys.get_merge_table_partition_expressions(t.id)\n" "WHEN ts.table_type_name = 'VIEW' THEN\n" - "schema_guard(s.name, t.name, t.query)\n" + " sys.schema_guard(s.name, t.name, t.query)\n" "ELSE\n" "''\n" "END opt\n" @@ -2745,7 +2745,7 @@ sql_update_default(Client c, mvc *sql, c "CASE WHEN a.type IS NULL THEN\n" "s.name || '.' || f.name || '()'\n" "ELSE\n" - "s.name || '.' || f.name || '(' || group_concat(describe_type(a.type, a.type_digits, a.type_scale), ',') OVER (PARTITION BY f.id ORDER BY a.number) || ')'\n" + "s.name || '.' || f.name || '(' || group_concat(sys.describe_type(a.type, a.type_digits, a.type_scale), ',') OVER (PARTITION BY f.id ORDER BY a.number) || ')'\n" "END,\n" "a.number\n" "FROM sys.schemas s, sys.function_types ft, sys.functions f LEFT JOIN sys.args a ON f.id = a.func_id\n" @@ -2906,7 +2906,7 @@ sql_update_default(Client c, mvc *sql, c "CREATE FUNCTION sys.describe_columns(schemaName string, tableName string)\n" "RETURNS TABLE(name string, type string, digits integer, scale integer, Nulls boolean, cDefault string, number integer, sqltype string, remark string)\n" "BEGIN\n" - "RETURN SELECT c.name, c.\"type\", c.type_digits, c.type_scale, c.\"null\", c.\"default\", c.number, describe_type(c.\"type\", c.type_digits, c.type_scale), com.remark\n" + "RETURN SELECT c.name, c.\"type\", c.type_digits, c.type_scale, c.\"null\", c.\"default\", c.number, sys.describe_type(c.\"type\", c.type_digits, c.type_scale), com.remark\n" "FROM sys._tables t, sys.schemas s, sys._columns c\n" "LEFT OUTER JOIN sys.comments com ON c.id = com.id\n" "WHERE c.table_id = t.id\n" @@ -2961,7 +2961,7 @@ sql_update_default(Client c, mvc *sql, c "AND ui.name <> '.snapshot'\n" "AND s.name <> 'sys';\n" "\n" - "CREATE VIEW sys.dump_grant_user_priviledges AS\n" + "CREATE VIEW sys.dump_grant_user_privileges AS\n" "SELECT\n" "'GRANT ' || sys.dq(a2.name) || ' ' || ifthenelse(a1.name = 'public', 'PUBLIC', sys.dq(a1.name)) || ';' stmt\n" "FROM sys.auths a1, sys.auths a2, sys.user_role ur\n" @@ -2996,7 +2996,7 @@ sql_update_default(Client c, mvc *sql, c
MonetDB: default - Fix some reference counting in the upgrade.
Changeset: b746bce46c2a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b746bce46c2a Modified Files: gdk/gdk_logger.c gdk/gdk_logger_old.c sql/storage/bat/bat_logger.c Branch: default Log Message: Fix some reference counting in the upgrade. diffs (truncated from 518 to 300 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1657,6 +1657,18 @@ logger_load(int debug, const char *fn, c GDKerror("cannot create type bats"); goto error; } + strconcat_len(bak, sizeof(bak), fn, "_type_id", NULL); + if (BBPrename(lg->type_id->batCacheid, bak) < 0) { + goto error; + } + strconcat_len(bak, sizeof(bak), fn, "_type_nme", NULL); + if (BBPrename(lg->type_nme->batCacheid, bak) < 0) { + goto error; + } + strconcat_len(bak, sizeof(bak), fn, "_type_nr", NULL); + if (BBPrename(lg->type_nr->batCacheid, bak) < 0) { + goto error; + } /* this is intentional - if catalog_bid is 0, force it to find * the persistent catalog */ @@ -1779,20 +1791,20 @@ logger_load(int debug, const char *fn, c lg->catalog_bid = b; lg->catalog_id = o; lg->dcatalog = d; + const log_bid *bids = (const log_bid *) Tloc(lg->catalog_bid, 0); + BATloop(lg->catalog_bid, p, q) { + bat bid = bids[p]; + oid pos = p; + + if (BBPretain(bid) == 0 && /* any bid in the catalog_bid, needs one logical ref */ + BUNfnd(lg->dcatalog, &pos) == BUN_NONE && + BUNappend(lg->dcatalog, &pos, false) != GDK_SUCCEED) + goto error; + } } BBPretain(lg->catalog_bid->batCacheid); BBPretain(lg->catalog_id->batCacheid); BBPretain(lg->dcatalog->batCacheid); - const log_bid *bids = (const log_bid *) Tloc(lg->catalog_bid, 0); - BATloop(lg->catalog_bid, p, q) { - bat bid = bids[p]; - oid pos = p; - - if (BBPretain(bid) == 0 && /* any bid in the catalog_bid, needs one logical ref */ - BUNfnd(lg->dcatalog, &pos) == BUN_NONE && - BUNappend(lg->dcatalog, &pos, false) != GDK_SUCCEED) - goto error; - } } lg->catalog_cnt = logbat_new(TYPE_lng, 1, TRANSIENT); if (lg->catalog_cnt == NULL) { diff --git a/gdk/gdk_logger_old.c b/gdk/gdk_logger_old.c --- a/gdk/gdk_logger_old.c +++ b/gdk/gdk_logger_old.c @@ -1660,8 +1660,11 @@ logger_load(const char *fn, char filenam goto error; } lg->with_ids = false; - } else if (BUNappend(lg->del, &t->batCacheid, false) != GDK_SUCCEED) - goto error; + } else { + if (BUNappend(lg->del, &t->batCacheid, false) != GDK_SUCCEED) + goto error; + BBPretain(t->batCacheid); + } strconcat_len(bak, sizeof(bak), fn, "_catalog_oid", NULL); catalog_oid = BBPindex(bak); @@ -1684,8 +1687,11 @@ logger_load(const char *fn, char filenam goto error; } lg->with_ids = false; - } else if (BUNappend(lg->del, &o->batCacheid, false) != GDK_SUCCEED) - goto error; + } else { + if (BUNappend(lg->del, &o->batCacheid, false) != GDK_SUCCEED) + goto error; + BBPretain(o->batCacheid); + } strconcat_len(bak, sizeof(bak), fn, "_dcatalog", NULL); dcatalog = BBPindex(bak); @@ -1710,17 +1716,23 @@ logger_load(const char *fn, char filenam BBPunfix(o->batCacheid); goto error; } - } else if (BUNappend(lg->del, &d->batCacheid, false) != GDK_SUCCEED) - goto error; + } else { + if (BUNappend(lg->del, &d->batCacheid, false) != GDK_SUCCEED) + goto error; + BBPretain(d->batCacheid); + } lg->catalog_bid = b; lg->catalog_nme = n; lg->catalog_tpe = t; lg->catalog_oid = o; lg->dcatalog = d; - if (BUNappend(lg->del, &b->batCacheid, false) != GDK_SUCCEED || - BUNappend(lg->del, &n->batCacheid, false) != GDK_SUCCEED) + if (BUNappend(lg->del, &b->batCacheid, false) != GDK_SUCCEED) goto error; + BBPretain(b->batCacheid); + if (BUNappend(lg->del, &n->batCacheid, false) != GDK_SUCCEED) + goto error;
MonetDB: default - Change declaration. It helps gdb.
Changeset: 369fdcc59f8b for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=369fdcc59f8b Modified Files: gdk/gdk_atoms.h Branch: default Log Message: Change declaration. It helps gdb. diffs (23 lines): diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h --- a/gdk/gdk_atoms.h +++ b/gdk/gdk_atoms.h @@ -60,7 +60,9 @@ typedef struct { void (*atomHeap) (Heap *, size_t); } atomDesc; -gdk_export atomDesc BATatoms[]; +#define MAXATOMS 128 + +gdk_export atomDesc BATatoms[MAXATOMS]; gdk_export int GDKatomcnt; gdk_export int ATOMallocate(const char *nme); @@ -75,8 +77,6 @@ gdk_export char *ATOMformat(int id, cons gdk_export void *ATOMdup(int id, const void *val); -#define MAXATOMS 128 - /* * @- maximum atomic string lengths */ ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - add simple condition reducing optimization
Changeset: d072d8dc1a41 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d072d8dc1a41 Modified Files: sql/server/rel_optimizer.c Branch: default Log Message: add simple condition reducing optimization diffs (28 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -9799,11 +9799,24 @@ rel_keep_renames(mvc *sql, sql_rel *rel) return rel; } +static int +need_optimization(sql_rel *rel) +{ + if (rel->card <= CARD_ATOM && is_simple_project(rel->op) && !rel->l) + return 0; + else if (rel->card <= CARD_ATOM && is_simple_project(rel->op)) + return need_optimization(rel->l); + return 1; +} + sql_rel * rel_optimizer(mvc *sql, sql_rel *rel, int value_based_opt, int storage_based_opt) { int level = 0, changes = 1; + if (!need_optimization(rel)) + return rel; + rel = rel_keep_renames(sql, rel); for( ;rel && level < 20 && changes; level++) rel = optimize_rel(sql, rel, &changes, level, value_based_opt, storage_based_opt); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - small improvement, ie use QUICK for some 'hin...
Changeset: 0ee21813035a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0ee21813035a Modified Files: sql/backends/monet5/sql_statement.c sql/include/sql_catalog.h sql/storage/bat/bat_storage.c sql/storage/sql_storage.h Branch: default Log Message: small improvement, ie use QUICK for some 'hint' like counts diffs (78 lines): diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -558,7 +558,7 @@ stmt_tid(backend *be, sql_table *t, int if (t && (!isRemote(t) && !isMergeTable(t)) && partition) { sql_trans *tr = be->mvc->session->tr; sqlstore *store = tr->store; - BUN rows = (BUN) store->storage_api.count_col(tr, t->columns.set->h->data, 0); + BUN rows = (BUN) store->storage_api.count_col(tr, t->columns.set->h->data, QUICK); setRowCnt(mb,getArg(q,0),rows); } @@ -625,7 +625,7 @@ stmt_bat(backend *be, sql_column *c, int sqlstore *store = tr->store; if (c && (!isRemote(c->t) && !isMergeTable(c->t))) { - BUN rows = (BUN) store->storage_api.count_col(tr, c, 0); + BUN rows = (BUN) store->storage_api.count_col(tr, c, QUICK); setRowCnt(mb,getArg(q,0),rows); } } @@ -679,7 +679,7 @@ stmt_idxbat(backend *be, sql_idx *i, int sqlstore *store = tr->store; if (i && (!isRemote(i->t) && !isMergeTable(i->t))) { - BUN rows = (BUN) store->storage_api.count_idx(tr, i, 0); + BUN rows = (BUN) store->storage_api.count_idx(tr, i, QUICK); setRowCnt(mb,getArg(q,0),rows); } } diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h --- a/sql/include/sql_catalog.h +++ b/sql/include/sql_catalog.h @@ -90,6 +90,7 @@ typedef enum sql_dependency { #define TR_NEW 1 #define RDONLY 0 +#define RD_INS 1 #define RD_UPD_ID 2 #define RD_UPD_VAL 3 #define QUICK 4 diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c --- a/sql/storage/bat/bat_storage.c +++ b/sql/storage/bat/bat_storage.c @@ -550,7 +550,7 @@ count_col(sql_trans *tr, sql_column *c, return ds?ds->cs.ucnt:0; if (access == 1) return count_inserts(d->segs->h, tr); - if (isTempTable(c->t)) + if (access == QUICK || isTempTable(c->t)) return d->segs->t?d->segs->t->end:0; return segs_end(d->segs, tr); } @@ -571,7 +571,7 @@ count_idx(sql_trans *tr, sql_idx *i, int return ds?ds->cs.ucnt:0; if (access == 1) return count_inserts(d->segs->h, tr); - if (isTempTable(i->t)) + if (access == QUICK || isTempTable(i->t)) return d->segs->t?d->segs->t->end:0; return segs_end(d->segs, tr); } diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h --- a/sql/storage/sql_storage.h +++ b/sql/storage/sql_storage.h @@ -138,9 +138,9 @@ typedef size_t (*claim_tab_fptr) (sql_tr -- count number of rows in column (excluding the deletes) -- check for sortedness */ -typedef size_t (*count_del_fptr) (sql_trans *tr, sql_table *t, int upd); -typedef size_t (*count_col_fptr) (sql_trans *tr, sql_column *c, int upd); -typedef size_t (*count_idx_fptr) (sql_trans *tr, sql_idx *i, int upd); +typedef size_t (*count_del_fptr) (sql_trans *tr, sql_table *t, int access); +typedef size_t (*count_col_fptr) (sql_trans *tr, sql_column *c, int access); +typedef size_t (*count_idx_fptr) (sql_trans *tr, sql_idx *i, int access); typedef size_t (*dcount_col_fptr) (sql_trans *tr, sql_column *c); typedef int (*prop_col_fptr) (sql_trans *tr, sql_column *c); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: default - Redundant sql.in files are not needed anymore
Changeset: 52fdcb9cdd55 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=52fdcb9cdd55 Removed Files: geom/sql/pg_regression/Tests/regress.sql.in sql/benchmarks/ATIS/Tests/one.sql.in sql/benchmarks/nobench/Tests/nobench.sql.in sql/test/BugTracker-2009/Tests/COPY_INTO_char_NULL.SF-2560780.sql.in sql/test/BugTracker-2009/Tests/parallel_bulk-load.SF-2771052.test.sql.in sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-1.sql.in sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-2.sql.in sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-3.sql.in sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-0.sql.in sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-4.sql.in sql/test/BugTracker-2012/Tests/url_script_test.Bug-2972.sql.in sql/test/BugTracker-2013/Tests/copy-into-compressed-bz2.Bug-3351.sql.in sql/test/BugTracker-2013/Tests/copy-into-compressed-gz.Bug-3351.sql.in sql/test/BugTracker-2013/Tests/copy-into-compressed.Bug-3351.sql.in sql/test/BugTracker-2013/Tests/segfault_in_aggregation.Bug-3225.sql.in sql/test/BugTracker-2015/Tests/copy_into.Bug-3813.sql.in sql/test/BugTracker-2016/Tests/malformed-copy-int.Bug-3987.sql.in sql/test/BugTracker-2016/Tests/wrong-nonil-property-with-copy-binary-into.Bug-3937.sql.in sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.sql.in sql/test/Tests/bincopycollist.sql.in sql/test/Tests/copy-from-compressed.sql.in sql/test/Tests/copy-into-fwf.sql.in sql/test/Tests/copy_into.sql.in sql/test/bugs/Tests/redirect.sql.in sql/test/json/Tests/load_twitter_data.sql.in sql/test/merge-partitions/Tests/mergepart28.sql.in sql/test/scripts/Tests/copy-into-lz4.sql.in Branch: default Log Message: Redundant sql.in files are not needed anymore diffs (truncated from 2651 to 300 lines): diff --git a/geom/sql/pg_regression/Tests/regress.sql.in b/geom/sql/pg_regression/Tests/regress.sql.in deleted file mode 100644 --- a/geom/sql/pg_regression/Tests/regress.sql.in +++ /dev/null @@ -1,282 +0,0 @@ basic datatypes (correct) - -select '1',ST_asewkt('POINT( 1 2 )') as geom; -select '2',ST_asewkt('POINT( 1 2 3)') as geom; - -select '3',ST_asewkt('LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4)') as geom; -select '4',ST_asewkt('LINESTRING( 0 0 0 , 1 1 1 , 2 2 2 , 3 3 3, 4 4 4)') as geom; -select '5',ST_asewkt('LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15)') as geom; - -select '6',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0) )') as geom; -select '7',ST_asewkt('POLYGON( (0 0 1 , 10 0 1, 10 10 1, 0 10 1, 0 0 1) )') as geom; -select '8',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5) )') as geom; -select '9',ST_asewkt('POLYGON( (0 0, 10 0, 10 10, 0 10, 0 0),(5 5, 7 5, 7 7 , 5 7, 5 5),(1 1,2 1, 2 2, 1 2, 1 1) )') as geom; -select '10',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) )') as geom; -select '11',ST_asewkt('POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) )') as geom; - -select '12',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ))'); -select '13',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 3))'); -select '14',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4))'); -select '15',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15))'); -select '16',ST_asewkt('GEOMETRYCOLLECTION(POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1 , 5 7 1, 5 5 1) ))'); -select '17',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3) )'); -select '18',ST_asewkt('GEOMETRYCOLLECTION(LINESTRING( 0 0 0, 1 1 0, 2 2 0, 3 3 0, 4 4 0),POINT( 1 2 3) )'); -select '19',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 ),LINESTRING( 0 0, 1 1, 2 2, 3 3 , 4 4) )'); -select '20',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15) )'); -select '21',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0 ),POINT( 1 2 3),LINESTRING( 1 2 3 , 4 5 6 , 7 8 9 , 10 11 12, 13 14 15),POLYGON( (0 0 0, 10 0 0, 10 10 0, 0 10 0, 0 0 0) ) )'); -select '22',ST_asewkt('GEOMETRYCOLLECTION(POINT( 1 2 0),POINT( 1 2 3),POLYGON( (0 0 1, 10 0 1, 10 10 1, 0 10 1, 0 0 1),(5 5 1, 7 5 1, 7 7 1, 5 7 1, 5 5 1),(1 1 1,2 1 1, 2 2 1, 1 2 1, 1 1 1) ) )'); - -select '23',ST_asewkt('MULTIPOINT( 1 2)') as geom; -select '24',ST_asewkt('MULTIPOINT( 1 2 3)') as geom; -select '25',ST_asewkt('MULTIPOINT( 1 2, 3 4, 5 6)') as geom; -select '26',ST_asewkt('MULTIPOINT( 1 2 3, 5 6 7, 8 9 10, 11 12 13)') as geom; -select '27',ST_asewkt('MULTIPOINT( 1 2 0, 1 2 3, 4 5 0, 6 7 8)') as geom; -select '28',ST_asewkt('MULTIPOINT( 1 2 3,4 5 0)') as geom; - -select '
MonetDB: qcancel - add test
Changeset: 2f64b8242bb9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f64b8242bb9 Modified Files: sql/test/sysmon/Tests/timeout_join.maltest Branch: qcancel Log Message: add test diffs (30 lines): diff --git a/sql/test/sysmon/Tests/timeout_join.maltest b/sql/test/sysmon/Tests/timeout_join.maltest --- a/sql/test/sysmon/Tests/timeout_join.maltest +++ b/sql/test/sysmon/Tests/timeout_join.maltest @@ -19,3 +19,26 @@ d:=t2-t1; qto:= d + 1000:lng; clients.setQryTimeoutMicro(qto); (vg_a,xg_b):=algebra.join(a,b,nil:bat,nil:bat,false,nil:lng); + + +statement error +int_a:=bat.new(:int); +int_b:=bat.new(:int); +INT_MAX := 2147483647; +dbgmsk_restore := mdb.getDebug(); +dbgmsk_unset := 8+8388608; +dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset); +dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep); +mdb.setDebug(dbgmsk_set); +t1:= alarm.usec(); +barrier j:= 0:int; +bat.append(int_a, j); + bat.append(int_b, j); + redo j:= iterator.next(1:int,100:int); +exit j; +mdb.setDebug(dbgmsk_restore); +t2:= alarm.usec(); +d:=t2-t1; +qto:= d + 1000:lng; +clients.setQryTimeoutMicro(qto); +(vg_a,xg_b):=algebra.join(int_a,int_b,nil:bat,nil:bat,false,nil:lng); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: qcancel - add cleanup callback handler
Changeset: 71025861879e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=71025861879e Modified Files: gdk/gdk.h gdk/gdk_cross.c gdk/gdk_join.c Branch: qcancel Log Message: add cleanup callback handler diffs (140 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -2115,19 +2115,29 @@ gdk_export BAT *BATsample_with_seed(BAT #define CHECK_QRY_TIMEOUT_STEP 1 -#define GDK_CHECK_TIMEOUT(timeoffset, counter) \ +#define DEFAULT_TIMEOUT_HANDLER() \ + do {\ + GDKerror("Timeout was reached!"); \ + return GDK_FAIL;\ + } while(0) + +#define GOTO_LABEL_TIMEOUT_HANDLER(label) \ + do {\ + goto label; \ + } while(0) + +#define GDK_CHECK_TIMEOUT(timeoffset, counter, callback) \ do {\ if (timeoffset) { \ if (counter > CHECK_QRY_TIMEOUT_STEP) { \ if (GDKusec() > timeoffset) { \ - GDKerror("Timeout was reached!"); \ - return GDK_FAIL;\ + callback; \ } \ counter = 0;\ } else {\ counter++; \ } \ } \ - } while (false) + } while (0) #endif /* _GDK_H_ */ diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -56,7 +56,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l for (i = 0; i < cnt1; i++) { oid x = canditer_next(&ci1); for (j = 0; j < cnt2; j++) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, DEFAULT_TIMEOUT_HANDLER()); *p++ = x; } } @@ -73,7 +73,7 @@ BATsubcross(BAT **r1p, BAT **r2p, BAT *l counter = 0; for (i = 0; i < cnt1; i++) { for (j = 0; j < cnt2; j++) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, DEFAULT_TIMEOUT_HANDLER()); *p++ = canditer_next(&ci2); } canditer_reset(&ci2); diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c --- a/gdk/gdk_join.c +++ b/gdk/gdk_join.c @@ -374,7 +374,8 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l, BUN p, q = BATcount(bn); do { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + DEFAULT_TIMEOUT_HANDLER()); for (p = 0; p < q; p++) { *o1p++ = o; } @@ -392,7 +393,8 @@ selectjoin(BAT **r1p, BAT **r2p, BAT *l, BUN p, q = BATcount(bn); do { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + DEFAULT_TIMEOUT_HANDLER()); for (p = 0; p < q; p++) { *o1p++ = o; } @@ -847,7 +849,8 @@ mergejoin_int(BAT **r1p, BAT **r2p, BAT /* from here on we don't have to worry about nil values */ while (lstart < lend && rstart < rend) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); v = rvals[rstart]; @@ -1151,7 +1154,8 @@ mergejoin_lng(BAT **r1p, BAT **r2p, BAT /* from here on we don't have to worry about nil values */ while (lstart < lend && rstart < rend) { - GDK_CHECK_TIMEOUT(timeoffset, counter); + GDK_CHECK_TIMEOUT(timeoffset, counter, + GOTO_LABEL_TIM
MonetDB: qcancel - fix test
Changeset: ecddd38a9d9c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ecddd38a9d9c Added Files: sql/test/sysmon/Tests/timeout_cross.SQL.py Removed Files: sql/test/sysmon/Tests/timeout_cp.SQL.py Modified Files: sql/test/sysmon/Tests/timeout_join.maltest Branch: qcancel Log Message: fix test diffs (61 lines): diff --git a/sql/test/sysmon/Tests/timeout_cp.SQL.py b/sql/test/sysmon/Tests/timeout_cp.SQL.py deleted file mode 100644 --- a/sql/test/sysmon/Tests/timeout_cp.SQL.py +++ /dev/null @@ -1,15 +0,0 @@ -from MonetDBtesting.sqltest import SQLTestCase - -with SQLTestCase() as tc: -tc.execute("create table foo(id bigserial, value int);").assertSucceeded() -tc.execute("create table bar(id bigserial, value int);").assertSucceeded() -# test cross product -tc.execute("insert into foo(value) (select * from generate_series(0,1));").assertSucceeded() -tc.execute("insert into bar(value) (select * from generate_series(0,1));").assertSucceeded() -tc.execute("call sys.setquerytimeout(1); select * from foo, bar;")\ -.assertFailed(err_code="HYT00", err_message="Query aborted due to timeout") -# test mergejoin_int with bigger data set -tc.execute("insert into foo(value) (select * from generate_series(0,1000));").assertSucceeded() -tc.execute("insert into bar(value) (select * from generate_series(0,1000));").assertSucceeded() -tc.execute("call sys.setquerytimeout(1); select * from foo as f join bar b on f.value=b.value;")\ -.assertFailed(err_code="HYT00", err_message="Query aborted due to timeout") diff --git a/sql/test/sysmon/Tests/timeout_cross.SQL.py b/sql/test/sysmon/Tests/timeout_cross.SQL.py new file mode 100644 --- /dev/null +++ b/sql/test/sysmon/Tests/timeout_cross.SQL.py @@ -0,0 +1,10 @@ +from MonetDBtesting.sqltest import SQLTestCase + +with SQLTestCase() as tc: +tc.execute("create table foo(id bigserial, value int);").assertSucceeded() +tc.execute("create table bar(id bigserial, value int);").assertSucceeded() +# test cross product +tc.execute("insert into foo(value) (select * from generate_series(0,1));").assertSucceeded() +tc.execute("insert into bar(value) (select * from generate_series(0,1));").assertSucceeded() +tc.execute("call sys.setquerytimeout(1); select * from foo, bar;")\ +.assertFailed(err_code="HYT00", err_message="Query aborted due to timeout") diff --git a/sql/test/sysmon/Tests/timeout_join.maltest b/sql/test/sysmon/Tests/timeout_join.maltest --- a/sql/test/sysmon/Tests/timeout_join.maltest +++ b/sql/test/sysmon/Tests/timeout_join.maltest @@ -1,9 +1,21 @@ +statement error a:=bat.new(:lng); b:=bat.new(:lng); +INT_MAX := 2147483647; +dbgmsk_restore := mdb.getDebug(); +dbgmsk_unset := 8+8388608; +dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset); +dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep); +mdb.setDebug(dbgmsk_set); +t1:= alarm.usec(); barrier i:= 0:lng; bat.append(a, i); bat.append(b, i); redo i:= iterator.next(1:lng,100:lng); exit i; -clients.setquerytimeout(1); +mdb.setDebug(dbgmsk_restore); +t2:= alarm.usec(); +d:=t2-t1; +qto:= d + 1000:lng; +clients.setQryTimeoutMicro(qto); (vg_a,xg_b):=algebra.join(a,b,nil:bat,nil:bat,false,nil:lng); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: qcancel - add mal timeout func in microseconds
Changeset: 08e663655645 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=08e663655645 Modified Files: monetdb5/modules/mal/clients.c Branch: qcancel Log Message: add mal timeout func in microseconds diffs (53 lines): diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c --- a/monetdb5/modules/mal/clients.c +++ b/monetdb5/modules/mal/clients.c @@ -466,7 +466,7 @@ CLTsetTimeout(Client cntxt, MalBlkPtr mb return msg; } -/* set session time out based in seconds, converted into microseconds */ +/* set query timeout based in seconds, converted into microseconds */ static str CLTqueryTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -509,6 +509,32 @@ CLTqueryTimeout(Client cntxt, MalBlkPtr return msg; } +// set query timeout based in microseconds +static str +CLTqueryTimeoutMicro(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ + str msg = MAL_SUCCEED; + int idx = cntxt->idx; + lng qto = *getArgReference_lng(stk,pci,1); + (void) mb; + + if (is_lng_nil(qto)) + throw(MAL,"clients.queryTimeout","Query timeout cannot be NULL"); + if( qto < 0) + throw(MAL,"clients.queryTimeout","Query timeout should be >= 0"); + + MT_lock_set(&mal_contextLock); + if (mal_clients[idx].mode == FREECLIENT) + msg = createException(MAL,"clients.queryTimeout","Session not active anymore"); + else { + mal_clients[idx].querytimeout = qto; + QryCtx *qry_ctx = MT_thread_get_qry_ctx(); + qry_ctx->querytimeout = qto; + } + MT_lock_unset(&mal_contextLock); + return msg; +} + /* Set the current session timeout in seconds */ static str CLTsessionTimeout(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) @@ -989,6 +1015,7 @@ mel_func clients_init_funcs[] = { pattern("clients", "setsession", CLTsetSessionTimeout, false, "Abort a session after n seconds.", args(1,2, arg("",void),arg("n",lng))), pattern("clients", "settimeout", CLTsetTimeout, false, "Abort a query after n seconds.", args(1,2, arg("",void),arg("n",lng))), pattern("clients", "settimeout", CLTsetTimeout, false, "Abort a query after q seconds (q=0 means run undisturbed).\nThe session timeout aborts the connection after spending too\nmany seconds on query processing.", args(1,3, arg("",void),arg("q",lng),arg("s",lng))), + pattern("clients", "setQryTimeoutMicro", CLTqueryTimeoutMicro, false, "", args(1,2, arg("",void),arg("n",lng))), pattern("clients", "setquerytimeout", CLTqueryTimeout, false, "", args(1,2, arg("",void),arg("n",int))), pattern("clients", "setquerytimeout", CLTqueryTimeout, false, "", args(1,3, arg("",void),arg("sid",bte),arg("n",int))), pattern("clients", "setquerytimeout", CLTqueryTimeout, false, "", args(1,3, arg("",void),arg("sid",sht),arg("n",int))), ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list