Changeset: e5a27cc67839 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e5a27cc67839
Branch: monetdburl
Log Message:

Merge with default branch.


diffs (truncated from 3758 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -54,7 +54,7 @@
 # derivatives (CentOS, Scientific Linux), the geos library is not
 # available.  However, the geos library is available in the Extra
 # Packages for Enterprise Linux (EPEL).
-%if %{fedpkgs}
+%if %{fedpkgs} && (0%{?rhel} != 7) && (0%{?rhel} != 8)
 # By default create the MonetDB-geom-MonetDB5 package on Fedora and RHEL 7
 %bcond_without geos
 %endif
@@ -534,6 +534,7 @@ exit 0
 %if %{with cintegration}
 %{_libdir}/monetdb5/lib_capi.so
 %endif
+%{_libdir}/monetdb5/lib_csv.so
 %{_libdir}/monetdb5/lib_generator.so
 %doc %{_mandir}/man1/mserver5.1.gz
 %dir %{_datadir}/doc/MonetDB
diff --git a/debian/monetdb5-server.install b/debian/monetdb5-server.install
--- a/debian/monetdb5-server.install
+++ b/debian/monetdb5-server.install
@@ -4,4 +4,5 @@ debian/tmp/usr/lib/x86_64-linux-gnu/libm
 
 # usr/lib/x86_64-linux-gnu/monetdb5/lib_*.so EXCEPT: 
lib_{fits,geom,gsl,microbenchmark,opt_sql_append,pyapi*,rapi,sql,udf}.so
 debian/tmp/usr/lib/x86_64-linux-gnu/monetdb5/lib_capi.so 
usr/lib/x86_64-linux-gnu/monetdb5
+debian/tmp/usr/lib/x86_64-linux-gnu/monetdb5/lib_csv.so 
usr/lib/x86_64-linux-gnu/monetdb5
 debian/tmp/usr/lib/x86_64-linux-gnu/monetdb5/lib_generator.so 
usr/lib/x86_64-linux-gnu/monetdb5
diff --git a/monetdb5/ChangeLog b/monetdb5/ChangeLog
--- a/monetdb5/ChangeLog
+++ b/monetdb5/ChangeLog
@@ -1,6 +1,13 @@
 # ChangeLog file for MonetDB5
 # This file is updated with Maddlog
 
+* Fri Oct 20 2023 Panagiotis Koutsourakis <kutsu...@monetdbsolutions.com>
+- Change how json is stored in the database: We now normalize json
+  strings after parsing, removing whitespace and eliminating duplicate
+  keys in objects.
+- The function json.filter now properly returns json scalars instead of
+  wrapping them in an array.
+
 * Wed Sep 13 2023 Sjoerd Mullender <sjo...@acm.org>
 - Removed the MAL tokenizer module.  It was never usable from SQL and
   in this form never would be.
diff --git a/monetdb5/ChangeLog.json-storage b/monetdb5/ChangeLog.json-storage
deleted file mode 100644
--- a/monetdb5/ChangeLog.json-storage
+++ /dev/null
@@ -1,10 +0,0 @@
-# ChangeLog file for monetdb5
-# This file is updated with Maddlog
-
-* Fri Oct 20 2023 Panagiotis Koutsourakis <kutsu...@monetdbsolutions.com>
-- Change how json is stored in the database: We now normalize json
-  strings after parsing, removing whitespace and eliminating duplicate
-  keys in objects.
-- The function json.filter now properly returns json scalars instead of
-  wrapping them in an array.
-
diff --git a/monetdb5/modules/atoms/Tests/All b/monetdb5/modules/atoms/Tests/All
--- a/monetdb5/modules/atoms/Tests/All
+++ b/monetdb5/modules/atoms/Tests/All
@@ -38,3 +38,5 @@ startswith
 endswith
 contains
 HAVE_ICONV?asciify
+
+ts_and_tstz_to_str_bug
diff --git a/monetdb5/modules/atoms/Tests/ts_and_tstz_to_str_bug.test 
b/monetdb5/modules/atoms/Tests/ts_and_tstz_to_str_bug.test
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/atoms/Tests/ts_and_tstz_to_str_bug.test
@@ -0,0 +1,16 @@
+statement ok
+CREATE TABLE t2 (dt TIMESTAMP)
+
+statement ok
+INSERT INTO t2 (dt) VALUES('2023-10-11 11:36')
+
+query I
+SELECT
+        levenshtein(sys.timestamp_to_str(cast(dt as timestamp with time zone), 
'%Y-%d-%d %H:%M:%S'),
+        sys.timestamp_to_str(dt, '%Y-%d-%d %H:%M:%S'))
+FROM t2
+----
+0
+
+statement ok
+DROP TABLE t2
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -282,7 +282,6 @@ extern str SQLflush_log(Client cntxt, Ma
 extern str SQLsuspend_log_flushing(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 extern str SQLresume_log_flushing(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 extern str SQLhot_snapshot(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
-extern str SQLhot_snapshot_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 extern str SQLpersist_unlogged(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
 extern str SQLsession_prepared_statements(Client cntxt, MalBlkPtr mb, 
MalStkPtr stk, InstrPtr pci);
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
@@ -5179,6 +5179,7 @@ sql_update_jun2023(Client c, mvc *sql, s
        char *err = NULL, *buf = GDKmalloc(bufsize);
        res_table *output;
        BAT *b;
+       sql_subtype t1, t2;
 
        (void) sql;
        if (buf == NULL)
@@ -5546,7 +5547,6 @@ sql_update_jun2023(Client c, mvc *sql, s
        /* Add new sysadmin procedure calls: stop, pause and resume with two
           arguments, first arg is query OID and second the user username that
           the query in bound to. */
-       sql_subtype t1, t2;
        sql_find_subtype(&t1, "bigint", 64, 0);
        sql_find_subtype(&t2, "varchar", 0, 0);
        if (!sql_bind_func(sql, "sys", "pause", &t1, &t2, F_PROC, true)) {
@@ -5781,6 +5781,38 @@ sql_update_jun2023(Client c, mvc *sql, s
 }
 
 static str
+sql_update_jun2023_sp3(Client c, mvc *sql, sql_schema *s)
+{
+       (void)s;
+       char *err = NULL;
+       sql_subtype t1, t2;
+
+       sql_find_subtype(&t1, "timestamp", 0, 0);
+       sql_find_subtype(&t2, "varchar", 0, 0);
+
+       if (!sql_bind_func(sql, "sys", "timestamp_to_str", &t1, &t2, F_FUNC, 
true)) {
+               sql->session->status = 0;
+               sql->errstr[0] = '\0';
+
+               char *query = GDKmalloc(512);
+               if (query == NULL)
+                       throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+
+               snprintf(query, 512, "CREATE FUNCTION timestamp_to_str(d 
TIMESTAMP, format STRING) RETURNS STRING "
+                                "EXTERNAL NAME mtime.\"timestamp_to_str\";\n"
+                                "GRANT EXECUTE ON FUNCTION 
timestamp_to_str(TIMESTAMP, STRING) TO PUBLIC;\n"
+                                "UPDATE sys.functions SET system = true WHERE 
system <> true AND name = 'timestamp_to_str' "
+                                "AND schema_id = 2000 and type = %d;\n", 
F_FUNC);
+
+               printf("Running database upgrade commands:\n%s\n", query);
+               err = SQLstatementIntern(c, query, "update", true, false, NULL);
+               GDKfree(query);
+       }
+
+       return err;             /* usually MAL_SUCCEED */
+}
+
+static str
 sql_update_default_geom(Client c, mvc *sql, sql_schema *s)
 {
        sql_subtype tp;
@@ -6278,11 +6310,13 @@ sql_update_default(Client c, mvc *sql, s
                        "EXTERNAL NAME sql.persist_unlogged;\n"
                        "CREATE FUNCTION sys.persist_unlogged(sname STRING)\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
-                       "EXTERNAL NAME sql.persist_unlogged(string);\n"
+                       "EXTERNAL NAME sql.persist_unlogged;\n"
                        "CREATE FUNCTION sys.persist_unlogged(sname STRING, 
tname STRING)\n"
                        "RETURNS TABLE(\"table\" STRING, \"table_id\" INT, 
\"rowcount\" BIGINT)\n"
-                       "EXTERNAL NAME sql.persist_unlogged(string, string);\n"
+                       "EXTERNAL NAME sql.persist_unlogged;\n"
                        "GRANT EXECUTE ON FUNCTION sys.persist_unlogged() TO 
PUBLIC;\n"
+                       "GRANT EXECUTE ON FUNCTION sys.persist_unlogged(string) 
TO PUBLIC;\n"
+                       "GRANT EXECUTE ON FUNCTION sys.persist_unlogged(string, 
string) TO PUBLIC;\n"
                        "UPDATE sys.functions SET system = true WHERE system <> 
true AND\n"
                        "name = 'persist_unlogged' AND schema_id = 2000;\n";
                printf("Running database upgrade commands:\n%s\n", query);
@@ -6476,6 +6510,12 @@ SQLupgrades(Client c, mvc *m)
                goto handle_error;
        }
 
+       if ((err = sql_update_jun2023_sp3(c, m, s)) != NULL) {
+               TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+               freeException(err);
+               return -1;
+       }
+
        return 0;
 
 handle_error:
diff --git a/sql/scripts/13_date.sql b/sql/scripts/13_date.sql
--- a/sql/scripts/13_date.sql
+++ b/sql/scripts/13_date.sql
@@ -21,6 +21,9 @@ create function time_to_str(d time with 
 create function str_to_timestamp(s string, format string) returns timestamp 
with time zone
        external name mtime."str_to_timestamp";
 
+create function timestamp_to_str(d timestamp, format string) returns string
+       external name mtime."timestamp_to_str";
+
 create function timestamp_to_str(d timestamp with time zone, format string) 
returns string
        external name mtime."timestamp_to_str";
 
@@ -29,4 +32,5 @@ grant execute on function date_to_str to
 grant execute on function str_to_time to public;
 grant execute on function time_to_str to public;
 grant execute on function str_to_timestamp to public;
-grant execute on function timestamp_to_str to public;
+grant execute on function timestamp_to_str(timestamp, string) to public;
+grant execute on function timestamp_to_str(timestamp with time zone, string) 
to public;
diff --git 
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.test
 
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.test
--- 
a/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.test
+++ 
b/sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.test
@@ -105,7 +105,7 @@ 1
 query I rowsort
 select count(*) from sys.tracelog() where stmt like '%batcalc.timestamp%'
 ----
-1
+0
 
 query T rowsort
 SELECT sys.timestamp_to_str(case when task0."sys_created_on" >= '1999-10-31 
09:00:00' and task0."sys_created_on" < '2000-04-02 10:00:00'
diff --git 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
--- 
a/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
+++ 
b/sql/test/emptydb-previous-upgrade-chain-hge/Tests/upgrade.stable.out.int128
@@ -599,15 +599,15 @@ CREATE VIEW INFORMATION_SCHEMA.COLUMNS A
   cast(c."number" +1 AS int) AS ORDINAL_POSITION,
   c."default" AS COLUMN_DEFAULT,
   cast(sys.ifthenelse(c."null", 'YES', 'NO') AS varchar(3)) AS IS_NULLABLE,
-  c."type" AS DATA_TYPE,
+  CASE c."type" WHEN 'day_interval' THEN 'interval day' WHEN 'month_interval' 
THEN 'interval month' WHEN 'sec_interval' THEN 'interval second' ELSE c."type" 
END AS DATA_TYPE,
   cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits", NULL) AS int) AS 
CHARACTER_MAXIMUM_LENGTH,
   cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), c."type_digits" * 3, NULL) AS 
int) AS CHARACTER_OCTET_LENGTH,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_digits", NULL) AS int) AS NUMERIC_PRECISION,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','oid'), 
2, sys.ifthenelse(c."type" IN ('decimal','numeric'), 10, NULL)) AS int) AS 
NUMERIC_PRECISION_RADIX,
   cast(sys.ifthenelse(c."type" IN 
('int','smallint','tinyint','bigint','hugeint','float','real','double','decimal','numeric','oid'),
 c."type_scale", NULL) AS int) AS NUMERIC_SCALE,
   cast(sys.ifthenelse(c."type" IN 
('date','timestamp','timestamptz','time','timetz'), c."type_scale" -1, NULL) AS 
int) AS DATETIME_PRECISION,
-  cast(CASE c."type" WHEN 'day_interval' THEN 'interval day' WHEN 
'month_interval' THEN 'interval month' WHEN 'sec_interval' THEN 'interval 
second' ELSE NULL END AS varchar(40)) AS INTERVAL_TYPE,
-  cast(sys.ifthenelse(c."type" IN 
('day_interval','month_interval','sec_interval'), c."type_scale" -1, NULL) AS 
int) AS INTERVAL_PRECISION,
+  cast(CASE c."type" WHEN 'day_interval' THEN 'interval day' WHEN 
'month_interval' THEN (CASE c."type_digits" WHEN 1 THEN 'interval year' WHEN 2 
THEN 'interval year to month' WHEN 3 THEN 'interval month' ELSE NULL END) WHEN 
'sec_interval' THEN (CASE c."type_digits" WHEN 5 THEN 'interval day to hour' 
WHEN 6 THEN 'interval day to minute' WHEN 7 THEN 'interval day to second' WHEN 
8 THEN 'interval hour' WHEN 9 THEN 'interval hour to minute' WHEN 10 THEN 
'interval hour to second' WHEN 11 THEN 'interval minute' WHEN 12 THEN 'interval 
minute to second' WHEN 13 THEN 'interval second' ELSE NULL END) ELSE NULL END 
AS varchar(40)) AS INTERVAL_TYPE,
+  cast(CASE c."type" WHEN 'day_interval' THEN 0 WHEN 'month_interval' THEN 0 
WHEN 'sec_interval' THEN (sys.ifthenelse(c."type_digits" IN (7, 10, 12, 13), 
sys.ifthenelse(c."type_scale" > 0, c."type_scale", 3), 0)) ELSE NULL END AS 
int) AS INTERVAL_PRECISION,
   cast(NULL AS varchar(1)) AS CHARACTER_SET_CATALOG,
   cast(NULL AS varchar(1)) AS CHARACTER_SET_SCHEMA,
   cast(sys.ifthenelse(c."type" IN 
('varchar','clob','char','json','url','xml'), 'UTF-8', NULL) AS varchar(16)) AS 
CHARACTER_SET_NAME,
@@ -654,8 +654,112 @@ CREATE VIEW INFORMATION_SCHEMA.COLUMNS A
  LEFT OUTER JOIN sys."comments" cm ON c."id" = cm."id"
  ORDER BY s."name", t."name", c."number";
 GRANT SELECT ON TABLE INFORMATION_SCHEMA.COLUMNS TO PUBLIC WITH GRANT OPTION;
+CREATE VIEW INFORMATION_SCHEMA.CHECK_CONSTRAINTS AS SELECT
+  cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,
+  cast(NULL AS varchar(1024)) AS CONSTRAINT_SCHEMA,
+  cast(NULL AS varchar(1024)) AS CONSTRAINT_NAME,
+  cast(NULL AS varchar(1024)) AS CHECK_CLAUSE
+ WHERE 1=0;
+GRANT SELECT ON TABLE INFORMATION_SCHEMA.CHECK_CONSTRAINTS TO PUBLIC WITH 
GRANT OPTION;
+CREATE VIEW INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS SELECT
+  cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,
+  s."name" AS CONSTRAINT_SCHEMA,
+  k."name" AS CONSTRAINT_NAME,
+  cast(NULL AS varchar(1)) AS TABLE_CATALOG,
+  s."name" AS TABLE_SCHEMA,
+  t."name" AS TABLE_NAME,
+  cast(CASE k."type" WHEN 0 THEN 'PRIMARY KEY' WHEN 1 THEN 'UNIQUE' WHEN 2 
THEN 'FOREIGN KEY' ELSE NULL END AS varchar(16)) AS CONSTRAINT_TYPE,
+  cast('NO' AS varchar(3)) AS IS_DEFERRABLE,
+  cast('NO' AS varchar(3)) AS INITIALLY_DEFERRED,
+  cast('YES' AS varchar(3)) AS ENFORCED,
+  -- MonetDB column extensions
+  t."schema_id" AS schema_id,
+  t."id" AS table_id,
+  k."id" AS key_id,
+  k."type" AS key_type,
+  t."system" AS is_system
+ FROM (SELECT sk."id", sk."table_id", sk."name", sk."type" FROM sys."keys" sk 
UNION ALL SELECT tk."id", tk."table_id", tk."name", tk."type" FROM tmp."keys" 
tk) k
+ INNER JOIN (SELECT st."id", st."schema_id", st."name", st."system" FROM 
sys."_tables" st UNION ALL SELECT tt."id", tt."schema_id", tt."name", 
tt."system" FROM tmp."_tables" tt) t ON k."table_id" = t."id"
+ INNER JOIN sys."schemas" s ON t."schema_id" = s."id"
+ ORDER BY s."name", t."name", k."name";
+GRANT SELECT ON TABLE INFORMATION_SCHEMA.TABLE_CONSTRAINTS TO PUBLIC WITH 
GRANT OPTION;
+CREATE VIEW INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS SELECT
+  cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,
+  s."name" AS CONSTRAINT_SCHEMA,
+  fk."name" AS CONSTRAINT_NAME,
+  cast(NULL AS varchar(1)) AS UNIQUE_CONSTRAINT_CATALOG,
+  uks."name" AS UNIQUE_CONSTRAINT_SCHEMA,
+  uk."name" AS UNIQUE_CONSTRAINT_NAME,
+  cast('FULL' AS varchar(7)) AS MATCH_OPTION,
+  fk."update_action" AS UPDATE_RULE,
+  fk."delete_action" AS DELETE_RULE,
+  -- MonetDB column extensions
+  t."schema_id" AS fk_schema_id,
+  t."id" AS fk_table_id,
+  t."name" AS fk_table_name,
+  fk."id" AS fk_key_id,
+  ukt."schema_id" AS uc_schema_id,
+  uk."table_id" AS uc_table_id,
+  ukt."name" AS uc_table_name,
+  uk."id" AS uc_key_id
+ FROM sys."fkeys" fk
+ INNER JOIN sys."tables" t ON t."id" = fk."table_id"
+ INNER JOIN sys."schemas" s ON s."id" = t."schema_id"
+ LEFT OUTER JOIN sys."keys" uk ON uk."id" = fk."rkey"
+ LEFT OUTER JOIN sys."tables" ukt ON ukt."id" = uk."table_id"
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to