Changeset: fe679689c934 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fe679689c934 Added Files: sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.err sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out Modified Files: sql/test/sys-schema/Tests/All Branch: Dec2016 Log Message:
Adding known referential integrity check test script for sys (and tmp) tables. The foreign keys in sys.dependencies are complex as they depend on the value of depend_type and may refer to multiple table per column! This requires more analysis before they can be defined and added. See TODO comments. diffs (truncated from 593 to 300 lines): diff --git a/sql/test/sys-schema/Tests/All b/sql/test/sys-schema/Tests/All --- a/sql/test/sys-schema/Tests/All +++ b/sql/test/sys-schema/Tests/All @@ -1,2 +1,3 @@ check_PrimaryKey_uniqueness check_AlternateKey_uniqueness +check_ForeignKey_referential_integrity diff --git a/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql new file mode 100644 --- /dev/null +++ b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql @@ -0,0 +1,123 @@ +-- check all standard sys (and tmp) tables on Referential integrity +-- All queries should return NO rows (so no invalid references found). +SELECT * FROM sys.schemas WHERE authorization NOT IN (SELECT id FROM sys.auths); +SELECT * FROM sys.schemas WHERE owner NOT IN (SELECT id FROM sys.auths); + +SELECT * FROM sys.tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +SELECT * FROM sys._tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +SELECT * FROM tmp._tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +SELECT * FROM sys.tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); +SELECT * FROM sys._tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); +SELECT * FROM tmp._tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); + +SELECT * FROM sys.columns WHERE table_id NOT IN (SELECT id FROM sys.tables); +SELECT * FROM sys._columns WHERE table_id NOT IN (SELECT id FROM sys._tables); +SELECT * FROM tmp._columns WHERE table_id NOT IN (SELECT id FROM tmp._tables); +SELECT * FROM sys.columns WHERE type NOT IN (SELECT sqlname FROM sys.types); +SELECT * FROM sys._columns WHERE type NOT IN (SELECT sqlname FROM sys.types); +SELECT * FROM sys._columns WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.functions WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +-- SELECT * FROM sys.functions WHERE type NOT IN (SELECT id FROM sys.function_types); -- table sys.function_types does not yet exist +SELECT * FROM sys.functions WHERE type NOT IN (1,2,3,4,5,6,7); -- replace this check when table sys.function_types becomes available +-- SELECT * FROM sys.functions WHERE language NOT IN (SELECT language_id FROM sys.function_languages); -- table sys.function_languages does not yet exist +SELECT * FROM sys.functions WHERE language NOT IN (0,1,2,3,4,5,6,7); -- replace this check when table sys.function_languages becomes available + +SELECT * FROM sys.systemfunctions WHERE function_id NOT IN (SELECT id FROM sys.functions); +-- systemfunctions should refer only to functions in MonetDB system schemas (on Dec2016 these are: sys, json, profiler and bam) +SELECT * FROM sys.systemfunctions WHERE function_id NOT IN (SELECT id FROM sys.functions WHERE schema_id IN (SELECT id FROM sys.schemas WHERE name IN ('sys','json','profiler','bam'))); + +SELECT * FROM sys.args WHERE func_id NOT IN (SELECT id FROM sys.functions); +SELECT * FROM sys.args WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.types WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +SELECT * FROM sys.types WHERE schema_id NOT IN (SELECT id FROM sys.schemas) AND schema_id <> 0; + +SELECT * FROM sys.keys WHERE table_id NOT IN (SELECT id FROM sys.tables); +SELECT * FROM sys.keys WHERE table_id NOT IN (SELECT id FROM sys._tables); +SELECT * FROM tmp.keys WHERE table_id NOT IN (SELECT id FROM tmp._tables); +-- SELECT * FROM sys.keys WHERE type NOT IN (SELECT key_type_id FROM sys.key_types); -- table sys.key_types does not yet exist +-- SELECT * FROM tmp.keys WHERE type NOT IN (SELECT key_type_id FROM sys.key_types); -- table sys.key_types does not yet exist +SELECT * FROM sys.keys WHERE type NOT IN (0, 1, 2); -- replace this check when table sys.key_types becomes available +SELECT * FROM tmp.keys WHERE type NOT IN (0, 1, 2); -- replace this check when table sys.key_types becomes available + +SELECT * FROM sys.idxs WHERE table_id NOT IN (SELECT id FROM sys.tables); +SELECT * FROM sys.idxs WHERE table_id NOT IN (SELECT id FROM sys._tables); +SELECT * FROM tmp.idxs WHERE table_id NOT IN (SELECT id FROM tmp._tables); +--SELECT * FROM sys.idxs WHERE type NOT IN (SELECT index_type_id FROM sys.index_types); -- table sys.index_types does not yet exist +--SELECT * FROM tmp.idxs WHERE type NOT IN (SELECT index_type_id FROM sys.index_types); -- table sys.index_types does not yet exist +SELECT * FROM sys.idxs WHERE type NOT IN (0, 1, 2); -- replace this check when table sys.index_types becomes available +SELECT * FROM tmp.idxs WHERE type NOT IN (0, 1, 2); -- replace this check when table sys.index_types becomes available + +SELECT * FROM sys.sequences WHERE schema_id NOT IN (SELECT id FROM sys.schemas); + +SELECT * FROM sys.triggers WHERE table_id NOT IN (SELECT id FROM sys.tables); +SELECT * FROM sys.triggers WHERE table_id NOT IN (SELECT id FROM sys._tables); +SELECT * FROM tmp.triggers WHERE table_id NOT IN (SELECT id FROM tmp._tables); + +SELECT * FROM sys.dependencies WHERE depend_type NOT IN (SELECT dependency_type_id FROM sys.dependency_types); + +-- to view the used depend_types run: SELECT depend_type, COUNT(*) AS count FROM sys.dependencies GROUP BY depend_type ORDER BY depend_type; +-- Key dependency on columns +SELECT * FROM sys.dependencies WHERE depend_type = 4 and id NOT IN (SELECT id FROM sys.columns); +SELECT * FROM sys.dependencies WHERE depend_type = 4 and depend_id NOT IN (SELECT id FROM sys.keys WHERE type IN (0,1)); +-- View dependency on tables (incl other views) +-- SELECT * FROM sys.dependencies WHERE depend_type = 5 and id NOT IN (SELECT id FROM sys.tables); -- TODO: refine check as it lists 7 rows +SELECT * FROM sys.dependencies WHERE depend_type = 5 and depend_id NOT IN (SELECT id FROM sys.tables); +-- Function dependency on columns (from views) +--SELECT * FROM sys.dependencies WHERE depend_type = 7 and id NOT IN (SELECT id FROM sys.columns); -- TODO: refine check as it lists 57 rows +SELECT * FROM sys.dependencies WHERE depend_type = 7 and depend_id NOT IN (SELECT id FROM sys.functions); +-- Index dependency on columns +SELECT * FROM sys.dependencies WHERE depend_type = 10 and id NOT IN (SELECT id FROM sys.columns); +SELECT * FROM sys.dependencies WHERE depend_type = 10 and depend_id NOT IN (SELECT id FROM sys.idxs); +-- FKey dependency on columns +--SELECT * FROM sys.dependencies WHERE depend_type = 11 and id NOT IN (SELECT id FROM sys.columns); -- TODO: refine check as it lists 3 rows +SELECT * FROM sys.dependencies WHERE depend_type = 11 and depend_id NOT IN (SELECT id FROM sys.keys WHERE type IN (2)); +-- Procedure dependency on columns (from views) +--SELECT * FROM sys.dependencies WHERE depend_type = 13 and id NOT IN (SELECT id FROM sys.columns); -- TODO: refine check as it lists 5 rows +SELECT * FROM sys.dependencies WHERE depend_type = 13 and depend_id NOT IN (SELECT id FROM sys.functions); +-- Type dependency on columns +--SELECT * FROM sys.dependencies WHERE depend_type = 15 and id NOT IN (SELECT id FROM sys.columns); -- TODO: change check as it lists all 46 rows +--SELECT * FROM sys.dependencies WHERE depend_type = 15 and depend_id NOT IN (SELECT id FROM sys.types); -- TODO: change check as it lists all 46 rows + +SELECT * FROM sys.auths WHERE grantor NOT IN (SELECT id FROM sys.auths) AND grantor > 0; +SELECT * FROM sys.users WHERE default_schema NOT IN (SELECT id FROM sys.schemas); +SELECT * FROM sys.db_user_info WHERE default_schema NOT IN (SELECT id FROM sys.schemas); + +--SELECT * FROM sys.user_role WHERE login_id NOT IN (SELECT name FROM sys.users); -- how is user_role.login_id connected to users.name? They have different data types/domains +SELECT * FROM sys.user_role WHERE role_id NOT IN (SELECT id FROM sys.auths); +SELECT * FROM sys.privileges WHERE auth_id NOT IN (SELECT id FROM sys.auths); +SELECT * FROM sys.privileges WHERE grantor NOT IN (SELECT id FROM sys.auths) AND grantor > 0; +-- SELECT * FROM sys.privileges WHERE privileges NOT IN (SELECT privilege_code_id FROM sys.privilege_codes); -- 1 and 16 -- table sys.privilege_codes does not yet exist +SELECT * FROM sys.privileges WHERE privileges NOT IN (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,32); -- replace this check when table sys.privilege_codes becomes available + +SELECT * FROM sys.querylog_catalog WHERE owner NOT IN (SELECT name FROM sys.users); +SELECT * FROM sys.querylog_calls WHERE id NOT IN (SELECT id FROM sys.querylog_catalog); +SELECT * FROM sys.querylog_history WHERE id NOT IN (SELECT id FROM sys.querylog_catalog); + +SELECT * FROM sys.queue WHERE tag NOT IN (SELECT qtag FROM sys.queue); +SELECT * FROM sys.queue WHERE "user" NOT IN (SELECT name FROM sys.users); + +SELECT * FROM sys.sessions WHERE "user" NOT IN (SELECT name FROM sys.users); + +SELECT * FROM sys.statistics WHERE column_id NOT IN (SELECT id FROM sys._columns); +SELECT * FROM sys.statistics WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.storage WHERE schema NOT IN (SELECT name FROM sys.schemas); +SELECT * FROM sys.storage WHERE table NOT IN (SELECT name FROM sys._tables); +SELECT * FROM sys.storage WHERE column NOT IN (SELECT name FROM sys._columns UNION ALL SELECT name FROM sys.keys); +SELECT * FROM sys.storage WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.storagemodel WHERE schema NOT IN (SELECT name FROM sys.schemas); +SELECT * FROM sys.storagemodel WHERE table NOT IN (SELECT name FROM sys._tables); +SELECT * FROM sys.storagemodel WHERE column NOT IN (SELECT name FROM sys._columns UNION ALL SELECT name FROM sys.keys); +SELECT * FROM sys.storagemodel WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.storagemodelinput WHERE schema NOT IN (SELECT name FROM sys.schemas); +SELECT * FROM sys.storagemodelinput WHERE table NOT IN (SELECT name FROM sys._tables); +SELECT * FROM sys.storagemodelinput WHERE column NOT IN (SELECT name FROM sys._columns UNION ALL SELECT name FROM sys.keys); +SELECT * FROM sys.storagemodelinput WHERE type NOT IN (SELECT sqlname FROM sys.types); + +SELECT * FROM sys.tablestoragemodel WHERE schema NOT IN (SELECT name FROM sys.schemas); +SELECT * FROM sys.tablestoragemodel WHERE table NOT IN (SELECT name FROM sys._tables); + diff --git a/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.err b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.err @@ -0,0 +1,34 @@ +stderr of test 'check_ForeignKey_referential_integrity` in directory 'sql/test/sys-schema` itself: + + +# 16:15:38 > +# 16:15:38 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=34676" "--set" "mapi_usock=/var/tmp/mtest-32669/.s.monetdb.34676" "--set" "monet_prompt=" "--forcemito" "--dbpath=/export/scratch2/dinther/INSTALL/var/MonetDB/mTests_sql_test_sys-schema" +# 16:15:38 > + +# builtin opt gdk_dbpath = /export/scratch2/dinther/INSTALL/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 34676 +# cmdline opt mapi_usock = /var/tmp/mtest-32669/.s.monetdb.34676 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /export/scratch2/dinther/INSTALL/var/MonetDB/mTests_sql_test_sys-schema +# cmdline opt gdk_debug = 536870922 + +# 16:15:38 > +# 16:15:38 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32669" "--port=34676" +# 16:15:38 > + + +# 16:15:38 > +# 16:15:38 > "Done." +# 16:15:38 > + diff --git a/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out @@ -0,0 +1,414 @@ +stdout of test 'check_ForeignKey_referential_integrity` in directory 'sql/test/sys-schema` itself: + + +# 16:15:38 > +# 16:15:38 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=34676" "--set" "mapi_usock=/var/tmp/mtest-32669/.s.monetdb.34676" "--set" "monet_prompt=" "--forcemito" "--dbpath=/export/scratch2/dinther/INSTALL/var/MonetDB/mTests_sql_test_sys-schema" +# 16:15:38 > + +# MonetDB 5 server v11.25.4 +# This is an unreleased version +# Serving database 'mTests_sql_test_sys-schema', using 8 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 128bit integers +# Found 15.589 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2017 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://toulouse.da.cwi.nl:34676/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-32669/.s.monetdb.34676 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded + +Ready. +#WARNING To speedup user.columnsize a bulk operator implementation is needed +# X_61:bat[:lng] := mal.multiplex("user":str,"columnsize":str,X_46:bat[:str],X_53:bat[:lng],X_60:bat[:lng]); +#WARNING To speedup user.heapsize a bulk operator implementation is needed +# X_71:bat[:lng] := mal.multiplex("user":str,"heapsize":str,X_46:bat[:str],X_60:bat[:lng],X_70:bat[:int]); +#WARNING To speedup user.hashsize a bulk operator implementation is needed +# X_80:bat[:lng] := mal.multiplex("user":str,"hashsize":str,X_79:bat[:bit],X_53:bat[:lng]); +#WARNING To speedup user.imprintsize a bulk operator implementation is needed +# X_82:bat[:lng] := mal.multiplex("user":str,"imprintsize":str,X_53:bat[:lng],X_46:bat[:str]); + +# 16:15:38 > +# 16:15:38 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-32669" "--port=34676" +# 16:15:38 > + +#SELECT * FROM sys.schemas WHERE authorization NOT IN (SELECT id FROM sys.auths); +% sys.schemas, sys.schemas, sys.schemas, sys.schemas, sys.schemas # table_name +% id, name, authorization, owner, system # name +% int, varchar, int, int, boolean # type +% 1, 0, 1, 1, 5 # length +#SELECT * FROM sys.schemas WHERE owner NOT IN (SELECT id FROM sys.auths); +% sys.schemas, sys.schemas, sys.schemas, sys.schemas, sys.schemas # table_name +% id, name, authorization, owner, system # name +% int, varchar, int, int, boolean # type +% 1, 0, 1, 1, 5 # length +#SELECT * FROM sys.tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +% .tables, .tables, .tables, .tables, .tables, .tables, .tables, .tables, .tables # table_name +% id, name, schema_id, query, type, system, commit_action, access, temporary # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint, tinyint # type +% 1, 0, 1, 0, 1, 5, 1, 1, 1 # length +#SELECT * FROM sys._tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +% sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables # table_name +% id, name, schema_id, query, type, system, commit_action, access # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint # type +% 1, 0, 1, 0, 1, 5, 1, 1 # length +#SELECT * FROM tmp._tables WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +% tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables # table_name +% id, name, schema_id, query, type, system, commit_action, access # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint # type +% 1, 0, 1, 0, 1, 5, 1, 1 # length +#SELECT * FROM sys.tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); +% .tables, .tables, .tables, .tables, .tables, .tables, .tables, .tables, .tables # table_name +% id, name, schema_id, query, type, system, commit_action, access, temporary # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint, tinyint # type +% 1, 0, 1, 0, 1, 5, 1, 1, 1 # length +#SELECT * FROM sys._tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); +% sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables, sys._tables # table_name +% id, name, schema_id, query, type, system, commit_action, access # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint # type +% 1, 0, 1, 0, 1, 5, 1, 1 # length +#SELECT * FROM tmp._tables WHERE type NOT IN (SELECT table_type_id FROM sys.table_types); +% tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables, tmp._tables # table_name +% id, name, schema_id, query, type, system, commit_action, access # name +% int, varchar, int, varchar, smallint, boolean, smallint, smallint # type +% 1, 0, 1, 0, 1, 5, 1, 1 # length +#SELECT * FROM sys.columns WHERE table_id NOT IN (SELECT id FROM sys.tables); +% .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM sys._columns WHERE table_id NOT IN (SELECT id FROM sys._tables); +% sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM tmp._columns WHERE table_id NOT IN (SELECT id FROM tmp._tables); +% tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns, tmp._columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM sys.columns WHERE type NOT IN (SELECT sqlname FROM sys.types); +% .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns, .columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM sys._columns WHERE type NOT IN (SELECT sqlname FROM sys.types); +% sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM sys._columns WHERE type NOT IN (SELECT sqlname FROM sys.types); +% sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns, sys._columns # table_name +% id, name, type, type_digits, type_scale, table_id, default, null, number, storage # name +% int, varchar, varchar, int, int, int, varchar, boolean, int, varchar # type +% 1, 0, 0, 1, 1, 1, 0, 5, 1, 0 # length +#SELECT * FROM sys.functions WHERE schema_id NOT IN (SELECT id FROM sys.schemas); +% sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions # table_name +% id, name, func, mod, language, type, side_effect, varres, vararg, schema_id # name +% int, varchar, varchar, varchar, int, int, boolean, boolean, boolean, int # type +% 1, 0, 0, 0, 1, 1, 5, 5, 5, 1 # length +#SELECT * FROM sys.functions WHERE type NOT IN (1,2,3,4,5,6,7); -- replace this check when table sys.function_types becomes available +% sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions # table_name +% id, name, func, mod, language, type, side_effect, varres, vararg, schema_id # name +% int, varchar, varchar, varchar, int, int, boolean, boolean, boolean, int # type +% 1, 0, 0, 0, 1, 1, 5, 5, 5, 1 # length +#SELECT * FROM sys.functions WHERE language NOT IN (0,1,2,3,4,5,6,7); -- replace this check when table sys.function_languages becomes available +% sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions, sys.functions # table_name +% id, name, func, mod, language, type, side_effect, varres, vararg, schema_id # name +% int, varchar, varchar, varchar, int, int, boolean, boolean, boolean, int # type +% 1, 0, 0, 0, 1, 1, 5, 5, 5, 1 # length +#SELECT * FROM sys.systemfunctions WHERE function_id NOT IN (SELECT id FROM sys.functions); +% sys.systemfunctions # table_name _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list