MonetDB: Dec2023 - add more errors for different bison versions

2024-04-03 Thread Niels Nes via checkin-list
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...

2024-04-03 Thread Martin van Dinther via checkin-list
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...

2024-04-03 Thread Sjoerd Mullender via checkin-list
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.

2024-04-03 Thread Sjoerd Mullender via checkin-list
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...

2024-04-03 Thread Sjoerd Mullender via checkin-list
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...

2024-04-03 Thread Niels Nes via checkin-list
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...

2024-04-03 Thread Martin van Dinther via checkin-list
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...

2024-04-03 Thread Martin van Dinther via checkin-list
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 ...

2024-04-03 Thread Martin van Dinther via checkin-list
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

2024-04-03 Thread Yunus Koning via checkin-list
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