MonetDB: Dec2023 - add more errors for different bison versions
Changeset: 4496d4b4f0c5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/4496d4b4f0c5 Modified Files: sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py Branch: Dec2023 Log Message: add more errors for different bison versions diffs (21 lines): diff --git a/sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py b/sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py --- a/sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py +++ b/sql/test/BugTracker-2022/Tests/incomplete-sql-script.Bug-7298.SQL.py @@ -27,7 +27,7 @@ with SQLTestCase() as tc: tf.flush() tf.seek(0) -tc.execute(None, '-fraw', client='mclient', stdin=tf).assertFailed(err_code="42000", err_message=['!syntax error, unexpected end of file, expecting SCOLON or \':\' in: "select foo."', '!syntax error in: "select foo."', '!syntax error, unexpected $end, expecting SCOLON or \':\' in: "select foo."']) +tc.execute(None, '-fraw', client='mclient', stdin=tf).assertFailed(err_code="42000", err_message=['!syntax error, unexpected end of file, expecting SCOLON or \':\' in: "select foo."', '!syntax error in: "select foo."', '!syntax error, unexpected $end, expecting SCOLON or \':\' in: "select foo."', '!syntax error, unexpected $end in: "select foo."']) tf.seek(0) tf.truncate(0) @@ -36,7 +36,7 @@ with SQLTestCase() as tc: tf.flush() tf.seek(0) -tc.execute(None, '-fraw', client='mclient', stdin=tf).assertFailed(err_code="42000", err_message=['!syntax error, unexpected end of file, expecting SCOLON or \':\' in: "select foo-"', '!syntax error in: "select foo-"', '!syntax error, unexpected $end, expecting SCOLON or \':\' in: "select foo-"']) +tc.execute(None, '-fraw', client='mclient', stdin=tf).assertFailed(err_code="42000", err_message=['!syntax error, unexpected end of file, expecting SCOLON or \':\' in: "select foo-"', '!syntax error in: "select foo-"', '!syntax error, unexpected $end, expecting SCOLON or \':\' in: "select foo-"', '!syntax error, unexpected $end in: "select foo-"']) tf.seek(0) tf.truncate(0) ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
monetdb-java: default - Improve MonetResultSetMetaData contructo...
Changeset: 4f50019b2cf8 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/4f50019b2cf8 Modified Files: src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java Branch: default Log Message: Improve MonetResultSetMetaData contructor by checking on valid arrays once, such that this does not need to be checked in methods for each result column. diffs (142 lines): diff --git a/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java b/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java --- a/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java +++ b/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java @@ -95,10 +95,26 @@ final class MonetResultSetMetaData schemas = header.getSchemaNames(); tables = header.getTableNames(); columns = header.getNames(); + types = header.getTypes(); lengths = header.getColumnLengths(); - types = header.getTypes(); precisions = header.getColumnPrecisions(); scales = header.getColumnScales(); + if (schemas == null) { + throw new IllegalArgumentException("Schemas may not be null!"); + } + if (tables == null) { + throw new IllegalArgumentException("Tables may not be null!"); + } + if (columns == null) { + throw new IllegalArgumentException("Columns may not be null!"); + } + if (types == null) { + throw new IllegalArgumentException("MonetDB Types may not be null!"); + } + if (lengths == null) { + throw new IllegalArgumentException("Lengths may not be null!"); + } + // Note: the precisions and scales arrays are null when the statement is a PLAN, EXPLAIN or TRACE statement !! colCount = columns.length; if (columns.length != tables.length || columns.length != types.length ) { @@ -394,22 +410,19 @@ final class MonetResultSetMetaData @Override public int getColumnDisplaySize(final int column) throws SQLException { checkColumnIndexValidity(column); - if (lengths != null) { - try { - int len = lengths[column - 1]; - if (len == 0) { - final String monettype = types[column - 1]; - // in case of inet it always has 0 as length. we need to correct it. - if ("inet".equals(monettype)) { - len = 18; // 128.127.126.125/24 - } + try { + int len = lengths[column - 1]; + if (len == 0) { + final String monettype = types[column - 1]; + // in case of inet it always has 0 as length. we need to correct it. + if ("inet".equals(monettype)) { + len = 18; // 128.127.126.125/24 } - return len; - } catch (IndexOutOfBoundsException e) { - throw MonetResultSet.newSQLInvalidColumnIndexException(column); } + return len; + } catch (IndexOutOfBoundsException e) { + throw MonetResultSet.newSQLInvalidColumnIndexException(column); } - return 1; } /** @@ -471,14 +484,11 @@ final class MonetResultSetMetaData @Override public String getSchemaName(final int column) throws SQLException { checkColumnIndexValidity(column); - if (schemas != null) { - try { - return schemas[column - 1]; - } catch (IndexOutOfBoundsException e) { - throw MonetResultSet.newSQLInvalidColumnIndexException(column); - } + try { + return schemas[column - 1]; + } catch (IndexOutOfBoundsException e) { + throw MonetResultSet.newSQLInvalidColumnIndexException(column); } - return ""; } /** @@ -491,14 +501,11 @@ final class MonetResultSetMetaData @Override public String getTableName(final int column) throws SQLException { checkColumnIndexValidity(column); - if (tables != null) { - try { - return tables[column - 1]; - } catch
MonetDB: default - Return all free bats from main thread to glob...
Changeset: 54eba5701f40 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/54eba5701f40 Modified Files: clients/Tests/exports.stable.out gdk/gdk_bbp.h gdk/gdk_system_private.h tools/mserver/mserver5.c Branch: default Log Message: Return all free bats from main thread to global pool. diffs (44 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 @@ -224,6 +224,7 @@ void BBPlock(void); BAT *BBPquickdesc(bat b); int BBPreadBBPline(FILE *fp, unsigned bbpversion, int *lineno, BAT *bn, int *hashash, char *batname, char *filename, char **options); int BBPrelease(bat b); +void BBPrelinquishbats(void); int BBPrename(BAT *b, const char *nme); int BBPretain(bat b); gdk_return BBPsave(BAT *b); diff --git a/gdk/gdk_bbp.h b/gdk/gdk_bbp.h --- a/gdk/gdk_bbp.h +++ b/gdk/gdk_bbp.h @@ -92,6 +92,7 @@ gdk_export int BBPrelease(bat b); gdk_export void BBPkeepref(BAT *b) __attribute__((__nonnull__(1))); gdk_export void BBPcold(bat i); +gdk_export void BBPrelinquishbats(void); #ifdef GDKLIBRARY_JSON typedef gdk_return ((*json_storage_conversion)(char **, const char **)); gdk_export gdk_return BBPjson_upgrade(json_storage_conversion); diff --git a/gdk/gdk_system_private.h b/gdk/gdk_system_private.h --- a/gdk/gdk_system_private.h +++ b/gdk/gdk_system_private.h @@ -45,5 +45,3 @@ struct freebats { }; struct freebats *MT_thread_getfreebats(void) __attribute__((__visibility__("hidden"))); -void BBPrelinquishbats(void) - __attribute__((__visibility__("hidden"))); diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c --- a/tools/mserver/mserver5.c +++ b/tools/mserver/mserver5.c @@ -849,6 +849,9 @@ main(int argc, char **av) free(err); } + /* return all our free bats to global pool */ + BBPrelinquishbats(); + #ifdef _MSC_VER printf("# MonetDB server is started. To stop server press Ctrl-C.\n"); fflush(stdout); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: default - Merge with Dec2023 branch.
Changeset: 8d38ce3d6879 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/8d38ce3d6879 Modified Files: gdk/gdk_bbp.c sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_select.c sql/storage/bat/bat_storage.c sql/storage/objectset.c sql/storage/store.c Branch: default Log Message: Merge with Dec2023 branch. diffs (truncated from 844 to 300 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -2940,7 +2940,7 @@ BBPclear(bat i) } void -BBPrelinquish(void) +BBPrelinquishbats(void) { struct freebats *t = MT_thread_getfreebats(); if (t == NULL || t->nfreebats == 0) diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -769,7 +769,7 @@ thread_starter(void *arg) (*self->thread_funcs[i].destroy)(self->thread_funcs[i].data); } free(self->thread_funcs); - BBPrelinquish(); + BBPrelinquishbats(); ATOMIC_SET(>exited, 1); TRC_DEBUG(THRD, "Exit thread \"%s\"\n", self->threadname); return 0; /* NULL for pthreads, 0 for Windows */ diff --git a/gdk/gdk_system_private.h b/gdk/gdk_system_private.h --- a/gdk/gdk_system_private.h +++ b/gdk/gdk_system_private.h @@ -45,5 +45,5 @@ struct freebats { }; struct freebats *MT_thread_getfreebats(void) __attribute__((__visibility__("hidden"))); -void BBPrelinquish(void) +void BBPrelinquishbats(void) __attribute__((__visibility__("hidden"))); diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -210,9 +210,9 @@ base_init(sql_allocator *sa, sql_base * *b = (sql_base) { .id = id, .new = isnew, - .refcnt = 1, .name = (name) ? SA_STRDUP(sa, name) : NULL, }; + ATOMIC_INIT(>refcnt, 1); } void 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 @@ -195,8 +195,8 @@ typedef void *sql_store; typedef struct sql_base { unsigned int new:1, - deleted:1, - refcnt:30; + deleted:1; + ATOMIC_TYPE refcnt; sqlid id; char *name; } sql_base; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1306,7 +1306,7 @@ rel_column_ref(sql_query *query, sql_rel sql_rel *gp = inner; while (gp && is_select(gp->op)) gp = gp->l; - if (gp && gp->l && !(exp = rel_bind_column(sql, gp->l, name, f, 0)) && sql->session->status == -ERR_AMBIGUOUS) + if (gp && !is_basetable(gp->op) && gp->l && !(exp = rel_bind_column(sql, gp->l, name, f, 0)) && sql->session->status == -ERR_AMBIGUOUS) return NULL; } if (!exp && query && query_has_outer(query)) { @@ -1402,7 +1402,7 @@ rel_column_ref(sql_query *query, sql_rel sql_rel *gp = inner; while (gp && is_select(gp->op)) gp = gp->l; - if (gp && gp->l && !(exp = rel_bind_column3(sql, gp->l, sname, tname, cname, f)) && sql->session->status == -ERR_AMBIGUOUS) + if (gp && !is_basetable(gp->op) && gp->l && !(exp = rel_bind_column3(sql, gp->l, sname, tname, cname, f)) && sql->session->status == -ERR_AMBIGUOUS) return NULL; } if (!exp && query && query_has_outer(query)) { 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 @@ -36,8 +36,8 @@ static int commit_create_del(sql_trans * static int tc_gc_col( sql_store Store, sql_change *c, ulng oldest); static int tc_gc_idx( sql_store Store, sql_change *c, ulng oldest); static int tc_gc_del( sql_store Store, sql_change *c, ulng oldest); -static int tc_gc_drop_col( sql_store Store, sql_change *c, ulng oldest); -static int tc_gc_drop_idx( sql_store Store, sql_change *c, ulng oldest); +static int tc_gc_upd_col( sql_store Store, sql_change *c, ulng oldest); +static int tc_gc_upd_idx( sql_store Store, sql_change *c, ulng oldest); static void merge_delta( sql_delta *obat); @@ -120,11 +120,24 @@ unlock_column(sqlstore *store, sqlid id) MT_lock_unset(>column_locks[id&(NR_COLUMN_LOCKS-1)]); } +static void +trans_add_obj(sql_trans *tr, sql_base *b, void *data, tc_cleanup_fptr cleanup, tc_commit_fptr commit, tc_log_fptr log) +{ + assert(cleanup); + trans_add(tr, dup_base(b), data, cleanup, commit, log); +} + +static void +trans_add_table(sql_trans *tr, sql_base *b, sql_table *t, void
MonetDB: Dec2023 - Change function name (BBPrelinquish -> BBPrel...
Changeset: 3a96a9c5be87 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3a96a9c5be87 Modified Files: gdk/gdk_bbp.c gdk/gdk_system.c gdk/gdk_system_private.h Branch: Dec2023 Log Message: Change function name (BBPrelinquish -> BBPrelinquishbats). diffs (34 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -2968,7 +2968,7 @@ BBPclear(bat i) } void -BBPrelinquish(void) +BBPrelinquishbats(void) { struct freebats *t = MT_thread_getfreebats(); if (t == NULL || t->nfreebats == 0) diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -769,7 +769,7 @@ thread_starter(void *arg) (*self->thread_funcs[i].destroy)(self->thread_funcs[i].data); } free(self->thread_funcs); - BBPrelinquish(); + BBPrelinquishbats(); ATOMIC_SET(>exited, 1); TRC_DEBUG(THRD, "Exit thread \"%s\"\n", self->threadname); return 0; /* NULL for pthreads, 0 for Windows */ diff --git a/gdk/gdk_system_private.h b/gdk/gdk_system_private.h --- a/gdk/gdk_system_private.h +++ b/gdk/gdk_system_private.h @@ -45,5 +45,5 @@ struct freebats { }; struct freebats *MT_thread_getfreebats(void) __attribute__((__visibility__("hidden"))); -void BBPrelinquish(void) +void BBPrelinquishbats(void) __attribute__((__visibility__("hidden"))); ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: Dec2023 - added refcounting during change creation/dest...
Changeset: 399842235c7c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/399842235c7c Modified Files: sql/common/sql_types.c sql/include/sql_catalog.h sql/server/rel_select.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_storage.h sql/storage/objectset.c sql/storage/sql_storage.h sql/storage/store.c sql/test/transactions/Tests/All Branch: Dec2023 Log Message: added refcounting during change creation/destruction in the bat_storage part. Made all refcounts atomics diffs (truncated from 810 to 300 lines): diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -164,9 +164,9 @@ base_init(sql_allocator *sa, sql_base * *b = (sql_base) { .id = id, .new = isnew, - .refcnt = 1, .name = (name) ? SA_STRDUP(sa, name) : NULL, }; + ATOMIC_INIT(>refcnt, 1); } void 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 @@ -195,8 +195,8 @@ typedef void *sql_store; typedef struct sql_base { unsigned int new:1, - deleted:1, - refcnt:30; + deleted:1; + ATOMIC_TYPE refcnt; sqlid id; char *name; } sql_base; diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1251,7 +1251,7 @@ rel_column_ref(sql_query *query, sql_rel sql_rel *gp = inner; while (gp && is_select(gp->op)) gp = gp->l; - if (gp && gp->l && !(exp = rel_bind_column(sql, gp->l, name, f, 0)) && sql->session->status == -ERR_AMBIGUOUS) + if (gp && !is_basetable(gp->op) && gp->l && !(exp = rel_bind_column(sql, gp->l, name, f, 0)) && sql->session->status == -ERR_AMBIGUOUS) return NULL; } if (!exp && query && query_has_outer(query)) { @@ -1347,7 +1347,7 @@ rel_column_ref(sql_query *query, sql_rel sql_rel *gp = inner; while (gp && is_select(gp->op)) gp = gp->l; - if (gp && gp->l && !(exp = rel_bind_column3(sql, gp->l, sname, tname, cname, f)) && sql->session->status == -ERR_AMBIGUOUS) + if (gp && !is_basetable(gp->op) && gp->l && !(exp = rel_bind_column3(sql, gp->l, sname, tname, cname, f)) && sql->session->status == -ERR_AMBIGUOUS) return NULL; } if (!exp && query && query_has_outer(query)) { 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 @@ -36,8 +36,8 @@ static int commit_create_del(sql_trans * static int tc_gc_col( sql_store Store, sql_change *c, ulng oldest); static int tc_gc_idx( sql_store Store, sql_change *c, ulng oldest); static int tc_gc_del( sql_store Store, sql_change *c, ulng oldest); -static int tc_gc_drop_col( sql_store Store, sql_change *c, ulng oldest); -static int tc_gc_drop_idx( sql_store Store, sql_change *c, ulng oldest); +static int tc_gc_upd_col( sql_store Store, sql_change *c, ulng oldest); +static int tc_gc_upd_idx( sql_store Store, sql_change *c, ulng oldest); static void merge_delta( sql_delta *obat); @@ -123,11 +123,24 @@ unlock_column(sqlstore *store, sqlid id) MT_lock_unset(>column_locks[id&(NR_COLUMN_LOCKS-1)]); } +static void +trans_add_obj(sql_trans *tr, sql_base *b, void *data, tc_cleanup_fptr cleanup, tc_commit_fptr commit, tc_log_fptr log) +{ + assert(cleanup); + trans_add(tr, dup_base(b), data, cleanup, commit, log); +} + +static void +trans_add_table(sql_trans *tr, sql_base *b, sql_table *t, void *data, tc_cleanup_fptr cleanup, tc_commit_fptr commit, tc_log_fptr log) +{ + assert(cleanup); + dup_base(>base); + trans_add(tr, b, data, cleanup, commit, log); +} static int tc_gc_seg( sql_store Store, sql_change *change, ulng oldest) { - (void)Store; segment *s = change->data; if (s->ts <= oldest) { @@ -137,6 +150,8 @@ tc_gc_seg( sql_store Store, sql_change * _DELETE(s); s = n; } + sqlstore *store = Store; + table_destroy(store, (sql_table*)change->obj); return 1; } return LOG_OK; @@ -552,7 +567,7 @@ tab_timestamp_storage( sql_trans *tr, sq static sql_delta* delta_dup(sql_delta *d) { - d->cs.refcnt++; + ATOMIC_INC(>cs.refcnt); return d; } @@ -573,7 +588,7 @@ idx_dup(sql_idx *i) static storage* storage_dup(storage *d) { - d->cs.refcnt++; +
monetdb-java: default - Improve isSigned() information on result...
Changeset: e1f00e0e3598 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/e1f00e0e3598 Modified Files: src/main/java/org/monetdb/jdbc/MonetParameterMetaData.java src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java Branch: default Log Message: Improve isSigned() information on result columns and parameters of Types.DATE, Types.TIMESTAMP and Types.TIMESTAMP_WITH_TIMEZONE. These can have a negative year. diffs (63 lines): diff --git a/src/main/java/org/monetdb/jdbc/MonetParameterMetaData.java b/src/main/java/org/monetdb/jdbc/MonetParameterMetaData.java --- a/src/main/java/org/monetdb/jdbc/MonetParameterMetaData.java +++ b/src/main/java/org/monetdb/jdbc/MonetParameterMetaData.java @@ -143,23 +143,19 @@ final class MonetParameterMetaData case Types.DOUBLE: case Types.DECIMAL: case Types.NUMERIC: + case Types.DATE:// year can be negative + case Types.TIMESTAMP: // year can be negative + case Types.TIMESTAMP_WITH_TIMEZONE: return true; case Types.BIGINT: + { final String monettype = getParameterTypeName(param); - if (monettype != null && monettype.length() == 3) { - // data of type oid or ptr is not signed - if ("oid".equals(monettype) -|| "ptr".equals(monettype)) - return false; - } + // data of type oid or ptr is not signed + if ("oid".equals(monettype) +|| "ptr".equals(monettype)) + return false; return true; - // All other types should return false - // case Types.BOOLEAN: - // case Types.DATE:// can year be negative? - // case Types.TIME:// can time be negative? - // case Types.TIME_WITH_TIMEZONE: - // case Types.TIMESTAMP: // can year be negative? - // case Types.TIMESTAMP_WITH_TIMEZONE: + } default: return false; } diff --git a/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java b/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java --- a/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java +++ b/src/main/java/org/monetdb/jdbc/MonetResultSetMetaData.java @@ -362,6 +362,9 @@ final class MonetResultSetMetaData case Types.DOUBLE: case Types.DECIMAL: case Types.NUMERIC: + case Types.DATE:// year can be negative + case Types.TIMESTAMP: // year can be negative + case Types.TIMESTAMP_WITH_TIMEZONE: return true; case Types.BIGINT: try { @@ -374,13 +377,6 @@ final class MonetResultSetMetaData throw MonetResultSet.newSQLInvalidColumnIndexException(column); } return true; - // All other types should return false - // case Types.BOOLEAN: - // case Types.DATE:// can year be negative? - // case Types.TIME:// can time be negative? - // case Types.TIME_WITH_TIMEZONE: - // case Types.TIMESTAMP: // can year be negative? - // case Types.TIMESTAMP_WITH_TIMEZONE: default: return false; } ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
monetdb-java: default - Optimise getMetaData(). We can compute t...
Changeset: 1956d8ba5ad3 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/1956d8ba5ad3 Modified Files: src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java Branch: default Log Message: Optimise getMetaData(). We can compute the number of result columns, so avoid to go through all metadata entries in column[] to test if it is a result column. diffs (105 lines): 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 @@ -357,14 +357,7 @@ public class MonetPreparedStatement if (rsmd == null) { // first use, construct the arrays with metadata and a // ResultSetMetaData object once and reuse it for all next calls - int rescolcount = 0; - 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) - continue; - rescolcount++; - } + final int rescolcount = size - paramCount; int array_size = rescolcount; if (array_size == 0) { // there are no resultset columns for this prepared statement @@ -380,62 +373,56 @@ public class MonetPreparedStatement final int[] lengths = new int[array_size]; final int[] precisions = new int[array_size]; final int[] scales = new int[array_size]; - // now fill the arrays with only the resultset columns metadata - rescolcount = 0; - 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) - continue; - schemas[rescolcount] = schema[i]; - tables[rescolcount] = table[i]; - columns[rescolcount] = column[i]; - types[rescolcount] = monetdbType[i]; - jdbcTypes[rescolcount] = javaType[i]; - switch (jdbcTypes[rescolcount]) { + // fill the arrays with the resultset columns metadata + for (int i = 0; i < rescolcount; i++) { + schemas[i] = schema[i]; + tables[i] = table[i]; + columns[i] = column[i]; + types[i] = monetdbType[i]; + jdbcTypes[i] = javaType[i]; + switch (jdbcTypes[i]) { case Types.BIGINT: - lengths[rescolcount] = 19; + lengths[i] = 19; break; case Types.INTEGER: - lengths[rescolcount] = 10; + lengths[i] = 10; break; case Types.SMALLINT: - lengths[rescolcount] = 5; + lengths[i] = 5; break; case Types.TINYINT: - lengths[rescolcount] = 3; + lengths[i] = 3; break; case Types.REAL: - lengths[rescolcount] = 7; + lengths[i] = 7; break; case Types.FLOAT: case Types.DOUBLE: - lengths[rescolcount] = 15; + lengths[i] = 15; break; case Types.DATE: - lengths[rescolcount] = 10; //
monetdb-java: default - Optimise getParameterMetaData(). We can ...
Changeset: 333bbac1e3e8 for monetdb-java URL: https://dev.monetdb.org/hg/monetdb-java/rev/333bbac1e3e8 Modified Files: src/main/java/org/monetdb/jdbc/MonetPreparedStatement.java Branch: default Log Message: Optimise getParameterMetaData(). We can compute the number of parameters now, so avoid to go through all entries in column[] to test if it is a parameter. diffs (32 lines): 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 @@ -464,18 +464,16 @@ public class MonetPreparedStatement final int[] jdbcTypes = new int[array_size]; final int[] precisions = new int[array_size]; final int[] scales = new int[array_size]; - int param = 1; // parameters in JDBC start from 1 - // now fill the arrays with only the parameters metadata - 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) - continue; - types[param] = monetdbType[i]; - jdbcTypes[param] = javaType[i]; - precisions[param] = digits[i]; - scales[param] = scale[i]; - param++; + if (paramCount > 0) { + // fill the arrays with the parameters metadata + int param = 1; // parameters in JDBC start from 1 + for (int i = paramStartIndex; i < size && param <= paramCount; i++) { + types[param] = monetdbType[i]; + jdbcTypes[param] = javaType[i]; + precisions[param] = digits[i]; + scales[param] = scale[i]; + param++; + } } pmd = new MonetParameterMetaData((MonetConnection) getConnection(), ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org
MonetDB: check - (de)serialise relational plan check condition
Changeset: 2f299854001c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/2f299854001c Modified Files: sql/server/rel_schema.c sql/server/sql_parser.y Branch: check Log Message: (de)serialise relational plan check condition diffs (115 lines): diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c --- a/sql/server/rel_schema.c +++ b/sql/server/rel_schema.c @@ -20,6 +20,7 @@ #include "rel_schema.h" #include "rel_remote.h" #include "rel_psm.h" +#include "rel_dump.h" #include "rel_propagate.h" #include "sql_parser.h" #include "sql_privileges.h" @@ -359,10 +360,41 @@ foreign_key_check_types(sql_subtype *lt, return lt->type->localtype == rt->type->localtype; return lt->type->eclass == rt->type->eclass || (EC_VARCHAR(lt->type->eclass) && EC_VARCHAR(rt->type->eclass)); } +static str +rel2str( mvc *sql, sql_rel *rel) +{ + buffer *b = NULL; + stream *s = NULL; + list *refs = NULL; + char *res = NULL; + + b = buffer_create(1024); + if(b == NULL) + goto cleanup; + s = buffer_wastream(b, "rel_dump"); + if(s == NULL) + goto cleanup; + refs = sa_list(sql->sa); + if (!refs) + goto cleanup; + + rel_print_refs(sql, s, rel, 0, refs, 0); + rel_print_(sql, s, rel, 0, refs, 0); + mnstr_printf(s, "\n"); + res = buffer_get_buf(b); + +cleanup: + if(b) + buffer_destroy(b); + if(s) + close_stream(s); + return res; +} static int -column_constraint_type(mvc *sql, const char *name, symbol *s, sql_schema *ss, sql_table *t, sql_column *cs, bool isDeclared, int *used) +column_constraint_type(sql_query *query, const char *name, symbol *s, sql_schema *ss, sql_table *t, sql_column *cs, bool isDeclared, int *used) { + mvc *sql = query->sql; int res = SQL_ERR; if (isDeclared && (s->token != SQL_NULL && s->token != SQL_NOT_NULL)) { @@ -571,6 +603,23 @@ column_constraint_type(mvc *sql, const c res = SQL_OK; } break; case SQL_CHECK: { + + exp_kind ek = {type_value, card_value, FALSE}; + sql_rel* rel3 = rel_basetable(sql, t, t->base.name); + sql_exp *e = rel_logical_value_exp(query, , s->data.sym, sql_sel, ek); + sql_rel *rel = rel_project_exp(sql, e); + (void) rel; + + char* rel_str = rel2str(sql, rel); + + int pos = 0; + list *refs = sa_list(sql->sa); + sql_rel* rel2 = rel_read(sql, rel_str, , refs); + (void) rel_str; + (void) rel2; + char *err = NULL, *r; + r = symbol2string(sql, s->data.sym, 0, ); + (void) r; (void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT CHECK: check constraints not supported"); return SQL_ERR; } break; @@ -604,7 +653,7 @@ column_options(sql_query *query, dlist * if (!opt_name && !(default_name = column_constraint_name(sql, sym, cs, t))) return SQL_ERR; - res = column_constraint_type(sql, opt_name ? opt_name : default_name, sym, ss, t, cs, isDeclared, ); + res = column_constraint_type(query, opt_name ? opt_name : default_name, sym, ss, t, cs, isDeclared, ); } break; case SQL_DEFAULT: { symbol *sym = s->data.sym; diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -233,7 +233,6 @@ int yydebug=1; default default_value delete_stmt - domain_constraint_type drop_statement drop_table_element exec @@ -2155,7 +2154,7 @@ column_constraint_type: append_int(l, $5 ); $$ = _symbol_create_list( SQL_FOREIGN_KEY, l); } /*TODO: Implement domain_constraint_type*/ - | domain_constraint_type + | CHECK '(' search_condition ')' { $$ = _symbol_create_symbol(SQL_CHECK, $3); } ; table_constraint_type: @@ -2181,7 +2180,6 @@ table_constraint_type: ; domain_constraint_type: -CHECK '(' search_condition ')' { $$ = _symbol_create_symbol(SQL_CHECK, $3); } ; ident_commalist: ___ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org