Changeset: 66b62dd188ff for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/66b62dd188ff
Modified Files:
        sql/backends/monet5/sql_upgrades.c
Branch: literal_features
Log Message:

merged with default


diffs (truncated from 1085 to 300 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
@@ -1145,7 +1145,6 @@ InstrPtr pushArgumentId(MalBlkPtr mb, In
 InstrPtr pushBit(MalBlkPtr mb, InstrPtr q, bit val);
 InstrPtr pushBte(MalBlkPtr mb, InstrPtr q, bte val);
 InstrPtr pushDbl(MalBlkPtr mb, InstrPtr q, dbl val);
-InstrPtr pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe);
 InstrPtr pushEndInstruction(MalBlkPtr mb);
 InstrPtr pushFlt(MalBlkPtr mb, InstrPtr q, flt val);
 InstrPtr pushHge(MalBlkPtr mb, InstrPtr q, hge val);
diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -698,20 +698,6 @@ pushZero(MalBlkPtr mb, InstrPtr q, int t
 }
 
 InstrPtr
-pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe)
-{
-       if (q == NULL || mb->errors)
-               return q;
-       setModuleId(q, getName("bat"));
-       setFunctionId(q, getName("new"));
-
-       q = pushArgument(mb, q, newTypeVariable(mb, TYPE_void));
-       q = pushArgument(mb, q, newTypeVariable(mb, getBatType(tpe)));
-       q = pushZero(mb, q, TYPE_lng);
-       return q;
-}
-
-InstrPtr
 pushValue(MalBlkPtr mb, InstrPtr q, ValPtr vr)
 {
        int _t;
diff --git a/monetdb5/mal/mal_builder.h b/monetdb5/mal/mal_builder.h
--- a/monetdb5/mal/mal_builder.h
+++ b/monetdb5/mal/mal_builder.h
@@ -50,7 +50,6 @@ mal_export InstrPtr pushNil(MalBlkPtr mb
 mal_export InstrPtr pushType(MalBlkPtr mb, InstrPtr q, int tpe);
 mal_export InstrPtr pushNilType(MalBlkPtr mb, InstrPtr q, char *tpe);
 mal_export InstrPtr pushZero(MalBlkPtr mb, InstrPtr q, int tpe);
-mal_export InstrPtr pushEmptyBAT(MalBlkPtr mb, InstrPtr q, int tpe);
 mal_export InstrPtr pushValue(MalBlkPtr mb, InstrPtr q, ValPtr cst);
 
 mal_export int getIntConstant(MalBlkPtr mb, int val);
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -10,14 +10,16 @@
    information_schema.character_sets
    information_schema.check_constraints
    information_schema.table_constraints
+   information_schema.referential_constraints
    information_schema.sequences
 
   Most views have been extended (after the standard columns) with MonetDB
   specific information columns such as schema_id, table_id, column_id, etc.
-  This simplifies joins with any sys.* tables/views when needed.
+  This simplifies filtering and joins with system tables/views in sys schema
+  when needed.
 
   Note: MonetDB does NOT support catalog qualifiers in object names, so all the
-  _CATALOG columns in these information_schema views will allways contain NULL.
+  CATALOG columns in these information_schema views will allways contain NULL.
 
 * Mon Aug 21 2023 Niels Nes <[email protected]>
 - Added support for generated column syntax:
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
@@ -6190,7 +6190,7 @@ sql_update_default(Client c, mvc *sql, s
                "  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,\n"
                "  cast('NO' AS varchar(3)) AS IS_DEFERRABLE,\n"
                "  cast('NO' AS varchar(3)) AS INITIALLY_DEFERRED,\n"
-               "  cast('YES' AS varchar(3)) AS  ENFORCED,\n"
+               "  cast('YES' AS varchar(3)) AS ENFORCED,\n"
                "  -- MonetDB column extensions\n"
                "  t.\"schema_id\" AS schema_id,\n"
                "  t.\"id\" AS table_id,\n"
@@ -6204,6 +6204,34 @@ sql_update_default(Client c, mvc *sql, s
                " ORDER BY s.\"name\", t.\"name\", k.\"name\";\n"
                "GRANT SELECT ON TABLE INFORMATION_SCHEMA.TABLE_CONSTRAINTS TO 
PUBLIC WITH GRANT OPTION;\n"
 
+               "CREATE VIEW INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS 
SELECT\n"
+               "  cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,\n"
+               "  s.\"name\" AS CONSTRAINT_SCHEMA,\n"
+               "  fk.\"name\" AS CONSTRAINT_NAME,\n"
+               "  cast(NULL AS varchar(1)) AS UNIQUE_CONSTRAINT_CATALOG,\n"
+               "  uks.\"name\" AS UNIQUE_CONSTRAINT_SCHEMA,\n"
+               "  uk.\"name\" AS UNIQUE_CONSTRAINT_NAME,\n"
+               "  cast('FULL' AS varchar(7)) AS MATCH_OPTION,\n"
+               "  fk.\"update_action\" AS UPDATE_RULE,\n"
+               "  fk.\"delete_action\" AS DELETE_RULE,\n"
+               "  -- MonetDB column extensions\n"
+               "  t.\"schema_id\" AS fk_schema_id,\n"
+               "  t.\"id\" AS fk_table_id,\n"
+               "  t.\"name\" AS fk_table_name,\n"
+               "  fk.\"id\" AS fk_key_id,\n"
+               "  ukt.\"schema_id\" AS uc_schema_id,\n"
+               "  uk.\"table_id\" AS uc_table_id,\n"
+               "  ukt.\"name\" AS uc_table_name,\n"
+               "  uk.\"id\" AS uc_key_id\n"
+               " FROM sys.\"fkeys\" fk\n"
+               " INNER JOIN sys.\"tables\" t ON t.\"id\" = fk.\"table_id\"\n"
+               " INNER JOIN sys.\"schemas\" s ON s.\"id\" = t.\"schema_id\"\n"
+               " LEFT OUTER JOIN sys.\"keys\" uk ON uk.\"id\" = fk.\"rkey\"\n"
+               " LEFT OUTER JOIN sys.\"tables\" ukt ON ukt.\"id\" = 
uk.\"table_id\"\n"
+               " LEFT OUTER JOIN sys.\"schemas\" uks ON uks.\"id\" = 
ukt.\"schema_id\"\n"
+               " ORDER BY s.\"name\", t.\"name\", fk.\"name\";\n"
+               "GRANT SELECT ON TABLE 
INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS TO PUBLIC WITH GRANT OPTION;\n"
+
                "CREATE VIEW INFORMATION_SCHEMA.SEQUENCES AS SELECT\n"
                "  cast(NULL AS varchar(1)) AS SEQUENCE_CATALOG,\n"
                "  s.\"name\" AS SEQUENCE_SCHEMA,\n"
@@ -6234,7 +6262,7 @@ sql_update_default(Client c, mvc *sql, s
                "\n"
                "update sys._tables set system = true where system <> true\n"
                " and schema_id = (select s.id from sys.schemas s where s.name 
= 'information_schema')\n"
-               " and name in 
('character_sets','check_constraints','columns','schemata','sequences','table_constraints','tables','views');\n";
+               " and name in 
('character_sets','check_constraints','columns','schemata','sequences','referential_constraints','table_constraints','tables','views');\n";
                printf("Running database upgrade commands:\n%s\n", cmds);
                fflush(stdout);
                err = SQLstatementIntern(c, cmds, "update", true, false, NULL);
diff --git a/sql/scripts/91_information_schema.sql 
b/sql/scripts/91_information_schema.sql
--- a/sql/scripts/91_information_schema.sql
+++ b/sql/scripts/91_information_schema.sql
@@ -9,11 +9,12 @@
 -- ISO/IEC SQL/Schemata (as defined in ISO_9075_11_Schemata_2011_E.pdf)
 -- defines INFORMATION_SCHEMA schema and standardised views
 --
--- NOTE 1: The views have been extended with MonetDB specific information
---         columns such as schema_id, table_id, column_id, is_system, etc.
---         This eases joins with any sys.* tables/views.
--- NOTE 2: MonetDB does NOT support catalog qualifiers in object names, so
+-- NOTE 1: MonetDB does NOT support catalog qualifiers in object names, so
 --         all the *CATALOG* columns in next views will allways contain NULL.
+-- NOTE 2: Most views have been extended (after the standard columns) with
+--         MonetDB specific information columns such as schema_id, table_id,
+--         column_id, is_system, etc. This simplifies filtering and joins with
+--         system tables/views in sys or tmp schemas when needed.
 
 CREATE SCHEMA INFORMATION_SCHEMA;
 COMMENT ON SCHEMA INFORMATION_SCHEMA IS 'ISO/IEC 9075-11 SQL/Schemata';
@@ -209,7 +210,7 @@ CREATE VIEW INFORMATION_SCHEMA.TABLE_CON
   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,
+  cast('YES' AS varchar(3)) AS ENFORCED,
   -- MonetDB column extensions
   t."schema_id" AS schema_id,
   t."id" AS table_id,
@@ -223,6 +224,38 @@ CREATE VIEW INFORMATION_SCHEMA.TABLE_CON
 
 GRANT SELECT ON TABLE INFORMATION_SCHEMA.TABLE_CONSTRAINTS TO PUBLIC WITH 
GRANT OPTION;
 
+-- The view REFERENTIAL_CONSTRAINTS contains all referential (foreign key) 
constraints in the current database.
+-- Only those constraints are shown for which the current user has write 
access to the referencing table
+-- (by way of being the owner or having some privilege other than SELECT).
+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"
+ LEFT OUTER JOIN sys."schemas" uks ON uks."id" = ukt."schema_id"
+ ORDER BY s."name", t."name", fk."name";
+
+GRANT SELECT ON TABLE INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS TO PUBLIC 
WITH GRANT OPTION;
+
 -- The view SEQUENCES contains all sequences defined in the current database.
 -- Only those sequences are shown that the current user has access to
 -- (by way of being the owner or having some privilege).
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -12,6 +12,7 @@
 #include "rel_optimizer_private.h"
 #include "rel_basetable.h"
 #include "rel_exp.h"
+#include "rel_remote.h"
 #include "sql_privileges.h"
 
 static int
@@ -219,12 +220,17 @@ rel_rewrite_remote_(visitor *v, sql_rel 
        case op_basetable: {
                sql_table *t = rel->l;
 
-               /* set_remote() */
+               /* when a basetable wraps a sql_table (->l) which is remote we 
want to store its remote
+                * uri to the REMOTE property. As the property is pulled up the 
tree it can be used in
+                * the case of binary rel operators (see later switch cases) in 
order to
+                * 1. resolve properly (same uri) replica tables in the other 
subtree (that's why we
+                *    call the rewrite_replica)
+                * 2. pull REMOTE over the binary op if the other subtree has a 
matching uri remote table
+                */
                if (t && isRemote(t) && (p = find_prop(rel->p, PROP_REMOTE)) == 
NULL) {
-                       char *local_name = sa_strconcat(v->sql->sa, 
sa_strconcat(v->sql->sa, t->s->base.name, "."), t->base.name);
                        p = rel->p = prop_create(v->sql->sa, PROP_REMOTE, 
rel->p);
                        p->id = t->base.id;
-                       p->value.pval = local_name;
+                       p->value.pval = (void *)mapiuri_uri(t->query, 
v->sql->sa);
                }
        } break;
        case op_table:
@@ -290,6 +296,7 @@ rel_rewrite_remote_(visitor *v, sql_rel 
                if (rel->flag&MERGE_LEFT) /* search for any remote tables but 
don't propagate over to this relation */
                        return rel;
 
+               /* if both subtrees have the REMOTE property with the same uri 
then pull it up */
                if (l && (pl = find_prop(l->p, PROP_REMOTE)) != NULL &&
                        r && (pr = find_prop(r->p, PROP_REMOTE)) != NULL &&
                        strcmp(pl->value.pval, pr->value.pval) == 0) {
diff --git a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test 
b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
--- a/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
+++ b/sql/test/Dependencies/Tests/dependency_owner_schema_3.test
@@ -78,6 +78,9 @@ DEP_VIEW
 ids
 DEP_VIEW
 _tables
+table_constraints
+DEP_VIEW
+_tables
 tables
 DEP_VIEW
 _tables
@@ -180,6 +183,9 @@ comments
 schemata
 DEP_VIEW
 comments
+sequences
+DEP_VIEW
+comments
 tables
 DEP_VIEW
 comments
@@ -305,6 +311,9 @@ DEP_VIEW
 fkey_actions
 fkeys
 DEP_VIEW
+fkeys
+referential_constraints
+DEP_VIEW
 fully_qualified_functions
 describe_comments
 DEP_VIEW
@@ -428,6 +437,12 @@ DEP_VIEW
 keys
 ids
 DEP_VIEW
+keys
+referential_constraints
+DEP_VIEW
+keys
+table_constraints
+DEP_VIEW
 objects
 dependency_columns_on_indexes
 DEP_VIEW
@@ -558,15 +573,24 @@ schemas
 ids
 DEP_VIEW
 schemas
+referential_constraints
+DEP_VIEW
+schemas
 schemata
 DEP_VIEW
 schemas
+sequences
+DEP_VIEW
+schemas
 statistics
 DEP_VIEW
 schemas
 storage
 DEP_VIEW
 schemas
+table_constraints
+DEP_VIEW
+schemas
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to