monetdb-java: default - Branch cleanup_types has been merged int...

2024-02-08 Thread Martin van Dinther via checkin-list
Changeset: 41095d357c2e for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/41095d357c2e
Modified Files:
tests/JDBC_API_Tester.java
Branch: default
Log Message:

Branch cleanup_types has been merged into default, so enable the condition 
where type_digits is now returning a lower number.


diffs (21 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
@@ -753,7 +753,7 @@ final public class JDBC_API_Tester {
handleExecuteDDL(stmt, action, "type", "xml", "CREATE TYPE xml 
EXTERNAL NAME xml");
 
try {
-   final boolean isPostDec2023 = !(dbmsMajorVersion == 11 
&& dbmsMinorVersion <= 51);  // Change 51 into 49 after branch 
cleanup_types has been merged into default
+   final boolean isPostDec2023 = !(dbmsMajorVersion == 11 
&& dbmsMinorVersion <= 49);
DatabaseMetaData dbmd = con.getMetaData();
 
// inspect the catalog by use of dbmd functions
@@ -1141,7 +1141,7 @@ final public class JDBC_API_Tester {
"COMMENT ON FUNCTION sys.statistics() IS 
'sys.statistics() function comment';");
 
try {
-   final boolean isPostDec2023 = !(dbmsMajorVersion == 11 
&& dbmsMinorVersion <= 51);  // Change 51 into 49 after branch 
cleanup_types has been merged into default
+   final boolean isPostDec2023 = !(dbmsMajorVersion == 11 
&& dbmsMinorVersion <= 49);
// query the catalog by calling DatabaseMetaData methods
compareResultSet(dbmd.getCatalogs(), "getCatalogs()",
"Resultset with 1 columns\n" +
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org


monetdb-java: default - Adjust JDBC_API_Tester to accept new beh...

2024-02-08 Thread Martin van Dinther via checkin-list
Changeset: 16aea99c987f for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/16aea99c987f
Modified Files:
tests/JDBC_API_Tester.java
Branch: default
Log Message:

Adjust JDBC_API_Tester to accept new behavior of returning a varchar instead of 
clob or char as metadata. This new behavior applies to MonetDB servers 11.50 or 
higher.


diffs (201 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
@@ -37,13 +37,14 @@ import org.monetdb.jdbc.types.URL;
  * Only when it deviates the output is sent to system err, see 
compareExpectedOutput().
  *
  * @author Martin van Dinther
- * @version 0.2
+ * @version 0.3
  */
 final public class JDBC_API_Tester {
private StringBuilder sb;   // buffer to collect the test output
private Connection con; // main connection shared by all tests
private int dbmsMajorVersion;
private int dbmsMinorVersion;
+   private boolean isPostDec2023;  // flag to support version specific 
output
private boolean foundDifferences = false;
 
final private static int sbInitLen = 5224;
@@ -72,6 +73,9 @@ final public class JDBC_API_Tester {
DatabaseMetaData dbmd = jt.con.getMetaData();
jt.dbmsMajorVersion = dbmd.getDatabaseMajorVersion();
jt.dbmsMinorVersion = dbmd.getDatabaseMinorVersion();
+   // from version 11.50 the MonetDB server returns different 
metadata for
+   // integer digits (1 less) and for clob and char columns (now 
return varchar).
+   jt.isPostDec2023 = !(jt.dbmsMajorVersion == 11 && 
jt.dbmsMinorVersion <= 49);
 
// run the tests
jt.Test_Cautocommit(con_URL);
@@ -753,7 +757,6 @@ final public class JDBC_API_Tester {
handleExecuteDDL(stmt, action, "type", "xml", "CREATE TYPE xml 
EXTERNAL NAME xml");
 
try {
-   final boolean isPostDec2023 = !(dbmsMajorVersion == 11 
&& dbmsMinorVersion <= 49);
DatabaseMetaData dbmd = con.getMetaData();
 
// inspect the catalog by use of dbmd functions
@@ -792,7 +795,7 @@ final public class JDBC_API_Tester {
compareResultSet(dbmd.getColumns(null, "sys", 
"table\\_types", null), "getColumns(null, sys, table\\_types, null)",
"Resultset with 24 columns\n" +
"TABLE_CAT  TABLE_SCHEM TABLE_NAME  
COLUMN_NAME DATA_TYPE   TYPE_NAME   COLUMN_SIZE BUFFER_LENGTH   
DECIMAL_DIGITS  NUM_PREC_RADIX  NULLABLEREMARKS COLUMN_DEF  
SQL_DATA_TYPE   SQL_DATETIME_SUBCHAR_OCTET_LENGTH   
ORDINAL_POSITIONIS_NULLABLE SCOPE_CATALOG   SCOPE_SCHEMA
SCOPE_TABLE SOURCE_DATA_TYPEIS_AUTOINCREMENT
IS_GENERATEDCOLUMN\n" +
-   "char(1)varchar(1024)   varchar(1024)   
varchar(1024)   int varchar(1024)   int int int int int 
varchar(65000)  varchar(2048)   int int bigint  int varchar(3)  
char(1) char(1) char(1) smallintchar(3) varchar(3)\n" +
+   "char(1)varchar(1024)   varchar(1024)   
varchar(1024)   int varchar(1024)   int int int int int 
varchar(65000)  varchar(2048)   int int bigint  int varchar(3)  
char(1) char(1) char(1) smallint" + (isPostDec2023 ? "var" : "") + 
"char(3) varchar(3)\n" +
"null   sys table_types table_type_id   5   
smallint" + (isPostDec2023 ? "15" : "16") + "   0   0   2   
0   nullnull0   0   null1   NO  nullnull
nullnullNO  NO\n" +
"null   sys table_types table_type_name 12  
varchar 25  0   0   0   0   nullnull0   0   
100 2   NO  nullnullnullnullNO  NO\n");
 
@@ -927,14 +930,14 @@ final public class JDBC_API_Tester {
compareResultSet(dbmd.getUDTs(null, "sys", null, null), 
"getUDTs(null, sys, null, null)",
"Resultset with 7 columns\n" +
"TYPE_CAT   TYPE_SCHEM  TYPE_NAME   
CLASS_NAME  DATA_TYPE   REMARKS BASE_TYPE\n" +
-   "char(1)varchar(1024)   varchar(1024)   
char(16)int varchar(256)smallint\n" +
+   "char(1)varchar(1024)   varchar(1024)   " + 
(isPostDec2023 ? "var" : "") + "char(16)int varchar(256)smallint\n" 
+
"null   sys xml java.lang.String2000
xml null\n");
 
int[] UDTtypes = { Types.STRUCT, Types.DISTINCT };
compareResultSet(dbmd.getUDTs(null, "sys", null, 
UDTtypes), 

MonetDB: Dec2023 - First dump defaults and only then dump add ta...

2024-02-08 Thread Sjoerd Mullender via checkin-list
Changeset: 52d17fea991f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/52d17fea991f
Modified Files:
clients/mapiclient/dump.c
sql/test/testdb-previous-upgrade-hge/Tests/dump.stable.out
sql/test/testdb-previous-upgrade/Tests/dump.stable.out
sql/test/testdb-upgrade-hge/Tests/dump.stable.out
sql/test/testdb-upgrade/Tests/dump.stable.out
sql/test/testdb/Tests/dump-nogeom.stable.out
sql/test/testdb/Tests/dump.stable.out
sql/test/testdb/Tests/load.test
Branch: Dec2023
Log Message:

First dump defaults and only then dump add tables.
This fixes bug #7453.


diffs (truncated from 738 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -3154,6 +3154,123 @@ dump_database(Mapi mid, stream *toConsol
mapi_close_handle(hdl);
hdl = NULL;
 
+   /* dump views, functions and triggers */
+   if ((hdl = mapi_query(mid, views_functions_triggers)) == NULL ||
+   mapi_error(mid))
+   goto bailout;
+
+   while (rc == 0 &&
+  mnstr_errnr(toConsole) == MNSTR_NO__ERROR &&
+  mapi_fetch_row(hdl) != 0) {
+   char *id = strdup(mapi_fetch_field(hdl, 0));
+   char *schema = strdup(mapi_fetch_field(hdl, 1));
+   char *name = strdup(mapi_fetch_field(hdl, 2));
+   const char *query = mapi_fetch_field(hdl, 3);
+   const char *remark = mapi_fetch_field(hdl, 4);
+
+   if (mapi_error(mid) || id == NULL || schema == NULL || name == 
NULL) {
+   free(id);
+   free(schema);
+   free(name);
+   goto bailout;
+   }
+   if (sname != NULL && strcmp(schema, sname) != 0) {
+   free(id);
+   free(schema);
+   free(name);
+   continue;
+   }
+   if (curschema == NULL || strcmp(schema, curschema) != 0) {
+   if (curschema)
+   free(curschema);
+   curschema = strdup(schema);
+   if (curschema == NULL) {
+   free(id);
+   free(schema);
+   free(name);
+   goto bailout;
+   }
+   mnstr_printf(toConsole, "SET SCHEMA ");
+   dquoted_print(toConsole, curschema, ";\n");
+   }
+   if (query) {
+   /* view or trigger */
+   mnstr_printf(toConsole, "%s\n", query);
+   /* only views have comments due to query */
+   comment_on(toConsole, "VIEW", schema, name, NULL, 
remark);
+   } else {
+   /* procedure */
+   dump_functions(mid, toConsole, 0, schema, name, id);
+   }
+   free(id);
+   free(schema);
+   free(name);
+   }
+   mapi_close_handle(hdl);
+   hdl = NULL;
+
+   /* dump DEFAULT clauses for tables */
+   if (dump_table_defaults(mid, NULL, NULL, toConsole))
+   goto bailout2;
+
+   if (!describe) {
+   if (dump_foreign_keys(mid, NULL, NULL, NULL, toConsole))
+   goto bailout2;
+
+   /* dump sequences, part 2 */
+   if ((hdl = mapi_query(mid, sequences2)) == NULL ||
+   mapi_error(mid))
+   goto bailout;
+
+   while (mapi_fetch_row(hdl) != 0) {
+   const char *schema = mapi_fetch_field(hdl, 0);  
/* sch */
+   const char *name = mapi_fetch_field(hdl, 1);
/* seq */
+   const char *restart = mapi_fetch_field(hdl, 3); 
/* rs */
+   const char *minvalue;
+   const char *maxvalue;
+   const char *increment = mapi_fetch_field(hdl, 6);   
/* inc */
+   const char *cycle = mapi_fetch_field(hdl, 8);   
/* cycle */
+
+   if (mapi_get_field_count(hdl) > 9) {
+   /* new version (Jan2022) of 
sys.describe_sequences */
+   minvalue = mapi_fetch_field(hdl, 11);   
/* rmi */
+   maxvalue = mapi_fetch_field(hdl, 12);   
/* rma */
+   } else {
+   /* old version (pre Jan2022) of 
sys.describe_sequences */
+   minvalue = mapi_fetch_field(hdl, 4);
/* minvalue */
+   maxvalue = mapi_fetch_field(hdl, 5);
/* maxvalue */
+  

MonetDB: default - Merge with Dec2023 branch.

2024-02-08 Thread Sjoerd Mullender via checkin-list
Changeset: b2c166f7bd87 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b2c166f7bd87
Modified Files:
clients/mapiclient/dump.c
gdk/gdk_bat.c
sql/test/testdb/Tests/dump-nogeom.stable.out
sql/test/testdb/Tests/dump.stable.out
Branch: default
Log Message:

Merge with Dec2023 branch.


diffs (truncated from 755 to 300 lines):

diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -3203,6 +3203,123 @@ dump_database(Mapi mid, stream *sqlf, co
mapi_close_handle(hdl);
hdl = NULL;
 
+   /* dump views, functions and triggers */
+   if ((hdl = mapi_query(mid, views_functions_triggers)) == NULL ||
+   mapi_error(mid))
+   goto bailout;
+
+   while (rc == 0 &&
+  mnstr_errnr(sqlf) == MNSTR_NO__ERROR &&
+  mapi_fetch_row(hdl) != 0) {
+   char *id = strdup(mapi_fetch_field(hdl, 0));
+   char *schema = strdup(mapi_fetch_field(hdl, 1));
+   char *name = strdup(mapi_fetch_field(hdl, 2));
+   const char *query = mapi_fetch_field(hdl, 3);
+   const char *remark = mapi_fetch_field(hdl, 4);
+
+   if (mapi_error(mid) || id == NULL || schema == NULL || name == 
NULL) {
+   free(id);
+   free(schema);
+   free(name);
+   goto bailout;
+   }
+   if (sname != NULL && strcmp(schema, sname) != 0) {
+   free(id);
+   free(schema);
+   free(name);
+   continue;
+   }
+   if (curschema == NULL || strcmp(schema, curschema) != 0) {
+   if (curschema)
+   free(curschema);
+   curschema = strdup(schema);
+   if (curschema == NULL) {
+   free(id);
+   free(schema);
+   free(name);
+   goto bailout;
+   }
+   mnstr_printf(sqlf, "SET SCHEMA ");
+   dquoted_print(sqlf, curschema, ";\n");
+   }
+   if (query) {
+   /* view or trigger */
+   mnstr_printf(sqlf, "%s\n", query);
+   /* only views have comments due to query */
+   comment_on(sqlf, "VIEW", schema, name, NULL, remark);
+   } else {
+   /* procedure */
+   dump_functions(mid, sqlf, 0, schema, name, id);
+   }
+   free(id);
+   free(schema);
+   free(name);
+   }
+   mapi_close_handle(hdl);
+   hdl = NULL;
+
+   /* dump DEFAULT clauses for tables */
+   if (dump_table_defaults(mid, NULL, NULL, sqlf))
+   goto bailout2;
+
+   if (!describe) {
+   if (dump_foreign_keys(mid, NULL, NULL, NULL, sqlf))
+   goto bailout2;
+
+   /* dump sequences, part 2 */
+   if ((hdl = mapi_query(mid, sequences2)) == NULL ||
+   mapi_error(mid))
+   goto bailout;
+
+   while (mapi_fetch_row(hdl) != 0) {
+   const char *schema = mapi_fetch_field(hdl, 0);  
/* sch */
+   const char *name = mapi_fetch_field(hdl, 1);
/* seq */
+   const char *restart = mapi_fetch_field(hdl, 3); 
/* rs */
+   const char *minvalue;
+   const char *maxvalue;
+   const char *increment = mapi_fetch_field(hdl, 6);   
/* inc */
+   const char *cycle = mapi_fetch_field(hdl, 8);   
/* cycle */
+
+   if (mapi_get_field_count(hdl) > 9) {
+   /* new version (Jan2022) of 
sys.describe_sequences */
+   minvalue = mapi_fetch_field(hdl, 11);   
/* rmi */
+   maxvalue = mapi_fetch_field(hdl, 12);   
/* rma */
+   } else {
+   /* old version (pre Jan2022) of 
sys.describe_sequences */
+   minvalue = mapi_fetch_field(hdl, 4);
/* minvalue */
+   maxvalue = mapi_fetch_field(hdl, 5);
/* maxvalue */
+   if (strcmp(minvalue, "0") == 0)
+   minvalue = NULL;
+   if (strcmp(maxvalue, "0") == 0)
+   maxvalue = NULL;
+   }
+
+   if (sname != NULL && strcmp(schema, sname) != 0)
+  

MonetDB: default - Test msqldump with --outputdir argument.

2024-02-08 Thread Sjoerd Mullender via checkin-list
Changeset: 9f1de51326e1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9f1de51326e1
Added Files:
sql/test/testdb-reload2/Tests/All
sql/test/testdb-reload2/Tests/reload.py
sql/test/testdb-reload2/Tests/reload.timeout
Branch: default
Log Message:

Test msqldump with --outputdir argument.


diffs (109 lines):

diff --git a/sql/test/testdb-reload2/Tests/All 
b/sql/test/testdb-reload2/Tests/All
new file mode 100644
--- /dev/null
+++ b/sql/test/testdb-reload2/Tests/All
@@ -0,0 +1,1 @@
+reload
diff --git a/sql/test/testdb-reload2/Tests/reload.py 
b/sql/test/testdb-reload2/Tests/reload.py
new file mode 100644
--- /dev/null
+++ b/sql/test/testdb-reload2/Tests/reload.py
@@ -0,0 +1,92 @@
+'''\
+Load the "dump" from the sql/test/testdb test and dump it.  Load that
+dump into a fresh database and check the result of dumping that.
+'''
+
+import os, sys, shutil, tempfile
+try:
+from MonetDBtesting import process
+except ImportError:
+import process
+try:
+from MonetDBtesting import sqllogictest
+except ImportError:
+import sqllogictest
+
+dbfarm = os.getenv('GDK_DBFARM')
+tstdb = os.getenv('TSTDB')
+tstsrcdir = os.getenv('TSTSRCDIR')
+
+if not tstdb or not dbfarm:
+print('No TSTDB or GDK_DBFARM in environment')
+sys.exit(1)
+
+tstdb2 = tstdb + '-clone'
+if os.path.exists(os.path.join(dbfarm, tstdb2)):
+shutil.rmtree(os.path.join(dbfarm, tstdb2))
+
+with tempfile.TemporaryDirectory() as tmpdirname:
+# start the first server
+with process.server(stdin=process.PIPE,
+stdout=process.PIPE,
+stderr=process.PIPE,
+mapiport='0') as s1:
+# load data into the first server's database
+with sqllogictest.SQLLogic(out=open(os.devnull, 'w')) as sql:
+sql.connect(hostname='localhost',
+port=s1.dbport,
+database=s1.dbname)
+sql.parse(os.path.join(tstsrcdir, os.pardir, os.pardir,
+   'testdb', 'Tests', 'load.test'))
+# dump the first server's database into tmpdirname
+with process.client(lang='sqldump',
+args=[f'--outputdir={tmpdirname}'],
+server=s1,
+stdin=process.PIPE,
+stdout=process.PIPE,
+stderr=process.PIPE) as d1:
+d1out, d1err = d1.communicate()
+s1out, s1err = s1.communicate()
+sys.stdout.writelines([line for line in 
d1out.splitlines(keepends=True) if not line.startswith('#')])
+sys.stderr.writelines([line for line in 
d1err.splitlines(keepends=True) if not line.startswith('#')])
+sys.stdout.writelines([line for line in 
s1out.splitlines(keepends=True) if not line.startswith('#')])
+sys.stderr.writelines([line for line in 
s1err.splitlines(keepends=True) if not line.startswith('#')])
+# start the second server
+with process.server(dbname=tstdb2,
+mapiport='0',
+stdin=process.PIPE,
+stdout=process.PIPE,
+stderr=process.PIPE) as s2:
+# restore the first server's dump
+with process.client(lang='sql',
+args=[os.path.join(tmpdirname, 'dump.sql')],
+format='trash',
+echo=False,
+server=s2,
+stdin=process.PIPE,
+stdout=process.PIPE,
+stderr=process.PIPE) as c2:
+c2out, c2err = c2.communicate()
+# dump the second server's database
+with process.client(lang='sqldump',
+server=s2,
+stdin=process.PIPE,
+stdout=process.PIPE,
+stderr=process.PIPE) as d2:
+d2out, d2err = d2.communicate()
+sys.stderr.write(d2err)
+s2out, s2err = s2.communicate()
+sys.stdout.writelines([line for line in 
s2out.splitlines(keepends=True) if not line.startswith('#')])
+sys.stderr.writelines([line for line in 
s2err.splitlines(keepends=True) if not line.startswith('#')])
+
+if len(sys.argv) == 2 and sys.argv[1] == 'reload':
+output = ''.join(d2out).splitlines(keepends=True)
+while len(output) > 0 and output[0].startswith('--'):
+del output[0]
+stableout = os.path.join(tstsrcdir, '..', '..', 'testdb', 'Tests', 
'dump-nogeom.stable.out')
+stable = open(stableout, encoding='utf-8').readlines()
+import difflib
+for line in difflib.unified_diff(stable, output, fromfile='test', 
tofile=stableout):
+sys.stderr.write(line)
+else:
+sys.stdout.writelines(d2out)
diff --git a/sql/test/testdb-reload2/Tests/reload.timeout 
b/sql/test/testdb-reload2/Tests/reload.timeout
new file mode 

monetdb-java: default - Extend Test_DBCmetadata() with calls to ...

2024-02-08 Thread Martin van Dinther via checkin-list
Changeset: aa30a3be8787 for monetdb-java
URL: https://dev.monetdb.org/hg/monetdb-java/rev/aa30a3be8787
Modified Files:
tests/JDBC_API_Tester.java
Branch: default
Log Message:

Extend Test_DBCmetadata() with calls to DatabaseMetaData methods which return a 
String and need to sent a query to the server to get the info.


diffs (39 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
@@ -1026,6 +1026,35 @@ final public class JDBC_API_Tester {
sb.append("Failed to createStatement: 
").append(e.getMessage()).append("\n");
}
 
+   try {
+   // test dbmd methods which sent a query to the server 
and return a String.
+   String s = dbmd.getSQLKeywords();
+   if (s == null || s.length() < 10)
+   sb.append("getSQLKeywords()").append(" failed 
to return a large enough list\n");
+   s = dbmd.getNumericFunctions();
+   if (s == null || s.length() < 10)
+   sb.append("getNumericFunctions()").append(" 
failed to return a large enough list\n");
+   s = dbmd.getStringFunctions();
+   if (s == null || s.length() < 10)
+   sb.append("getStringFunctions()").append(" 
failed to return a large enough list\n");
+   s = dbmd.getSystemFunctions();
+   if (s == null || s.length() < 10)
+   sb.append("getSystemFunctions()").append(" 
failed to return a large enough list\n");
+   s = dbmd.getTimeDateFunctions();
+   if (s == null || s.length() < 10)
+   sb.append("getTimeDateFunctions()").append(" 
failed to return a large enough list\n");
+   s = dbmd.getUserName();
+   if (s == null || s.length() < 1)
+   sb.append("getUserName() failed to return a 
valid name\n");
+   s = dbmd.getDatabaseProductVersion();
+   if (s == null || s.length() < 1)
+   sb.append("getDatabaseProductVersion() failed 
to return a valid version\n");
+   } catch (SQLException e) {
+   sb.append(e.getMessage()).append("\n");
+   }
+   compareExpectedOutput("Test_DBCmetadata() testing 
dbmd.get...Functions() as String", "");
+   sb.setLength(0);// clear the output log buffer
+
/* servers before Jan2022 (11.45) have a problem (server crash 
and db corruption)
   with indexes created on temp tables, so conditionally 
execute those commands and tests */
final boolean testCreateDropIndexOnTmpTables = 
!(dbmsMajorVersion == 11 && dbmsMinorVersion <= 43);
___
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org