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

Extending upgrade with code to redefine views: 
information_schema.check_constraints and information_schema.table_constraints


diffs (63 lines):

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
@@ -7142,6 +7142,59 @@ sql_update_aug2024(Client c, mvc *sql, s
                                                        printf("Running 
database upgrade commands:\n%s\n", query5);
                                                        fflush(stdout);
                                                        err = 
SQLstatementIntern(c, query5, "update", true, false, NULL);
+                                                       if (err == MAL_SUCCEED) 
{
+                                                               const char 
query6[] =
+                                                                       "DROP 
VIEW information_schema.check_constraints CASCADE;\n"
+                                                                       "DROP 
VIEW information_schema.table_constraints CASCADE;\n"
+                                                                       "CREATE 
VIEW INFORMATION_SCHEMA.CHECK_CONSTRAINTS AS SELECT\n"
+                                                                       "  
cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,\n"
+                                                                       "  
s.\"name\" AS CONSTRAINT_SCHEMA,\n"
+                                                                       "  
k.\"name\" AS CONSTRAINT_NAME,\n"
+                                                                       "  
sys.check_constraint(s.\"name\", k.\"name\") AS CHECK_CLAUSE,\n"
+                                                                       "  
t.\"schema_id\" AS schema_id,\n"
+                                                                       "  
t.\"id\" AS table_id,\n"
+                                                                       "  
t.\"name\" AS table_name,\n"
+                                                                       "  
k.\"id\" AS key_id\n"
+                                                                       " FROM 
(SELECT sk.\"id\", sk.\"table_id\", sk.\"name\" FROM sys.\"keys\" sk WHERE 
sk.\"type\" = 4 UNION ALL SELECT tk.\"id\", tk.\"table_id\", tk.\"name\" FROM 
tmp.\"keys\" tk WHERE tk.\"type\" = 4) k\n"
+                                                                       " INNER 
JOIN (SELECT st.\"id\", st.\"schema_id\", st.\"name\" FROM sys.\"_tables\" st 
UNION ALL SELECT tt.\"id\", tt.\"schema_id\", tt.\"name\" FROM tmp.\"_tables\" 
tt) t ON k.\"table_id\" = t.\"id\"\n"
+                                                                       " INNER 
JOIN sys.\"schemas\" s ON t.\"schema_id\" = s.\"id\"\n"
+                                                                       " ORDER 
BY s.\"name\", t.\"name\", k.\"name\";\n"
+                                                                       "GRANT 
SELECT ON TABLE INFORMATION_SCHEMA.CHECK_CONSTRAINTS TO PUBLIC WITH GRANT 
OPTION;\n"
+
+                                                                       "CREATE 
VIEW INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS SELECT\n"
+                                                                       "  
cast(NULL AS varchar(1)) AS CONSTRAINT_CATALOG,\n"
+                                                                       "  
s.\"name\" AS CONSTRAINT_SCHEMA,\n"
+                                                                       "  
k.\"name\" AS CONSTRAINT_NAME,\n"
+                                                                       "  
cast(NULL AS varchar(1)) AS TABLE_CATALOG,\n"
+                                                                       "  
s.\"name\" AS TABLE_SCHEMA,\n"
+                                                                       "  
t.\"name\" AS TABLE_NAME,\n"
+                                                                       "  
cast(CASE k.\"type\" WHEN 0 THEN 'PRIMARY KEY' WHEN 1 THEN 'UNIQUE' WHEN 2 THEN 
'FOREIGN KEY' WHEN 3 THEN 'UNIQUE NULLS NOT DISTINCT' WHEN 4 THEN 'CHECK' ELSE 
NULL END AS varchar(26)) 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"
+                                                                       "  
t.\"schema_id\" AS schema_id,\n"
+                                                                       "  
t.\"id\" AS table_id,\n"
+                                                                       "  
k.\"id\" AS key_id,\n"
+                                                                       "  
k.\"type\" AS key_type,\n"
+                                                                       "  
t.\"system\" AS is_system\n"
+                                                                       " 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\n"
+                                                                       " 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\"\n"
+                                                                       " INNER 
JOIN sys.\"schemas\" s ON t.\"schema_id\" = s.\"id\"\n"
+                                                                       " ORDER 
BY s.\"name\", t.\"name\", k.\"name\";\n"
+                                                                       "GRANT 
SELECT ON TABLE INFORMATION_SCHEMA.TABLE_CONSTRAINTS TO PUBLIC WITH GRANT 
OPTION;\n"
+                                                                       "\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 ('check_constraints','table_constraints');\n";
+                                                               sql_schema 
*infoschema = mvc_bind_schema(sql, "information_schema");
+                                                               if ((t = 
mvc_bind_table(sql, infoschema, "check_constraints")) != NULL)
+                                                                       
t->system = 0; /* make it non-system else the drop view will fail */
+                                                               if ((t = 
mvc_bind_table(sql, infoschema, "table_constraints")) != NULL)
+                                                                       
t->system = 0;
+                                                               printf("Running 
database upgrade commands:\n%s\n", query6);
+                                                               fflush(stdout);
+                                                               err = 
SQLstatementIntern(c, query6, "update", true, false, NULL);
+                                                       }
                                                }
                                        }
                                }
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to