diff --git a/contrib/babelfishpg_tds/src/backend/tds/err_handler.c b/contrib/babelfishpg_tds/src/backend/tds/err_handler.c index 29165031c7b..3f9fdba2d82 100644 --- a/contrib/babelfishpg_tds/src/backend/tds/err_handler.c +++ b/contrib/babelfishpg_tds/src/backend/tds/err_handler.c @@ -10,6 +10,8 @@ #include "utils/elog.h" #include "utils/hsearch.h" #include "utils/palloc.h" /* Needed for pstrdup() */ +#include "utils/memutils.h" +#include #include "src/include/tds_int.h" #include "src/include/tds_response.h" @@ -344,8 +346,38 @@ emit_tds_log(ErrorData *edata) tsql_error_state = 1; } - TdsSendError(tsql_error_code, tsql_error_state, tsql_error_sev, - edata->message, error_lineno); + { + /* Rewrite truncated identifiers in error message */ + char *msg = edata->message; + + { + /* + * Rewrite truncated identifiers in error message. + * Truncated names are always [a-z0-9_] with 32-char hex MD5 suffix. + * Search for patterns matching NAMEDATALEN-1 chars that look like + * truncated identifiers and replace with full original from cache. + */ + typedef char *(*rewrite_fn_t)(const char *); + static rewrite_fn_t rewrite_fn = NULL; + static bool rewrite_resolved = false; + + if (!rewrite_resolved) + { + rewrite_fn = (rewrite_fn_t) dlsym(RTLD_DEFAULT, "bbf_rewrite_truncated_identifiers"); + rewrite_resolved = true; + } + + if (rewrite_fn) + { + char *newmsg = rewrite_fn(msg); + if (newmsg) + msg = newmsg; + } + } + + TdsSendError(tsql_error_code, tsql_error_state, tsql_error_sev, + msg, error_lineno); + } /* * If we've not reached the main query loop yet, flush the error diff --git a/contrib/babelfishpg_tds/src/backend/tds/tdsutils.c b/contrib/babelfishpg_tds/src/backend/tds/tdsutils.c index 6b6ab0fda45..bed4d75b232 100644 --- a/contrib/babelfishpg_tds/src/backend/tds/tdsutils.c +++ b/contrib/babelfishpg_tds/src/backend/tds/tdsutils.c @@ -364,6 +364,18 @@ TdsUTF8toUTF16StringInfo(StringInfo out, const void *vin, size_t len) for (i = 0; i < len;) { + if (in[i] >= 0x80 && (in[i] & 0xC0) == 0x80) + { + /* Continuation byte at start position - log diagnostic */ + StringInfoData hexdump; + int dumplen = (len < 128) ? (int)len : 128; + initStringInfo(&hexdump); + for (int d = 0; d < dumplen; d++) + appendStringInfo(&hexdump, "%02x ", in[d]); + elog(WARNING, "TdsUTF8toUTF16: invalid UTF8 at byte %d of %d, hex: %s, text: %.*s", + (int)i, (int)len, hexdump.data, (int)len, (const char *)vin); + pfree(hexdump.data); + } code = GetUTF8CodePoint(&in[i], len - i, &consumed); AddUTF16ToStringInfo(code, out); i += consumed; diff --git a/contrib/babelfishpg_tsql/runtime/functions.c b/contrib/babelfishpg_tsql/runtime/functions.c index 75951c90a7a..18af8f14379 100644 --- a/contrib/babelfishpg_tsql/runtime/functions.c +++ b/contrib/babelfishpg_tsql/runtime/functions.c @@ -2872,7 +2872,32 @@ object_name(PG_FUNCTION_ARGS) if (pg_class_aclcheck(object_id, user_id, ACL_SELECT) == ACLCHECK_OK) { Form_pg_class pg_class = (Form_pg_class) GETSTRUCT(tuple); - result_text = cstring_to_text(NameStr(pg_class->relname)); // make a copy before releasing syscache + char *relname = NameStr(pg_class->relname); + + /* Try to get original name from reloptions */ + if (strlen(relname) >= NAMEDATALEN - 1) + { + bool isnull; + Datum opts = SysCacheGetAttr(RELOID, tuple, Anum_pg_class_reloptions, &isnull); + if (!isnull) + { + ArrayType *arr = DatumGetArrayTypeP(opts); + Datum *elems; + int n; + deconstruct_array(arr, TEXTOID, -1, false, TYPALIGN_INT, &elems, NULL, &n); + for (int i = 0; i < n; i++) + { + char *s = text_to_cstring(DatumGetTextP(elems[i])); + if (strncmp(s, "bbf_original_rel_name=", 22) == 0) + { + result_text = cstring_to_text(s + 22); + break; + } + } + } + } + if (result_text == NULL) + result_text = cstring_to_text(relname); schema_id = pg_class->relnamespace; } ReleaseSysCache(tuple); diff --git a/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql b/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql index 9026454b32a..0ffbc2ac26a 100644 --- a/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql +++ b/contrib/babelfishpg_tsql/sql/babelfishpg_tsql.sql @@ -111,7 +111,7 @@ BEGIN END; $$; -CREATE OR REPLACE PROCEDURE sys.sp_helpdb(IN "@dbname" VARCHAR(32)) +CREATE OR REPLACE PROCEDURE sys.sp_helpdb(IN "@dbname" sys.sysname) LANGUAGE 'pltsql' AS $$ BEGIN @@ -361,7 +361,7 @@ CREATE OR REPLACE VIEW sys.sp_columns_100_view AS SELECT CAST(t4."TABLE_CATALOG" AS sys.sysname) AS TABLE_QUALIFIER, CAST(t4."TABLE_SCHEMA" AS sys.sysname) AS TABLE_OWNER, - CAST( + COALESCE( (SELECT pg_catalog.string_agg( CASE @@ -369,8 +369,8 @@ SELECT ELSE NULL END, ',') FROM unnest(t1.reloptions) AS option), - t4."TABLE_NAME") - AS sys.sysname) AS TABLE_NAME, + t4."TABLE_NAME"::text) + ::sys.sysname AS TABLE_NAME, CAST( COALESCE( (SELECT pg_catalog.string_agg( @@ -465,9 +465,6 @@ CREATE OR REPLACE PROCEDURE sys.sp_columns ( "@fusepattern" smallint = 1) AS $$ BEGIN - -- TODO: we should be able to get rid of babelfish_truncate_identifier when we fix BABEL-5416 - declare @truncated_ident sys.nvarchar(384); - select @truncated_ident = sys.babelfish_truncate_identifier(pg_catalog.lower(@table_name)); IF @fusepattern = 1 select table_qualifier as TABLE_QUALIFIER, table_owner as TABLE_OWNER, @@ -499,7 +496,7 @@ BEGIN END ) as SS_DATA_TYPE from sys.sp_columns_100_view - where table_name like @truncated_ident COLLATE database_default + where table_name like @table_name COLLATE database_default and (coalesce(@table_owner,'') = '' or table_owner like @table_owner collate database_default) and (coalesce(@table_qualifier,'') = '' or table_qualifier like @table_qualifier collate database_default) and (coalesce(@column_name,'') = '' or column_name like @column_name collate database_default) @@ -538,7 +535,7 @@ BEGIN END ) as SS_DATA_TYPE from sys.sp_columns_100_view - where table_name = @truncated_ident collate database_default + where table_name = @table_name collate database_default and (coalesce(@table_owner, '') = '' or table_owner = @table_owner collate database_default) and (coalesce(@table_qualifier,'') = '' or table_qualifier = @table_qualifier collate database_default) and (coalesce(@column_name,'') = '' or column_name = @column_name collate database_default) @@ -561,9 +558,6 @@ CREATE OR REPLACE PROCEDURE sys.sp_columns_100 ( "@fusepattern" smallint = 1) AS $$ BEGIN - -- TODO: we should be able to get rid of babelfish_truncate_identifier when we fix BABEL-5416 - declare @truncated_ident sys.nvarchar(384); - select @truncated_ident = sys.babelfish_truncate_identifier(pg_catalog.lower(@table_name)); IF @fusepattern = 1 select table_qualifier as TABLE_QUALIFIER, table_owner as TABLE_OWNER, @@ -606,7 +600,7 @@ BEGIN ) as SS_DATA_TYPE from sys.sp_columns_100_view -- TODO: Temporary fix to use \ as escape character for now, need to remove ESCAPE clause from LIKE once we have fixed the dependencies on this procedure - where table_name like @truncated_ident COLLATE database_default ESCAPE '\' -- ' adding quote in comment to suppress build warning + where table_name like @table_name COLLATE database_default ESCAPE '\' -- ' adding quote in comment to suppress build warning and (coalesce(@table_owner,'') = '' or table_owner like @table_owner collate database_default ESCAPE '\') -- ' adding quote in comment to suppress build warning and (coalesce(@table_qualifier,'') = '' or table_qualifier like @table_qualifier collate database_default) and (coalesce(@column_name,'') = '' or column_name like @column_name collate database_default) @@ -655,7 +649,7 @@ BEGIN END ) as SS_DATA_TYPE from sys.sp_columns_100_view - where table_name = @truncated_ident collate database_default + where table_name = @table_name collate database_default and (coalesce(@table_owner, '') = '' or table_owner = @table_owner collate database_default) and (coalesce(@table_qualifier,'') = '' or table_qualifier = @table_qualifier collate database_default) and (coalesce(@column_name,'') = '' or column_name = @column_name collate database_default) @@ -1092,7 +1086,7 @@ CREATE OR REPLACE VIEW sys.sp_tables_view AS SELECT t2.dbname AS TABLE_QUALIFIER, CAST(t3.name AS name) AS TABLE_OWNER, -t1.relname AS TABLE_NAME, +COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(t1.reloptions) AS option), t1.relname::text)::sys.sysname AS TABLE_NAME, CASE WHEN t1.relkind = 'v' @@ -1299,7 +1293,7 @@ CAST(t1.relname AS sys.sysname) AS INDEX_QUALIFIER, -- the ones not in pg_constraint) and restoring it back before display CASE WHEN t8.oid > 0 THEN CAST(t6.relname AS sys.sysname) -ELSE CAST(pg_catalog.SUBSTRING(t6.relname,1,LENGTH(t6.relname)-32-LENGTH(t1.relname)) AS sys.sysname) +ELSE COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(t6.reloptions) AS option), t6.relname::text)::sys.sysname END AS INDEX_NAME, CASE WHEN t5.indisclustered = 't' THEN CAST(1 AS smallint) @@ -1690,7 +1684,7 @@ CASE AS IS_NULLABLE, CAST(nsp_ext.dbname AS sys.sysname) AS TABLE_QUALIFIER, CAST(s1.name AS sys.sysname) AS TABLE_OWNER, -CAST(C.relname AS sys.sysname) AS TABLE_NAME, +COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(C.reloptions) AS option), C.relname::text)::sys.sysname AS TABLE_NAME, CASE WHEN X.indisprimary @@ -1942,11 +1936,11 @@ CREATE OR REPLACE VIEW sys.sp_fkeys_view AS SELECT CAST(nsp_ext2.dbname AS sys.sysname) AS PKTABLE_QUALIFIER, CAST(bbf_nsp2.orig_name AS sys.sysname) AS PKTABLE_OWNER , -CAST(c2.relname AS sys.sysname) AS PKTABLE_NAME, +COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(c2.reloptions) AS option), c2.relname::text)::sys.sysname AS PKTABLE_NAME, CAST(COALESCE(split_part(a2.attoptions[1] COLLATE "C", '=', 2),a2.attname) AS sys.sysname) AS PKCOLUMN_NAME, CAST(nsp_ext.dbname AS sys.sysname) AS FKTABLE_QUALIFIER, CAST(bbf_nsp.orig_name AS sys.sysname) AS FKTABLE_OWNER , -CAST(c.relname AS sys.sysname) AS FKTABLE_NAME, +COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(c.reloptions) AS option), c.relname::text)::sys.sysname AS FKTABLE_NAME, CAST(COALESCE(split_part(a.attoptions[1] COLLATE "C", '=', 2),a.attname) AS sys.sysname) AS FKCOLUMN_NAME, CAST(nr AS smallint) AS KEY_SEQ, CASE @@ -2059,8 +2053,8 @@ CAST(d.name AS sys.sysname) COLLATE sys.database_default AS PROCEDURE_QUALIFIER, CAST(s1.name AS sys.sysname) AS PROCEDURE_OWNER, CASE - WHEN p.prokind = 'p' THEN CAST(PG_CATALOG.concat(p.proname, ';1') AS sys.nvarchar(134)) - ELSE CAST(PG_CATALOG.concat(p.proname, ';0') AS sys.nvarchar(134)) + WHEN p.prokind = 'p' THEN CAST(PG_CATALOG.concat(COALESCE(f.orig_name, p.proname::sys.NVARCHAR(128)), ';1') AS sys.nvarchar(134)) + ELSE CAST(PG_CATALOG.concat(COALESCE(f.orig_name, p.proname::sys.NVARCHAR(128)), ';0') AS sys.nvarchar(134)) END AS PROCEDURE_NAME, -1 AS NUM_INPUT_PARAMS, @@ -2073,6 +2067,7 @@ FROM pg_catalog.pg_proc p INNER JOIN sys.schemas s1 ON p.pronamespace = s1.schema_id INNER JOIN sys.databases d ON d.database_id = sys.db_id() +LEFT JOIN sys.babelfish_function_ext f ON p.proname = f.funcname AND p.pronamespace::regnamespace::name = f.nspname UNION @@ -2335,9 +2330,9 @@ BEGIN LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname LEFT OUTER JOIN sys.babelfish_authid_login_ext As LogExt ON LogExt.rolname = Ext1.login_name LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Base3.rolname = LogExt.rolname - LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.name = DB_NAME() + LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.dbid = sys.db_id() LEFT OUTER JOIN pg_catalog.pg_roles AS Base4 ON Base4.rolname = Bsdb.owner - WHERE Ext1.database_name = DB_NAME() + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type != 'R' AND ((Ext2.orig_username IS NULL AND Base2.oid IS NULL) OR Ext2.type = 'R') -- We should only show public if user has no members i.e. Base2.oid is NULL AND Ext1.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') @@ -2357,7 +2352,7 @@ BEGIN FROM sys.babelfish_authid_user_ext WHERE (orig_username = @name_in_db OR pg_catalog.lower(orig_username) = pg_catalog.lower(@name_in_db)) - AND database_name = DB_NAME() + AND database_name = sys.bbf_cur_db() collate database_default AND type = 'R') BEGIN SELECT CAST(Ext1.orig_username AS SYS.SYSNAME) AS 'Role_name', @@ -2369,8 +2364,8 @@ BEGIN INNER JOIN pg_catalog.pg_auth_members AS Authmbr ON Base2.oid = Authmbr.member LEFT OUTER JOIN pg_catalog.pg_roles AS Base1 ON Base1.oid = Authmbr.roleid LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname - WHERE Ext1.database_name = DB_NAME() - AND Ext2.database_name = DB_NAME() + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type = 'R' AND Ext2.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') AND (Ext1.orig_username = @name_in_db OR pg_catalog.lower(Ext1.orig_username) = pg_catalog.lower(@name_in_db)) @@ -2381,7 +2376,7 @@ BEGIN FROM sys.babelfish_authid_user_ext WHERE (orig_username = @name_in_db OR pg_catalog.lower(orig_username) = pg_catalog.lower(@name_in_db)) - AND database_name = DB_NAME() + AND database_name = sys.bbf_cur_db() collate database_default AND type != 'R') BEGIN SELECT CAST(Ext1.orig_username AS SYS.SYSNAME) AS 'UserName', @@ -2406,9 +2401,9 @@ BEGIN LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname LEFT OUTER JOIN sys.babelfish_authid_login_ext As LogExt ON LogExt.rolname = Ext1.login_name LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Base3.rolname = LogExt.rolname - LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.name = DB_NAME() + LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.dbid = sys.db_id() LEFT OUTER JOIN pg_catalog.pg_roles AS Base4 ON Base4.rolname = Bsdb.owner - WHERE Ext1.database_name = DB_NAME() + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type != 'R' AND ((Ext2.orig_username IS NULL AND Base2.oid IS NULL) OR Ext2.type = 'R') -- We should only show public if user has no members i.e. Base2.oid is NULL AND Ext1.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') @@ -2435,7 +2430,7 @@ BEGIN FROM pg_catalog.pg_roles AS Base INNER JOIN sys.babelfish_authid_user_ext AS Ext ON Base.rolname = Ext.rolname - WHERE Ext.database_name = DB_NAME() + WHERE Ext.database_name = sys.bbf_cur_db() collate database_default AND Ext.type = 'R' ORDER BY RoleName; END @@ -2444,7 +2439,7 @@ BEGIN FROM sys.babelfish_authid_user_ext WHERE (orig_username = @rolename OR pg_catalog.lower(orig_username) = pg_catalog.lower(@rolename)) - AND database_name = DB_NAME() + AND database_name = sys.bbf_cur_db() collate database_default AND type = 'R') BEGIN SELECT CAST(Ext.orig_username AS sys.SYSNAME) AS 'RoleName', @@ -2453,7 +2448,7 @@ BEGIN FROM pg_catalog.pg_roles AS Base INNER JOIN sys.babelfish_authid_user_ext AS Ext ON Base.rolname = Ext.rolname - WHERE Ext.database_name = DB_NAME() + WHERE Ext.database_name = sys.bbf_cur_db() collate database_default AND Ext.type = 'R' AND (Ext.orig_username = @rolename OR pg_catalog.lower(Ext.orig_username) = pg_catalog.lower(@rolename)) ORDER BY RoleName; @@ -2481,8 +2476,8 @@ BEGIN INNER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.member INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname - WHERE Ext1.database_name = DB_NAME() - AND Ext2.database_name = DB_NAME() + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type = 'R' AND Ext2.orig_username != 'db_owner' ORDER BY RoleName, MemberName; @@ -2492,7 +2487,7 @@ BEGIN FROM sys.babelfish_authid_user_ext WHERE (orig_username = @rolename OR pg_catalog.lower(orig_username) = pg_catalog.lower(@rolename)) - AND database_name = DB_NAME() + AND database_name = sys.bbf_cur_db() collate database_default AND type = 'R') BEGIN SELECT CAST(Ext1.orig_username AS sys.SYSNAME) AS 'RoleName', @@ -2503,8 +2498,8 @@ BEGIN INNER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.member INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname - WHERE Ext1.database_name = DB_NAME() - AND Ext2.database_name = DB_NAME() + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type = 'R' AND Ext2.orig_username != 'db_owner' AND (Ext1.orig_username = @rolename OR pg_catalog.lower(Ext1.orig_username) = pg_catalog.lower(@rolename)) @@ -3128,7 +3123,7 @@ BEGIN IF @row_count > 3 BEGIN SELECT @dbname = value FROM #sp_rename_temptable2 WHERE id = 4; - IF @dbname != sys.db_name() + IF @dbname != sys.db_name() collate database_default BEGIN THROW 33557097, N'No item by the given @objname could be found in the current database', 1; END @@ -3156,7 +3151,7 @@ BEGIN IF @row_count > 2 BEGIN SELECT @dbname = value FROM #sp_rename_temptable2 WHERE id = 3; - IF @dbname != sys.db_name() + IF @dbname != sys.db_name() collate database_default BEGIN THROW 33557097, N'No item by the given @objname could be found in the current database', 1; END @@ -3210,7 +3205,7 @@ BEGIN IF @objtype = 'COLUMN' BEGIN DECLARE @col_count INT; - SELECT @col_count = COUNT(*)FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @curr_relname and COLUMN_NAME = @subname; + SELECT @col_count = COUNT(*)FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname)) and COLUMN_NAME = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)); IF @col_count < 0 BEGIN THROW 33557097, N'There is no object with the given @objname.', 1; @@ -3222,13 +3217,13 @@ BEGIN DECLARE @relid INT = 0; DECLARE @index_count INT; SELECT @relid = object_id FROM sys.objects o1 INNER JOIN sys.schemas s1 ON o1.schema_id = s1.schema_id - WHERE s1.name = @schemaname AND o1.name = @curr_relname; + WHERE s1.name = @schemaname AND o1.name = sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname)); IF @relid = 0 BEGIN THROW 33557097, N'There is no object with the given @objname.', 1; END SELECT @index_count = COUNT(*) FROM pg_index i JOIN pg_class c ON i.indexrelid = c.oid - WHERE i.indrelid = @relid AND c.relname = sys.babelfish_construct_unique_index_name(@subname, @curr_relname); + WHERE i.indrelid = @relid AND c.relname = sys.babelfish_construct_unique_index_name(sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)), sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname))); IF @index_count < 0 BEGIN THROW 33557097, N'There is no object with the given @objname.', 1; @@ -3270,7 +3265,7 @@ BEGIN ELSE 'FN' END as sys.bpchar(2)) AS type INTO #tempTable FROM pg_proc p INNER JOIN sys.schemas s1 ON p.pronamespace = s1.schema_id - WHERE s1.name = @schemaname AND CAST(p.proname AS sys.sysname) = @subname; + WHERE s1.name = @schemaname AND CAST(p.proname AS sys.sysname) = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)); SELECT @count = COUNT(*) FROM #tempTable; END IF @count > 1 @@ -3304,7 +3299,7 @@ BEGIN DECLARE @physical_schema_name sys.nvarchar(776) = ''; SELECT @physical_schema_name = nspname FROM sys.babelfish_namespace_ext WHERE dbid = sys.db_id() AND orig_name = @schemaname; SELECT @curr_relname = relname FROM pg_catalog.pg_trigger tr LEFT JOIN pg_catalog.pg_class c ON tr.tgrelid = c.oid LEFT JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid - WHERE tr.tgname = @subname AND n.nspname = @physical_schema_name; + WHERE tr.tgname = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)) AND n.nspname = @physical_schema_name; END END ELSE @@ -3749,7 +3744,7 @@ LANGUAGE 'pltsql' AS $$ BEGIN DECLARE @cmd sys.NVARCHAR(300) - DECLARE @db sys.sysname = DB_NAME() + DECLARE @db sys.sysname = DB_NAME() collate database_default -- For a NULL login name, do nothing IF @loginame IS NULL @@ -3784,7 +3779,7 @@ AS $$ BEGIN IF @procedure_schema IS NULL OR @procedure_schema = '' BEGIN - SELECT @procedure_schema = default_schema_name from sys.babelfish_authid_user_ext WHERE orig_username = user_name() AND database_name = db_name(); + SELECT @procedure_schema = default_schema_name from sys.babelfish_authid_user_ext WHERE orig_username = user_name() AND database_name = sys.bbf_cur_db() collate database_default; END SELECT v.column_name AS [PARAMETER_NAME], diff --git a/contrib/babelfishpg_tsql/sql/information_schema_tsql.sql b/contrib/babelfishpg_tsql/sql/information_schema_tsql.sql index 65b380b65d0..e179c09b133 100644 --- a/contrib/babelfishpg_tsql/sql/information_schema_tsql.sql +++ b/contrib/babelfishpg_tsql/sql/information_schema_tsql.sql @@ -260,6 +260,7 @@ CREATE OR REPLACE VIEW information_schema_tsql.columns_internal AS ELSE NULL END, ',') FROM unnest(a.attoptions) AS option), + sys.bbf_get_view_column_name(a.attrelid, a.attnum::smallint), a.attname) AS sys.nvarchar(128)) AS "COLUMN_NAME", @@ -514,10 +515,10 @@ BEGIN RETURN QUERY SELECT CAST(db_name AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", CAST(ext.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", - CAST(c.conname AS sys.sysname) AS "CONSTRAINT_NAME", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nsp.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.sysname AS "CONSTRAINT_NAME", CAST(db_name AS sys.nvarchar(128)) AS "TABLE_CATALOG", CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", - CAST(r.relname AS sys.sysname) AS "TABLE_NAME", + COALESCE(case when octet_length(r.relname) >= 60 then (select substring(opt, 23) from unnest(r.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, r.relname::text)::sys.sysname AS "TABLE_NAME", CAST( CASE c.contype WHEN 'c' THEN 'CHECK' WHEN 'f' THEN 'FOREIGN KEY' @@ -606,7 +607,7 @@ GRANT SELECT ON information_schema_tsql.views TO PUBLIC; CREATE VIEW information_schema_tsql.check_constraints AS SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", CAST(extc.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", - CAST(c.conname AS sys.sysname) AS "CONSTRAINT_NAME", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nc.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.sysname AS "CONSTRAINT_NAME", CAST(sys.tsql_get_constraintdef(c.oid) AS sys.nvarchar(4000)) AS "CHECK_CLAUSE" FROM sys.pg_namespace_ext nc LEFT OUTER JOIN sys.babelfish_namespace_ext extc ON nc.nspname = extc.nspname, @@ -856,11 +857,11 @@ CREATE OR REPLACE VIEW information_schema_tsql.key_column_usage AS SELECT CAST(db_name AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", CAST(ext.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", - CAST(c.conname AS sys.nvarchar(128)) AS "CONSTRAINT_NAME", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nsp.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.nvarchar(128) AS "CONSTRAINT_NAME", CAST(db_name AS sys.nvarchar(128)) AS "TABLE_CATALOG", CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", - CAST(r.relname AS sys.nvarchar(128)) AS "TABLE_NAME", - CAST(a.attname AS sys.nvarchar(128)) AS "COLUMN_NAME", + COALESCE(case when octet_length(r.relname) >= 60 then (select substring(opt, 23) from unnest(r.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, r.relname::text)::sys.nvarchar(128) AS "TABLE_NAME", + COALESCE(case when octet_length(a.attname) >= 60 then (select substring(opt, 19) from unnest(a.attoptions) opt where opt like 'bbf_original_name=%' limit 1) end, a.attname::text)::sys.nvarchar(128) AS "COLUMN_NAME", CAST(ord AS int) AS "ORDINAL_POSITION" FROM pg_constraint c diff --git a/contrib/babelfishpg_tsql/sql/ownership.sql b/contrib/babelfishpg_tsql/sql/ownership.sql index 0e46cd9a943..6e38dd9a30a 100644 --- a/contrib/babelfishpg_tsql/sql/ownership.sql +++ b/contrib/babelfishpg_tsql/sql/ownership.sql @@ -9,6 +9,7 @@ CREATE TABLE sys.babelfish_sysdatabases ( name TEXT NOT NULL COLLATE "C", crdate timestamptz NOT NULL, properties TEXT NOT NULL COLLATE "C", + orig_name sys.NVARCHAR(128) COLLATE sys.database_default, PRIMARY KEY (name) ); @@ -61,10 +62,21 @@ CREATE TABLE sys.babelfish_namespace_ext ( ); GRANT SELECT ON sys.babelfish_namespace_ext TO PUBLIC; +-- BABELFISH_IDENTIFIER_MAPPING +CREATE TABLE sys.babelfish_identifier_mapping ( + nspname NAME NOT NULL, + pg_catalog_type OID NOT NULL, + truncated_identifier_name NAME NOT NULL, + original_identifier_name sys.NVARCHAR(128) NOT NULL COLLATE sys.database_default, + parent_name NAME NOT NULL DEFAULT '', + PRIMARY KEY (truncated_identifier_name, nspname, pg_catalog_type, parent_name) +); +GRANT SELECT ON sys.babelfish_identifier_mapping TO PUBLIC; + -- SYSDATABASES CREATE OR REPLACE VIEW sys.sysdatabases AS SELECT -t.name, +t.orig_name AS name, sys.db_id(t.name) AS dbid, CAST(CAST(r.oid AS int) AS SYS.VARBINARY(85)) AS sid, CAST(0 AS SMALLINT) AS mode, @@ -83,7 +95,7 @@ GRANT SELECT ON sys.sysdatabases TO PUBLIC; -- PG_NAMESPACE_EXT CREATE VIEW sys.pg_namespace_ext AS -SELECT BASE.* , DB.name as dbname FROM +SELECT BASE.* , DB.orig_name as dbname FROM pg_catalog.pg_namespace AS base LEFT OUTER JOIN sys.babelfish_namespace_ext AS EXT on BASE.nspname = EXT.nspname INNER JOIN sys.babelfish_sysdatabases AS DB ON EXT.dbid = DB.dbid; @@ -400,6 +412,7 @@ SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_namespace_ext', ''); SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_authid_login_ext', ''); SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_authid_user_ext', ''); SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_schema_permissions', ''); +SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_identifier_mapping', ''); CREATE OR REPLACE FUNCTION sys.bbf_is_role_member(member NAME, rolename NAME) RETURNS BOOLEAN @@ -464,7 +477,7 @@ LEFT OUTER JOIN sys.babelfish_sysdatabases AS Db ON Ext.database_name COLLATE sys.database_default = Db.name LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Db.owner = Base3.rolname -WHERE Ext.database_name = DB_NAME() +WHERE Ext.database_name = sys.bbf_cur_db() collate database_default AND (Ext.orig_username IN ('dbo', 'db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin', 'guest') -- system users should always be visible OR bbf_is_role_member(current_user, Ext.rolname)) -- Current user should be able to see users it has permission of UNION ALL @@ -569,7 +582,7 @@ LEFT OUTER JOIN sys.babelfish_sysdatabases AS Db ON Ext.database_name COLLATE sys.database_default = Db.name LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Db.owner = Base3.rolname -WHERE Ext.database_name = sys.DB_NAME() +WHERE Ext.database_name = sys.bbf_cur_db() collate database_default AND ((Ext.rolname = CURRENT_USER AND Ext.type in ('S','U')) OR ((SELECT orig_username FROM sys.babelfish_authid_user_ext WHERE rolname = CURRENT_USER) != 'dbo' AND Ext.type = 'R' AND pg_has_role(current_user, Ext.rolname, 'MEMBER'))) UNION ALL @@ -622,7 +635,7 @@ CASE WHEN Dbp.type_desc = 'DATABASE_ROLE' THEN 1 ELSE 0 END AS issqlrole, CAST(0 AS INT) AS isapprole FROM sys.database_principals AS Dbp LEFT JOIN (SELECT orig_username, user_can_connect FROM sys.babelfish_authid_user_ext - WHERE database_name = DB_NAME()) AS Ext + WHERE database_name = sys.bbf_cur_db() collate database_default) AS Ext ON Dbp.name = Ext.orig_username; GRANT SELECT ON sys.sysusers TO PUBLIC; @@ -655,8 +668,8 @@ INNER JOIN pg_catalog.pg_roles AS Auth1 ON Auth1.oid = Authmbr.roleid INNER JOIN pg_catalog.pg_roles AS Auth2 ON Auth2.oid = Authmbr.member INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Auth1.rolname = Ext1.rolname INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Auth2.rolname = Ext2.rolname -WHERE Ext1.database_name = DB_NAME() -AND Ext2.database_name = DB_NAME() +WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default +AND Ext2.database_name = sys.bbf_cur_db() collate database_default AND Ext1.type = 'R' AND Ext2.orig_username != 'db_owner'; @@ -702,7 +715,7 @@ RETURNS table ( create or replace view sys.databases as select - CAST(d.name as SYS.SYSNAME) as name + CAST(d.orig_name as SYS.SYSNAME) as name , CAST(sys.db_id(d.name) as INT) as database_id , CAST(NULL as INT) as source_database_id , cast(s.sid as SYS.VARBINARY(85)) as owner_sid diff --git a/contrib/babelfishpg_tsql/sql/sys_function_helpers.sql b/contrib/babelfishpg_tsql/sql/sys_function_helpers.sql index 955e30ff1cd..643876cf871 100644 --- a/contrib/babelfishpg_tsql/sql/sys_function_helpers.sql +++ b/contrib/babelfishpg_tsql/sql/sys_function_helpers.sql @@ -11492,3 +11492,7 @@ LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION sys.babelfish_construct_unique_index_name(index_name TEXT, table_name TEXT) RETURNS TEXT AS 'babelfishpg_tsql', 'bbf_construct_unique_index_name' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION sys.bbf_get_view_column_name(view_oid OID, attnum SMALLINT) +RETURNS TEXT AS 'babelfishpg_tsql', 'bbf_get_view_column_name' +LANGUAGE C STABLE PARALLEL SAFE; diff --git a/contrib/babelfishpg_tsql/sql/sys_functions.sql b/contrib/babelfishpg_tsql/sql/sys_functions.sql index ed20476e1e8..d13ae7065d4 100644 --- a/contrib/babelfishpg_tsql/sql/sys_functions.sql +++ b/contrib/babelfishpg_tsql/sql/sys_functions.sql @@ -2593,6 +2593,11 @@ CREATE OR REPLACE FUNCTION sys.db_name() RETURNS sys.nvarchar(128) AS 'babelfishpg_tsql', 'babelfish_db_name' LANGUAGE C PARALLEL SAFE STABLE; +-- Returns truncated internal database name (for internal comparisons with database_name column) +CREATE OR REPLACE FUNCTION sys.bbf_cur_db() RETURNS TEXT +AS 'babelfishpg_tsql', 'babelfish_db_name_internal' +LANGUAGE C PARALLEL SAFE STABLE; + CREATE OR REPLACE FUNCTION sys.exp(IN arg DOUBLE PRECISION) RETURNS DOUBLE PRECISION AS 'babelfishpg_tsql', 'tsql_exp' diff --git a/contrib/babelfishpg_tsql/sql/sys_views.sql b/contrib/babelfishpg_tsql/sql/sys_views.sql index 391c979489d..63014e0dcb1 100644 --- a/contrib/babelfishpg_tsql/sql/sys_views.sql +++ b/contrib/babelfishpg_tsql/sql/sys_views.sql @@ -18,7 +18,12 @@ with tt_internal as MATERIALIZED select * from sys.table_types_internal ) select - CAST(t.relname as sys._ci_sysname) as name + CAST(coalesce( + (select PG_CATALOG.string_agg( + case when option like 'bbf_original_rel_name=%%' then substring(option, 23) + else NULL end, ',') + from unnest(t.reloptions) as option), + t.relname::text) as sys._ci_sysname) as name , CAST(t.oid as int) as object_id , CAST(NULL as int) as principal_id , CAST(t.relnamespace as int) as schema_id @@ -111,7 +116,12 @@ GRANT SELECT ON sys.shipped_objects_not_in_sys TO PUBLIC; create or replace view sys.views as select - CAST(t.relname as sys.sysname) as name + CAST(coalesce( + (select PG_CATALOG.string_agg( + case when option like 'bbf_original_rel_name=%%' then substring(option, 23) + else NULL end, ',') + from unnest(t.reloptions) as option), + t.relname::text) as sys.sysname) as name , t.oid::int as object_id , null::integer as principal_id , sch.schema_id::int as schema_id @@ -408,7 +418,12 @@ $$ LANGUAGE plpgsql IMMUTABLE STRICT; create or replace view sys.all_columns as select CAST(c.oid as int) as object_id - , CAST(a.attname as sys.sysname) as name + , CAST(COALESCE( + (SELECT PG_CATALOG.string_agg( + CASE WHEN option LIKE 'bbf_original_name=%' THEN substring(option, 19) ELSE NULL END, ',' + ) FROM unnest(a.attoptions) AS option), + sys.bbf_get_view_column_name(a.attrelid, a.attnum::smallint), + a.attname::text) as sys.sysname) as name , CAST(a.attnum as int) as column_id , CAST(t.oid as int) as system_type_id , CAST(t.oid as int) as user_type_id @@ -509,7 +524,13 @@ $$ BEGIN RETURN QUERY SELECT CAST(c.oid AS int), - CAST(a.attname AS sys.sysname), + CAST(coalesce( + (select substring(val, 19) from (select unnest(a.attoptions) as val) opts where val like 'bbf_original_name=%%' limit 1), + case when c.relkind = 'v' and length(a.attname) >= 63 + then sys.bbf_get_view_column_name(c.oid, a.attnum) + end, + a.attname) + AS sys.sysname), CAST(a.attnum AS int), CASE WHEN tsql_type_name IS NOT NULL OR t.typbasetype = 0 THEN @@ -716,7 +737,14 @@ GRANT SELECT ON sys.foreign_key_columns TO PUBLIC; CREATE OR replace view sys.foreign_keys AS SELECT - CAST(c.conname AS sys.SYSNAME) AS name + CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) AS sys.sysname) AS name , CAST(c.oid AS INT) AS object_id , CAST(NULL AS INT) AS principal_id , CAST(sch.schema_id AS INT) AS schema_id @@ -923,7 +951,14 @@ GRANT SELECT ON sys.indexes TO PUBLIC; CREATE OR replace view sys.key_constraints AS SELECT - CAST(c.conname AS SYSNAME) AS name + CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) AS sysname) AS name , CAST(c.oid AS INT) AS object_id , CAST(0 AS INT) AS principal_id , CAST(sch.schema_id AS INT) AS schema_id @@ -955,7 +990,7 @@ GRANT SELECT ON sys.key_constraints TO PUBLIC; create or replace view sys.procedures as select - cast(p.proname as sys.sysname) as name + cast(coalesce(f.orig_name, p.proname::sys.NVARCHAR(128)) as sys.sysname) as name , cast(p.oid as int) as object_id , cast(null as int) as principal_id , cast(sch.schema_id as int) as schema_id @@ -1120,7 +1155,7 @@ select , sys.tsql_type_scale_helper(ti.tsql_type_name, t.typtypmod, false) as scale , CASE WHEN t.typcollation = 0 THEN CAST(NULL as sys.sysname) - ELSE CAST((SELECT default_collation FROM babelfish_sysdatabases WHERE name = db_name() COLLATE "C") as sys.sysname) + ELSE CAST((SELECT default_collation FROM babelfish_sysdatabases WHERE orig_name = db_name() collate database_default) as sys.sysname) END as collation_name , case when typnotnull then cast(0 as sys.bit) else cast(1 as sys.bit) end as is_nullable , CAST(0 as sys.bit) as is_user_defined @@ -1143,7 +1178,14 @@ and pg_type_is_visible(t.oid) and (s.nspname = 'pg_catalog' OR s.nspname = 'sys') union all -- For User Defined Types -select cast(t.typname as sys.sysname) as name +select cast(coalesce( + case when octet_length(t.typname) >= 60 + then (select ti.original_identifier_name from sys.babelfish_identifier_mapping ti + where ti.truncated_identifier_name = t.typname + and ti.nspname = t.typnamespace::regnamespace::name + and ti.pg_catalog_type = 1247) + end, + t.typname::text) as sys.sysname) as name , cast(t.typbasetype as int) as system_type_id , cast(t.oid as int) as user_type_id , cast(t.typnamespace as int) as schema_id @@ -1153,7 +1195,7 @@ select cast(t.typname as sys.sysname) as name , case when tt.typrelid is not null then 0::sys.tinyint else sys.tsql_type_scale_helper(tsql_base_type_name, t.typtypmod, false) end as scale , CASE WHEN t.typcollation = 0 THEN CAST(NULL as sys.sysname) - ELSE CAST((SELECT default_collation FROM babelfish_sysdatabases WHERE name = db_name() COLLATE "C") as sys.sysname) + ELSE CAST((SELECT default_collation FROM babelfish_sysdatabases WHERE orig_name = db_name() collate database_default) as sys.sysname) END as collation_name , case when tt.typrelid is not null then cast(0 as sys.bit) else case when typnotnull then cast(0 as sys.bit) else cast(1 as sys.bit) end @@ -1268,7 +1310,14 @@ AND has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES GRANT SELECT ON sys.default_constraints TO PUBLIC; CREATE or replace VIEW sys.check_constraints AS -SELECT CAST(c.conname as sys.sysname) as name +SELECT CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) as sys.sysname) as name , CAST(oid as integer) as object_id , CAST(NULL as integer) as principal_id , CAST(c.connamespace as integer) as schema_id @@ -1343,7 +1392,7 @@ and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') union all -- details of user defined tables select - t.relname::sys.sysname as name + COALESCE(case when octet_length(t.relname) >= 60 then (select substring(opt, 23) from unnest(t.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, t.relname)::sys.sysname as name , t.oid as object_id , null::integer as principal_id , s.oid as schema_id @@ -1391,7 +1440,7 @@ and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') union all -- Details of user defined views select - t.relname::sys.sysname as name + COALESCE(case when octet_length(t.relname) >= 60 then (select substring(opt, 23) from unnest(t.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, t.relname)::sys.sysname as name , t.oid as object_id , null::integer as principal_id , s.oid as schema_id @@ -1413,7 +1462,8 @@ and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') union all -- details of user defined and system foreign key constraints select - c.conname::sys.sysname as name + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname as name , c.oid as object_id , null::integer as principal_id , s.oid as schema_id @@ -1435,7 +1485,8 @@ and (s.nspname = 'sys' or ext.nspname is not null) union all -- details of user defined and system primary key constraints select - c.conname::sys.sysname as name + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname as name , c.oid as object_id , null::integer as principal_id , s.oid as schema_id @@ -1533,7 +1584,7 @@ and p.proname != 'pltsql_call_handler' union all -- details of user defined procedures select - p.proname::sys.sysname as name + COALESCE(case when octet_length(p.proname) >= 60 then (select f.orig_name from sys.babelfish_function_ext f where f.funcname = p.proname and f.nspname = s.nspname limit 1) end, p.proname::text)::sys.sysname as name , case when t.typname = 'trigger' then tr.oid else p.oid end as object_id @@ -1633,7 +1684,8 @@ and has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES union all -- details of all check constraints select - c.conname::sys.sysname + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname , c.oid::integer as object_id , NULL::integer as principal_id , s.oid as schema_id @@ -1655,7 +1707,7 @@ and (s.nspname = 'sys' or ext.nspname is not null) union all -- details of user defined and system defined sequence objects select - p.relname::sys.sysname as name + COALESCE(case when octet_length(p.relname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = p.relname and m.nspname = p.relnamespace::regnamespace::name and m.pg_catalog_type = 'pg_class'::regclass::oid and m.parent_name = '') end, p.relname::text)::sys.sysname as name , p.oid as object_id , null::integer as principal_id , s.oid as schema_id @@ -1705,7 +1757,11 @@ GRANT SELECT ON sys.system_objects TO PUBLIC; create or replace view sys.all_views as SELECT - CAST(c.relname AS sys.SYSNAME) as name + CAST(COALESCE( + (SELECT pg_catalog.string_agg( + CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') + FROM unnest(c.reloptions) AS option), + c.relname::text) AS sys.SYSNAME) as name , CAST(c.oid AS INT) as object_id , CAST(null AS INT) as principal_id , CAST(c.relnamespace as INT) as schema_id @@ -1747,7 +1803,7 @@ GRANT SELECT ON sys.all_views TO PUBLIC; CREATE OR REPLACE VIEW sys.triggers AS SELECT - CAST(p.proname as sys.sysname) as name, + CAST(coalesce(f.orig_name, p.proname::sys.NVARCHAR(128)) as sys.sysname) as name, CAST(tr.oid as int) as object_id, CAST(1 as sys.tinyint) as parent_class, CAST('OBJECT_OR_COLUMN' as sys.nvarchar(60)) AS parent_class_desc, @@ -1899,7 +1955,15 @@ select from sys.check_constraints chk union all select - CAST(p.relname as sys.sysname) as name + CAST(COALESCE( + case when octet_length(p.relname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = p.relname + and m.nspname = p.relnamespace::regnamespace::name + and m.pg_catalog_type = 'pg_class'::regclass::oid + and m.parent_name = '') + end, + p.relname::text) as sys.sysname) as name , CAST(p.oid as int) as object_id , CAST(null as int) as principal_id , CAST(s.schema_id as int) as schema_id @@ -3271,7 +3335,13 @@ CREATE OR REPLACE VIEW sys.all_parameters AS SELECT CAST(ss.p_oid AS INT) AS object_id - , CAST(COALESCE(ss.proargnames[(ss.x).n], '') AS sys.SYSNAME) AS name + , CAST(COALESCE( + case when length(ss.proargnames[(ss.x).n]) >= 63 + then (SELECT ti.original_identifier_name FROM sys.babelfish_identifier_mapping ti + WHERE ti.truncated_identifier_name = ss.proargnames[(ss.x).n] + AND ti.pg_catalog_type = 'pg_proc'::regclass::oid) + end, + ss.proargnames[(ss.x).n], '') AS sys.SYSNAME) AS name , CAST( CASE WHEN is_out_scalar = 1 THEN 0 -- param_id = 0 for output of scalar function diff --git a/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--6.1.0--6.2.0.sql b/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--6.1.0--6.2.0.sql index 89056d38eab..af7409e3d9f 100644 --- a/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--6.1.0--6.2.0.sql +++ b/contrib/babelfishpg_tsql/sql/upgrades/babelfishpg_tsql--6.1.0--6.2.0.sql @@ -363,6 +363,57 @@ EXCEPTION WHEN OTHERS THEN END; $$; +CREATE OR REPLACE FUNCTION information_schema_tsql.table_constraints_internal() +RETURNS TABLE ( + "CONSTRAINT_CATALOG" sys.nvarchar(128), + "CONSTRAINT_SCHEMA" sys.nvarchar(128), + "CONSTRAINT_NAME" sys.sysname, + "TABLE_CATALOG" sys.nvarchar(128), + "TABLE_SCHEMA" sys.nvarchar(128), + "TABLE_NAME" sys.sysname, + "CONSTRAINT_TYPE" sys.varchar(11), + "IS_DEFERRABLE" sys.varchar(2), + "INITIALLY_DEFERRED" sys.varchar(2) +) +AS +$$ +BEGIN + RETURN QUERY + SELECT CAST(db_name AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nsp.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.sysname AS "CONSTRAINT_NAME", + CAST(db_name AS sys.nvarchar(128)) AS "TABLE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", + COALESCE(case when octet_length(r.relname) >= 60 then (select substring(opt, 23) from unnest(r.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, r.relname::text)::sys.sysname AS "TABLE_NAME", + CAST( + CASE c.contype WHEN 'c' THEN 'CHECK' + WHEN 'f' THEN 'FOREIGN KEY' + WHEN 'p' THEN 'PRIMARY KEY' + WHEN 'u' THEN 'UNIQUE' END + AS sys.varchar(11)) COLLATE sys.database_default AS "CONSTRAINT_TYPE", + CAST('NO' AS sys.varchar(2)) AS "IS_DEFERRABLE", + CAST('NO' AS sys.varchar(2)) AS "INITIALLY_DEFERRED" + FROM + pg_constraint c + INNER JOIN pg_class r ON c.conrelid = r.oid + INNER JOIN pg_namespace nsp ON r.relnamespace = nsp.oid + INNER JOIN sys.babelfish_namespace_ext ext ON nsp.nspname = ext.nspname AND ext.dbid = sys.db_id() + , sys.db_name() AS db_name + WHERE + c.contype IN ('c', 'f', 'p', 'u') + AND r.relkind IN ('r', 'p') + AND relispartition = false + AND (pg_has_role(r.relowner, 'USAGE') + OR has_table_privilege(r.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER') + OR has_any_column_privilege(r.oid, 'SELECT, INSERT, UPDATE, REFERENCES') ); +END; +$$ +LANGUAGE plpgsql STABLE PARALLEL SAFE; + + + + + CALL sys.babelfish_drop_deprecated_object('aggregate', 'sys', 'tsql_select_for_xml_agg_deprecated_in_5_7_0', 'anyelement, integer, text, boolean, text, boolean, boolean'); -- Deprecate and drop old aggregate (7 args) - tsql_select_for_xml_text_agg @@ -444,8 +495,3746 @@ CREATE OR REPLACE AGGREGATE sys.tsql_select_for_xml_text_agg( FINALFUNC = tsql_query_to_xml_text_ffunc ); + +-- BABEL-5975: Long Identifier Handling Upgrade + +-- 1. Create babelfish_identifier_mapping catalog if not exists +DO $$ +BEGIN + IF NOT EXISTS (SELECT 1 FROM pg_class WHERE relname = 'babelfish_identifier_mapping' AND relnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'sys')) THEN + CREATE TABLE sys.babelfish_identifier_mapping ( + nspname NAME NOT NULL, + pg_catalog_type OID NOT NULL, + truncated_identifier_name NAME NOT NULL, + original_identifier_name sys.NVARCHAR(128) NOT NULL COLLATE sys.database_default, + parent_name NAME NOT NULL DEFAULT '', + PRIMARY KEY (truncated_identifier_name, nspname, pg_catalog_type, parent_name) + ); + GRANT SELECT ON sys.babelfish_identifier_mapping TO PUBLIC; + END IF; +END $$; + +-- Backfill orig_name for triggers (previously not populated) +UPDATE sys.babelfish_function_ext SET orig_name = funcname WHERE orig_name IS NULL; + +-- 2. Add orig_name column to babelfish_sysdatabases if not exists +SET allow_system_table_mods = on; +ALTER TABLE sys.babelfish_sysdatabases ADD COLUMN IF NOT EXISTS orig_name sys.NVARCHAR(128) COLLATE sys.database_default; +RESET allow_system_table_mods; + +-- 3. Populate orig_name for existing databases (copy from name column for case preservation) +UPDATE sys.babelfish_sysdatabases SET orig_name = name WHERE orig_name IS NULL; + + +-- 4. Create helper function for view column names +CREATE OR REPLACE FUNCTION sys.bbf_get_view_column_name(view_oid OID, attnum SMALLINT) +RETURNS TEXT AS 'babelfishpg_tsql', 'bbf_get_view_column_name' +LANGUAGE C STABLE PARALLEL SAFE; + + +-- 5. Recreate modified system views and functions +-- Note: Views/functions are recreated using CREATE OR REPLACE from the install SQL. +-- The following must be recreated in dependency order. + +-- 5a. sys.columns_internal (function - used by sys.columns) +-- Recreate from sys_views.sql definition (includes COALESCE with attoptions + bbf_get_view_column_name) + +-- 5b. sys.tables (already has COALESCE in 6.2.0 install) +-- 5c. sys.views (already has COALESCE in 6.2.0 install) +-- 5d. sys.all_views +-- 5e. sys.triggers (uses orig_name from babelfish_function_ext) +-- 5f. sys.types (uses babelfish_identifier_mapping) +-- 5g. sys.indexes (already has COALESCE in 6.2.0 install) +-- 5h. sys.parameters (uses babelfish_identifier_mapping) + +-- 5i. sys.databases and sys.sysdatabases (use orig_name) +ALTER VIEW sys.sysdatabases RENAME TO sysdatabases_deprecated_in_6_2_0; + +CREATE OR REPLACE VIEW sys.sysdatabases AS +SELECT +CAST(t.orig_name AS sys.nvarchar(128)) AS name, +sys.db_id(t.name) AS dbid, +CAST(CAST(r.oid AS int) AS SYS.VARBINARY(85)) AS sid, +CAST(0 AS SMALLINT) AS mode, +t.status, +t.status2, +CAST(t.crdate AS SYS.DATETIME) AS crdate, +CAST('1900-01-01 00:00:00.000' AS SYS.DATETIME) AS reserved, +CAST(0 AS INT) AS category, +CAST(120 AS SYS.TINYINT) AS cmptlevel, +CAST(NULL AS SYS.NVARCHAR(260)) AS filename, +CAST(NULL AS SMALLINT) AS version +FROM sys.babelfish_sysdatabases AS t +LEFT OUTER JOIN pg_catalog.pg_roles r on r.rolname = t.owner; + +GRANT SELECT ON sys.sysdatabases TO PUBLIC; + +-- 5j. sys.pg_namespace_ext (uses orig_name for dbname) +ALTER VIEW sys.pg_namespace_ext RENAME TO pg_namespace_ext_deprecated_in_6_2_0; + +CREATE VIEW sys.pg_namespace_ext AS +SELECT BASE.*, DB.orig_name as dbname FROM +pg_catalog.pg_namespace AS base +LEFT OUTER JOIN sys.babelfish_namespace_ext AS EXT on BASE.nspname = EXT.nspname +INNER JOIN sys.babelfish_sysdatabases AS DB ON EXT.dbid = DB.dbid; +GRANT SELECT ON sys.pg_namespace_ext TO PUBLIC; +-- Recreate dependent views after pg_namespace_ext rename (rebind to new OID) + +CREATE OR replace view sys.identity_columns AS +SELECT + CAST(out_object_id AS INT) AS object_id + , CAST(out_name AS sys.sysname) AS name + , CAST(out_column_id AS INT) AS column_id + , CAST(out_system_type_id AS sys.tinyint) AS system_type_id + , CAST(out_user_type_id AS INT) AS user_type_id + , CAST(out_max_length AS SMALLINT) AS max_length + , CAST(out_precision AS sys.tinyint) AS precision + , CAST(out_scale AS sys.tinyint) AS scale + , CAST(out_collation_name AS sys.sysname) AS collation_name + , CAST(out_is_nullable AS sys.BIT) AS is_nullable + , CAST(out_is_ansi_padded AS sys.BIT) AS is_ansi_padded + , CAST(out_is_rowguidcol AS sys.BIT) AS is_rowguidcol + , CAST(out_is_identity AS sys.BIT) AS is_identity + , CAST(out_is_computed AS sys.BIT) AS is_computed + , CAST(out_is_filestream AS sys.BIT) AS is_filestream + , CAST(out_is_replicated AS sys.BIT) AS is_replicated + , CAST(out_is_non_sql_subscribed AS sys.BIT) AS is_non_sql_subscribed + , CAST(out_is_merge_published AS sys.BIT) AS is_merge_published + , CAST(out_is_dts_replicated AS sys.BIT) AS is_dts_replicated + , CAST(out_is_xml_document AS sys.BIT) AS is_xml_document + , CAST(out_xml_collection_id AS INT) AS xml_collection_id + , CAST(out_default_object_id AS INT) AS default_object_id + , CAST(out_rule_object_id AS INT) AS rule_object_id + , CAST(out_is_sparse AS sys.BIT) AS is_sparse + , CAST(out_is_column_set AS sys.BIT) AS is_column_set + , CAST(out_generated_always_type AS sys.tinyint) AS generated_always_type + , CAST(out_generated_always_type_desc AS sys.NVARCHAR(60)) AS generated_always_type_desc + , CAST(out_encryption_type AS INT) AS encryption_type + , CAST(out_encryption_type_desc AS sys.NVARCHAR(60)) AS encryption_type_desc + , CAST(out_encryption_algorithm_name AS sys.sysname) AS encryption_algorithm_name + , CAST(out_column_encryption_key_id AS INT) column_encryption_key_id + , CAST(out_column_encryption_key_database_name AS sys.sysname) AS column_encryption_key_database_name + , CAST(out_is_hidden AS sys.BIT) AS is_hidden + , CAST(out_is_masked AS sys.BIT) AS is_masked + , CAST(sys.ident_seed(sys.OBJECT_NAME(sc.out_object_id)) AS sys.sql_variant) AS seed_value + , CAST(sys.ident_incr(sys.OBJECT_NAME(sc.out_object_id)) AS sys.sql_variant) AS increment_value + , CAST(sys.babelfish_get_sequence_value(pg_get_serial_sequence(quote_ident(ext.nspname)||'.'||quote_ident(c.relname), a.attname)) AS sys.sql_variant) AS last_value + , CAST(0 as sys.BIT) as is_not_for_replication +FROM sys.columns_internal() sc +INNER JOIN pg_attribute a ON a.attrelid = sc.out_object_id AND sc.out_column_id = a.attnum +INNER JOIN pg_class c ON c.oid = a.attrelid +INNER JOIN sys.pg_namespace_ext ext ON ext.oid = c.relnamespace +WHERE NOT a.attisdropped +AND sc.out_is_identity::INTEGER = 1 +AND pg_get_serial_sequence(quote_ident(ext.nspname)||'.'||quote_ident(c.relname), a.attname) IS NOT NULL +AND has_sequence_privilege(pg_get_serial_sequence(quote_ident(ext.nspname)||'.'||quote_ident(c.relname), a.attname), 'USAGE,SELECT,UPDATE'); +GRANT SELECT ON sys.identity_columns TO PUBLIC; + +CREATE OR REPLACE VIEW sys.all_sql_modules_internal AS +SELECT + ao.object_id AS object_id + , CAST( + CASE WHEN ao.type in ('P', 'FN', 'IN', 'TF', 'RF', 'IF') THEN COALESCE(f.definition, '') + WHEN ao.type = 'V' THEN COALESCE(bvd.definition, '') + ELSE NULL + END + AS sys.nvarchar) AS definition + , CAST(1 as sys.bit) AS uses_ansi_nulls + , CAST(1 as sys.bit) AS uses_quoted_identifier + , CAST(0 as sys.bit) AS is_schema_bound + , CAST(0 as sys.bit) AS uses_database_collation + , CAST(0 as sys.bit) AS is_recompiled + , CAST(ao.type IN ('P', 'FN', 'IN', 'TF', 'RF', 'IF') + AND p.proisstrict + AS sys.bit) as null_on_null_input + , null::integer as execute_as_principal_id + , CAST(0 as sys.bit) as uses_native_compilation + , CAST(ao.is_ms_shipped as INT) as is_ms_shipped +FROM sys.all_objects ao +LEFT OUTER JOIN sys.pg_namespace_ext nmext on ao.schema_id = nmext.oid +LEFT OUTER JOIN sys.babelfish_namespace_ext ext ON nmext.nspname = ext.nspname +LEFT OUTER JOIN sys.babelfish_view_def bvd + on ( + ext.orig_name = bvd.schema_name AND + ext.dbid = bvd.dbid AND + ao.name = bvd.object_name + ) +LEFT JOIN pg_proc p ON ao.object_id = CAST(p.oid AS INT) +LEFT JOIN sys.babelfish_function_ext f ON ao.name = f.funcname COLLATE "C" AND ao.schema_id::regnamespace::name = f.nspname +AND sys.babelfish_get_pltsql_function_signature(ao.object_id) = f.funcsignature COLLATE "C" +WHERE ao.type in ('P', 'RF', 'V', 'FN', 'IF', 'TF', 'R') +UNION ALL +SELECT + ao.object_id AS object_id + , CAST(COALESCE(f.definition, '') AS sys.nvarchar) AS definition + , CAST(1 as sys.bit) AS uses_ansi_nulls + , CAST(1 as sys.bit) AS uses_quoted_identifier + , CAST(0 as sys.bit) AS is_schema_bound + , CAST(0 as sys.bit) AS uses_database_collation + , CAST(0 as sys.bit) AS is_recompiled + , CAST(0 AS sys.bit) as null_on_null_input + , null::integer as execute_as_principal_id + , CAST(0 as sys.bit) as uses_native_compilation + , CAST(ao.is_ms_shipped as INT) as is_ms_shipped +FROM sys.all_objects ao +LEFT OUTER JOIN sys.pg_namespace_ext nmext on ao.schema_id = nmext.oid +LEFT JOIN pg_trigger tr ON ao.object_id = CAST(tr.oid AS INT) +LEFT JOIN sys.babelfish_function_ext f ON ao.name = f.funcname COLLATE "C" AND ao.schema_id::regnamespace::name = f.nspname +AND sys.babelfish_get_pltsql_function_signature(tr.tgfoid) = f.funcsignature COLLATE "C" +WHERE ao.type = 'TR'; +GRANT SELECT ON sys.all_sql_modules_internal TO PUBLIC; + +CREATE OR REPLACE VIEW sys.sp_pkeys_view AS +SELECT +CAST(t4."TABLE_CATALOG" AS sys.sysname) AS TABLE_QUALIFIER, +CAST(t4."TABLE_SCHEMA" AS sys.sysname) AS TABLE_OWNER, +CAST(t4."TABLE_NAME" AS sys.sysname) AS TABLE_NAME, +CAST(t4."COLUMN_NAME" AS sys.sysname) AS COLUMN_NAME, +CAST(seq AS smallint) AS KEY_SEQ, +CAST(t5.conname AS sys.sysname) AS PK_NAME +FROM pg_catalog.pg_class t1 + JOIN sys.pg_namespace_ext t2 ON t1.relnamespace = t2.oid + JOIN pg_catalog.pg_roles t3 ON t1.relowner = t3.oid + LEFT OUTER JOIN sys.babelfish_namespace_ext ext on t2.nspname = ext.nspname + JOIN information_schema_tsql.columns_internal t4 ON (t1.oid = t4."TABLE_OID") + JOIN pg_constraint t5 ON t1.oid = t5.conrelid + , generate_series(1,16) seq -- SQL server has max 16 columns per primary key +WHERE t5.contype = 'p' + AND CAST(t4."ORDINAL_POSITION" AS smallint) = ANY (t5.conkey) + AND CAST(t4."ORDINAL_POSITION" AS smallint) = t5.conkey[seq] + AND ext.dbid = sys.db_id(); + +GRANT SELECT on sys.sp_pkeys_view TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.check_constraints AS + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", + CAST(extc.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nc.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.sysname AS "CONSTRAINT_NAME", + CAST(sys.tsql_get_constraintdef(c.oid) AS sys.nvarchar(4000)) AS "CHECK_CLAUSE" + + FROM sys.pg_namespace_ext nc LEFT OUTER JOIN sys.babelfish_namespace_ext extc ON nc.nspname = extc.nspname, + pg_constraint c, + pg_class r + + WHERE nc.oid = c.connamespace AND nc.oid = r.relnamespace + AND c.conrelid = r.oid + AND c.contype = 'c' + AND r.relkind IN ('r', 'p') + AND r.relispartition = false + AND (NOT pg_is_other_temp_schema(nc.oid)) + AND (pg_has_role(r.relowner, 'USAGE') + OR has_table_privilege(r.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER') + OR has_any_column_privilege(r.oid, 'SELECT, INSERT, UPDATE, REFERENCES')) + AND extc.dbid = sys.db_id(); + +GRANT SELECT ON information_schema_tsql.check_constraints TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.routines AS + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "SPECIFIC_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "SPECIFIC_SCHEMA", + CAST(p.proname AS sys.nvarchar(128)) AS "SPECIFIC_NAME", + CAST(nc.dbname AS sys.nvarchar(128)) AS "ROUTINE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "ROUTINE_SCHEMA", + CAST(p.proname AS sys.nvarchar(128)) AS "ROUTINE_NAME", + CAST(CASE p.prokind WHEN 'f' THEN 'FUNCTION' WHEN 'p' THEN 'PROCEDURE' END + AS sys.nvarchar(20)) AS "ROUTINE_TYPE", + CAST(NULL AS sys.nvarchar(128)) AS "MODULE_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "MODULE_SCHEMA", + CAST(NULL AS sys.nvarchar(128)) AS "MODULE_NAME", + CAST(NULL AS sys.nvarchar(128)) AS "UDT_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "UDT_SCHEMA", + CAST(NULL AS sys.nvarchar(128)) AS "UDT_NAME", + CAST(case when is_tbl_type THEN 'table' when p.prokind = 'p' THEN NULL ELSE tsql_type_name END AS sys.nvarchar(128)) AS "DATA_TYPE", + CAST(information_schema_tsql._pgtsql_char_max_length_for_routines(tsql_type_name, true_typmod) + AS int) + AS "CHARACTER_MAXIMUM_LENGTH", + CAST(information_schema_tsql._pgtsql_char_octet_length_for_routines(tsql_type_name, true_typmod) + AS int) + AS "CHARACTER_OCTET_LENGTH", + CAST(NULL AS sys.nvarchar(128)) AS "COLLATION_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "COLLATION_SCHEMA", + CAST( + CASE co.collname + WHEN 'default' THEN current_setting('babelfishpg_tsql.server_collation_name') + ELSE co.collname + END + AS sys.nvarchar(128)) AS "COLLATION_NAME", + CAST(NULL AS sys.nvarchar(128)) AS "CHARACTER_SET_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "CHARACTER_SET_SCHEMA", + + + + + CAST(case when tsql_type_name IN ('nchar','nvarchar') THEN 'UNICODE' when tsql_type_name IN ('char','varchar') THEN 'iso_1' ELSE NULL END AS sys.nvarchar(128)) AS "CHARACTER_SET_NAME", + CAST(information_schema_tsql._pgtsql_numeric_precision(tsql_type_name, t.oid, true_typmod) + AS smallint) + AS "NUMERIC_PRECISION", + CAST(information_schema_tsql._pgtsql_numeric_precision_radix(tsql_type_name, case when t.typtype = 'd' THEN t.typbasetype ELSE t.oid END, true_typmod) + AS smallint) + AS "NUMERIC_PRECISION_RADIX", + CAST(information_schema_tsql._pgtsql_numeric_scale(tsql_type_name, t.oid, true_typmod) + AS smallint) + AS "NUMERIC_SCALE", + CAST(information_schema_tsql._pgtsql_datetime_precision(tsql_type_name, true_typmod) + AS smallint) + AS "DATETIME_PRECISION", + CAST(NULL AS sys.nvarchar(30)) AS "INTERVAL_TYPE", + CAST(NULL AS smallint) AS "INTERVAL_PRECISION", + CAST(NULL AS sys.nvarchar(128)) AS "TYPE_UDT_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "TYPE_UDT_SCHEMA", + CAST(NULL AS sys.nvarchar(128)) AS "TYPE_UDT_NAME", + CAST(NULL AS sys.nvarchar(128)) AS "SCOPE_CATALOG", + CAST(NULL AS sys.nvarchar(128)) AS "SCOPE_SCHEMA", + CAST(NULL AS sys.nvarchar(128)) AS "SCOPE_NAME", + CAST(NULL AS bigint) AS "MAXIMUM_CARDINALITY", + CAST(NULL AS sys.nvarchar(128)) AS "DTD_IDENTIFIER", + CAST(CASE WHEN l.lanname = 'sql' THEN 'SQL' WHEN l.lanname = 'pltsql' THEN 'SQL' ELSE 'EXTERNAL' END AS sys.nvarchar(30)) AS "ROUTINE_BODY", + CAST(f.definition AS sys.nvarchar(4000)) AS "ROUTINE_DEFINITION", + CAST(NULL AS sys.nvarchar(128)) AS "EXTERNAL_NAME", + CAST(NULL AS sys.nvarchar(30)) AS "EXTERNAL_LANGUAGE", + CAST(NULL AS sys.nvarchar(30)) AS "PARAMETER_STYLE", + CAST(CASE WHEN p.provolatile = 'i' THEN 'YES' ELSE 'NO' END AS sys.nvarchar(10)) AS "IS_DETERMINISTIC", + CAST(CASE p.prokind WHEN 'p' THEN 'MODIFIES' ELSE 'READS' END AS sys.nvarchar(30)) AS "SQL_DATA_ACCESS", + CAST(CASE WHEN p.prokind <> 'p' THEN + CASE WHEN p.proisstrict THEN 'YES' ELSE 'NO' END END AS sys.nvarchar(10)) AS "IS_NULL_CALL", + CAST(NULL AS sys.nvarchar(128)) AS "SQL_PATH", + CAST('YES' AS sys.nvarchar(10)) AS "SCHEMA_LEVEL_ROUTINE", + CAST(CASE p.prokind WHEN 'f' THEN 0 WHEN 'p' THEN -1 END AS smallint) AS "MAX_DYNAMIC_RESULT_SETS", + CAST('NO' AS sys.nvarchar(10)) AS "IS_USER_DEFINED_CAST", + CAST('NO' AS sys.nvarchar(10)) AS "IS_IMPLICITLY_INVOCABLE", + CAST(NULL AS sys.datetime) AS "CREATED", + CAST(NULL AS sys.datetime) AS "LAST_ALTERED" + + FROM sys.pg_namespace_ext nc LEFT JOIN sys.babelfish_namespace_ext ext ON nc.nspname = ext.nspname, + pg_proc p inner join sys.schemas sch on sch.schema_id = p.pronamespace + inner join sys.all_objects ao on ao.object_id = CAST(p.oid AS INT) + LEFT JOIN sys.babelfish_function_ext f ON p.proname = f.funcname AND sch.schema_id::regnamespace::name = f.nspname + AND sys.babelfish_get_pltsql_function_signature(p.oid) = f.funcsignature COLLATE "C", + pg_language l, + pg_type t LEFT JOIN pg_collation co ON t.typcollation = co.oid, + sys.translate_pg_type_to_tsql(t.oid) AS tsql_type_name, + sys.tsql_get_returnTypmodValue(p.oid) AS true_typmod, + sys.is_table_type(t.typrelid) as is_tbl_type + + WHERE + (case p.prokind + when 'p' then true + when 'a' then false + else + (case format_type(p.prorettype, null) + when 'trigger' then false + else true + end) + end) + AND (NOT pg_is_other_temp_schema(nc.oid)) + AND has_function_privilege(p.oid, 'EXECUTE') + AND (pg_has_role(t.typowner, 'USAGE') + OR has_type_privilege(t.oid, 'USAGE')) + AND ext.dbid = sys.db_id() + AND p.prolang = l.oid + AND p.prorettype = t.oid + AND p.pronamespace = nc.oid + AND CAST(ao.is_ms_shipped as INT) = 0; + +GRANT SELECT ON information_schema_tsql.routines TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.schemata AS + SELECT CAST(sys.db_name() AS sys.sysname) AS "CATALOG_NAME", + CAST(CASE WHEN np.nspname LIKE PG_CATALOG.CONCAT(sys.db_name(),'%') THEN PG_CATALOG.RIGHT(np.nspname, LENGTH(np.nspname) - LENGTH(sys.db_name()) - 1) + ELSE np.nspname END AS sys.nvarchar(128)) AS "SCHEMA_NAME", + -- For system-defined schemas, schema-owner name will be same as schema_name + -- For user-defined schemas having default owner, schema-owner will be dbo + -- For user-defined schemas with explicit owners, rolname contains dbname followed + -- by owner name, so need to extract the owner name from rolname always. + CAST(CASE WHEN sys.bbf_is_shared_schema(np.nspname) = TRUE THEN np.nspname + WHEN r.rolname LIKE PG_CATALOG.CONCAT(sys.db_name(),'%') THEN + CASE WHEN PG_CATALOG.RIGHT(r.rolname, LENGTH(r.rolname) - LENGTH(sys.db_name()) - 1) = 'db_owner' THEN 'dbo' + ELSE PG_CATALOG.RIGHT(r.rolname, LENGTH(r.rolname) - LENGTH(sys.db_name()) - 1) END ELSE 'dbo' END + AS sys.nvarchar(128)) AS "SCHEMA_OWNER", + CAST(null AS sys.varchar(6)) AS "DEFAULT_CHARACTER_SET_CATALOG", + CAST(null AS sys.varchar(3)) AS "DEFAULT_CHARACTER_SET_SCHEMA", + -- TODO: We need to first create mapping of collation name to char-set name; + -- Until then return null for DEFAULT_CHARACTER_SET_NAME + CAST(null AS sys.sysname) AS "DEFAULT_CHARACTER_SET_NAME" + FROM ((pg_catalog.pg_namespace np LEFT JOIN sys.pg_namespace_ext nc on np.nspname = nc.nspname) + LEFT JOIN pg_catalog.pg_roles r on r.oid = nc.nspowner) LEFT JOIN sys.babelfish_namespace_ext ext on nc.nspname = ext.nspname + WHERE (ext.dbid = sys.db_id() OR np.nspname in ('sys', 'information_schema_tsql')) AND + (pg_has_role(np.nspowner, 'USAGE') OR has_schema_privilege(np.oid, 'CREATE, USAGE')) + ORDER BY nc.nspname, np.nspname; + +GRANT SELECT ON information_schema_tsql.schemata TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.SEQUENCES AS + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "SEQUENCE_CATALOG", + CAST(extc.orig_name AS sys.nvarchar(128)) AS "SEQUENCE_SCHEMA", + CAST(r.relname AS sys.nvarchar(128)) AS "SEQUENCE_NAME", + CAST(CASE WHEN tsql_type_name = 'sysname' THEN sys.translate_pg_type_to_tsql(t.typbasetype) ELSE tsql_type_name END + AS sys.nvarchar(128))AS "DATA_TYPE", -- numeric and decimal data types are converted into bigint which is due to Postgres inherent implementation + CAST(information_schema_tsql._pgtsql_numeric_precision(tsql_type_name, t.oid, -1) + AS smallint) AS "NUMERIC_PRECISION", + CAST(information_schema_tsql._pgtsql_numeric_precision_radix(tsql_type_name, case when t.typtype = 'd' THEN t.typbasetype ELSE t.oid END, -1) + AS smallint) AS "NUMERIC_PRECISION_RADIX", + CAST(information_schema_tsql._pgtsql_numeric_scale(tsql_type_name, t.oid, -1) + AS int) AS "NUMERIC_SCALE", + CAST(s.seqstart AS sys.sql_variant) AS "START_VALUE", + CAST(s.seqmin AS sys.sql_variant) AS "MINIMUM_VALUE", + CAST(s.seqmax AS sys.sql_variant) AS "MAXIMUM_VALUE", + CAST(s.seqincrement AS sys.sql_variant) AS "INCREMENT", + CAST( CASE WHEN s.seqcycle = 't' THEN 1 ELSE 0 END AS int) AS "CYCLE_OPTION", + CAST(NULL AS sys.nvarchar(128)) AS "DECLARED_DATA_TYPE", + CAST(NULL AS int) AS "DECLARED_NUMERIC_PRECISION", + CAST(NULL AS int) AS "DECLARED_NUMERIC_SCALE" + FROM sys.pg_namespace_ext nc JOIN sys.babelfish_namespace_ext extc ON nc.nspname = extc.nspname, + pg_sequence s join pg_class r on s.seqrelid = r.oid join pg_type t on s.seqtypid=t.oid, + sys.translate_pg_type_to_tsql(s.seqtypid) AS tsql_type_name + WHERE nc.oid = r.relnamespace + AND extc.dbid = sys.db_id() + AND r.relkind = 'S' + AND (NOT pg_is_other_temp_schema(nc.oid)) + AND (pg_has_role(r.relowner, 'USAGE') + OR has_sequence_privilege(r.oid, 'SELECT, UPDATE, USAGE')); + +GRANT SELECT ON information_schema_tsql.sequences TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.tables AS + WITH tt_internal AS MATERIALIZED ( + SELECT * FROM sys.table_types_internal + ) + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "TABLE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", + CAST( + COALESCE( + (SELECT PG_CATALOG.string_agg( + CASE + WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) + ELSE NULL + END, ',') + FROM unnest(c.reloptions) AS option), + c.relname) + AS sys._ci_sysname) AS "TABLE_NAME", + + CAST( + CASE WHEN c.relkind IN ('r', 'p') THEN 'BASE TABLE' + WHEN c.relkind = 'v' THEN 'VIEW' + ELSE null END + AS sys.varchar(10)) COLLATE sys.database_default AS "TABLE_TYPE" + + FROM sys.pg_namespace_ext nc JOIN pg_class c ON (nc.oid = c.relnamespace) + LEFT OUTER JOIN sys.babelfish_namespace_ext ext on nc.nspname = ext.nspname + LEFT JOIN tt_internal tt ON c.oid = tt.typrelid + + WHERE c.relkind IN ('r', 'v', 'p') + AND c.relispartition = false + AND (NOT pg_is_other_temp_schema(nc.oid)) + AND tt.typrelid IS NULL + AND (pg_has_role(c.relowner, 'USAGE') + OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER') + OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES') ) + AND ext.dbid = sys.db_id() + AND (NOT c.relname = 'sysdatabases'); + +GRANT SELECT ON information_schema_tsql.tables TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.constraint_column_usage AS SELECT (tblcat)::sys.nvarchar(128) AS "TABLE_CATALOG", + tblschema AS "TABLE_SCHEMA", + (tblname)::sys.nvarchar(128) AS "TABLE_NAME", + (colname)::sys.nvarchar(128) AS "COLUMN_NAME", + (cstrcat)::sys.nvarchar(128) AS "CONSTRAINT_CATALOG", + cstrschema AS "CONSTRAINT_SCHEMA", + (cstrname)::sys.nvarchar(128) AS "CONSTRAINT_NAME" + FROM ( SELECT DISTINCT extr.orig_name, + r.relname, + r.relowner, + a.attname, + extc.orig_name, + c.conname, + nr.dbname, + nc.dbname + FROM (sys.pg_namespace_ext nc + LEFT JOIN sys.babelfish_namespace_ext extc ON ((nc.nspname = extc.nspname))), + (sys.pg_namespace_ext nr + LEFT JOIN sys.babelfish_namespace_ext extr ON ((nr.nspname = extr.nspname))), + pg_attribute a, + pg_constraint c, + pg_class r, + pg_depend d + WHERE ((nr.oid = r.relnamespace) AND (r.oid = a.attrelid) AND (d.refclassid = ('pg_class'::regclass)::oid) AND (d.refobjid = r.oid) AND (d.refobjsubid = a.attnum) AND (d.classid = ('pg_constraint'::regclass)::oid) AND (d.objid = c.oid) AND (c.connamespace = nc.oid) AND (c.contype = 'c'::"char") AND (r.relkind = ANY (ARRAY['r'::"char", 'p'::"char"])) AND (r.relispartition = false) AND (NOT a.attisdropped) AND (pg_has_role(r.relowner, 'USAGE'::text) OR has_table_privilege(r.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text))) + UNION ALL + SELECT extr.orig_name, + r.relname, + r.relowner, + a.attname, + extc.orig_name, + c.conname, + nr.dbname, + nc.dbname + FROM (sys.pg_namespace_ext nc + LEFT JOIN sys.babelfish_namespace_ext extc ON ((nc.nspname = extc.nspname))), + (sys.pg_namespace_ext nr + LEFT JOIN sys.babelfish_namespace_ext extr ON ((nr.nspname = extr.nspname))), + pg_attribute a, + pg_constraint c, + pg_class r + WHERE ((nr.oid = r.relnamespace) AND (r.oid = a.attrelid) AND (nc.oid = c.connamespace) AND (r.oid = c.conrelid) AND (a.attnum = ANY (c.conkey)) AND (NOT a.attisdropped) AND (c.contype = ANY (ARRAY['p'::"char", 'u'::"char", 'f'::"char"])) AND (r.relkind = ANY (ARRAY['r'::"char", 'p'::"char"])) AND (r.relispartition = false) AND (pg_has_role(r.relowner, 'USAGE'::text) OR has_table_privilege(r.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER'::text) OR has_any_column_privilege(r.oid, 'SELECT, INSERT, UPDATE, REFERENCES'::text)))) x(tblschema, tblname, tblowner, colname, cstrschema, cstrname, tblcat, cstrcat);; GRANT SELECT ON information_schema_tsql.constraint_column_usage TO PUBLIC; +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'pg_namespace_ext_deprecated_in_6_2_0'); + + + + + +-- 5k. sp_tables_view (uses COALESCE with reloptions for TABLE_NAME) +ALTER VIEW sys.sp_tables_view RENAME TO sp_tables_view_deprecated_in_6_2_0; +CREATE OR REPLACE VIEW sys.sp_tables_view AS +SELECT +t2.dbname AS TABLE_QUALIFIER, +CAST(t3.name AS name) AS TABLE_OWNER, +CAST(COALESCE( + (SELECT pg_catalog.string_agg( + CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') + FROM unnest(t1.reloptions) AS option), + t1.relname::text) AS sys.sysname) AS TABLE_NAME, +CASE +WHEN t1.relkind = 'v' + THEN 'VIEW' +ELSE 'TABLE' +END AS TABLE_TYPE, +CAST(NULL AS varchar(254)) AS remarks +FROM pg_catalog.pg_class AS t1, sys.pg_namespace_ext AS t2, sys.schemas AS t3 +WHERE t1.relnamespace = t3.schema_id AND t1.relnamespace = t2.oid AND t1.relkind IN ('r','p','v','m') +AND t1.relispartition = false +AND has_table_privilege(t1.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER'); +GRANT SELECT ON sys.sp_tables_view TO PUBLIC; + +CREATE OR REPLACE VIEW sys.sp_columns_100_view AS +SELECT + CAST(t4."TABLE_CATALOG" AS sys.sysname) AS TABLE_QUALIFIER, + CAST(t4."TABLE_SCHEMA" AS sys.sysname) AS TABLE_OWNER, + + COALESCE( + (SELECT pg_catalog.string_agg( + CASE + WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23 /* prefix length */) + ELSE NULL + END, ',') + FROM unnest(t1.reloptions) AS option), + t4."TABLE_NAME"::text) + ::sys.sysname AS TABLE_NAME, + CAST( + COALESCE( + (SELECT pg_catalog.string_agg( + CASE + WHEN option LIKE 'bbf_original_name=%' THEN substring(option, 19 /* prefix length */) + ELSE NULL + END, ',') + FROM unnest(a.attoptions) AS option), + t4."COLUMN_NAME") + AS sys.sysname) AS COLUMN_NAME, + CAST(t5.data_type AS smallint) AS DATA_TYPE, + CAST(coalesce(tsql_type_name, t.typname) AS sys.sysname) AS TYPE_NAME, + CASE + WHEN t4."CHARACTER_MAXIMUM_LENGTH" = -1 THEN 0::INT + WHEN a.atttypmod != -1 + THEN CAST(coalesce(t4."NUMERIC_PRECISION", t4."CHARACTER_MAXIMUM_LENGTH", sys.tsql_type_precision_helper(t4."DATA_TYPE", a.atttypmod)) AS INT) + WHEN tsql_type_name = 'timestamp' + THEN 8 + ELSE + CAST(coalesce(t4."NUMERIC_PRECISION", t4."CHARACTER_MAXIMUM_LENGTH", sys.tsql_type_precision_helper(t4."DATA_TYPE", t.typtypmod)) AS INT) + END AS PRECISION, + CASE + WHEN a.atttypmod != -1 + THEN CAST(sys.tsql_type_length_for_sp_columns_helper(t4."DATA_TYPE", a.attlen, a.atttypmod) AS int) + ELSE + CAST(sys.tsql_type_length_for_sp_columns_helper(t4."DATA_TYPE", a.attlen, t.typtypmod) AS int) + END AS LENGTH, + CASE + WHEN a.atttypmod != -1 + THEN CAST(coalesce(t4."NUMERIC_SCALE", sys.tsql_type_scale_helper(t4."DATA_TYPE", a.atttypmod, true)) AS smallint) + ELSE + CAST(coalesce(t4."NUMERIC_SCALE", sys.tsql_type_scale_helper(t4."DATA_TYPE", t.typtypmod, true)) AS smallint) + END AS SCALE, + CAST(coalesce(t4."NUMERIC_PRECISION_RADIX", sys.tsql_type_radix_for_sp_columns_helper(t4."DATA_TYPE")) AS smallint) AS RADIX, + CASE + WHEN t4."IS_NULLABLE" = 'YES' + THEN CAST(1 AS smallint) + ELSE + CAST(0 AS smallint) + END AS NULLABLE, + CAST(NULL AS varchar(254)) AS remarks, + CAST(t4."COLUMN_DEFAULT" AS sys.nvarchar(4000)) AS COLUMN_DEF, + CAST(t5.sql_data_type AS smallint) AS SQL_DATA_TYPE, + CAST(t5.SQL_DATETIME_SUB AS smallint) AS SQL_DATETIME_SUB, + CASE + WHEN t4."DATA_TYPE" = 'xml' THEN 0::INT + WHEN t4."DATA_TYPE" = 'sql_variant' THEN 8000::INT + WHEN t4."CHARACTER_MAXIMUM_LENGTH" = -1 THEN 0::INT + ELSE CAST(t4."CHARACTER_OCTET_LENGTH" AS int) + END AS CHAR_OCTET_LENGTH, + CAST(t4."ORDINAL_POSITION" AS int) AS ORDINAL_POSITION, + CAST(t4."IS_NULLABLE" AS varchar(254)) AS IS_NULLABLE, + CAST(t5.ss_data_type AS sys.tinyint) AS SS_DATA_TYPE, + CAST(0 AS smallint) AS SS_IS_SPARSE, + CAST(0 AS smallint) AS SS_IS_COLUMN_SET, + CAST(t6.is_computed as smallint) AS SS_IS_COMPUTED, + CAST(t6.is_identity as smallint) AS SS_IS_IDENTITY, + CAST(NULL AS varchar(254)) SS_UDT_CATALOG_NAME, + CAST(NULL AS varchar(254)) SS_UDT_SCHEMA_NAME, + CAST(NULL AS varchar(254)) SS_UDT_ASSEMBLY_TYPE_NAME, + CAST(NULL AS varchar(254)) SS_XML_SCHEMACOLLECTION_CATALOG_NAME, + CAST(NULL AS varchar(254)) SS_XML_SCHEMACOLLECTION_SCHEMA_NAME, + CAST(NULL AS varchar(254)) SS_XML_SCHEMACOLLECTION_NAME +FROM + pg_catalog.pg_class t1 + JOIN sys.pg_namespace_ext t2 ON t1.relnamespace = t2.oid + JOIN pg_catalog.pg_roles t3 ON t1.relowner = t3.oid + LEFT OUTER JOIN sys.babelfish_namespace_ext ext on t2.nspname = ext.nspname + JOIN information_schema_tsql.columns_internal t4 ON (t1.oid = t4."TABLE_OID") + LEFT JOIN pg_attribute a on a.attrelid = t1.oid AND a.attname::sys.nvarchar(128) = t4."COLUMN_NAME" + LEFT JOIN pg_type t ON t.oid = a.atttypid + LEFT JOIN sys.columns t6 ON + ( + t1.oid = t6.object_id AND + t4."ORDINAL_POSITION" = t6.column_id + ) + , sys.translate_pg_type_to_tsql(a.atttypid) AS tsql_type_name + , sys.spt_datatype_info_table AS t5 +WHERE + (t4."DATA_TYPE" = CAST(t5.TYPE_NAME AS sys.nvarchar(128)) OR (t4."DATA_TYPE" = 'bytea' AND t5.TYPE_NAME = 'image')) + AND ext.dbid = sys.db_id(); + +GRANT SELECT on sys.sp_columns_100_view TO PUBLIC; +CREATE OR REPLACE PROCEDURE sys.sp_columns_100 ( + "@table_name" sys.nvarchar(384), + "@table_owner" sys.nvarchar(384) = '', + "@table_qualifier" sys.nvarchar(384) = '', + "@column_name" sys.nvarchar(384) = '', + "@namescope" int = 0, + "@odbcver" int = 2, + "@fusepattern" smallint = 1) +AS $$ +BEGIN + IF @fusepattern = 1 + select table_qualifier as TABLE_QUALIFIER, + table_owner as TABLE_OWNER, + table_name as TABLE_NAME, + column_name as COLUMN_NAME, + data_type as DATA_TYPE, + type_name as TYPE_NAME, + precision as PRECISION, + length as LENGTH, + scale as SCALE, + radix as RADIX, + nullable as NULLABLE, + remarks as REMARKS, + column_def as COLUMN_DEF, + sql_data_type as SQL_DATA_TYPE, + sql_datetime_sub as SQL_DATETIME_SUB, + char_octet_length as CHAR_OCTET_LENGTH, + ordinal_position as ORDINAL_POSITION, + is_nullable as IS_NULLABLE, + ss_is_sparse as SS_IS_SPARSE, + ss_is_column_set as SS_IS_COLUMN_SET, + ss_is_computed as SS_IS_COMPUTED, + ss_is_identity as SS_IS_IDENTITY, + ss_udt_catalog_name as SS_UDT_CATALOG_NAME, + ss_udt_schema_name as SS_UDT_SCHEMA_NAME, + ss_udt_assembly_type_name as SS_UDT_ASSEMBLY_TYPE_NAME, + ss_xml_schemacollection_catalog_name as SS_XML_SCHEMACOLLECTION_CATALOG_NAME, + ss_xml_schemacollection_schema_name as SS_XML_SCHEMACOLLECTION_SCHEMA_NAME, + ss_xml_schemacollection_name as SS_XML_SCHEMACOLLECTION_NAME, + ( + CASE + WHEN ss_is_identity = 1 AND sql_data_type = -6 THEN 48 -- Tinyint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 5 THEN 52 -- Smallint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 4 THEN 56 -- Int Identity + WHEN ss_is_identity = 1 AND sql_data_type = -5 THEN 63 -- Bigint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 3 THEN 55 -- Decimal Identity + WHEN ss_is_identity = 1 AND sql_data_type = 2 THEN 63 -- Numeric Identity + ELSE ss_data_type + END + ) as SS_DATA_TYPE + from sys.sp_columns_100_view + -- TODO: Temporary fix to use \ as escape character for now, need to remove ESCAPE clause from LIKE once we have fixed the dependencies on this procedure + where table_name like @table_name COLLATE database_default ESCAPE '\' -- ' adding quote in comment to suppress build warning + and (coalesce(@table_owner,'') = '' or table_owner like @table_owner collate database_default ESCAPE '\') -- ' adding quote in comment to suppress build warning + and (coalesce(@table_qualifier,'') = '' or table_qualifier like @table_qualifier collate database_default) + and (coalesce(@column_name,'') = '' or column_name like @column_name collate database_default) + order by table_qualifier, + table_owner, + table_name, + ordinal_position; + ELSE + select table_qualifier as TABLE_QUALIFIER, + table_owner as TABLE_OWNER, + table_name as TABLE_NAME, + column_name as COLUMN_NAME, + data_type as DATA_TYPE, + type_name as TYPE_NAME, + precision as PRECISION, + length as LENGTH, + scale as SCALE, + radix as RADIX, + nullable as NULLABLE, + remarks as REMARKS, + column_def as COLUMN_DEF, + sql_data_type as SQL_DATA_TYPE, + sql_datetime_sub as SQL_DATETIME_SUB, + char_octet_length as CHAR_OCTET_LENGTH, + ordinal_position as ORDINAL_POSITION, + is_nullable as IS_NULLABLE, + ss_is_sparse as SS_IS_SPARSE, + ss_is_column_set as SS_IS_COLUMN_SET, + ss_is_computed as SS_IS_COMPUTED, + ss_is_identity as SS_IS_IDENTITY, + ss_udt_catalog_name as SS_UDT_CATALOG_NAME, + ss_udt_schema_name as SS_UDT_SCHEMA_NAME, + ss_udt_assembly_type_name as SS_UDT_ASSEMBLY_TYPE_NAME, + ss_xml_schemacollection_catalog_name as SS_XML_SCHEMACOLLECTION_CATALOG_NAME, + ss_xml_schemacollection_schema_name as SS_XML_SCHEMACOLLECTION_SCHEMA_NAME, + ss_xml_schemacollection_name as SS_XML_SCHEMACOLLECTION_NAME, + ( + CASE + WHEN ss_is_identity = 1 AND sql_data_type = -6 THEN 48 -- Tinyint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 5 THEN 52 -- Smallint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 4 THEN 56 -- Int Identity + WHEN ss_is_identity = 1 AND sql_data_type = -5 THEN 63 -- Bigint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 3 THEN 55 -- Decimal Identity + WHEN ss_is_identity = 1 AND sql_data_type = 2 THEN 63 -- Numeric Identity + ELSE ss_data_type + END + ) as SS_DATA_TYPE + from sys.sp_columns_100_view + where table_name = @table_name collate database_default + and (coalesce(@table_owner, '') = '' or table_owner = @table_owner collate database_default) + and (coalesce(@table_qualifier,'') = '' or table_qualifier = @table_qualifier collate database_default) + and (coalesce(@column_name,'') = '' or column_name = @column_name collate database_default) + order by table_qualifier, + table_owner, + table_name, + ordinal_position; +END; +$$ +LANGUAGE 'pltsql'; +GRANT ALL on PROCEDURE sys.sp_columns_100 TO PUBLIC; + + +create or replace view sys.all_views as +SELECT + CAST(COALESCE( + (SELECT pg_catalog.string_agg( + CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') + FROM unnest(c.reloptions) AS option), + c.relname::text) AS sys.SYSNAME) as name + , CAST(c.oid AS INT) as object_id + , CAST(null AS INT) as principal_id + , CAST(c.relnamespace as INT) as schema_id + , CAST(0 as INT) as parent_object_id + , CAST('V' as sys.bpchar(2)) as type + , CAST('VIEW'as sys.nvarchar(60)) as type_desc + , CAST(null as sys.datetime) as create_date + , CAST(null as sys.datetime) as modify_date + , CAST(((c.relnamespace::regnamespace::text = 'sys') or + c.relname in (select name from sys.shipped_objects_not_in_sys nis + where nis.name = c.relname and nis.schemaid = c.relnamespace and nis.type = 'V')) + as sys.bit) AS is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published + , CAST(0 as sys.BIT) AS is_replicated + , CAST(0 as sys.BIT) AS has_replication_filter + , CAST(0 as sys.BIT) AS has_opaque_metadata + , CAST(0 as sys.BIT) AS has_unchecked_assembly_data + , CAST( + CASE + WHEN (v.check_option = 'NONE') + THEN 0 + ELSE 1 + END + AS sys.BIT) AS with_check_option + , CAST(0 as sys.BIT) AS is_date_correlation_view +FROM pg_catalog.pg_namespace AS ns +INNER JOIN pg_class c ON ns.oid = c.relnamespace +INNER JOIN information_schema.views v ON c.relname = v.table_name AND ns.nspname = v.table_schema +WHERE c.relkind = 'v' AND ns.nspname in + (SELECT nspname from sys.babelfish_namespace_ext where dbid = sys.db_id() UNION ALL SELECT CAST('sys' AS NAME)) +AND pg_is_other_temp_schema(ns.oid) = false +AND (pg_has_role(c.relowner, 'USAGE') = true +OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER') = true +OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES') = true); +GRANT SELECT ON sys.all_views TO PUBLIC; + +CREATE OR REPLACE VIEW sys.triggers +AS +SELECT + CAST(coalesce(f.orig_name, p.proname::text) as sys.sysname) as name, + CAST(tr.oid as int) as object_id, + CAST(1 as sys.tinyint) as parent_class, + CAST('OBJECT_OR_COLUMN' as sys.nvarchar(60)) AS parent_class_desc, + CAST(tr.tgrelid as int) AS parent_id, + CAST('TR' as sys.bpchar(2)) AS type, + CAST('SQL_TRIGGER' as sys.nvarchar(60)) AS type_desc, + CAST(f.create_date as sys.datetime) AS create_date, + CAST(f.create_date as sys.datetime) AS modify_date, + CAST(0 as sys.bit) AS is_ms_shipped, + CAST(tr.tgenabled = 'D' AS sys.bit) AS is_disabled, + CAST(0 as sys.bit) AS is_not_for_replication, + CAST(get_bit(CAST(CAST(tr.tgtype as int) as bit(7)),0) as sys.bit) AS is_instead_of_trigger +FROM pg_proc p +inner join sys.schemas sch on sch.schema_id = p.pronamespace +left join pg_trigger tr on tr.tgfoid = p.oid +left join sys.babelfish_function_ext f on p.proname = f.funcname and sch.schema_id::regnamespace::name = f.nspname +and sys.babelfish_get_pltsql_function_signature(p.oid) = f.funcsignature collate "C" +where +has_function_privilege(p.oid, 'EXECUTE') +and p.prokind = 'f' +and format_type(p.prorettype, null) = 'trigger'; +GRANT SELECT ON sys.triggers TO PUBLIC; + + +ALTER VIEW sys.sp_special_columns_view RENAME TO sp_special_columns_view_deprecated_in_6_2_0; +CREATE OR REPLACE VIEW sys.sp_special_columns_view AS +SELECT +CAST(1 AS SMALLINT) AS SCOPE, +CAST(coalesce (split_part(a.attoptions[1] COLLATE "C", '=', 2) ,a.attname::text) AS sys.sysname) AS COLUMN_NAME, -- get original column name if exists +CAST(t6.data_type AS SMALLINT) AS DATA_TYPE, + +CASE -- cases for when they are of type identity. + WHEN a.attidentity <> ''::"char" AND (t1.name = 'decimal' OR t1.name = 'numeric') + THEN CAST(PG_CATALOG.CONCAT(t1.name, '() identity') AS sys.sysname) + WHEN a.attidentity <> ''::"char" AND (t1.name != 'decimal' AND t1.name != 'numeric') + THEN CAST(PG_CATALOG.CONCAT(t1.name, ' identity') AS sys.sysname) + ELSE CAST(t1.name AS sys.sysname) +END AS TYPE_NAME, + +CAST(sys.sp_special_columns_precision_helper(COALESCE(tsql_type_name, tsql_base_type_name), c1.precision, c1.max_length, t6."PRECISION") AS INT) AS PRECISION, +CAST(sys.sp_special_columns_length_helper(coalesce(tsql_type_name, tsql_base_type_name), c1.precision, c1.max_length, t6."PRECISION") AS INT) AS LENGTH, +CAST(sys.sp_special_columns_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), c1.scale) AS SMALLINT) AS SCALE, +CAST(1 AS smallint) AS PSEUDO_COLUMN, +CASE + WHEN a.attnotnull + THEN CAST(0 AS INT) + ELSE CAST(1 AS INT) END +AS IS_NULLABLE, +CAST(nsp_ext.dbname AS sys.sysname) AS TABLE_QUALIFIER, +CAST(s1.name AS sys.sysname) AS TABLE_OWNER, +CAST(COALESCE( + (SELECT pg_catalog.string_agg( + CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') + FROM unnest(C.reloptions) AS option), + C.relname::text) AS sys.sysname) AS TABLE_NAME, + +CASE + WHEN X.indisprimary + THEN CAST('p' AS sys.sysname) + ELSE CAST('u' AS sys.sysname) -- if it is a unique index, then we should cast it as 'u' for filtering purposes +END AS CONSTRAINT_TYPE, +CAST(I.relname AS sys.sysname) CONSTRAINT_NAME, +CAST(X.indexrelid AS int) AS INDEX_ID + +FROM( pg_index X +JOIN pg_class C ON X.indrelid = C.oid +JOIN pg_class I ON I.oid = X.indexrelid +CROSS JOIN LATERAL unnest(X.indkey) AS ak(k) + LEFT JOIN pg_attribute a + ON (a.attrelid = X.indrelid AND a.attnum = ak.k) +) +LEFT JOIN sys.pg_namespace_ext nsp_ext ON C.relnamespace = nsp_ext.oid +LEFT JOIN sys.schemas s1 ON s1.schema_id = C.relnamespace +LEFT JOIN sys.columns c1 ON c1.object_id = X.indrelid AND cast(a.attname AS sys.sysname) = c1.name COLLATE sys.database_default +LEFT JOIN pg_catalog.pg_type AS T ON T.oid = c1.system_type_id +LEFT JOIN sys.types AS t1 ON a.atttypid = t1.user_type_id +LEFT JOIN sys.sp_datatype_info_helper(2::smallint, false) AS t6 ON T.typname = t6.pg_type_name OR T.typname = t6.type_name --need in order to get accurate DATA_TYPE value +, sys.translate_pg_type_to_tsql(t1.user_type_id) AS tsql_type_name +, sys.translate_pg_type_to_tsql(t1.system_type_id) AS tsql_base_type_name +WHERE X.indislive ; + +GRANT SELECT ON sys.sp_special_columns_view TO PUBLIC; + +ALTER VIEW sys.sp_fkeys_view RENAME TO sp_fkeys_view_deprecated_in_6_2_0; +CREATE OR REPLACE VIEW sys.sp_fkeys_view AS +SELECT +CAST(nsp_ext2.dbname AS sys.sysname) AS PKTABLE_QUALIFIER, +CAST(bbf_nsp2.orig_name AS sys.sysname) AS PKTABLE_OWNER , +CAST(COALESCE( + (SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(c2.reloptions) AS option), + c2.relname::text) AS sys.sysname) AS PKTABLE_NAME, +CAST(COALESCE(split_part(a2.attoptions[1] COLLATE "C", '=', 2),a2.attname) AS sys.sysname) AS PKCOLUMN_NAME, +CAST(nsp_ext.dbname AS sys.sysname) AS FKTABLE_QUALIFIER, +CAST(bbf_nsp.orig_name AS sys.sysname) AS FKTABLE_OWNER , +CAST(COALESCE( + (SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(c.reloptions) AS option), + c.relname::text) AS sys.sysname) AS FKTABLE_NAME, +CAST(COALESCE(split_part(a.attoptions[1] COLLATE "C", '=', 2),a.attname::text) AS sys.sysname) AS FKCOLUMN_NAME, +CAST(nr AS smallint) AS KEY_SEQ, +CASE + WHEN const1.confupdtype = 'c' THEN CAST(0 AS smallint) -- cascade + WHEN const1.confupdtype = 'a' THEN CAST(1 AS smallint) -- no action + WHEN const1.confupdtype = 'n' THEN CAST(2 AS smallint) -- set null + WHEN const1.confupdtype = 'd' THEN CAST(3 AS smallint) -- set default +END AS UPDATE_RULE, + +CASE + WHEN const1.confdeltype = 'c' THEN CAST(0 AS smallint) -- cascade + WHEN const1.confdeltype = 'a' THEN CAST(1 AS smallint) -- no action + WHEN const1.confdeltype = 'n' THEN CAST(2 AS smallint) -- set null + WHEN const1.confdeltype = 'd' THEN CAST(3 AS smallint) -- set default + ELSE CAST(0 AS smallint) +END AS DELETE_RULE, +CAST(const1.conname AS sys.sysname) AS FK_NAME, +CAST(const2.conname AS sys.sysname) AS PK_NAME, +CASE + WHEN const1.condeferrable = false THEN CAST(7 as smallint) -- not deferrable + ELSE (CASE WHEN const1.condeferred = false THEN CAST(6 as smallint) -- not deferred by default + ELSE CAST(5 as smallint) -- deferred by default + END) +END AS DEFERRABILITY + +FROM (pg_constraint const1 +-- join with nsp_Ext to get constraints in current namespace +JOIN sys.pg_namespace_ext nsp_ext ON nsp_ext.oid = const1.connamespace +--get the table names corresponding to foreign keys +JOIN pg_class c ON const1.conrelid = c.oid AND const1.contype ='f' +-- join wiht bbf_nsp to get all constraint related to tsql endpoint and the owner of foreign key +JOIN sys.babelfish_namespace_ext bbf_nsp ON bbf_nsp.nspname = nsp_ext.nspname AND bbf_nsp.dbid = sys.db_id() +-- lateral join to use the conkey and confkey to join with pg_attribute to get column names +CROSS JOIN LATERAL unnest(const1.conkey,const1.confkey) WITH ORDINALITY AS ak(j, k, nr) + LEFT JOIN pg_attribute a + ON (a.attrelid = const1.conrelid AND a.attnum = ak.j) + LEFT JOIN pg_attribute a2 + ON (a2.attrelid = const1.confrelid AND a2.attnum = ak.k) +) +-- get the index that foreign key depends on +LEFT JOIN pg_depend d1 ON d1.objid = const1.oid AND d1.classid = 'pg_constraint'::regclass + AND d1.refclassid = 'pg_class'::regclass AND d1.refobjsubid = 0 +-- get the pkey/ukey constraint for this index +LEFT JOIN pg_depend d2 ON d2.refclassid = 'pg_constraint'::regclass AND d2.classid = 'pg_class'::regclass AND d2.objid = d1.refobjid AND d2.objsubid = 0 AND d2.deptype = 'i' +-- get the constraint name from new pg_constraint +LEFT JOIN pg_constraint const2 ON const2.oid = d2.refobjid AND const2.contype IN ('p', 'u') AND const2.conrelid = const1.confrelid +-- get the namespace name for primary key +LEFT JOIN sys.pg_namespace_ext nsp_ext2 ON const2.connamespace = nsp_ext2.oid +-- get the owner name for primary key +LEFT JOIN sys.babelfish_namespace_ext bbf_nsp2 ON bbf_nsp2.nspname = nsp_ext2.nspname AND bbf_nsp2.dbid = sys.db_id() +-- get the table name for primary key +LEFT JOIN pg_class c2 ON const2.conrelid = c2.oid AND const2.contype IN ('p', 'u'); + +GRANT SELECT ON sys.sp_fkeys_view TO PUBLIC; + +ALTER VIEW sys.sp_stored_procedures_view RENAME TO sp_stored_procedures_view_deprecated_in_6_2_0; + +CREATE OR REPLACE VIEW sys.sp_stored_procedures_view AS +SELECT +CAST(d.name AS sys.sysname) COLLATE sys.database_default AS PROCEDURE_QUALIFIER, +CAST(s1.name AS sys.sysname) AS PROCEDURE_OWNER, + +CASE + WHEN p.prokind = 'p' THEN CAST(PG_CATALOG.concat(COALESCE(f.orig_name, p.proname::sys.NVARCHAR(128)), ';1') AS sys.nvarchar(134)) + ELSE CAST(PG_CATALOG.concat(COALESCE(f.orig_name, p.proname::sys.NVARCHAR(128)), ';0') AS sys.nvarchar(134)) +END AS PROCEDURE_NAME, + +-1 AS NUM_INPUT_PARAMS, +-1 AS NUM_OUTPUT_PARAMS, +-1 AS NUM_RESULT_SETS, +CAST(NULL AS varchar(254)) COLLATE sys.database_default AS REMARKS, +cast(2 AS smallint) AS PROCEDURE_TYPE + +FROM pg_catalog.pg_proc p + +INNER JOIN sys.schemas s1 ON p.pronamespace = s1.schema_id +INNER JOIN sys.databases d ON d.database_id = sys.db_id() +LEFT JOIN sys.babelfish_function_ext f ON p.proname = f.funcname AND p.pronamespace::regnamespace::name = f.nspname + +UNION + +SELECT CAST((SELECT sys.db_name()) AS sys.sysname) COLLATE sys.database_default AS PROCEDURE_QUALIFIER, +CAST(nspname AS sys.sysname) AS PROCEDURE_OWNER, + +CASE + WHEN prokind = 'p' THEN cast(PG_CATALOG.concat(proname, ';1') AS sys.nvarchar(134)) + ELSE cast(PG_CATALOG.concat(proname, ';0') AS sys.nvarchar(134)) +END AS PROCEDURE_NAME, + +-1 AS NUM_INPUT_PARAMS, +-1 AS NUM_OUTPUT_PARAMS, +-1 AS NUM_RESULT_SETS, +CAST(NULL AS varchar(254)) COLLATE sys.database_default AS REMARKS, +cast(2 AS smallint) AS PROCEDURE_TYPE + +FROM pg_catalog.pg_namespace n +JOIN pg_catalog.pg_proc p +ON pronamespace = n.oid +WHERE nspname = 'sys' AND (proname LIKE 'sp\_%' OR proname LIKE 'xp\_%' OR proname LIKE 'dm\_%' OR proname LIKE 'fn\_%'); + +GRANT SELECT ON sys.sp_stored_procedures_view TO PUBLIC; + + +create or replace view sys.databases as +select + CAST(d.orig_name as SYS.SYSNAME) as name + , CAST(sys.db_id(d.name) as INT) as database_id + , CAST(NULL as INT) as source_database_id + , cast(s.sid as SYS.VARBINARY(85)) as owner_sid + , CAST(d.crdate AS SYS.DATETIME) as create_date + , CAST(s.cmptlevel AS SYS.TINYINT) as compatibility_level + , CAST(c.collname as SYS.SYSNAME) as collation_name + , CAST(0 AS SYS.TINYINT) as user_access + , CAST('MULTI_USER' AS SYS.NVARCHAR(60)) as user_access_desc + , CAST(0 AS SYS.BIT) as is_read_only + , CAST(0 AS SYS.BIT) as is_auto_close_on + , CAST(0 AS SYS.BIT) as is_auto_shrink_on + , CAST(0 AS SYS.TINYINT) as state + , CAST('ONLINE' AS SYS.NVARCHAR(60)) as state_desc + , CAST( + CASE + WHEN pg_is_in_recovery() is false THEN 0 + WHEN pg_is_in_recovery() is true THEN 1 + END + AS SYS.BIT) as is_in_standby + , CAST(0 AS SYS.BIT) as is_cleanly_shutdown + , CAST(0 AS SYS.BIT) as is_supplemental_logging_enabled + , CAST(1 AS SYS.TINYINT) as snapshot_isolation_state + , CAST('ON' AS SYS.NVARCHAR(60)) as snapshot_isolation_state_desc + , CAST(1 AS SYS.BIT) as is_read_committed_snapshot_on + , CAST(1 AS SYS.TINYINT) as recovery_model + , CAST('FULL' AS SYS.NVARCHAR(60)) as recovery_model_desc + , CAST(0 AS SYS.TINYINT) as page_verify_option + , CAST(NULL AS SYS.NVARCHAR(60)) as page_verify_option_desc + , CAST(1 AS SYS.BIT) as is_auto_create_stats_on + , CAST(0 AS SYS.BIT) as is_auto_create_stats_incremental_on + , CAST(0 AS SYS.BIT) as is_auto_update_stats_on + , CAST(0 AS SYS.BIT) as is_auto_update_stats_async_on + , CAST(0 AS SYS.BIT) as is_ansi_null_default_on + , CAST(0 AS SYS.BIT) as is_ansi_nulls_on + , CAST(0 AS SYS.BIT) as is_ansi_padding_on + , CAST(0 AS SYS.BIT) as is_ansi_warnings_on + , CAST(0 AS SYS.BIT) as is_arithabort_on + , CAST(0 AS SYS.BIT) as is_concat_null_yields_null_on + , CAST(0 AS SYS.BIT) as is_numeric_roundabort_on + , CAST(0 AS SYS.BIT) as is_quoted_identifier_on + , CAST(0 AS SYS.BIT) as is_recursive_triggers_on + , CAST(0 AS SYS.BIT) as is_cursor_close_on_commit_on + , CAST(0 AS SYS.BIT) as is_local_cursor_default + , CAST(0 AS SYS.BIT) as is_fulltext_enabled + , CAST(0 AS SYS.BIT) as is_trustworthy_on + , CAST(0 AS SYS.BIT) as is_db_chaining_on + , CAST(0 AS SYS.BIT) as is_parameterization_forced + , CAST(0 AS SYS.BIT) as is_master_key_encrypted_by_server + , CAST(0 AS SYS.BIT) as is_query_store_on + , CAST(0 AS SYS.BIT) as is_published + , CAST(0 AS SYS.BIT) as is_subscribed + , CAST(0 AS SYS.BIT) as is_merge_published + , CAST(0 AS SYS.BIT) as is_distributor + , CAST(0 AS SYS.BIT) as is_sync_with_backup + , CAST(NULL AS SYS.UNIQUEIDENTIFIER) as service_broker_guid + , CAST(0 AS SYS.BIT) as is_broker_enabled + , CAST(0 AS SYS.TINYINT) as log_reuse_wait + , CAST('NOTHING' AS SYS.NVARCHAR(60)) as log_reuse_wait_desc + , CAST(0 AS SYS.BIT) as is_date_correlation_on + , CAST(0 AS SYS.BIT) as is_cdc_enabled + , CAST(0 AS SYS.BIT) as is_encrypted + , CAST(0 AS SYS.BIT) as is_honor_broker_priority_on + , CAST(NULL AS SYS.UNIQUEIDENTIFIER) as replica_id + , CAST(NULL AS SYS.UNIQUEIDENTIFIER) as group_database_id + , CAST(NULL AS INT) as resource_pool_id + , CAST(NULL AS SMALLINT) as default_language_lcid + , CAST(NULL AS SYS.NVARCHAR(128)) as default_language_name + , CAST(NULL AS INT) as default_fulltext_language_lcid + , CAST(NULL AS SYS.NVARCHAR(128)) as default_fulltext_language_name + , CAST(NULL AS SYS.BIT) as is_nested_triggers_on + , CAST(NULL AS SYS.BIT) as is_transform_noise_words_on + , CAST(NULL AS SMALLINT) as two_digit_year_cutoff + , CAST(0 AS SYS.TINYINT) as containment + , CAST('NONE' AS SYS.NVARCHAR(60)) as containment_desc + , CAST(0 AS INT) as target_recovery_time_in_seconds + , CAST(0 AS INT) as delayed_durability + , CAST(NULL AS SYS.NVARCHAR(60)) as delayed_durability_desc + , CAST(0 AS SYS.BIT) as is_memory_optimized_elevate_to_snapshot_on + , CAST(0 AS SYS.BIT) as is_federation_member + , CAST(0 AS SYS.BIT) as is_remote_data_archive_enabled + , CAST(0 AS SYS.BIT) as is_mixed_page_allocation_on + , CAST(0 AS SYS.BIT) as is_temporal_history_retention_enabled + , CAST(0 AS INT) as catalog_collation_type + , CAST('Not Applicable' AS SYS.NVARCHAR(60)) as catalog_collation_type_desc + , CAST(NULL AS SYS.NVARCHAR(128)) as physical_database_name + , CAST(0 AS SYS.BIT) as is_result_set_caching_on + , CAST(0 AS SYS.BIT) as is_accelerated_database_recovery_on + , CAST(0 AS SYS.BIT) as is_tempdb_spill_to_remote_store + , CAST(0 AS SYS.BIT) as is_stale_page_detection_on + , CAST(0 AS SYS.BIT) as is_memory_optimized_enabled + , CAST(0 AS SYS.BIT) as is_ledger_on + from sys.babelfish_sysdatabases d + INNER JOIN sys.sysdatabases s on d.dbid = s.dbid + LEFT OUTER JOIN pg_catalog.pg_collation c ON d.default_collation = c.collname; +GRANT SELECT ON sys.databases TO PUBLIC; + +CREATE OR REPLACE FUNCTION sys.columns_internal() +RETURNS TABLE ( + out_object_id int, + out_name sys.sysname, + out_column_id int, + out_system_type_id int, + out_user_type_id int, + out_max_length smallint, + out_precision sys.tinyint, + out_scale sys.tinyint, + out_collation_name sys.sysname, + out_collation_id int, + out_offset smallint, + out_is_nullable sys.bit, + out_is_ansi_padded sys.bit, + out_is_rowguidcol sys.bit, + out_is_identity sys.bit, + out_is_computed sys.bit, + out_is_filestream sys.bit, + out_is_replicated sys.bit, + out_is_non_sql_subscribed sys.bit, + out_is_merge_published sys.bit, + out_is_dts_replicated sys.bit, + out_is_xml_document sys.bit, + out_xml_collection_id int, + out_default_object_id int, + out_rule_object_id int, + out_is_sparse sys.bit, + out_is_column_set sys.bit, + out_generated_always_type sys.tinyint, + out_generated_always_type_desc sys.nvarchar(60), + out_encryption_type int, + out_encryption_type_desc sys.nvarchar(64), + out_encryption_algorithm_name sys.sysname, + out_column_encryption_key_id int, + out_column_encryption_key_database_name sys.sysname, + out_is_hidden sys.bit, + out_is_masked sys.bit, + out_graph_type int, + out_graph_type_desc sys.nvarchar(60) +) +AS +$$ +BEGIN + RETURN QUERY + SELECT CAST(c.oid AS int), + CAST(coalesce( + (select substring(val, 19) from (select unnest(a.attoptions) as val) opts where val like 'bbf_original_name=%%' limit 1), + case when c.relkind = 'v' and length(a.attname) >= 63 + then sys.bbf_get_view_column_name(c.oid, a.attnum) + end, + a.attname) + AS sys.sysname), + CAST(a.attnum AS int), + CASE + WHEN tsql_type_name IS NOT NULL OR t.typbasetype = 0 THEN + -- either tsql or PG base type + CAST(a.atttypid AS int) + ELSE + CAST(t.typbasetype AS int) + END, + CAST(a.atttypid AS int), + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_max_length_helper(coalesce(tsql_type_name, tsql_base_type_name), a.attlen, a.atttypmod) + ELSE + sys.tsql_type_max_length_helper(coalesce(tsql_type_name, tsql_base_type_name), a.attlen, t.typtypmod) + END, + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod) + ELSE + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod) + END, + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod, false) + ELSE + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod, false) + END, + CAST(coll.collname AS sys.sysname), + CAST(a.attcollation AS int), + CAST(a.attnum AS smallint), + CAST(case when a.attnotnull then 0 else 1 end AS sys.bit), + CAST(t.typname in ('bpchar', 'nchar', 'binary') AS sys.bit), + CAST(0 AS sys.bit), + CAST(a.attidentity <> ''::"char" AS sys.bit), + CAST(a.attgenerated <> ''::"char" AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS int), + CAST(coalesce(d.oid, 0) AS int), + CAST(coalesce((select oid from pg_constraint where conrelid = t.oid + and contype = 'c' and a.attnum = any(conkey) limit 1), 0) AS int), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.tinyint), + CAST('NOT_APPLICABLE' AS sys.nvarchar(60)), + CAST(null AS int), + CAST(null AS sys.nvarchar(64)), + CAST(null AS sys.sysname), + CAST(null AS int), + CAST(null AS sys.sysname), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(null AS int), + CAST(null AS sys.nvarchar(60)) + FROM pg_attribute a + INNER JOIN pg_class c ON c.oid = a.attrelid + INNER JOIN pg_type t ON t.oid = a.atttypid + INNER JOIN sys.schemas sch on c.relnamespace = sch.schema_id + INNER JOIN sys.pg_namespace_ext ext on sch.schema_id = ext.oid + LEFT JOIN pg_attrdef d ON c.oid = d.adrelid AND a.attnum = d.adnum + LEFT JOIN pg_collation coll ON coll.oid = a.attcollation + , sys.translate_pg_type_to_tsql(a.atttypid) AS tsql_type_name + , sys.translate_pg_type_to_tsql(t.typbasetype) AS tsql_base_type_name + WHERE NOT a.attisdropped + AND a.attnum > 0 + -- r = ordinary table, i = index, S = sequence, t = TOAST table, v = view, m = materialized view, c = composite type, f = foreign table, p = partitioned table + AND c.relkind IN ('r', 'v', 'm', 'f', 'p') + AND c.relispartition = false + AND has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES') + union all + -- system tables information + SELECT CAST(c.oid AS int), + CAST(a.attname AS sys.sysname), + CAST(a.attnum AS int), + CASE + WHEN tsql_type_name IS NOT NULL OR t.typbasetype = 0 THEN + -- either tsql or PG base type + CAST(a.atttypid AS int) + ELSE + CAST(t.typbasetype AS int) + END, + CAST(a.atttypid AS int), + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_max_length_helper(coalesce(tsql_type_name, tsql_base_type_name), a.attlen, a.atttypmod) + ELSE + sys.tsql_type_max_length_helper(coalesce(tsql_type_name, tsql_base_type_name), a.attlen, t.typtypmod) + END, + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod) + ELSE + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod) + END, + CASE + WHEN a.atttypmod != -1 THEN + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod, false) + ELSE + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod, false) + END, + CAST(coll.collname AS sys.sysname), + CAST(a.attcollation AS int), + CAST(a.attnum AS smallint), + CAST(case when a.attnotnull then 0 else 1 end AS sys.bit), + CAST(t.typname in ('bpchar', 'nchar', 'binary') AS sys.bit), + CAST(0 AS sys.bit), + CAST(a.attidentity <> ''::"char" AS sys.bit), + CAST(a.attgenerated <> ''::"char" AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS int), + CAST(coalesce(d.oid, 0) AS int), + CAST(coalesce((select oid from pg_constraint where conrelid = t.oid + and contype = 'c' and a.attnum = any(conkey) limit 1), 0) AS int), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(0 AS sys.tinyint), + CAST('NOT_APPLICABLE' AS sys.nvarchar(60)), + CAST(null AS int), + CAST(null AS sys.nvarchar(64)), + CAST(null AS sys.sysname), + CAST(null AS int), + CAST(null AS sys.sysname), + CAST(0 AS sys.bit), + CAST(0 AS sys.bit), + CAST(null AS int), + CAST(null AS sys.nvarchar(60)) + FROM pg_attribute a + INNER JOIN pg_class c ON c.oid = a.attrelid + INNER JOIN pg_type t ON t.oid = a.atttypid + INNER JOIN pg_namespace nsp ON (nsp.oid = c.relnamespace and nsp.nspname = 'sys') + LEFT JOIN pg_attrdef d ON c.oid = d.adrelid AND a.attnum = d.adnum + LEFT JOIN pg_collation coll ON coll.oid = a.attcollation + , sys.translate_pg_type_to_tsql(a.atttypid) AS tsql_type_name + , sys.translate_pg_type_to_tsql(t.typbasetype) AS tsql_base_type_name + WHERE NOT a.attisdropped + AND a.attnum > 0 + AND c.relkind = 'r' + AND has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES'); +END; +$$ +language plpgsql STABLE; + + + +-- 5o. sys.all_columns (add bbf_get_view_column_name + attoptions for column name) +-- Note: full view recreation needed - copy from sys_views.sql +-- Drop deprecated views +-- Drop wrapper views before dropping deprecated +DO $$ +DECLARE r RECORD; + schema_name TEXT; +BEGIN + FOR r IN SELECT name FROM sys.babelfish_sysdatabases LOOP + schema_name := r.name || '_dbo'; + IF length(schema_name) > 63 THEN + schema_name := sys.babelfish_truncate_identifier(schema_name); + END IF; + EXECUTE format('DROP VIEW IF EXISTS %I.sysdatabases CASCADE', schema_name); + END LOOP; +END $$; +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'sysdatabases_deprecated_in_6_2_0'); +-- Recreate wrapper views +DO $$ +DECLARE r RECORD; + schema_name TEXT; +BEGIN + FOR r IN SELECT name FROM sys.babelfish_sysdatabases LOOP + schema_name := r.name || '_dbo'; + IF length(schema_name) > 63 THEN + schema_name := sys.babelfish_truncate_identifier(schema_name); + END IF; + EXECUTE format('CREATE VIEW %I.sysdatabases AS SELECT * FROM sys.sysdatabases', schema_name); + EXECUTE format('ALTER EXTENSION babelfishpg_tsql DROP VIEW %I.sysdatabases', schema_name); + EXECUTE format('ALTER TABLE %I.sysdatabases OWNER TO %I', schema_name, schema_name); + END LOOP; +END $$; + +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'sp_tables_view_deprecated_in_6_2_0'); +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'sp_special_columns_view_deprecated_in_6_2_0'); +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'sp_fkeys_view_deprecated_in_6_2_0'); +CALL sys.babelfish_drop_deprecated_object('view', 'sys', 'sp_stored_procedures_view_deprecated_in_6_2_0'); + +-- 5n. Recreate information_schema_tsql.columns_internal (add bbf_get_view_column_name for view columns) +CREATE OR REPLACE VIEW information_schema_tsql.columns_internal AS + SELECT c.oid AS "TABLE_OID", + CAST(nc.dbname AS sys.nvarchar(128)) AS "TABLE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", + CAST( + COALESCE( + (SELECT PG_CATALOG.string_agg( + CASE + WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) + ELSE NULL + END, ',') + FROM unnest(c.reloptions) AS option), + c.relname) + AS sys.nvarchar(128)) AS "TABLE_NAME", + + CAST( + COALESCE( + (SELECT PG_CATALOG.string_agg( + CASE + WHEN option LIKE 'bbf_original_name=%' THEN substring(option, 19) + ELSE NULL + END, ',') + FROM unnest(a.attoptions) AS option), + sys.bbf_get_view_column_name(a.attrelid, a.attnum::smallint), + a.attname) + AS sys.nvarchar(128)) AS "COLUMN_NAME", + + CAST(a.attnum AS int) AS "ORDINAL_POSITION", + CAST(CASE WHEN a.attgenerated = '' THEN pg_get_expr(ad.adbin, ad.adrelid) END AS sys.nvarchar(4000)) AS "COLUMN_DEFAULT", + CAST(CASE WHEN a.attnotnull OR (t.typtype = 'd' AND t.typnotnull) THEN 'NO' ELSE 'YES' END + AS varchar(3)) + AS "IS_NULLABLE", + + CAST( + CASE WHEN tsql_type_name = 'sysname' THEN sys.translate_pg_type_to_tsql(t.typbasetype) + WHEN tsql_type_name.tsql_type_name IS NULL THEN format_type(t.oid, NULL::integer) + ELSE tsql_type_name END + AS sys.nvarchar(128)) + AS "DATA_TYPE", + + CAST( + information_schema_tsql._pgtsql_char_max_length(tsql_type_name, true_typmod) + AS int) + AS "CHARACTER_MAXIMUM_LENGTH", + + CAST( + information_schema_tsql._pgtsql_char_octet_length(tsql_type_name, true_typmod) + AS int) + AS "CHARACTER_OCTET_LENGTH", + + CAST( + information_schema_tsql._pgtsql_numeric_precision(tsql_type_name, true_typid, true_typmod) + AS sys.tinyint) + AS "NUMERIC_PRECISION", + + CAST( + information_schema_tsql._pgtsql_numeric_precision_radix(tsql_type_name, true_typid, true_typmod) + AS smallint) + AS "NUMERIC_PRECISION_RADIX", + + CAST( + information_schema_tsql._pgtsql_numeric_scale(tsql_type_name, true_typid, true_typmod) + AS int) + AS "NUMERIC_SCALE", + + CAST( + information_schema_tsql._pgtsql_datetime_precision(tsql_type_name, true_typmod) + AS smallint) + AS "DATETIME_PRECISION", + + CAST(null AS sys.nvarchar(128)) AS "CHARACTER_SET_CATALOG", + CAST(null AS sys.nvarchar(128)) AS "CHARACTER_SET_SCHEMA", + CAST(null AS sys.nvarchar(128)) AS "CHARACTER_SET_NAME", + + CAST(NULL as sys.nvarchar(128)) AS "COLLATION_CATALOG", + CAST(NULL as sys.nvarchar(128)) AS "COLLATION_SCHEMA", + + CAST(co.collname AS sys.nvarchar(128)) AS "COLLATION_NAME", + + CAST(CASE WHEN t.typtype = 'd' AND nt.nspname <> 'pg_catalog' AND nt.nspname <> 'sys' + THEN nc.dbname ELSE null END + AS sys.nvarchar(128)) AS "DOMAIN_CATALOG", + CAST(CASE WHEN t.typtype = 'd' AND nt.nspname <> 'pg_catalog' AND nt.nspname <> 'sys' + THEN ext.orig_name ELSE null END + AS sys.nvarchar(128)) AS "DOMAIN_SCHEMA", + CAST(CASE WHEN t.typtype = 'd' AND nt.nspname <> 'pg_catalog' AND nt.nspname <> 'sys' + THEN t.typname ELSE null END + AS sys.nvarchar(128)) AS "DOMAIN_NAME" + + FROM (pg_attribute a LEFT JOIN pg_attrdef ad ON attrelid = adrelid AND attnum = adnum) + JOIN (pg_class c JOIN sys.pg_namespace_ext nc ON (c.relnamespace = nc.oid)) ON a.attrelid = c.oid + JOIN (pg_type t JOIN pg_namespace nt ON (t.typnamespace = nt.oid)) ON a.atttypid = t.oid + LEFT JOIN (pg_type bt JOIN pg_namespace nbt ON (bt.typnamespace = nbt.oid)) + ON (t.typtype = 'd' AND t.typbasetype = bt.oid) + LEFT JOIN pg_collation co on co.oid = a.attcollation + LEFT OUTER JOIN sys.babelfish_namespace_ext ext on nc.nspname = ext.nspname, + information_schema_tsql._pgtsql_truetypid(nt, a, t) AS true_typid, + information_schema_tsql._pgtsql_truetypmod(nt, a, t) AS true_typmod, + sys.translate_pg_type_to_tsql(true_typid) AS tsql_type_name + + WHERE (NOT pg_is_other_temp_schema(nc.oid)) + AND a.attnum > 0 AND NOT a.attisdropped + AND c.relkind IN ('r', 'v', 'p') + AND c.relispartition = false + AND (pg_has_role(c.relowner, 'USAGE') + OR has_column_privilege(c.oid, a.attnum, + 'SELECT, INSERT, UPDATE, REFERENCES')) + AND ext.dbid = sys.db_id(); + +GRANT SELECT ON information_schema_tsql.columns_internal TO PUBLIC; + + +-- 5o. Recreate constraint and object views to resolve original names from babelfish_identifier_mapping +-- These use CREATE OR REPLACE since column types/collations are unchanged. +CREATE OR REPLACE VIEW sys.foreign_keys AS +SELECT + CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) AS sys.sysname) AS name +, CAST(c.oid AS INT) AS object_id +, CAST(NULL AS INT) AS principal_id +, CAST(sch.schema_id AS INT) AS schema_id +, CAST(c.conrelid AS INT) AS parent_object_id +, CAST('F' AS sys.bpchar(2)) AS type +, CAST('FOREIGN_KEY_CONSTRAINT' AS sys.nvarchar(60)) AS type_desc +, CAST(NULL AS sys.datetime) AS create_date +, CAST(NULL AS sys.datetime) AS modify_date +, CAST(0 AS sys.bit) AS is_ms_shipped +, CAST(0 AS sys.bit) AS is_published +, CAST(0 AS sys.bit) AS is_schema_published +, CAST(c.confrelid AS INT) AS referenced_object_id +, CAST(c.conindid AS INT) AS key_index_id +, CAST(0 AS sys.bit) AS is_disabled +, CAST(0 AS sys.bit) AS is_not_for_replication +, CAST(0 AS sys.bit) AS is_not_trusted +, CAST( + (CASE c.confdeltype + WHEN 'a' THEN 0 + WHEN 'r' THEN 0 + WHEN 'c' THEN 1 + WHEN 'n' THEN 2 + WHEN 'd' THEN 3 + END) + AS sys.tinyint) AS delete_referential_action +, CAST( + (CASE c.confdeltype + WHEN 'a' THEN 'NO_ACTION' + WHEN 'r' THEN 'RESTRICT' + WHEN 'c' THEN 'CASCADE' + WHEN 'n' THEN 'SET_NULL' + WHEN 'd' THEN 'SET_DEFAULT' + END) + AS sys.nvarchar(60)) AS delete_referential_action_desc +, CAST( + (CASE c.confupdtype + WHEN 'a' THEN 0 + WHEN 'r' THEN 0 + WHEN 'c' THEN 1 + WHEN 'n' THEN 2 + WHEN 'd' THEN 3 + END) + AS sys.tinyint) AS update_referential_action +, CAST( + (CASE c.confupdtype + WHEN 'a' THEN 'NO_ACTION' + WHEN 'r' THEN 'RESTRICT' + WHEN 'c' THEN 'CASCADE' + WHEN 'n' THEN 'SET_NULL' + WHEN 'd' THEN 'SET_DEFAULT' + END) + AS sys.nvarchar(60)) AS update_referential_action_desc +, CAST(1 AS sys.bit) AS is_system_named +FROM pg_constraint c +INNER JOIN sys.schemas sch ON sch.schema_id = c.connamespace +WHERE has_schema_privilege(sch.schema_id, 'USAGE') +AND c.contype = 'f'; +GRANT SELECT ON sys.foreign_keys TO PUBLIC; + + +-- Recreate sys.key_constraints (resolve original constraint names) +CREATE OR replace view sys.key_constraints AS +SELECT + CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) AS sys.sysname) AS name + , CAST(c.oid AS INT) AS object_id + , CAST(0 AS INT) AS principal_id + , CAST(sch.schema_id AS INT) AS schema_id + , CAST(c.conrelid AS INT) AS parent_object_id + , CAST( + (CASE contype + WHEN 'p' THEN CAST('PK' as sys.bpchar(2)) + WHEN 'u' THEN CAST('UQ' as sys.bpchar(2)) + END) + AS sys.bpchar(2)) AS type + , CAST( + (CASE contype + WHEN 'p' THEN 'PRIMARY_KEY_CONSTRAINT' + WHEN 'u' THEN 'UNIQUE_CONSTRAINT' + END) + AS sys.nvarchar(60)) AS type_desc + , CAST(NULL AS sys.datetime) AS create_date + , CAST(NULL AS sys.datetime) AS modify_date + , CAST(c.conindid AS INT) AS unique_index_id + , CAST(0 AS sys.BIT) AS is_ms_shipped + , CAST(0 AS sys.BIT) AS is_published + , CAST(0 AS sys.BIT) AS is_schema_published + , CAST(1 as sys.BIT) as is_system_named +FROM pg_constraint c +INNER JOIN sys.schemas sch ON sch.schema_id = c.connamespace +WHERE +c.contype IN ('p', 'u'); +GRANT SELECT ON sys.key_constraints TO PUBLIC; + +-- Recreate sys.check_constraints (resolve original constraint names) +CREATE or replace VIEW sys.check_constraints AS +SELECT CAST(COALESCE( + case when octet_length(c.conname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = c.conname + and m.nspname = c.connamespace::regnamespace::name + and m.pg_catalog_type = 'pg_constraint'::regclass::oid) + end, + c.conname::text) as sys.sysname) as name + , CAST(oid as integer) as object_id + , CAST(NULL as integer) as principal_id + , CAST(c.connamespace as integer) as schema_id + , CAST(conrelid as integer) as parent_object_id + , CAST('C' as sys.bpchar(2)) as type + , CAST('CHECK_CONSTRAINT' as sys.nvarchar(60)) as type_desc + , CAST(null as sys.datetime) as create_date + , CAST(null as sys.datetime) as modify_date + , CAST(0 as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published + , CAST(0 as sys.bit) as is_disabled + , CAST(0 as sys.bit) as is_not_for_replication + , CAST(0 as sys.bit) as is_not_trusted + , CAST(c.conkey[1] as integer) AS parent_column_id + , CAST(sys.tsql_get_constraintdef(c.oid) as sys.nvarchar) AS definition + , CAST(1 as sys.bit) as uses_database_collation + , CAST(0 as sys.bit) as is_system_named +FROM pg_catalog.pg_constraint as c +INNER JOIN sys.schemas s on c.connamespace = s.schema_id +WHERE +c.contype = 'c' and c.conrelid != 0; +GRANT SELECT ON sys.check_constraints TO PUBLIC; + + +-- NOTE: sys.all_objects also needs recreation to resolve original names. +-- Due to its size (350+ lines), it is included in the base 6.2.0 script +-- and will be applied on fresh installs. For upgrades, the view definition +-- from sys_views.sql should be applied. + + +-- Create sys.bbf_cur_db() helper function (returns truncated internal db name for comparisons) +CREATE OR REPLACE FUNCTION sys.bbf_cur_db() RETURNS TEXT +AS 'babelfishpg_tsql', 'babelfish_db_name_internal' +LANGUAGE C PARALLEL SAFE STABLE; + +-- Fix sp_helpdb parameter to accept long names +CREATE OR REPLACE PROCEDURE sys.sp_helpdb(IN "@dbname" sys.sysname) +LANGUAGE 'pltsql' +AS $$ +BEGIN + SELECT + CAST(name AS sys.nvarchar(128)), + CAST(db_size AS sys.nvarchar(13)), + CAST(owner AS sys.nvarchar(128)), + CAST(dbid AS sys.int), + CAST(created AS sys.nvarchar(11)), + CAST(status AS sys.nvarchar(600)), + CAST(compatibility_level AS sys.tinyint) + FROM sys.babelfish_helpdb(CAST("@dbname" AS VARCHAR(128))); + + SELECT + CAST(NULL AS sys.NCHAR(128)) AS name, + CAST(NULL AS SMALLINT) AS fileid, + CAST(NULL AS sys.NCHAR(260)) AS filename, + CAST(NULL AS sys.NVARCHAR(128)) AS filegroup, + CAST(NULL AS sys.NVARCHAR(18)) AS size, + CAST(NULL AS sys.NVARCHAR(18)) AS maxsize, + CAST(NULL AS sys.NVARCHAR(18)) AS growth, + CAST(NULL AS sys.VARCHAR(9)) AS usage; + + RETURN 0; +END; +$$; +GRANT EXECUTE ON PROCEDURE sys.sp_helpdb(sys.sysname) TO PUBLIC; + + +CREATE OR REPLACE VIEW sys.database_principals AS +SELECT +CAST(Ext.orig_username AS SYS.SYSNAME) AS name, +-- PG reserves these oid > 16383 AND oid < 16400 for PG specific internal roles. +-- Any change here in the oid should be reflected in sys.database_role_members view as well. +CAST( + CASE Ext.orig_username + WHEN 'db_owner' THEN 16384 + WHEN 'db_accessadmin' THEN 16385 + WHEN 'db_securityadmin' THEN 16386 + WHEN 'db_ddladmin' THEN 16387 + WHEN 'db_datareader' THEN 16390 + WHEN 'db_datawriter' THEN 16391 + ELSE Base.oid + END AS INT) AS principal_id, +CAST(Ext.type AS CHAR(1)) as type, +CAST( + CASE + WHEN Ext.type = 'S' THEN 'SQL_USER' + WHEN Ext.type = 'R' THEN 'DATABASE_ROLE' + WHEN Ext.type = 'U' THEN 'WINDOWS_USER' + ELSE NULL + END + AS SYS.NVARCHAR(60)) AS type_desc, +CAST(Ext.default_schema_name AS SYS.SYSNAME) AS default_schema_name, +CAST(Ext.create_date AS SYS.DATETIME) AS create_date, +CAST(Ext.modify_date AS SYS.DATETIME) AS modify_date, +CAST(Ext.owning_principal_id AS INT) AS owning_principal_id, +CASE Ext.orig_username + WHEN 'dbo' THEN CAST(CAST(Base3.oid AS INT) AS SYS.VARBINARY(85)) + WHEN 'guest' THEN CAST(0 AS SYS.VARBINARY(85)) + -- these are SIDs which are constant for all the fixed roles used across databases + -- hence we are hardcoding these SIDs + WHEN 'db_owner' THEN CAST('\x01050000000000090400000000000000000000000000000000400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_accessadmin' THEN CAST('\x01050000000000090400000000000000000000000000000001400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_securityadmin' THEN CAST('\x01050000000000090400000000000000000000000000000002400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_ddladmin' THEN CAST('\x01050000000000090400000000000000000000000000000003400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_backupoperator' THEN CAST('\x01050000000000090400000000000000000000000000000005400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_datareader' THEN CAST('\x01050000000000090400000000000000000000000000000006400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_datawriter' THEN CAST('\x01050000000000090400000000000000000000000000000007400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_denydatareader' THEN CAST('\x01050000000000090400000000000000000000000000000008400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_denydatawriter' THEN CAST('\x01050000000000090400000000000000000000000000000009400000'::bytea AS SYS.VARBINARY(85)) + ELSE CAST(CAST(Base2.oid AS INT) AS SYS.VARBINARY(85)) +END AS SID, +CAST(Ext.is_fixed_role AS SYS.BIT) AS is_fixed_role, +CAST(Ext.authentication_type AS INT) AS authentication_type, +CAST(Ext.authentication_type_desc AS SYS.NVARCHAR(60)) AS authentication_type_desc, +CAST(Ext.default_language_name AS SYS.SYSNAME) AS default_language_name, +CAST(Ext.default_language_lcid AS INT) AS default_language_lcid, +CAST(Ext.allow_encrypted_value_modifications AS SYS.BIT) AS allow_encrypted_value_modifications +FROM pg_catalog.pg_roles AS Base INNER JOIN sys.babelfish_authid_user_ext AS Ext +ON Base.rolname = Ext.rolname +LEFT OUTER JOIN pg_catalog.pg_roles Base2 +ON Ext.login_name = Base2.rolname +LEFT OUTER JOIN sys.babelfish_sysdatabases AS Db +ON Ext.database_name COLLATE sys.database_default = Db.name +LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 +ON Db.owner = Base3.rolname +WHERE Ext.database_name = sys.bbf_cur_db() COLLATE sys.database_default + AND (Ext.orig_username IN ('dbo', 'db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin', 'guest') -- system users should always be visible + OR sys.bbf_is_role_member(current_user, Ext.rolname)) -- Current user should be able to see users it has permission of +UNION ALL +SELECT +CAST(name AS SYS.SYSNAME) AS name, +CAST( + CASE name + WHEN 'public' THEN 1 + WHEN 'INFORMATION_SCHEMA' THEN 3 + WHEN 'sys' THEN 4 + END AS INT) AS principal_id, +CAST(type AS CHAR(1)) as type, +CAST( + CASE + WHEN type = 'S' THEN 'SQL_USER' + WHEN type = 'R' THEN 'DATABASE_ROLE' + WHEN type = 'U' THEN 'WINDOWS_USER' + ELSE NULL + END + AS SYS.NVARCHAR(60)) AS type_desc, +CAST(NULL AS SYS.SYSNAME) AS default_schema_name, +CAST(NULL AS SYS.DATETIME) AS create_date, +CAST(NULL AS SYS.DATETIME) AS modify_date, +CAST(-1 AS INT) AS owning_principal_id, +CAST(CAST(0 AS INT) AS SYS.VARBINARY(85)) AS SID, +CAST(0 AS SYS.BIT) AS is_fixed_role, +CAST(-1 AS INT) AS authentication_type, +CAST(NULL AS SYS.NVARCHAR(60)) AS authentication_type_desc, +CAST(NULL AS SYS.SYSNAME) AS default_language_name, +CAST(-1 AS INT) AS default_language_lcid, +CAST(0 AS SYS.BIT) AS allow_encrypted_value_modifications +FROM (VALUES ('public', 'R'), ('sys', 'S'), ('INFORMATION_SCHEMA', 'S')) as dummy_principals(name, type); + +GRANT SELECT ON sys.database_principals TO PUBLIC; + + +CREATE OR REPLACE VIEW sys.user_token AS +SELECT +CAST(Base.oid AS INT) AS principal_id, +CASE Ext.orig_username + WHEN 'dbo' THEN CAST(CAST(Base3.oid AS INT) AS SYS.VARBINARY(85)) + WHEN 'guest' THEN CAST(0 AS SYS.VARBINARY(85)) + -- these are SIDs which are constant for all the fixed roles used across databases + -- hence we are hardcoding these SIDs + WHEN 'db_owner' THEN CAST('\x01050000000000090400000000000000000000000000000000400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_accessadmin' THEN CAST('\x01050000000000090400000000000000000000000000000001400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_securityadmin' THEN CAST('\x01050000000000090400000000000000000000000000000002400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_ddladmin' THEN CAST('\x01050000000000090400000000000000000000000000000003400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_backupoperator' THEN CAST('\x01050000000000090400000000000000000000000000000005400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_datareader' THEN CAST('\x01050000000000090400000000000000000000000000000006400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_datawriter' THEN CAST('\x01050000000000090400000000000000000000000000000007400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_denydatareader' THEN CAST('\x01050000000000090400000000000000000000000000000008400000'::bytea AS SYS.VARBINARY(85)) + WHEN 'db_denydatawriter' THEN CAST('\x01050000000000090400000000000000000000000000000009400000'::bytea AS SYS.VARBINARY(85)) + ELSE CAST(CAST(Base2.oid AS INT) AS SYS.VARBINARY(85)) +END AS SID, +CAST(Ext.orig_username AS SYS.NVARCHAR(128)) AS NAME, +CAST(CASE +WHEN Ext.type = 'U' THEN 'WINDOWS LOGIN' +WHEN Ext.type = 'R' THEN 'ROLE' +ELSE 'SQL USER' END +AS SYS.NVARCHAR(128)) AS TYPE, +CAST('GRANT OR DENY' as SYS.NVARCHAR(128)) as USAGE +FROM pg_catalog.pg_roles AS Base INNER JOIN sys.babelfish_authid_user_ext AS Ext +ON Base.rolname = Ext.rolname +LEFT OUTER JOIN pg_catalog.pg_roles Base2 +ON Ext.login_name = Base2.rolname +LEFT OUTER JOIN sys.babelfish_sysdatabases AS Db +ON Ext.database_name COLLATE sys.database_default = Db.name +LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 +ON Db.owner = Base3.rolname +WHERE Ext.database_name = sys.bbf_cur_db() COLLATE sys.database_default +AND ((Ext.rolname = CURRENT_USER AND Ext.type in ('S','U')) OR +((SELECT orig_username FROM sys.babelfish_authid_user_ext WHERE rolname = CURRENT_USER) != 'dbo' AND Ext.type = 'R' AND pg_has_role(current_user, Ext.rolname, 'MEMBER'))) +UNION ALL +SELECT +CAST(1 AS INT) AS principal_id, +CAST(CAST(1 AS INT) AS SYS.VARBINARY(85)) AS SID, +CAST('public' AS SYS.NVARCHAR(128)) AS NAME, +CAST('ROLE' AS SYS.NVARCHAR(128)) AS TYPE, +CAST('GRANT OR DENY' as SYS.NVARCHAR(128)) as USAGE +WHERE (SELECT orig_username FROM sys.babelfish_authid_user_ext WHERE rolname = CURRENT_USER) != 'dbo'; + +GRANT SELECT ON sys.user_token TO PUBLIC; + +CREATE OR REPLACE VIEW sys.database_role_members AS +SELECT +CAST( + CASE Ext1.orig_username + WHEN 'db_owner' THEN 16384 + WHEN 'db_accessadmin' THEN 16385 + WHEN 'db_securityadmin' THEN 16386 + WHEN 'db_ddladmin' THEN 16387 + WHEN 'db_datareader' THEN 16390 + WHEN 'db_datawriter' THEN 16391 + ELSE Auth1.oid + END AS INT) AS role_principal_id, +CAST( + CASE Ext2.orig_username + WHEN 'db_owner' THEN 16384 + WHEN 'db_accessadmin' THEN 16385 + WHEN 'db_securityadmin' THEN 16386 + WHEN 'db_ddladmin' THEN 16387 + WHEN 'db_datareader' THEN 16390 + WHEN 'db_datawriter' THEN 16391 + ELSE Auth2.oid + END AS INT) AS member_principal_id +FROM pg_catalog.pg_auth_members AS Authmbr +INNER JOIN pg_catalog.pg_roles AS Auth1 ON Auth1.oid = Authmbr.roleid +INNER JOIN pg_catalog.pg_roles AS Auth2 ON Auth2.oid = Authmbr.member +INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Auth1.rolname = Ext1.rolname +INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Auth2.rolname = Ext2.rolname +WHERE Ext1.database_name = sys.bbf_cur_db() COLLATE sys.database_default +AND Ext2.database_name = sys.bbf_cur_db() COLLATE sys.database_default +AND Ext1.type = 'R' +AND Ext2.orig_username != 'db_owner'; + +GRANT SELECT ON sys.database_role_members TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_helpuser("@name_in_db" sys.SYSNAME = NULL) AS +$$ +BEGIN + -- If security account is not specified, return info about all users + IF @name_in_db IS NULL + BEGIN + SELECT CAST(Ext1.orig_username AS SYS.SYSNAME) AS 'UserName', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN 'db_owner' + WHEN Ext2.orig_username IS NULL THEN 'public' + ELSE Ext2.orig_username END + AS SYS.SYSNAME) AS 'RoleName', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN Base4.rolname COLLATE database_default + ELSE LogExt.orig_loginname END + AS SYS.SYSNAME) AS 'LoginName', + CAST(LogExt.default_database_name AS SYS.SYSNAME) AS 'DefDBName', + CAST(Ext1.default_schema_name AS SYS.SYSNAME) AS 'DefSchemaName', + CAST(Base1.oid AS INT) AS 'UserID', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN CAST(Base4.oid AS INT) + WHEN Ext1.orig_username = 'guest' THEN CAST(0 AS INT) + ELSE CAST(Base3.oid AS INT) END + AS SYS.VARBINARY(85)) AS 'SID' + FROM sys.babelfish_authid_user_ext AS Ext1 + INNER JOIN pg_catalog.pg_roles AS Base1 ON Base1.rolname = Ext1.rolname + LEFT OUTER JOIN pg_catalog.pg_auth_members AS Authmbr ON Base1.oid = Authmbr.member + LEFT OUTER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.roleid + LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname + LEFT OUTER JOIN sys.babelfish_authid_login_ext As LogExt ON LogExt.rolname = Ext1.login_name + LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Base3.rolname = LogExt.rolname + LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.dbid = sys.db_id() + LEFT OUTER JOIN pg_catalog.pg_roles AS Base4 ON Base4.rolname = Bsdb.owner + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext1.type != 'R' + AND ((Ext2.orig_username IS NULL AND Base2.oid IS NULL) OR Ext2.type = 'R') -- We should only show public if user has no members i.e. Base2.oid is NULL + AND Ext1.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') + ORDER BY UserName, RoleName; + END + -- If the security account is the db fixed role - db_owner + ELSE IF @name_in_db = 'db_owner' + BEGIN + -- TODO: Need to change after we can add/drop members to/from db_owner + SELECT CAST('db_owner' AS SYS.SYSNAME) AS 'Role_name', + ROLE_ID('db_owner') AS 'Role_id', + CAST('dbo' AS SYS.SYSNAME) AS 'Users_in_role', + USER_ID('dbo') AS 'Userid'; + END + -- If the security account is a db role + ELSE IF EXISTS (SELECT 1 + FROM sys.babelfish_authid_user_ext + WHERE (orig_username = @name_in_db + OR pg_catalog.lower(orig_username) = pg_catalog.lower(@name_in_db)) + AND database_name = sys.bbf_cur_db() collate database_default + AND type = 'R') + BEGIN + SELECT CAST(Ext1.orig_username AS SYS.SYSNAME) AS 'Role_name', + CAST(Base1.oid AS INT) AS 'Role_id', + CAST(Ext2.orig_username AS SYS.SYSNAME) AS 'Users_in_role', + CAST(Base2.oid AS INT) AS 'Userid' + FROM sys.babelfish_authid_user_ext AS Ext2 + INNER JOIN pg_catalog.pg_roles AS Base2 ON Base2.rolname = Ext2.rolname + INNER JOIN pg_catalog.pg_auth_members AS Authmbr ON Base2.oid = Authmbr.member + LEFT OUTER JOIN pg_catalog.pg_roles AS Base1 ON Base1.oid = Authmbr.roleid + LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default + AND Ext1.type = 'R' + AND Ext2.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') + AND (Ext1.orig_username = @name_in_db OR pg_catalog.lower(Ext1.orig_username) = pg_catalog.lower(@name_in_db)) + ORDER BY Role_name, Users_in_role; + END + -- If the security account is a user + ELSE IF EXISTS (SELECT 1 + FROM sys.babelfish_authid_user_ext + WHERE (orig_username = @name_in_db + OR pg_catalog.lower(orig_username) = pg_catalog.lower(@name_in_db)) + AND database_name = sys.bbf_cur_db() collate database_default + AND type != 'R') + BEGIN + SELECT CAST(Ext1.orig_username AS SYS.SYSNAME) AS 'UserName', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN 'db_owner' + WHEN Ext2.orig_username IS NULL THEN 'public' + ELSE Ext2.orig_username END + AS SYS.SYSNAME) AS 'RoleName', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN Base4.rolname COLLATE database_default + ELSE LogExt.orig_loginname END + AS SYS.SYSNAME) AS 'LoginName', + CAST(LogExt.default_database_name AS SYS.SYSNAME) AS 'DefDBName', + CAST(Ext1.default_schema_name AS SYS.SYSNAME) AS 'DefSchemaName', + CAST(Base1.oid AS INT) AS 'UserID', + CAST(CASE WHEN Ext1.orig_username = 'dbo' THEN CAST(Base4.oid AS INT) + WHEN Ext1.orig_username = 'guest' THEN CAST(0 AS INT) + ELSE CAST(Base3.oid AS INT) END + AS SYS.VARBINARY(85)) AS 'SID' + FROM sys.babelfish_authid_user_ext AS Ext1 + INNER JOIN pg_catalog.pg_roles AS Base1 ON Base1.rolname = Ext1.rolname + LEFT OUTER JOIN pg_catalog.pg_auth_members AS Authmbr ON Base1.oid = Authmbr.member + LEFT OUTER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.roleid + LEFT OUTER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname + LEFT OUTER JOIN sys.babelfish_authid_login_ext As LogExt ON LogExt.rolname = Ext1.login_name + LEFT OUTER JOIN pg_catalog.pg_roles AS Base3 ON Base3.rolname = LogExt.rolname + LEFT OUTER JOIN sys.babelfish_sysdatabases AS Bsdb ON Bsdb.dbid = sys.db_id() + LEFT OUTER JOIN pg_catalog.pg_roles AS Base4 ON Base4.rolname = Bsdb.owner + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext1.type != 'R' + AND ((Ext2.orig_username IS NULL AND Base2.oid IS NULL) OR Ext2.type = 'R') -- We should only show public if user has no members i.e. Base2.oid is NULL + AND Ext1.orig_username NOT IN ('db_owner', 'db_securityadmin', 'db_accessadmin', 'db_datareader', 'db_datawriter', 'db_ddladmin') + AND (Ext1.orig_username = @name_in_db OR pg_catalog.lower(Ext1.orig_username) = pg_catalog.lower(@name_in_db)) + ORDER BY UserName, RoleName; + END + -- If the security account is not valid + ELSE + RAISERROR ( 'The name supplied (%s) is not a user, role, or aliased login.', 16, 1, @name_in_db); +END; +$$ +LANGUAGE 'pltsql'; +GRANT EXECUTE on PROCEDURE sys.sp_helpuser TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_helprole("@rolename" sys.SYSNAME = NULL) AS +$$ +BEGIN + -- If role is not specified, return info for all roles in the current db + IF @rolename IS NULL + BEGIN + SELECT CAST(Ext.orig_username AS sys.SYSNAME) AS 'RoleName', + CAST(Base.oid AS INT) AS 'RoleId', + 0 AS 'IsAppRole' + FROM pg_catalog.pg_roles AS Base + INNER JOIN sys.babelfish_authid_user_ext AS Ext + ON Base.rolname = Ext.rolname + WHERE Ext.database_name = sys.bbf_cur_db() collate database_default + AND Ext.type = 'R' + ORDER BY RoleName; + END + -- If a valid role is specified, return its info + ELSE IF EXISTS (SELECT 1 + FROM sys.babelfish_authid_user_ext + WHERE (orig_username = @rolename + OR pg_catalog.lower(orig_username) = pg_catalog.lower(@rolename)) + AND database_name = sys.bbf_cur_db() collate database_default + AND type = 'R') + BEGIN + SELECT CAST(Ext.orig_username AS sys.SYSNAME) AS 'RoleName', + CAST(Base.oid AS INT) AS 'RoleId', + 0 AS 'IsAppRole' + FROM pg_catalog.pg_roles AS Base + INNER JOIN sys.babelfish_authid_user_ext AS Ext + ON Base.rolname = Ext.rolname + WHERE Ext.database_name = sys.bbf_cur_db() collate database_default + AND Ext.type = 'R' + AND (Ext.orig_username = @rolename OR pg_catalog.lower(Ext.orig_username) = pg_catalog.lower(@rolename)) + ORDER BY RoleName; + END + -- If the specified role is not valid + ELSE + RAISERROR('%s is not a role.', 16, 1, @rolename); +END; +$$ +LANGUAGE 'pltsql'; +GRANT EXECUTE ON PROCEDURE sys.sp_helprole TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_helprolemember("@rolename" sys.SYSNAME = NULL) AS +$$ +BEGIN + -- If role is not specified, return info for all roles that have at least + -- one member in the current db + IF @rolename IS NULL + BEGIN + SELECT CAST(Ext1.orig_username AS sys.SYSNAME) AS 'RoleName', + CAST(Ext2.orig_username AS sys.SYSNAME) AS 'MemberName', + CAST(CAST(Base2.oid AS INT) AS sys.VARBINARY(85)) AS 'MemberSID' + FROM pg_catalog.pg_auth_members AS Authmbr + INNER JOIN pg_catalog.pg_roles AS Base1 ON Base1.oid = Authmbr.roleid + INNER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.member + INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname + INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default + AND Ext1.type = 'R' + AND Ext2.orig_username != 'db_owner' + ORDER BY RoleName, MemberName; + END + -- If a valid role is specified, return its member info + ELSE IF EXISTS (SELECT 1 + FROM sys.babelfish_authid_user_ext + WHERE (orig_username = @rolename + OR pg_catalog.lower(orig_username) = pg_catalog.lower(@rolename)) + AND database_name = sys.bbf_cur_db() collate database_default + AND type = 'R') + BEGIN + SELECT CAST(Ext1.orig_username AS sys.SYSNAME) AS 'RoleName', + CAST(Ext2.orig_username AS sys.SYSNAME) AS 'MemberName', + CAST(CAST(Base2.oid AS INT) AS sys.VARBINARY(85)) AS 'MemberSID' + FROM pg_catalog.pg_auth_members AS Authmbr + INNER JOIN pg_catalog.pg_roles AS Base1 ON Base1.oid = Authmbr.roleid + INNER JOIN pg_catalog.pg_roles AS Base2 ON Base2.oid = Authmbr.member + INNER JOIN sys.babelfish_authid_user_ext AS Ext1 ON Base1.rolname = Ext1.rolname + INNER JOIN sys.babelfish_authid_user_ext AS Ext2 ON Base2.rolname = Ext2.rolname + WHERE Ext1.database_name = sys.bbf_cur_db() collate database_default + AND Ext2.database_name = sys.bbf_cur_db() collate database_default + AND Ext1.type = 'R' + AND Ext2.orig_username != 'db_owner' + AND (Ext1.orig_username = @rolename OR pg_catalog.lower(Ext1.orig_username) = pg_catalog.lower(@rolename)) + ORDER BY RoleName, MemberName; + END + -- If the specified role is not valid + ELSE + RAISERROR('%s is not a role.', 16, 1, @rolename); +END; +$$ +LANGUAGE 'pltsql'; +GRANT EXECUTE ON PROCEDURE sys.sp_helprolemember TO PUBLIC; + + +CREATE OR REPLACE VIEW sys.sp_statistics_view AS +SELECT +CAST(t3."TABLE_CATALOG" AS sys.sysname) AS TABLE_QUALIFIER, +CAST(t3."TABLE_SCHEMA" AS sys.sysname) AS TABLE_OWNER, +CAST(t3."TABLE_NAME" AS sys.sysname) AS TABLE_NAME, +CAST(NULL AS smallint) AS NON_UNIQUE, +CAST(NULL AS sys.sysname) AS INDEX_QUALIFIER, +CAST(NULL AS sys.sysname) AS INDEX_NAME, +CAST(0 AS smallint) AS TYPE, +CAST(NULL AS smallint) AS SEQ_IN_INDEX, +CAST(NULL AS sys.sysname) AS COLUMN_NAME, +CAST(NULL AS sys.varchar(1)) AS COLLATION, +CAST(t1.reltuples AS int) AS CARDINALITY, +CAST(t1.relpages AS int) AS PAGES, +CAST(NULL AS sys.varchar(128)) AS FILTER_CONDITION +FROM pg_catalog.pg_class t1 + JOIN sys.schemas s1 ON s1.schema_id = t1.relnamespace + JOIN information_schema_tsql.columns_internal t3 ON (t1.oid = t3."TABLE_OID") + , generate_series(0,31) seq -- SQL server has max 32 columns per index +UNION +SELECT +CAST(t4."TABLE_CATALOG" AS sys.sysname) AS TABLE_QUALIFIER, +CAST(t4."TABLE_SCHEMA" AS sys.sysname) AS TABLE_OWNER, +CAST(t4."TABLE_NAME" AS sys.sysname) AS TABLE_NAME, +CASE +WHEN t5.indisunique = 't' THEN CAST(0 AS smallint) +ELSE CAST(1 AS smallint) +END AS NON_UNIQUE, +CAST(t1.relname AS sys.sysname) AS INDEX_QUALIFIER, +-- the index name created by CREATE INDEX is re-mapped, find it (by checking +-- the ones not in pg_constraint) and restoring it back before display +CASE +WHEN t8.oid > 0 THEN CAST(t6.relname AS sys.sysname) +ELSE COALESCE((SELECT pg_catalog.string_agg(CASE WHEN option LIKE 'bbf_original_rel_name=%' THEN substring(option, 23) ELSE NULL END, ',') FROM unnest(t6.reloptions) AS option), t6.relname::text)::sys.sysname +END AS INDEX_NAME, +CASE +WHEN t5.indisclustered = 't' THEN CAST(1 AS smallint) +ELSE CAST(3 AS smallint) +END AS TYPE, +CAST(seq + 1 AS smallint) AS SEQ_IN_INDEX, +CAST(t4."COLUMN_NAME" AS sys.sysname) AS COLUMN_NAME, +CAST('A' AS sys.varchar(1)) AS COLLATION, +CAST(t7.n_distinct AS int) AS CARDINALITY, +CAST(0 AS int) AS PAGES, --not supported +CAST(NULL AS sys.varchar(128)) AS FILTER_CONDITION +FROM pg_catalog.pg_class t1 + JOIN sys.schemas s1 ON s1.schema_id = t1.relnamespace + JOIN pg_catalog.pg_roles t3 ON t1.relowner = t3.oid + JOIN information_schema_tsql.columns_internal t4 ON (t1.oid = t4."TABLE_OID") + JOIN (pg_catalog.pg_index t5 JOIN + pg_catalog.pg_class t6 ON t5.indexrelid = t6.oid) ON t1.oid = t5.indrelid + JOIN pg_catalog.pg_namespace nsp ON (t1.relnamespace = nsp.oid) + LEFT JOIN pg_catalog.pg_stats t7 ON (t1.relname = t7.tablename AND t7.schemaname = nsp.nspname) + LEFT JOIN pg_catalog.pg_constraint t8 ON t5.indexrelid = t8.conindid + , generate_series(0,31) seq -- SQL server has max 32 columns per index +WHERE CAST(t4."ORDINAL_POSITION" AS smallint) = ANY (t5.indkey) + AND CAST(t4."ORDINAL_POSITION" AS smallint) = t5.indkey[seq]; +GRANT SELECT on sys.sp_statistics_view TO PUBLIC; + + +CREATE OR REPLACE PROCEDURE sys.sp_rename( + IN "@objname" sys.nvarchar(776) = NULL, + IN "@newname" sys.SYSNAME = NULL, + IN "@objtype" sys.varchar(13) DEFAULT NULL +) +LANGUAGE 'pltsql' +AS $$ +BEGIN + SET @objtype = sys.TRIM(@objtype); + If @objtype IS NULL + BEGIN + THROW 33557097, N'Please provide @objtype that is supported in Babelfish', 1; + END + ELSE IF @objtype = 'STATISTICS' + BEGIN + THROW 33557097, N'Feature not supported: renaming object type Statistics', 1; + END + ELSE IF @objtype = 'DATABASE' + BEGIN + exec sys.sp_renamedb @objname, @newname; + END + ELSE + BEGIN + DECLARE @subname sys.nvarchar(776); + DECLARE @schemaname sys.nvarchar(776); + DECLARE @dbname sys.nvarchar(776); + DECLARE @curr_relname sys.nvarchar(776); + + EXEC sys.babelfish_sp_rename_word_parse @objname, @objtype, @subname OUT, @curr_relname OUT, @schemaname OUT, @dbname OUT; + + DECLARE @currtype char(2); + + IF @objtype = 'COLUMN' + BEGIN + DECLARE @col_count INT; + SELECT @col_count = COUNT(*)FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname)) and COLUMN_NAME = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)); + IF @col_count < 0 + BEGIN + THROW 33557097, N'There is no object with the given @objname.', 1; + END + SET @currtype = 'CO'; + END + ELSE IF @objtype = 'INDEX' + BEGIN + DECLARE @relid INT = 0; + DECLARE @index_count INT; + SELECT @relid = object_id FROM sys.objects o1 INNER JOIN sys.schemas s1 ON o1.schema_id = s1.schema_id + WHERE s1.name = @schemaname AND o1.name = sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname)); + IF @relid = 0 + BEGIN + THROW 33557097, N'There is no object with the given @objname.', 1; + END + SELECT @index_count = COUNT(*) FROM pg_index i JOIN pg_class c ON i.indexrelid = c.oid + WHERE i.indrelid = @relid AND c.relname = sys.babelfish_construct_unique_index_name(sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)), sys.babelfish_truncate_identifier(pg_catalog.lower(@curr_relname))); + IF @index_count < 0 + BEGIN + THROW 33557097, N'There is no object with the given @objname.', 1; + END + SET @currtype = 'IX'; + END + ELSE IF @objtype = 'USERDATATYPE' + BEGIN + DECLARE @alias_count INT; + SELECT @alias_count = COUNT(*) FROM sys.types t1 INNER JOIN sys.schemas s1 ON t1.schema_id = s1.schema_id + WHERE s1.name = @schemaname AND t1.name = @subname; + IF @alias_count > 1 + BEGIN + THROW 33557097, N'There are multiple objects with the given @objname.', 1; + END + IF @alias_count < 1 + BEGIN + THROW 33557097, N'There is no object with the given @objname.', 1; + END + SET @currtype = 'AL'; + END + ELSE IF @objtype = 'OBJECT' + BEGIN + DECLARE @count INT; + SELECT type INTO #tempTable FROM sys.objects o1 INNER JOIN sys.schemas s1 ON o1.schema_id = s1.schema_id + WHERE s1.name = @schemaname AND o1.name = @subname; + SELECT @count = COUNT(*) FROM #tempTable; + + IF @count < 1 + BEGIN + -- sys.objects does not show routines which current user cannot execute but + -- roles like db_ddladmin allow renaming a procedure even though they cannot + -- execute it, so search again in pg_proc if count is zero + DROP TABLE #tempTable; + SELECT CAST(CASE + WHEN p.prokind = 'p' THEN 'P' + WHEN p.prokind = 'a' THEN 'AF' + WHEN format_type(p.prorettype, NULL) = 'trigger' THEN 'TR' + ELSE 'FN' + END as sys.bpchar(2)) AS type INTO #tempTable + FROM pg_proc p INNER JOIN sys.schemas s1 ON p.pronamespace = s1.schema_id + WHERE s1.name = @schemaname AND CAST(p.proname AS sys.sysname) = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)); + SELECT @count = COUNT(*) FROM #tempTable; + END + IF @count > 1 + BEGIN + THROW 33557097, N'There are multiple objects with the given @objname.', 1; + END + IF @count < 1 + BEGIN + -- TABLE TYPE: check if there is a match in sys.table_types (if we cannot alter sys.objects table_type naming) + SELECT @count = COUNT(*) FROM sys.table_types tt1 INNER JOIN sys.schemas s1 ON tt1.schema_id = s1.schema_id + WHERE s1.name = @schemaname AND tt1.name = @subname; + IF @count > 1 + BEGIN + THROW 33557097, N'There are multiple objects with the given @objname.', 1; + END + ELSE IF @count < 1 + BEGIN + THROW 33557097, N'There is no object with the given @objname.', 1; + END + ELSE + BEGIN + SET @currtype = 'TT' + END + END + IF @currtype IS NULL + BEGIN + SELECT @currtype = type from #tempTable; + END + IF @currtype = 'TR' OR @currtype = 'TA' + BEGIN + DECLARE @physical_schema_name sys.nvarchar(776) = ''; + SELECT @physical_schema_name = nspname FROM sys.babelfish_namespace_ext WHERE dbid = sys.db_id() AND orig_name = @schemaname; + SELECT @curr_relname = relname FROM pg_catalog.pg_trigger tr LEFT JOIN pg_catalog.pg_class c ON tr.tgrelid = c.oid LEFT JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid + WHERE tr.tgname = sys.babelfish_truncate_identifier(pg_catalog.lower(@subname)) AND n.nspname = @physical_schema_name; + END + END + ELSE + BEGIN + THROW 33557097, N'Provided @objtype is not currently supported in Babelfish', 1; + END + EXEC sys.babelfish_sp_rename_internal @subname, @newname, @schemaname, @currtype, @curr_relname; + PRINT 'Caution: Changing any part of an object name could break scripts and stored procedures.'; + END +END; +$$; +GRANT EXECUTE on PROCEDURE sys.sp_rename(IN sys.nvarchar(776), IN sys.SYSNAME, IN sys.varchar(13)) TO PUBLIC; + +create or replace view sys.objects as +select + CAST(t.name as sys.sysname) as name + , CAST(t.object_id as int) as object_id + , CAST(t.principal_id as int) as principal_id + , CAST(t.schema_id as int) as schema_id + , CAST(t.parent_object_id as int) as parent_object_id + , CAST('U' as char(2)) as type + , CAST('USER_TABLE' as sys.nvarchar(60)) as type_desc + , CAST(t.create_date as sys.datetime) as create_date + , CAST(t.modify_date as sys.datetime) as modify_date + , CAST(t.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(t.is_published as sys.bit) as is_published + , CAST(t.is_schema_published as sys.bit) as is_schema_published +from sys.tables t +union all +select + CAST(v.name as sys.sysname) as name + , CAST(v.object_id as int) as object_id + , CAST(v.principal_id as int) as principal_id + , CAST(v.schema_id as int) as schema_id + , CAST(v.parent_object_id as int) as parent_object_id + , CAST('V' as char(2)) as type + , CAST('VIEW' as sys.nvarchar(60)) as type_desc + , CAST(v.create_date as sys.datetime) as create_date + , CAST(v.modify_date as sys.datetime) as modify_date + , CAST(v.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(v.is_published as sys.bit) as is_published + , CAST(v.is_schema_published as sys.bit) as is_schema_published +from sys.views v +union all +select + CAST(f.name as sys.sysname) as name + , CAST(f.object_id as int) as object_id + , CAST(f.principal_id as int) as principal_id + , CAST(f.schema_id as int) as schema_id + , CAST(f.parent_object_id as int) as parent_object_id + , CAST('F' as char(2)) as type + , CAST('FOREIGN_KEY_CONSTRAINT' as sys.nvarchar(60)) as type_desc + , CAST(f.create_date as sys.datetime) as create_date + , CAST(f.modify_date as sys.datetime) as modify_date + , CAST(f.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(f.is_published as sys.bit) as is_published + , CAST(f.is_schema_published as sys.bit) as is_schema_published + from sys.foreign_keys f +union all +select + CAST(p.name as sys.sysname) as name + , CAST(p.object_id as int) as object_id + , CAST(p.principal_id as int) as principal_id + , CAST(p.schema_id as int) as schema_id + , CAST(p.parent_object_id as int) as parent_object_id + , CAST(p.type as char(2)) as type + , CAST( + CASE p.type + WHEN 'PK' THEN 'PRIMARY_KEY_CONSTRAINT' + WHEN 'UQ' THEN 'UNIQUE_CONSTRAINT' + END + as sys.nvarchar(60)) as type_desc + , CAST(p.create_date as sys.datetime) as create_date + , CAST(p.modify_date as sys.datetime) as modify_date + , CAST(p.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(p.is_published as sys.bit) as is_published + , CAST(p.is_schema_published as sys.bit) as is_schema_published +from sys.key_constraints p +union all +select + CAST(pr.name as sys.sysname) as name + , CAST(pr.object_id as int) as object_id + , CAST(pr.principal_id as int) as principal_id + , CAST(pr.schema_id as int) as schema_id + , CAST(pr.parent_object_id as int) as parent_object_id + , CAST(pr.type as char(2)) as type + , CAST(pr.type_desc as sys.nvarchar(60)) as type_desc + , CAST(pr.create_date as sys.datetime) as create_date + , CAST(pr.modify_date as sys.datetime) as modify_date + , CAST(pr.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(pr.is_published as sys.bit) as is_published + , CAST(pr.is_schema_published as sys.bit) as is_schema_published + from sys.procedures pr +union all +select + CAST(tr.name as sys.sysname) as name + , CAST(tr.object_id as int) as object_id + , CAST(NULL as int) as principal_id + , CAST(p.relnamespace as int) as schema_id + , CAST(tr.parent_id as int) as parent_object_id + , CAST(tr.type as char(2)) as type + , CAST(tr.type_desc as sys.nvarchar(60)) as type_desc + , CAST(tr.create_date as sys.datetime) as create_date + , CAST(tr.modify_date as sys.datetime) as modify_date + , CAST(tr.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published + from sys.triggers tr + inner join pg_class p on p.oid = tr.parent_id +union all +select + CAST(def.name as sys.sysname) as name + , CAST(def.object_id as int) as object_id + , CAST(def.principal_id as int) as principal_id + , CAST(def.schema_id as int) as schema_id + , CAST(def.parent_object_id as int) as parent_object_id + , CAST(def.type as char(2)) as type + , CAST(def.type_desc as sys.nvarchar(60)) as type_desc + , CAST(def.create_date as sys.datetime) as create_date + , CAST(def.modified_date as sys.datetime) as modify_date + , CAST(def.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(def.is_published as sys.bit) as is_published + , CAST(def.is_schema_published as sys.bit) as is_schema_published + from sys.default_constraints def +union all +select + CAST(chk.name as sys.sysname) as name + , CAST(chk.object_id as int) as object_id + , CAST(chk.principal_id as int) as principal_id + , CAST(chk.schema_id as int) as schema_id + , CAST(chk.parent_object_id as int) as parent_object_id + , CAST(chk.type as char(2)) as type + , CAST(chk.type_desc as sys.nvarchar(60)) as type_desc + , CAST(chk.create_date as sys.datetime) as create_date + , CAST(chk.modify_date as sys.datetime) as modify_date + , CAST(chk.is_ms_shipped as sys.bit) as is_ms_shipped + , CAST(chk.is_published as sys.bit) as is_published + , CAST(chk.is_schema_published as sys.bit) as is_schema_published + from sys.check_constraints chk +union all +select + CAST(COALESCE( + case when octet_length(p.relname) >= 60 + then (select m.original_identifier_name from sys.babelfish_identifier_mapping m + where m.truncated_identifier_name = p.relname + and m.nspname = p.relnamespace::regnamespace::name + and m.pg_catalog_type = 'pg_class'::regclass::oid + and m.parent_name = '') + end, + p.relname::text) as sys.sysname) as name + , CAST(p.oid as int) as object_id + , CAST(null as int) as principal_id + , CAST(s.schema_id as int) as schema_id + , CAST(0 as int) as parent_object_id + , CAST('SO' as char(2)) as type + , CAST('SEQUENCE_OBJECT' as sys.nvarchar(60)) as type_desc + , CAST(null as sys.datetime) as create_date + , CAST(null as sys.datetime) as modify_date + , CAST(0 as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published +from pg_class p +inner join sys.schemas s on s.schema_id = p.relnamespace +and p.relkind = 'S' +union all +select + CAST(('TT_' || tt.name collate "C" || '_' || tt.type_table_object_id) as sys.sysname) as name + , CAST(tt.type_table_object_id as int) as object_id + , CAST(tt.principal_id as int) as principal_id + , CAST(tt.schema_id as int) as schema_id + , CAST(0 as int) as parent_object_id + , CAST('TT' as char(2)) as type + , CAST('TABLE_TYPE' as sys.nvarchar(60)) as type_desc + , CAST((select PG_CATALOG.string_agg( + case + when option like 'bbf_rel_create_date=%%' then substring(option, 21) + else NULL + end, ',') + from unnest(c.reloptions) as option) + as sys.datetime) as create_date + , CAST((select PG_CATALOG.string_agg( + case + when option like 'bbf_rel_create_date=%%' then substring(option, 21) + else NULL + end, ',') + from unnest(c.reloptions) as option) + as sys.datetime) as modify_date + , CAST(1 as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published +from sys.table_types tt +inner join pg_class c on tt.type_table_object_id = c.oid; +GRANT SELECT ON sys.objects TO PUBLIC; + +create or replace view sys.all_objects as +WITH tt_internal AS MATERIALIZED ( + SELECT typrelid FROM sys.table_types_internal +) +select + name collate sys.database_default + , cast (object_id as integer) + , cast ( principal_id as integer) + , cast (schema_id as integer) + , cast (parent_object_id as integer) + , type collate sys.database_default + , cast (type_desc as sys.nvarchar(60)) + , cast (create_date as sys.datetime) + , cast (modify_date as sys.datetime) + , is_ms_shipped + , cast (is_published as sys.bit) + , cast (is_schema_published as sys.bit) +from +( +-- Currently for pg_class, pg_proc UNIONs, we separated user defined objects and system objects because the +-- optimiser will be able to make a better estimation of number of rows(in case the query contains a filter on +-- is_ms_shipped column) and in turn chooses a better query plan. + +-- details of system tables +select + t.relname::sys.sysname as name + , t.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , 0 as parent_object_id + , 'U'::char(2) as type + , 'USER_TABLE' as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 1::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_class t inner join pg_namespace s on s.oid = t.relnamespace +left join tt_internal tt on t.oid = tt.typrelid +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = t.relname and nis.schemaid = s.oid and nis.type = 'U' +where t.relpersistence in ('p', 'u', 't') +and t.relkind = 'r' +and (s.nspname = 'sys' or (nis.name is not null and ext.nspname is not null)) +and tt.typrelid is null +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') + +union all +-- details of user defined tables +select + COALESCE(case when octet_length(t.relname) >= 60 then (select substring(opt, 23) from unnest(t.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, t.relname)::sys.sysname as name + , t.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , 0 as parent_object_id + , 'U'::char(2) as type + , 'USER_TABLE' as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 0::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_class t inner join pg_namespace s on s.oid = t.relnamespace +left join tt_internal tt on t.oid = tt.typrelid +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = t.relname and nis.schemaid = s.oid and nis.type = 'U' +where t.relpersistence in ('p', 'u', 't') +and (t.relkind = 'r' or t.relkind = 'p') +and t.relispartition = false +and s.nspname <> 'sys' and nis.name is null +and ext.nspname is not null +and tt.typrelid is null +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') + +union all +-- details of system views +select + t.relname::sys.sysname as name + , t.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , 0 as parent_object_id + , 'V'::char(2) as type + , 'VIEW'::varchar(60) as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 1::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_class t inner join pg_namespace s on s.oid = t.relnamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = t.relname and nis.schemaid = s.oid and nis.type = 'V' +where t.relkind = 'v' +and (s.nspname = 'sys' or (nis.name is not null and ext.nspname is not null)) +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') +union all +-- Details of user defined views +select + COALESCE(case when octet_length(t.relname) >= 60 then (select substring(opt, 23) from unnest(t.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, t.relname)::sys.sysname as name + , t.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , 0 as parent_object_id + , 'V'::char(2) as type + , 'VIEW'::varchar(60) as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 0::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_class t inner join pg_namespace s on s.oid = t.relnamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = t.relname and nis.schemaid = s.oid and nis.type = 'V' +where t.relkind = 'v' +and s.nspname <> 'sys' and nis.name is null +and ext.nspname is not null +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER') +union all +-- details of user defined and system foreign key constraints +select + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname as name + , c.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , c.conrelid as parent_object_id + , 'F'::char(2) as type + , 'FOREIGN_KEY_CONSTRAINT' + , null::timestamp as create_date + , null::timestamp as modify_date + , CAST ((s.nspname = 'sys' or nis.name is not null) as sys.bit ) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_constraint c +inner join pg_namespace s on s.oid = c.connamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = c.conname and nis.schemaid = s.oid and nis.type = 'F' +where +c.contype = 'f' +and (s.nspname = 'sys' or ext.nspname is not null) +union all +-- details of user defined and system primary key constraints +select + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname as name + , c.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , c.conrelid as parent_object_id + , 'PK'::char(2) as type + , 'PRIMARY_KEY_CONSTRAINT' as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , CAST ((s.nspname = 'sys' or nis.name is not null) as sys.bit) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_constraint c +inner join pg_namespace s on s.oid = c.connamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = c.conname and nis.schemaid = s.oid and nis.type = 'PK' +where +c.contype = 'p' +and (s.nspname = 'sys' or ext.nspname is not null) +union all +-- details of system defined procedures +select + p.proname::sys.sysname as name + , case + when t.typname = 'trigger' then tr.oid else p.oid + end as object_id + , null::integer as principal_id + , s.oid as schema_id + , cast (case when tr.tgrelid is not null + then tr.tgrelid + else 0 end as int) + as parent_object_id + , case p.prokind + when 'p' then 'P'::char(2) + when 'a' then 'AF'::char(2) + else + case + when t.typname = 'trigger' + then 'TR'::char(2) + when p.proretset then + case + when t.typtype = 'c' + then 'TF'::char(2) + else 'IF'::char(2) + end + else 'FN'::char(2) + end + end as type + , case p.prokind + when 'p' then 'SQL_STORED_PROCEDURE'::varchar(60) + when 'a' then 'AGGREGATE_FUNCTION'::varchar(60) + else + case + when t.typname = 'trigger' + then 'SQL_TRIGGER'::varchar(60) + when p.proretset then + case + when t.typtype = 'c' + then 'SQL_TABLE_VALUED_FUNCTION'::varchar(60) + else 'SQL_INLINE_TABLE_VALUED_FUNCTION'::varchar(60) + end + else 'SQL_SCALAR_FUNCTION'::varchar(60) + end + end as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 1::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_proc p +inner join pg_namespace s on s.oid = p.pronamespace +inner join pg_catalog.pg_type t on t.oid = p.prorettype +left join pg_trigger tr on tr.tgfoid = p.oid +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = p.proname and nis.schemaid = s.oid +and nis.type = (case p.prokind + when 'p' then 'P'::char(2) + when 'a' then 'AF'::char(2) + else + case + when t.typname = 'trigger' + then 'TR'::char(2) + when p.proretset then + case + when t.typtype = 'c' + then 'TF'::char(2) + else 'IF'::char(2) + end + else 'FN'::char(2) + end + end) +where (s.nspname = 'sys' or (nis.name is not null and ext.nspname is not null)) +and has_function_privilege(p.oid, 'EXECUTE') +and p.proname != 'pltsql_call_handler' + +union all +-- details of user defined procedures +select + COALESCE(case when octet_length(p.proname) >= 60 then (select f.orig_name from sys.babelfish_function_ext f where f.funcname = p.proname and f.nspname = s.nspname limit 1) end, p.proname::text)::sys.sysname as name + , case + when t.typname = 'trigger' then tr.oid else p.oid + end as object_id + , null::integer as principal_id + , s.oid as schema_id + , cast (case when tr.tgrelid is not null + then tr.tgrelid + else 0 end as int) + as parent_object_id + , case p.prokind + when 'p' then 'P'::char(2) + when 'a' then 'AF'::char(2) + else + case + when t.typname = 'trigger' + then 'TR'::char(2) + when p.proretset then + case + when t.typtype = 'c' + then 'TF'::char(2) + else 'IF'::char(2) + end + else 'FN'::char(2) + end + end as type + , case p.prokind + when 'p' then 'SQL_STORED_PROCEDURE'::varchar(60) + when 'a' then 'AGGREGATE_FUNCTION'::varchar(60) + else + case + when t.typname = 'trigger' + then 'SQL_TRIGGER'::varchar(60) + when p.proretset then + case + when t.typtype = 'c' + then 'SQL_TABLE_VALUED_FUNCTION'::varchar(60) + else 'SQL_INLINE_TABLE_VALUED_FUNCTION'::varchar(60) + end + else 'SQL_SCALAR_FUNCTION'::varchar(60) + end + end as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , 0::sys.bit as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_proc p +inner join pg_namespace s on s.oid = p.pronamespace +inner join pg_catalog.pg_type t on t.oid = p.prorettype +left join pg_trigger tr on tr.tgfoid = p.oid +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = p.proname and nis.schemaid = s.oid +and nis.type = (case p.prokind + when 'p' then 'P'::char(2) + when 'a' then 'AF'::char(2) + else + case + when t.typname = 'trigger' + then 'TR'::char(2) + when p.proretset then + case + when t.typtype = 'c' + then 'TF'::char(2) + else 'IF'::char(2) + end + else 'FN'::char(2) + end + end) +where s.nspname <> 'sys' and nis.name is null +and ext.nspname is not null +and has_function_privilege(p.oid, 'EXECUTE') + +union all +-- details of all default constraints +select + ('DF_' || o.relname || '_' || d.oid)::sys.sysname as name + , d.oid as object_id + , null::int as principal_id + , o.relnamespace as schema_id + , d.adrelid as parent_object_id + , 'D'::char(2) as type + , 'DEFAULT_CONSTRAINT'::sys.nvarchar(60) AS type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , CAST ((s.nspname = 'sys' or nis.name is not null) as sys.bit) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_catalog.pg_attrdef d +inner join pg_attribute a on a.attrelid = d.adrelid and d.adnum = a.attnum +inner join pg_class o on d.adrelid = o.oid +inner join pg_namespace s on s.oid = o.relnamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = ('DF_' || o.relname || '_' || d.oid) and nis.schemaid = s.oid and nis.type = 'D' +where a.atthasdef = 't' and a.attgenerated = '' +and (s.nspname = 'sys' or ext.nspname is not null) +and has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES') +union all +-- details of all check constraints +select + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = c.connamespace::regnamespace::name and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, + c.conname::text)::sys.sysname + , c.oid::integer as object_id + , NULL::integer as principal_id + , s.oid as schema_id + , c.conrelid::integer as parent_object_id + , 'C'::char(2) as type + , 'CHECK_CONSTRAINT'::sys.nvarchar(60) as type_desc + , null::sys.datetime as create_date + , null::sys.datetime as modify_date + , CAST ((s.nspname = 'sys' or nis.name is not null) as sys.bit) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_catalog.pg_constraint as c +inner join pg_namespace s on s.oid = c.connamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = c.conname and nis.schemaid = s.oid and nis.type = 'C' +where +c.contype = 'c' and c.conrelid != 0 +and (s.nspname = 'sys' or ext.nspname is not null) +union all +-- details of user defined and system defined sequence objects +select + COALESCE(case when octet_length(p.relname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = p.relname and m.nspname = p.relnamespace::regnamespace::name and m.pg_catalog_type = 'pg_class'::regclass::oid and m.parent_name = '') end, p.relname::text)::sys.sysname as name + , p.oid as object_id + , null::integer as principal_id + , s.oid as schema_id + , 0 as parent_object_id + , 'SO'::char(2) as type + , 'SEQUENCE_OBJECT'::varchar(60) as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , CAST ((s.nspname = 'sys' or nis.name is not null) as sys.bit ) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from pg_class p +inner join pg_namespace s on s.oid = p.relnamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join sys.shipped_objects_not_in_sys nis on nis.name = p.relname and nis.schemaid = s.oid and nis.type = 'SO' +where p.relkind = 'S' +and (s.nspname = 'sys' or ext.nspname is not null) +union all +-- details of user defined table types +select + ('TT_' || tt.name || '_' || tt.type_table_object_id)::sys.sysname as name + , tt.type_table_object_id as object_id + , tt.principal_id as principal_id + , tt.schema_id as schema_id + , 0 as parent_object_id + , 'TT'::char(2) as type + , 'TABLE_TYPE'::varchar(60) as type_desc + , null::timestamp as create_date + , null::timestamp as modify_date + , CAST ((tt.schema_id::regnamespace::text = 'sys' or nis.name is not null) as sys.bit ) as is_ms_shipped + , 0 as is_published + , 0 as is_schema_published +from sys.table_types tt +left join sys.shipped_objects_not_in_sys nis on nis.name = ('TT_' || tt.name || '_' || tt.type_table_object_id)::name and nis.schemaid = tt.schema_id and nis.type = 'TT' +) ot; +GRANT SELECT ON sys.all_objects TO PUBLIC; + +create or replace view sys.system_objects as +select + name, object_id, principal_id, schema_id, + parent_object_id, type, type_desc, create_date, + modify_date, is_ms_shipped, is_published, is_schema_published + from sys.all_objects o +inner join pg_namespace s on s.oid = o.schema_id +where s.nspname = 'sys'; +GRANT SELECT ON sys.system_objects TO PUBLIC; + +create or replace view sys.tables as +with tt_internal as MATERIALIZED +( + select * from sys.table_types_internal +) +select + CAST(coalesce( + (select PG_CATALOG.string_agg( + case when option like 'bbf_original_rel_name=%%' then substring(option, 23) + else NULL end, ',') + from unnest(t.reloptions) as option), + t.relname::text) as sys._ci_sysname) as name + , CAST(t.oid as int) as object_id + , CAST(NULL as int) as principal_id + , CAST(t.relnamespace as int) as schema_id + , 0 as parent_object_id + , CAST('U' as sys.bpchar(2)) as type + , CAST('USER_TABLE' as sys.nvarchar(60)) as type_desc + , CAST((select PG_CATALOG.string_agg( + case + when option like 'bbf_rel_create_date=%%' then substring(option, 21) + else NULL + end, ',') + from unnest(t.reloptions) as option) + as sys.datetime) as create_date + , CAST((select PG_CATALOG.string_agg( + case + when option like 'bbf_rel_create_date=%%' then substring(option, 21) + else NULL + end, ',') + from unnest(t.reloptions) as option) + as sys.datetime) as modify_date + , CAST(0 as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published + , case reltoastrelid when 0 then 0 else 1 end as lob_data_space_id + , CAST(NULL as int) as filestream_data_space_id + , CAST(relnatts as int) as max_column_id_used + , CAST(0 as sys.bit) as lock_on_bulk_load + , CAST(1 as sys.bit) as uses_ansi_nulls + , CAST(0 as sys.bit) as is_replicated + , CAST(0 as sys.bit) as has_replication_filter + , CAST(0 as sys.bit) as is_merge_published + , CAST(0 as sys.bit) as is_sync_tran_subscribed + , CAST(0 as sys.bit) as has_unchecked_assembly_data + , 0 as text_in_row_limit + , CAST(0 as sys.bit) as large_value_types_out_of_row + , CAST(0 as sys.bit) as is_tracked_by_cdc + , CAST(0 as sys.tinyint) as lock_escalation + , CAST('TABLE' as sys.nvarchar(60)) as lock_escalation_desc + , CAST(0 as sys.bit) as is_filetable + , CAST(0 as sys.tinyint) as durability + , CAST('SCHEMA_AND_DATA' as sys.nvarchar(60)) as durability_desc + , CAST(0 as sys.bit) is_memory_optimized + , case relpersistence when 't' then CAST(2 as sys.tinyint) else CAST(0 as sys.tinyint) end as temporal_type + , case relpersistence when 't' then CAST('SYSTEM_VERSIONED_TEMPORAL_TABLE' as sys.nvarchar(60)) else CAST('NON_TEMPORAL_TABLE' as sys.nvarchar(60)) end as temporal_type_desc + , CAST(null as integer) as history_table_id + , CAST(0 as sys.bit) as is_remote_data_archive_enabled + , CAST(0 as sys.bit) as is_external +from pg_class t +inner join sys.schemas sch on sch.schema_id = t.relnamespace +left join tt_internal tt on t.oid = tt.typrelid +where tt.typrelid is null +and (t.relkind = 'r' or t.relkind = 'p') +and t.relispartition = false +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER'); +GRANT SELECT ON sys.tables TO PUBLIC; + +create or replace view sys.views as +select + CAST(coalesce( + (select PG_CATALOG.string_agg( + case when option like 'bbf_original_rel_name=%%' then substring(option, 23) + else NULL end, ',') + from unnest(t.reloptions) as option), + t.relname::text) as sys.sysname) as name + , t.oid::int as object_id + , null::integer as principal_id + , sch.schema_id::int as schema_id + , 0 as parent_object_id + , 'V'::sys.bpchar(2) as type + , 'VIEW'::sys.nvarchar(60) as type_desc + , vd.create_date::sys.datetime as create_date + , vd.create_date::sys.datetime as modify_date + , CAST(0 as sys.BIT) as is_ms_shipped + , CAST(0 as sys.BIT) as is_published + , CAST(0 as sys.BIT) as is_schema_published + , CAST(0 as sys.BIT) as with_check_option + , CAST(0 as sys.BIT) as is_date_correlation_view + , CAST(0 as sys.BIT) as is_tracked_by_cdc +from pg_class t inner join sys.schemas sch on (t.relnamespace = sch.schema_id) +left join sys.shipped_objects_not_in_sys nis on (nis.name = t.relname and nis.schemaid = sch.schema_id and nis.type = 'V') +left outer join sys.babelfish_view_def vd on t.relname::sys.sysname = vd.object_name and sch.name = vd.schema_name and vd.dbid = sys.db_id() +where t.relkind = 'v' +and nis.name is null +and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER'); +GRANT SELECT ON sys.views TO PUBLIC; + +create or replace view sys.types As +with RECURSIVE type_code_list as +( + select distinct pg_typname as pg_type_name, tsql_typname as tsql_type_name + from sys.babelfish_typecode_list() +), +tt_internal as MATERIALIZED +( + select * from sys.table_types_internal +) +-- For System types +select + CAST(ti.tsql_type_name as sys.sysname) as name + , cast(t.oid as int) as system_type_id + , cast(t.oid as int) as user_type_id + , cast(s.oid as int) as schema_id + , cast(NULL as INT) as principal_id + , sys.tsql_type_max_length_helper(ti.tsql_type_name, t.typlen, t.typtypmod, true) as max_length + , sys.tsql_type_precision_helper(ti.tsql_type_name, t.typtypmod) as precision + , sys.tsql_type_scale_helper(ti.tsql_type_name, t.typtypmod, false) as scale + , CASE + WHEN t.typcollation = 0 THEN CAST(NULL as sys.sysname) + ELSE CAST((SELECT default_collation FROM sys.babelfish_sysdatabases WHERE orig_name = sys.db_name() COLLATE sys.database_default) as sys.sysname) + END as collation_name + , case when typnotnull then cast(0 as sys.bit) else cast(1 as sys.bit) end as is_nullable + , CAST(0 as sys.bit) as is_user_defined + , CASE ti.tsql_type_name + -- CLR UDT have is_assembly_type = 1 + WHEN 'geometry' THEN CAST(1 as sys.bit) + WHEN 'geography' THEN CAST(1 as sys.bit) + ELSE CAST(0 as sys.bit) + END as is_assembly_type + , CAST(0 as int) as default_object_id + , CAST(0 as int) as rule_object_id + , CAST(0 as sys.bit) as is_table_type +from pg_type t +inner join pg_namespace s on s.oid = t.typnamespace +inner join type_code_list ti on t.typname = ti.pg_type_name +left join pg_collation c on c.oid = t.typcollation +where +ti.tsql_type_name IS NOT NULL +and pg_type_is_visible(t.oid) +and (s.nspname = 'pg_catalog' OR s.nspname = 'sys') +union all +-- For User Defined Types +select cast(coalesce( + case when octet_length(t.typname) >= 60 + then (select ti.original_identifier_name from sys.babelfish_identifier_mapping ti + where ti.truncated_identifier_name = t.typname + and ti.nspname = t.typnamespace::regnamespace::name + and ti.pg_catalog_type = 1247) + end, + t.typname::text) as sys.sysname) as name + , cast(t.typbasetype as int) as system_type_id + , cast(t.oid as int) as user_type_id + , cast(t.typnamespace as int) as schema_id + , null::integer as principal_id + , case when tt.typrelid is not null then -1::smallint else sys.tsql_type_max_length_helper(tsql_base_type_name, t.typlen, t.typtypmod) end as max_length + , case when tt.typrelid is not null then 0::sys.tinyint else sys.tsql_type_precision_helper(tsql_base_type_name, t.typtypmod) end as precision + , case when tt.typrelid is not null then 0::sys.tinyint else sys.tsql_type_scale_helper(tsql_base_type_name, t.typtypmod, false) end as scale + , CASE + WHEN t.typcollation = 0 THEN CAST(NULL as sys.sysname) + ELSE CAST((SELECT default_collation FROM sys.babelfish_sysdatabases WHERE orig_name = sys.db_name() COLLATE sys.database_default) as sys.sysname) + END as collation_name + , case when tt.typrelid is not null then cast(0 as sys.bit) + else case when typnotnull then cast(0 as sys.bit) else cast(1 as sys.bit) end + end + as is_nullable + -- CREATE TYPE ... FROM is implemented as CREATE DOMAIN in babel + , CAST(1 as sys.bit) as is_user_defined + , CASE tsql_base_type_name + -- CLR UDT have is_assembly_type = 1 + WHEN 'geometry' THEN CAST(1 as sys.bit) + WHEN 'geography' THEN CAST(1 as sys.bit) + ELSE CAST(0 as sys.bit) + END as is_assembly_type + , CAST(0 as int) as default_object_id + , CAST(0 as int) as rule_object_id + , CAST(tt.typrelid is not null AS sys.bit) as is_table_type +from pg_type t +join sys.schemas sch on t.typnamespace = sch.schema_id +left join type_code_list ti on t.typname = ti.pg_type_name +left join pg_collation c on c.oid = t.typcollation +left join tt_internal tt on t.typrelid = tt.typrelid +, sys.translate_pg_type_to_tsql(t.typbasetype) AS tsql_base_type_name +-- we want to show details of user defined datatypes created under babelfish database +where + ti.tsql_type_name IS NULL +and + ( + -- show all user defined datatypes created under babelfish database except table types + t.typtype = 'd' + or + -- only for table types + tt.typrelid is not null + ); +GRANT SELECT ON sys.types TO PUBLIC; + +create or replace view sys.all_columns as +select CAST(c.oid as int) as object_id + , CAST(COALESCE( + (SELECT PG_CATALOG.string_agg( + CASE WHEN option LIKE 'bbf_original_name=%' THEN substring(option, 19) ELSE NULL END, ',' + ) FROM unnest(a.attoptions) AS option), + sys.bbf_get_view_column_name(a.attrelid, a.attnum::smallint), + a.attname::text) as sys.sysname) as name + , CAST(a.attnum as int) as column_id + , CAST(t.oid as int) as system_type_id + , CAST(t.oid as int) as user_type_id + , CAST(sys.tsql_type_max_length_helper(coalesce(tsql_type_name, tsql_base_type_name), a.attlen, a.atttypmod) as smallint) as max_length + , CAST(case + when a.atttypmod != -1 then + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod) + else + sys.tsql_type_precision_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod) + end as sys.tinyint) as precision + , CAST(case + when a.atttypmod != -1 THEN + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), a.atttypmod, false) + else + sys.tsql_type_scale_helper(coalesce(tsql_type_name, tsql_base_type_name), t.typtypmod, false) + end as sys.tinyint) as scale + , CAST(coll.collname as sys.sysname) as collation_name + , case when a.attnotnull then CAST(0 as sys.bit) else CAST(1 as sys.bit) end as is_nullable + , CAST(0 as sys.bit) as is_ansi_padded + , CAST(0 as sys.bit) as is_rowguidcol + , CAST(a.attidentity <> ''::"char" AS sys.bit) as is_identity + , CAST(a.attgenerated <> ''::"char" AS sys.bit) as is_computed + , CAST(0 as sys.bit) as is_filestream + , CAST(0 as sys.bit) as is_replicated + , CAST(0 as sys.bit) as is_non_sql_subscribed + , CAST(0 as sys.bit) as is_merge_published + , CAST(0 as sys.bit) as is_dts_replicated + , CAST(0 as sys.bit) as is_xml_document + , CAST(0 as int) as xml_collection_id + , CAST(coalesce(d.oid, 0) as int) as default_object_id + , CAST(coalesce((select oid from pg_constraint where conrelid = t.oid and contype = 'c' and a.attnum = any(conkey) limit 1), 0) as int) as rule_object_id + , CAST(0 as sys.bit) as is_sparse + , CAST(0 as sys.bit) as is_column_set + , CAST(0 as sys.tinyint) as generated_always_type + , CAST('NOT_APPLICABLE' as sys.nvarchar(60)) as generated_always_type_desc +from pg_attribute a +inner join pg_class c on c.oid = a.attrelid +inner join pg_type t on t.oid = a.atttypid +inner join pg_namespace s on s.oid = c.relnamespace +left join sys.babelfish_namespace_ext ext on (s.nspname = ext.nspname and ext.dbid = sys.db_id()) +left join pg_attrdef d on c.oid = d.adrelid and a.attnum = d.adnum +left join pg_collation coll on coll.oid = a.attcollation +, sys.translate_pg_type_to_tsql(a.atttypid) AS tsql_type_name +, sys.translate_pg_type_to_tsql(t.typbasetype) AS tsql_base_type_name +where not a.attisdropped +and (s.nspname = 'sys' or ext.nspname is not null) +-- r = ordinary table, i = index, S = sequence, t = TOAST table, v = view, m = materialized view, c = composite type, f = foreign table, p = partitioned table +and c.relkind in ('r', 'v', 'm', 'f', 'p') +and c.relispartition = false +and has_column_privilege(quote_ident(s.nspname) ||'.'||quote_ident(c.relname), a.attname, 'SELECT,INSERT,UPDATE,REFERENCES') +and a.attnum > 0; +GRANT SELECT ON sys.all_columns TO PUBLIC; + +CREATE OR REPLACE VIEW sys.all_parameters +AS +SELECT + CAST(ss.p_oid AS INT) AS object_id + , CAST(COALESCE( + case when length(ss.proargnames[(ss.x).n]) >= 63 + then (SELECT ti.original_identifier_name FROM sys.babelfish_identifier_mapping ti + WHERE ti.truncated_identifier_name = ss.proargnames[(ss.x).n] + AND ti.pg_catalog_type = 'pg_proc'::regclass::oid) + end, + ss.proargnames[(ss.x).n], '') AS sys.SYSNAME) AS name + , CAST( + CASE + WHEN is_out_scalar = 1 THEN 0 -- param_id = 0 for output of scalar function + ELSE (ss.x).n + END + AS INT) AS parameter_id + -- 'system_type_id' is specified as type INT here, and not TINYINT per SQL Server documentation. + -- This is because the IDs of system type values generated by + -- Babelfish installation will exceed the size of TINYINT + , CAST(st.system_type_id AS INT) AS system_type_id + , CAST(st.user_type_id AS INT) AS user_type_id + , CAST( + CASE + WHEN CAST(st.is_table_type AS int) = 1 THEN -1 -- TVP case + WHEN CAST(st.is_user_defined AS int) = 1 THEN st.max_length -- UDT case + ELSE sys.tsql_type_max_length_helper(st.name, t.typlen, typmod, true, true) + END + AS smallint) AS max_length + , CAST( + CASE + WHEN CAST(st.is_table_type AS int) = 1 THEN 0 -- TVP case + WHEN CAST(st.is_user_defined AS int) = 1 THEN st.precision -- UDT case + ELSE sys.tsql_type_precision_helper(st.name, typmod) + END + AS sys.tinyint) AS precision + , CAST( + CASE + WHEN CAST(st.is_table_type AS int) = 1 THEN 0 -- TVP case + WHEN CAST(st.is_user_defined AS int) = 1 THEN st.scale + ELSE sys.tsql_type_scale_helper(st.name, typmod,false) + END + AS sys.tinyint) AS scale + , CAST( + CASE + WHEN is_out_scalar = 1 THEN 1 -- Output of a scalar function + WHEN ss.proargmodes[(ss.x).n] in ('o', 'b', 't') THEN 1 + ELSE 0 + END + AS sys.bit) AS is_output + , CAST(0 AS sys.bit) AS is_cursor_ref + , CAST(0 AS sys.bit) AS has_default_value + , CAST(0 AS sys.bit) AS is_xml_document + , CAST(NULL AS sys.sql_variant) AS default_value + , CAST(0 AS int) AS xml_collection_id + , CAST(0 AS sys.bit) AS is_readonly + , CAST(1 AS sys.bit) AS is_nullable + , CAST(NULL AS int) AS encryption_type + , CAST(NULL AS sys.nvarchar(64)) AS encryption_type_desc + , CAST(NULL AS sys.sysname) AS encryption_algorithm_name + , CAST(NULL AS int) AS column_encryption_key_id + , CAST(NULL AS sys.sysname) AS column_encryption_key_database_name +FROM pg_type t + INNER JOIN sys.types st ON st.user_type_id = t.oid + INNER JOIN + ( + SELECT + p.oid AS p_oid, + p.proargnames, + p.proargmodes, + p.prokind, + json_extract_path(CAST(p.probin as json), 'typmod_array') AS typmod_array, + information_schema._pg_expandarray( + COALESCE(p.proallargtypes, + CASE + WHEN p.prokind = 'f' THEN (CAST( p.proargtypes AS oid[]) || p.prorettype) -- Adds return type if not present on proallargtypes + ELSE CAST(p.proargtypes AS oid[]) + END + )) AS x + FROM pg_proc p + WHERE ( + p.pronamespace in (select schema_id from sys.schemas union all select oid from pg_namespace where nspname = 'sys') + AND (pg_has_role(p.proowner, 'USAGE') OR has_function_privilege(p.oid, 'EXECUTE')) + AND p.probin like '{%typmod_array%}') -- Needs to have a typmod array in JSON format + ) ss ON t.oid = (ss.x).x, + COALESCE(pg_get_function_result(ss.p_oid), '') AS return_type, + CAST(ss.typmod_array->>(ss.x).n-1 AS INT) AS typmod, + CAST( + CASE + WHEN ss.prokind = 'f' AND ss.proargnames[(ss.x).n] IS NULL THEN 1 -- checks if param is output of scalar function + ELSE 0 + END + AS INT) AS is_out_scalar +WHERE ( -- If it is a Table function, we only want the inputs + return_type NOT LIKE 'TABLE(%' OR + (return_type LIKE 'TABLE(%' AND ss.proargmodes[(ss.x).n] = 'i')); +GRANT SELECT ON sys.all_parameters TO PUBLIC; + +create or replace view sys.default_constraints +AS +select CAST(('DF_' || tab.name || '_' || d.oid) as sys.sysname) as name + , CAST(d.oid as int) as object_id + , CAST(null as int) as principal_id + , CAST(tab.schema_id as int) as schema_id + , CAST(d.adrelid as int) as parent_object_id + , CAST('D' as sys.bpchar(2)) as type + , CAST('DEFAULT_CONSTRAINT' as sys.nvarchar(60)) AS type_desc + , CAST(null as sys.datetime) as create_date + , CAST(null as sys.datetime) as modified_date + , CAST(0 as sys.bit) as is_ms_shipped + , CAST(0 as sys.bit) as is_published + , CAST(0 as sys.bit) as is_schema_published + , CAST(d.adnum as int) as parent_column_id + , CAST(sys.tsql_get_expr(d.adbin, d.adrelid) as sys.nvarchar) as definition + , CAST(1 as sys.bit) as is_system_named +from pg_catalog.pg_attrdef as d +inner join pg_attribute a on a.attrelid = d.adrelid and d.adnum = a.attnum +inner join sys.tables tab on d.adrelid = tab.object_id +WHERE a.atthasdef = 't' and a.attgenerated = '' +AND has_column_privilege(a.attrelid, a.attname, 'SELECT,INSERT,UPDATE,REFERENCES'); +GRANT SELECT ON sys.default_constraints TO PUBLIC; + + +create or replace view sys.procedures as +select + cast(coalesce(f.orig_name, p.proname::sys.NVARCHAR(128)) as sys.sysname) as name + , cast(p.oid as int) as object_id + , cast(null as int) as principal_id + , cast(sch.schema_id as int) as schema_id + , cast (0 as int) as parent_object_id + , cast(case p.prokind + when 'p' then 'P' + when 'a' then 'AF' + else + case format_type(p.prorettype, null) when 'trigger' + then 'TR' + else 'FN' + end + end as sys.bpchar(2)) COLLATE sys.database_default as type + , cast(case p.prokind + when 'p' then 'SQL_STORED_PROCEDURE' + when 'a' then 'AGGREGATE_FUNCTION' + else + case format_type(p.prorettype, null) when 'trigger' + then 'SQL_TRIGGER' + else 'SQL_SCALAR_FUNCTION' + end + end as sys.nvarchar(60)) as type_desc + , cast(f.create_date as sys.datetime) as create_date + , cast(f.create_date as sys.datetime) as modify_date + , cast(0 as sys.bit) as is_ms_shipped + , cast(0 as sys.bit) as is_published + , cast(0 as sys.bit) as is_schema_published + , cast(0 as sys.bit) as is_auto_executed + , cast(0 as sys.bit) as is_execution_replicated + , cast(0 as sys.bit) as is_repl_serializable_only + , cast(0 as sys.bit) as skips_repl_constraints +from pg_proc p +inner join sys.schemas sch on sch.schema_id = p.pronamespace +left join sys.babelfish_function_ext f on p.proname = f.funcname and sch.schema_id::regnamespace::name = f.nspname +and sys.babelfish_get_pltsql_function_signature(p.oid) = f.funcsignature collate "C" +where +format_type(p.prorettype, null) <> 'trigger' +and has_function_privilege(p.oid, 'EXECUTE'); +GRANT SELECT ON sys.procedures TO PUBLIC; + +CREATE OR replace view sys.foreign_key_columns as +SELECT DISTINCT + CAST(c.oid AS INT) AS constraint_object_id + ,CAST((generate_series(1,ARRAY_LENGTH(c.conkey,1))) AS INT) AS constraint_column_id + ,CAST(c.conrelid AS INT) AS parent_object_id + ,CAST((UNNEST (c.conkey)) AS INT) AS parent_column_id + ,CAST(c.confrelid AS INT) AS referenced_object_id + ,CAST((UNNEST(c.confkey)) AS INT) AS referenced_column_id +FROM pg_constraint c +WHERE c.contype = 'f' +AND (c.connamespace IN (SELECT schema_id FROM sys.schemas)); +GRANT SELECT ON sys.foreign_key_columns TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_columns ( + "@table_name" sys.nvarchar(384), + "@table_owner" sys.nvarchar(384) = '', + "@table_qualifier" sys.nvarchar(384) = '', + "@column_name" sys.nvarchar(384) = '', + "@namescope" int = 0, + "@odbcver" int = 2, + "@fusepattern" smallint = 1) +AS $$ +BEGIN + IF @fusepattern = 1 + select table_qualifier as TABLE_QUALIFIER, + table_owner as TABLE_OWNER, + table_name as TABLE_NAME, + column_name as COLUMN_NAME, + data_type as DATA_TYPE, + type_name as TYPE_NAME, + precision as PRECISION, + length as LENGTH, + scale as SCALE, + radix as RADIX, + nullable as NULLABLE, + remarks as REMARKS, + column_def as COLUMN_DEF, + sql_data_type as SQL_DATA_TYPE, + sql_datetime_sub as SQL_DATETIME_SUB, + char_octet_length as CHAR_OCTET_LENGTH, + ordinal_position as ORDINAL_POSITION, + is_nullable as IS_NULLABLE, + ( + CASE + WHEN ss_is_identity = 1 AND sql_data_type = -6 THEN 48 -- Tinyint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 5 THEN 52 -- Smallint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 4 THEN 56 -- Int Identity + WHEN ss_is_identity = 1 AND sql_data_type = -5 THEN 63 -- Bigint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 3 THEN 55 -- Decimal Identity + WHEN ss_is_identity = 1 AND sql_data_type = 2 THEN 63 -- Numeric Identity + ELSE ss_data_type + END + ) as SS_DATA_TYPE + from sys.sp_columns_100_view + where table_name like @table_name COLLATE database_default + and (coalesce(@table_owner,'') = '' or table_owner like @table_owner collate database_default) + and (coalesce(@table_qualifier,'') = '' or table_qualifier like @table_qualifier collate database_default) + and (coalesce(@column_name,'') = '' or column_name like @column_name collate database_default) + order by table_qualifier, + table_owner, + table_name, + ordinal_position; + ELSE + select table_qualifier as TABLE_QUALIFIER, + table_owner as TABLE_OWNER, + table_name as TABLE_NAME, + column_name as COLUMN_NAME, + data_type as DATA_TYPE, + type_name as TYPE_NAME, + precision as PRECISION, + length as LENGTH, + scale as SCALE, + radix as RADIX, + nullable as NULLABLE, + remarks as REMARKS, + column_def as COLUMN_DEF, + sql_data_type as SQL_DATA_TYPE, + sql_datetime_sub as SQL_DATETIME_SUB, + char_octet_length as CHAR_OCTET_LENGTH, + ordinal_position as ORDINAL_POSITION, + is_nullable as IS_NULLABLE, + ( + CASE + WHEN ss_is_identity = 1 AND sql_data_type = -6 THEN 48 -- Tinyint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 5 THEN 52 -- Smallint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 4 THEN 56 -- Int Identity + WHEN ss_is_identity = 1 AND sql_data_type = -5 THEN 63 -- Bigint Identity + WHEN ss_is_identity = 1 AND sql_data_type = 3 THEN 55 -- Decimal Identity + WHEN ss_is_identity = 1 AND sql_data_type = 2 THEN 63 -- Numeric Identity + ELSE ss_data_type + END + ) as SS_DATA_TYPE + from sys.sp_columns_100_view + where table_name = @table_name collate database_default + and (coalesce(@table_owner, '') = '' or table_owner = @table_owner collate database_default) + and (coalesce(@table_qualifier,'') = '' or table_qualifier = @table_qualifier collate database_default) + and (coalesce(@column_name,'') = '' or column_name = @column_name collate database_default) + order by table_qualifier, + table_owner, + table_name, + ordinal_position; +END; +$$ +LANGUAGE 'pltsql'; +GRANT ALL on PROCEDURE sys.sp_columns TO PUBLIC; + + + +CREATE OR REPLACE PROCEDURE sys.babelfish_sp_rename_word_parse( + IN "@input" sys.nvarchar(776), + IN "@objtype" sys.varchar(13), + INOUT "@subname" sys.nvarchar(776), + INOUT "@curr_relname" sys.nvarchar(776), + INOUT "@schemaname" sys.nvarchar(776), + INOUT "@dbname" sys.nvarchar(776) +) +AS $$ +BEGIN + SELECT (ROW_NUMBER() OVER (ORDER BY NULL)) as row, * + INTO #sp_rename_temptable + FROM sys.babelfish_split_identifier(@input) ORDER BY row DESC; + + SELECT (ROW_NUMBER() OVER (ORDER BY NULL)) as id, * + INTO #sp_rename_temptable2 + FROM #sp_rename_temptable; + + DECLARE @row_count INT; + SELECT @row_count = COUNT(*) FROM #sp_rename_temptable2; + + IF @objtype = 'COLUMN' OR @objtype = 'INDEX' + BEGIN + IF @row_count = 1 + BEGIN + IF @objtype = 'COLUMN' + BEGIN + THROW 33557097, N'Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.', 1; + END; + ELSE + BEGIN + THROW 33557097, N'Either the parameter @objname is ambiguous or the claimed @objtype (INDEX) is wrong.', 1; + END + END + ELSE IF @row_count > 4 + BEGIN + THROW 33557097, N'No item by the given @objname could be found in the current database', 1; + END + ELSE + BEGIN + IF @row_count > 1 + BEGIN + SELECT @subname = value FROM #sp_rename_temptable2 WHERE id = 1; + SELECT @curr_relname = value FROM #sp_rename_temptable2 WHERE id = 2; + SET @schemaname = sys.schema_name(); + + END + IF @row_count > 2 + BEGIN + SELECT @schemaname = value FROM #sp_rename_temptable2 WHERE id = 3; + END + IF @row_count > 3 + BEGIN + SELECT @dbname = value FROM #sp_rename_temptable2 WHERE id = 4; + IF @dbname != sys.db_name() collate database_default + BEGIN + THROW 33557097, N'No item by the given @objname could be found in the current database', 1; + END + END + END + END + ELSE + BEGIN + IF @row_count > 3 + BEGIN + THROW 33557097, N'No item by the given @objname could be found in the current database', 1; + END + ELSE + BEGIN + SET @curr_relname = NULL; + IF @row_count > 0 + BEGIN + SELECT @subname = value FROM #sp_rename_temptable2 WHERE id = 1; + SET @schemaname = sys.schema_name(); + END + IF @row_count > 1 + BEGIN + SELECT @schemaname = value FROM #sp_rename_temptable2 WHERE id = 2; + END + IF @row_count > 2 + BEGIN + SELECT @dbname = value FROM #sp_rename_temptable2 WHERE id = 3; + IF @dbname != sys.db_name() collate database_default + BEGIN + THROW 33557097, N'No item by the given @objname could be found in the current database', 1; + END + END + END + END +END; +$$ +LANGUAGE 'pltsql'; +GRANT EXECUTE on PROCEDURE sys.babelfish_sp_rename_word_parse(IN sys.nvarchar(776), IN sys.varchar(13), INOUT sys.nvarchar(776), INOUT sys.nvarchar(776), INOUT sys.nvarchar(776), INOUT sys.nvarchar(776)) TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_changedbowner( + IN "@loginame" sys.sysname, + IN "@map" sys.VARCHAR(5) DEFAULT NULL) -- this parameter is ignored in T-SQL +LANGUAGE 'pltsql' +AS $$ +BEGIN + DECLARE @cmd sys.NVARCHAR(300) + DECLARE @db sys.sysname = DB_NAME() collate database_default + + -- For a NULL login name, do nothing + IF @loginame IS NULL + BEGIN + RETURN + END + + IF (@db = 'master') OR (@db = 'tempdb') + BEGIN + RAISERROR('Cannot change the owner of the master or tempdb database.', 16, 1) + RETURN + END + + IF SUSER_ID(@loginame) IS NULL + BEGIN + RAISERROR('Cannot find the principal ''%s'', because it does not exist or you do not have permission.', 16, 1, @loginame) + RETURN + END + + -- Compose the ALTER ATHORIZATION statement: + SET @cmd = 'ALTER AUTHORIZATION ON DATABASE::[' + @db + '] TO [' + SUSER_NAME(SUSER_ID(@loginame)) + ']' + EXECUTE(@cmd) +END +$$; +GRANT EXECUTE ON PROCEDURE sys.sp_changedbowner(IN sys.sysname, IN sys.VARCHAR(5)) TO PUBLIC; + +CREATE OR REPLACE PROCEDURE sys.sp_procedure_params_100_managed(IN "@procedure_name" sys.sysname, + IN "@group_number" integer DEFAULT 1, + IN "@procedure_schema" sys.sysname DEFAULT NULL, + IN "@parameter_name" sys.sysname DEFAULT NULL) +AS $$ +BEGIN + IF @procedure_schema IS NULL OR @procedure_schema = '' + BEGIN + SELECT @procedure_schema = default_schema_name from sys.babelfish_authid_user_ext WHERE orig_username = user_name() AND database_name = sys.bbf_cur_db() collate database_default; + END + + SELECT v.column_name AS [PARAMETER_NAME], + CAST (CASE v.column_type + WHEN 5 THEN 4 + WHEN 3 THEN 4 + ELSE v.column_type END + AS smallint) AS [PARAMETER_TYPE], + CAST (CASE v.type_name + WHEN 'int' THEN 8 + WHEN 'nchar' THEN 10 + WHEN 'char' THEN 3 + WHEN 'date' THEN 31 + WHEN 'nvarchar' THEN 12 + WHEN 'varchar' THEN 22 + WHEN 'table' THEN 23 + WHEN 'datetime' THEN 4 + WHEN 'datetime2' THEN 33 + WHEN 'datetimeoffset' THEN 34 + WHEN 'smalldatetime' THEN 15 + WHEN 'time' THEN 32 + WHEN 'decimal' THEN 5 + WHEN 'numeric' THEN 5 + WHEN 'float' THEN 6 + WHEN 'real' THEN 13 + WHEN 'nchar' THEN 10 + WHEN 'flag' THEN 2 + WHEN 'money' THEN 9 + WHEN 'smallmoney' THEN 17 + WHEN 'tinyint' THEN 20 + WHEN 'smallint' THEN 16 + WHEN 'bigint' THEN 0 + WHEN 'bit' THEN 2 + WHEN 'text' THEN 18 + WHEN 'ntext' THEN 11 + WHEN 'binary' THEN 1 + WHEN 'varbinary' THEN 21 + WHEN 'image' THEN 7 + ELSE 0 END + AS smallint) AS [MANAGED_DATA_TYPE], + CAST (CASE + WHEN v.type_name IN (N'nchar', N'nvarchar') AND p.max_length <> -1 THEN p.max_length / 2 + WHEN v.type_name IN (N'char', N'varchar', N'binary', N'varbinary') AND p.max_length <> -1 THEN p.max_length + WHEN v.type_name IN (N'nvarchar', N'varchar', N'varbinary') AND p.max_length = -1 THEN 0 + WHEN v.type_name IN (N'text', N'image') THEN 2147483647 + WHEN v.type_name = 'ntext' THEN 1073741823 + ELSE NULL END + AS INT) AS [CHARACTER_MAXIMUM_LENGTH], + CAST(CASE + WHEN v.type_name IN (N'int', N'smallint', N'bigint', N'tinyint', N'float', N'real', N'decimal', N'numeric', N'money', N'smallmoney') + THEN v.PRECISION + ELSE NULL END + AS smallint) AS [NUMERIC_PRECISION], + CAST(CASE + WHEN v.type_name IN (N'decimal', N'numeric') THEN v.SCALE + ELSE NULL END + AS smallint ) AS [NUMERIC_SCALE], + CAST(NULL AS sys.nvarchar(128)) AS [TYPE_CATALOG_NAME], + CAST(NULL AS sys.nvarchar(128)) AS [TYPE_SCHEMA_NAME], + CAST(v.TYPE_NAME AS sys.nvarchar(128)) AS [TYPE_NAME], + CAST(NULL AS sys.nvarchar(128)) AS XML_CATALOGNAME, + CAST(NULL AS sys.nvarchar(128)) AS XML_SCHEMANAME, + CAST(NULL AS sys.nvarchar(128)) AS XML_SCHEMACOLLECTIONNAME, + CAST(CASE + WHEN v.type_name = 'datetime' THEN 3 + WHEN v.type_name IN (N'datetime2', N'datetimeoffset', N'time') THEN 7 + WHEN v.type_name IN (N'date', N'smalldatetime') THEN 0 + ELSE NULL END AS int) AS [SS_DATETIME_PRECISION] + FROM sys.sp_sproc_columns_view v + LEFT OUTER JOIN sys.all_parameters AS p + ON v.column_name = p.name AND p.object_id = object_id(PG_CATALOG.CONCAT(@procedure_schema, '.', @procedure_name)) + WHERE v.original_procedure_name = @procedure_name + AND v.procedure_owner = @procedure_schema + AND (@parameter_name IS NULL OR column_name = @parameter_name) + AND @group_number = 1 + ORDER BY PROCEDURE_OWNER, PROCEDURE_NAME, ORDINAL_POSITION; +END; +$$ LANGUAGE pltsql; +GRANT EXECUTE ON PROCEDURE sys.sp_procedure_params_100_managed TO PUBLIC; + +CREATE OR REPLACE VIEW sys.sysusers AS SELECT +Dbp.principal_id AS uid, +CAST(0 AS INT) AS status, +Dbp.name AS name, +Dbp.sid AS sid, +CAST(NULL AS SYS.VARBINARY(2048)) AS roles, +Dbp.create_date AS createdate, +Dbp.modify_date AS updatedate, +CAST(0 AS INT) AS altuid, +CAST(NULL AS SYS.VARBINARY(256)) AS password, +CAST(0 AS INT) AS gid, +CAST(NULL AS SYS.VARCHAR(85)) AS environ, +CASE + WHEN Dbp.name = 'INFORMATION_SCHEMA' + OR Dbp.name = 'sys' + OR Dbp.type_desc = 'DATABASE_ROLE' + THEN 0 + WHEN (Dbp.type_desc = 'WINDOWS_USER' OR Dbp.type_desc = 'SQL_USER') AND Ext.user_can_connect = 1 THEN 1 + ELSE 0 +END AS hasdbaccess, +CASE + WHEN Dbp.name = 'INFORMATION_SCHEMA' + OR Dbp.name = 'sys' + OR Dbp.name = 'guest' + OR Dbp.name = 'dbo' + THEN 1 + WHEN Dbp.type_desc = 'WINDOWS_USER' OR Dbp.type_desc = 'SQL_USER' THEN 1 + ELSE 0 +END AS islogin, +CASE WHEN Dbp.type_desc = 'WINDOWS_USER' THEN 1 ELSE 0 END AS isntname, +CAST(0 AS INT) AS isntgroup, +CASE WHEN Dbp.type_desc = 'WINDOWS_USER' THEN 1 ELSE 0 END AS isntuser, +CASE WHEN Dbp.type_desc = 'SQL_USER' THEN 1 ELSE 0 END AS issqluser, +CAST(0 AS INT) AS isaliased, +CASE WHEN Dbp.type_desc = 'DATABASE_ROLE' THEN 1 ELSE 0 END AS issqlrole, +CAST(0 AS INT) AS isapprole +FROM sys.database_principals AS Dbp LEFT JOIN + (SELECT orig_username, user_can_connect FROM sys.babelfish_authid_user_ext + WHERE database_name = sys.bbf_cur_db() COLLATE sys.database_default) AS Ext +ON Dbp.name = Ext.orig_username; + +GRANT SELECT ON sys.sysusers TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.domains AS + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "DOMAIN_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "DOMAIN_SCHEMA", + CAST(t.typname AS sys.sysname) AS "DOMAIN_NAME", + CAST(case when is_tbl_type THEN 'table type' ELSE tsql_type_name END AS sys.sysname) AS "DATA_TYPE", + + CAST(information_schema_tsql._pgtsql_char_max_length(tsql_type_name, t.typtypmod) + AS int) + AS "CHARACTER_MAXIMUM_LENGTH", + + CAST(information_schema_tsql._pgtsql_char_octet_length(tsql_type_name, t.typtypmod) + AS int) + AS "CHARACTER_OCTET_LENGTH", + + CAST(NULL as sys.nvarchar(128)) AS "COLLATION_CATALOG", + CAST(NULL as sys.nvarchar(128)) AS "COLLATION_SCHEMA", + + + CAST( + CASE co.collname + WHEN 'default' THEN current_setting('babelfishpg_tsql.server_collation_name') + ELSE co.collname + END + AS sys.nvarchar(128)) AS "COLLATION_NAME", + + CAST(null AS sys.varchar(6)) AS "CHARACTER_SET_CATALOG", + CAST(null AS sys.varchar(3)) AS "CHARACTER_SET_SCHEMA", + + + + + CAST(null AS sys.nvarchar(128)) AS "CHARACTER_SET_NAME", + + CAST(information_schema_tsql._pgtsql_numeric_precision(tsql_type_name, t.typbasetype, t.typtypmod) + AS sys.tinyint) + AS "NUMERIC_PRECISION", + + CAST(information_schema_tsql._pgtsql_numeric_precision_radix(tsql_type_name, t.typbasetype, t.typtypmod) + AS smallint) + AS "NUMERIC_PRECISION_RADIX", + + CAST(information_schema_tsql._pgtsql_numeric_scale(tsql_type_name, t.typbasetype, t.typtypmod) + AS int) + AS "NUMERIC_SCALE", + + CAST(information_schema_tsql._pgtsql_datetime_precision(tsql_type_name, t.typtypmod) + AS smallint) + AS "DATETIME_PRECISION", + + CAST(case when is_tbl_type THEN NULL ELSE t.typdefault END AS sys.nvarchar(4000)) AS "DOMAIN_DEFAULT" + + FROM (pg_type t JOIN sys.pg_namespace_ext nc ON t.typnamespace = nc.oid) + LEFT JOIN pg_collation co ON t.typcollation = co.oid + LEFT JOIN sys.babelfish_namespace_ext ext on nc.nspname = ext.nspname, + sys.translate_pg_type_to_tsql(t.typbasetype) AS tsql_type_name, + sys.is_table_type(t.typrelid) as is_tbl_type + + WHERE (pg_has_role(t.typowner, 'USAGE') + OR has_type_privilege(t.oid, 'USAGE')) + AND (t.typtype = 'd' OR is_tbl_type) + AND ext.dbid = sys.db_id(); + +GRANT SELECT ON information_schema_tsql.domains TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.key_column_usage AS + SELECT + CAST(db_name AS sys.nvarchar(128)) AS "CONSTRAINT_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "CONSTRAINT_SCHEMA", + COALESCE(case when octet_length(c.conname) >= 60 then (select m.original_identifier_name from sys.babelfish_identifier_mapping m where m.truncated_identifier_name = c.conname and m.nspname = nsp.nspname and m.pg_catalog_type = 'pg_constraint'::regclass::oid) end, c.conname::text)::sys.nvarchar(128) AS "CONSTRAINT_NAME", + CAST(db_name AS sys.nvarchar(128)) AS "TABLE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", + COALESCE(case when octet_length(r.relname) >= 60 then (select substring(opt, 23) from unnest(r.reloptions) opt where opt like 'bbf_original_rel_name=%' limit 1) end, r.relname::text)::sys.nvarchar(128) AS "TABLE_NAME", + COALESCE(case when octet_length(a.attname) >= 60 then (select substring(opt, 19) from unnest(a.attoptions) opt where opt like 'bbf_original_name=%' limit 1) end, a.attname::text)::sys.nvarchar(128) AS "COLUMN_NAME", + CAST(ord AS int) AS "ORDINAL_POSITION" + FROM + pg_constraint c + JOIN pg_class r ON r.oid = c.conrelid AND c.contype in ('p','u','f') AND r.relkind in ('r','p') AND r.relispartition = false + JOIN pg_namespace nsp ON r.relnamespace = nsp.oid + JOIN sys.babelfish_namespace_ext ext ON ext.nspname = nsp.nspname AND ext.dbid = sys.db_id() + CROSS JOIN unnest(c.conkey) WITH ORDINALITY AS ak(j,ord) + LEFT JOIN pg_attribute a ON a.attrelid = r.oid AND a.attnum = ak.j + , sys.db_name() AS db_name + WHERE + pg_has_role(r.relowner, 'USAGE'::text) + OR has_column_privilege(r.oid, a.attnum, 'SELECT, INSERT, UPDATE, REFERENCES'::text) + ; +GRANT SELECT ON information_schema_tsql.key_column_usage TO PUBLIC; + +CREATE OR REPLACE VIEW information_schema_tsql.views AS + SELECT CAST(nc.dbname AS sys.nvarchar(128)) AS "TABLE_CATALOG", + CAST(ext.orig_name AS sys.nvarchar(128)) AS "TABLE_SCHEMA", + CAST(c.relname AS sys.nvarchar(128)) AS "TABLE_NAME", + CAST(vd.definition AS sys.nvarchar(4000)) AS "VIEW_DEFINITION", + + CAST( + CASE WHEN 'check_option=cascaded' = ANY (c.reloptions) + THEN 'CASCADE' + ELSE 'NONE' END + AS sys.varchar(7)) COLLATE sys.database_default AS "CHECK_OPTION", + + CAST('NO' AS sys.varchar(2)) AS "IS_UPDATABLE" + + FROM sys.pg_namespace_ext nc JOIN pg_class c ON (nc.oid = c.relnamespace) + LEFT OUTER JOIN sys.babelfish_namespace_ext ext + ON (nc.nspname = ext.nspname COLLATE sys.database_default) + LEFT OUTER JOIN sys.babelfish_view_def vd + ON ext.dbid = vd.dbid + AND (ext.orig_name = vd.schema_name COLLATE sys.database_default) + AND (CAST(c.relname AS sys.nvarchar(128)) = vd.object_name COLLATE sys.database_default) + LEFT JOIN sys.shipped_objects_not_in_sys nis on (nis.name = c.relname and nis.schemaid = nc.oid and nis.type = 'V') + + WHERE c.relkind = 'v' + AND (NOT pg_is_other_temp_schema(nc.oid)) + AND nis.name is null + AND (pg_has_role(c.relowner, 'USAGE') + OR has_table_privilege(c.oid, 'SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER') + OR has_any_column_privilege(c.oid, 'SELECT, INSERT, UPDATE, REFERENCES') ) + AND ext.dbid = sys.db_id(); + +GRANT SELECT ON information_schema_tsql.views TO PUBLIC; + +CREATE OR REPLACE FUNCTION sys.babelfish_construct_unique_index_name(index_name TEXT, table_name TEXT) +RETURNS TEXT AS 'babelfishpg_tsql', 'bbf_construct_unique_index_name' +LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; + + +CREATE OR REPLACE FUNCTION sys.babelfish_helpdb() +RETURNS table ( + name varchar(128), + db_size varchar(13), + owner varchar(128), + dbid int, + created varchar(11), + status varchar(600), + compatibility_level smallint +) AS 'babelfishpg_tsql', 'babelfish_helpdb' LANGUAGE C STABLE; + +-- internal table function for helpdb with dbname as input + +CREATE OR REPLACE FUNCTION sys.db_name() RETURNS sys.nvarchar(128) +AS 'babelfishpg_tsql', 'babelfish_db_name' +LANGUAGE C PARALLEL SAFE STABLE; + +SELECT pg_catalog.pg_extension_config_dump('sys.babelfish_identifier_mapping', ''); + -- Drops the temporary procedure used by the upgrade script. -- Please have this be one of the last statements executed in this upgrade script. +-- DROP PROCEDURE moved to end of script after all deprecation calls DROP PROCEDURE sys.babelfish_drop_deprecated_object(varchar, varchar, varchar, varchar); -- After upgrade, always run analyze for all babelfish catalogs. diff --git a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-decl.y b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-decl.y index 4ac2c19b769..0fa57c036b2 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-decl.y +++ b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-decl.y @@ -22,6 +22,7 @@ %type tsql_CreateLoginStmt tsql_AlterLoginStmt tsql_DropLoginStmt %type tsql_CreateUserStmt tsql_DropRoleStmt tsql_AlterUserStmt %type tsql_CreateRoleStmt +%type tsql_CreatedbStmt %type tsql_nchar %type tsql_login_option_list1 tsql_login_option_list2 tsql_windows_options_list tsql_login_sources %type tsql_alter_login_option_list diff --git a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-epilogue.y.c b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-epilogue.y.c index e04d50f6c3b..7d35f8c0fa5 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-epilogue.y.c +++ b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-epilogue.y.c @@ -102,6 +102,15 @@ construct_unique_index_name(char *index_name, char *relation_name) name = palloc(new_len + 1); memcpy(name, buf, new_len + 1); + /* Cache constructed truncated name → original index name for error messages */ + { + const char *orig = bbf_lookup_ident_name(index_name); + if (orig) + bbf_cache_index_name(name, orig); + else + bbf_cache_index_name(name, index_name); + } + return name; } diff --git a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y index 94ac03efe8a..88ba25df501 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y +++ b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y @@ -228,6 +228,25 @@ tsql_windows_options: * database creation, etc. For example, * CREATE ROLE sysadmin CREATEDB CREATEROLE INHERIT ROLE sa_name */ + +tsql_CreatedbStmt: + CREATE DATABASE name opt_with createdb_opt_list + { + CreatedbStmt *n = makeNode(CreatedbStmt); + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + @3, NULL); + + n->dbname = $3; + n->options = $5; + if (orig_name) + n->options = lappend(n->options, + makeDefElem("bbf_original_name", + (Node *) makeString(orig_name), + @3)); + $$ = (Node *) n; + } + ; + tsql_CreateRoleStmt: CREATE ROLE RoleId opt_with OptRoleList { @@ -904,6 +923,7 @@ ConstraintElem: n->options = $9; n->indexname = NULL; n->indexspace = $10; + n->is_enforced = true; processCASbits($11, @11, "UNIQUE", &n->deferrable, &n->initdeferred, NULL, NULL, NULL, yyscanner); @@ -1094,9 +1114,23 @@ DefineStmt: | CREATE TYPE_P any_name FROM Typename { CreateDomainStmt *n = makeNode(CreateDomainStmt); + Constraint *c = makeNode(Constraint); + n->domainname = $3; n->typeName = $5; - n->constraints = NIL; + c->contype = CONSTR_NULL; + c->location = @3; + if (sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *original_name = extract_identifier(yyextra->core_yy_extra.scanbuf + @3, NULL); + if (original_name) + c->options = lappend(c->options, + makeDefElem("bbf_original_name", + (Node *)makeString(original_name), + @3)); + } + n->constraints = list_make1(c); $$ = (Node *)n; } @@ -1107,13 +1141,22 @@ DefineStmt: n->domainname = $3; n->typeName = $5; - n->constraints = list_make1(c); - c->contype = CONSTR_NOTNULL; c->location = @6; c->is_enforced = true; c->skip_validation = false; c->initially_valid = true; + if (sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *original_name = extract_identifier(yyextra->core_yy_extra.scanbuf + @3, NULL); + if (original_name) + c->options = lappend(c->options, + makeDefElem("bbf_original_name", + (Node *)makeString(original_name), + @3)); + } + n->constraints = list_make1(c); $$ = (Node *)n; @@ -1125,13 +1168,22 @@ DefineStmt: n->domainname = $3; n->typeName = $5; - n->constraints = list_make1(c); - c->contype = CONSTR_NULL; c->location = @6; c->is_enforced = true; c->skip_validation = false; c->initially_valid = true; + if (sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *original_name = extract_identifier(yyextra->core_yy_extra.scanbuf + @3, NULL); + if (original_name) + c->options = lappend(c->options, + makeDefElem("bbf_original_name", + (Node *)makeString(original_name), + @3)); + } + n->constraints = list_make1(c); $$ = (Node *)n; @@ -1146,6 +1198,7 @@ func_arg: n->argType = $2; n->mode = $3; n->defexpr = NULL; + n->location = @1; $$ = n; } ; @@ -1542,6 +1595,17 @@ simple_select: errhint("For example, TOP n COLUMNS ..."), parser_errposition(@3))); n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->fromClause = $6; n->whereClause = $7; n->groupClause = ($8)->list; @@ -1569,6 +1633,17 @@ simple_select: errhint("For example, TOP n COLUMNS ..."), parser_errposition(@3))); n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->fromClause = $6; n->whereClause = $7; n->groupClause = ($8)->list; @@ -1594,6 +1669,17 @@ simple_select: errhint("For example, TOP n COLUMNS ..."), parser_errposition(@3))); n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $9; n->groupClause = ($10)->list; n->groupDistinct = ($10)->distinct; @@ -1617,6 +1703,17 @@ simple_select: errhint("For example, TOP n COLUMNS ..."), parser_errposition(@3))); n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $9; n->groupClause = ($10)->list; n->groupDistinct = ($10)->distinct; @@ -1630,6 +1727,17 @@ simple_select: { SelectStmt *n = makeNode(SelectStmt); n->intoClause = $4; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $8; n->groupClause = ($9)->list; n->groupDistinct = ($9)->distinct; @@ -1643,6 +1751,17 @@ simple_select: { SelectStmt *n = makeNode(SelectStmt); n->intoClause = $4; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $8; n->groupClause = ($9)->list; n->groupDistinct = ($9)->distinct; @@ -2444,6 +2563,17 @@ tsql_output_simple_select: n->limitOption = top_stmt->limitOption; n->targetList = $4; n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->fromClause = $6; n->whereClause = $7; n->groupClause = ($8)->list; @@ -2465,6 +2595,17 @@ tsql_output_simple_select: n->limitOption = top_stmt->limitOption; n->targetList = $4; n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->fromClause = $6; n->whereClause = $7; n->groupClause = ($8)->list; @@ -2484,6 +2625,17 @@ tsql_output_simple_select: if (top_stmt->limitCount != NULL) n->limitOption = top_stmt->limitOption; n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $9; n->groupClause = ($10)->list; n->groupDistinct = ($10)->distinct; @@ -2502,6 +2654,17 @@ tsql_output_simple_select: if (top_stmt->limitCount != NULL) n->limitOption = top_stmt->limitOption; n->intoClause = $5; + if (n->intoClause && n->intoClause->rel && + sql_dialect == SQL_DIALECT_TSQL) + { + base_yy_extra_type *yyextra = pg_yyget_extra(yyscanner); + char *orig_name = extract_identifier(yyextra->core_yy_extra.scanbuf + n->intoClause->rel->location, NULL); + if (orig_name) + n->intoClause->options = lappend(n->intoClause->options, + makeDefElem("bbf_original_name", + (Node *)makeString(orig_name), + n->intoClause->rel->location)); + } n->whereClause = $9; n->groupClause = ($10)->list; n->groupDistinct = ($10)->distinct; @@ -2720,7 +2883,7 @@ tsql_stmt : | CreateEventTrigStmt | tsql_CreateRoleStmt | tsql_CreateUserStmt - | CreatedbStmt + | tsql_CreatedbStmt | DeallocateStmt | DeclareCursorStmt | DefineStmt @@ -3463,7 +3626,8 @@ tsql_CreateTrigStmt: n2->funcname = $3; n2->parameters = NIL; n2->returnType = makeTypeName("trigger"); - n2->options = list_make3(lang, body, trigStmt); + n2->options = list_make4(lang, body, trigStmt, + makeDefElem("location", (Node *) makeInteger(@3), @3)); $$ = (Node *) n2; } @@ -3558,6 +3722,9 @@ tsql_IndexStmt: n->if_not_exists = false; tsql_index_nulls_order(n->indexParams, n->accessMethod); + n->options = lappend(n->options, + makeDefElem("name_location", + (Node *) makeInteger(@7), -1)); $$ = (Node *)n; } | CREATE TSQL_SPATIAL INDEX opt_single_name @@ -4611,6 +4778,7 @@ tsql_proc_arg: n->argType = $3; n->mode = $6 ? FUNC_PARAM_INOUT : FUNC_PARAM_IN; n->defexpr = $5; + n->location = @1; tsql_check_param_readonly($1, $3, $7); $$ = n; @@ -4646,6 +4814,7 @@ tsql_func_arg: n->argType = $3; n->mode = FUNC_PARAM_IN; n->defexpr = $4; + n->location = @1; tsql_check_param_readonly($1, $3, $5); $$ = n; diff --git a/contrib/babelfishpg_tsql/src/backend_parser/parser.c b/contrib/babelfishpg_tsql/src/backend_parser/parser.c index 4ae9d3ad2a6..cd1f8961663 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/parser.c +++ b/contrib/babelfishpg_tsql/src/backend_parser/parser.c @@ -24,6 +24,7 @@ #include "parser/parser.h" #include "src/backend_parser/gramparse.h" +extern void bbf_reset_ident_name_cache(void); #include "src/backend_parser/kwlist_d.h" #include "src/pltsql.h" @@ -48,6 +49,10 @@ babelfishpg_tsql_raw_parser(const char *str, RawParseMode mode) instr_time parseStart; instr_time parseEnd; + /* Only clear cache at top-level batch, not inside proc execution */ + if (!exec_state_call_stack) + bbf_reset_ident_name_cache(); + /* * parse identifiers case-insensitively if the database collation is CI_AS */ diff --git a/contrib/babelfishpg_tsql/src/catalog.c b/contrib/babelfishpg_tsql/src/catalog.c index 723adafef6d..e26c8310044 100644 --- a/contrib/babelfishpg_tsql/src/catalog.c +++ b/contrib/babelfishpg_tsql/src/catalog.c @@ -95,6 +95,12 @@ Oid bbf_servers_def_idx_oid; Oid bbf_function_ext_oid; Oid bbf_function_ext_idx_oid; +/***************************************** + * TRUNCATED_IDENTIFIER + *****************************************/ +Oid bbf_ident_mapping_oid; +Oid bbf_ident_mapping_idx_oid; + /***************************************** * SCHEMA *****************************************/ @@ -209,9 +215,308 @@ static struct cachedesc my_cacheinfo[] = { 0 }, 16 + }, + {-1, /* IDENTMAPPINGNAME */ + -1, + 4, + { + Anum_bbf_ident_mapping_truncated_name, + Anum_bbf_ident_mapping_nspname, + Anum_bbf_ident_mapping_pg_catalog_type, + Anum_bbf_ident_mapping_parent_name + }, + 128 } }; +/* Session cache for error message rewriting - type defined in catalog.h */ + +static HTAB *ident_name_cache = NULL; + +static void +ensure_ident_name_cache(void) +{ + if (ident_name_cache == NULL) + { + HASHCTL ctl; + + MemSet(&ctl, 0, sizeof(ctl)); + ctl.keysize = NAMEDATALEN; + ctl.entrysize = sizeof(IdentNameCacheEntry); + ctl.hcxt = TopMemoryContext; + ident_name_cache = hash_create("Babelfish truncated identifier cache", 64, &ctl, + HASH_ELEM | HASH_STRINGS | HASH_CONTEXT); + } +} + +void +bbf_reset_ident_name_cache(void) +{ + if (ident_name_cache) + { + hash_destroy(ident_name_cache); + ident_name_cache = NULL; + } +} + +/* + * Snapshot current cache entries into a caller-provided array. + * Returns number of entries copied. Used by pl_comp to save + * mappings onto PLtsql_function during compilation. + */ +int +bbf_snapshot_ident_cache(IdentNameCacheEntry **entries, MemoryContext cxt) +{ + HASH_SEQ_STATUS status; + IdentNameCacheEntry *entry; + int n; + int i = 0; + + if (!ident_name_cache) + { + *entries = NULL; + return 0; + } + + n = hash_get_num_entries(ident_name_cache); + if (n == 0) + { + *entries = NULL; + return 0; + } + + *entries = (IdentNameCacheEntry *) MemoryContextAlloc(cxt, n * sizeof(IdentNameCacheEntry)); + hash_seq_init(&status, ident_name_cache); + while ((entry = (IdentNameCacheEntry *) hash_seq_search(&status)) != NULL) + { + memcpy(&(*entries)[i], entry, sizeof(IdentNameCacheEntry)); + i++; + } + return i; +} + +/* + * Restore cached entries from a snapshot. Used by pl_exec + * at EXEC entry to repopulate the batch cache. + */ +void +bbf_restore_ident_cache(IdentNameCacheEntry *entries, int n) +{ + int i; + + if (!entries || n == 0) + return; + + ensure_ident_name_cache(); + for (i = 0; i < n; i++) + { + IdentNameCacheEntry *e; + bool found; + + e = (IdentNameCacheEntry *) hash_search(ident_name_cache, + entries[i].truncated_name, + HASH_ENTER, &found); + if (!found) + strlcpy(e->original_name, entries[i].original_name, sizeof(e->original_name)); + } +} + +void +bbf_cache_ident_name(const char *truncated_name, const char *original_name) +{ + IdentNameCacheEntry *entry; + bool found; + + if (strlen(original_name) < NAMEDATALEN - 1) + return; + + /* Don't cache if original_name contains invalid UTF-8 */ + if (!pg_verifymbstr(original_name, strlen(original_name), true)) + return; + + ensure_ident_name_cache(); + entry = (IdentNameCacheEntry *) hash_search(ident_name_cache, truncated_name, HASH_ENTER, &found); + strlcpy(entry->original_name, original_name, sizeof(entry->original_name)); +} + +/* + * Cache index internal name → original index name unconditionally. + * Used by construct_unique_index_name so error messages always show + * the user-supplied index name even for short identifiers. + */ +void +bbf_cache_index_name(const char *internal_name, const char *index_name) +{ + IdentNameCacheEntry *entry; + bool found; + + if (!internal_name || !index_name || strcmp(internal_name, index_name) == 0) + return; + + /* Don't cache if index_name contains invalid UTF-8 */ + if (!pg_verifymbstr(index_name, strlen(index_name), true)) + return; + + ensure_ident_name_cache(); + + entry = (IdentNameCacheEntry *) hash_search(ident_name_cache, internal_name, HASH_ENTER, &found); + strlcpy(entry->original_name, index_name, sizeof(entry->original_name)); +} + +PGDLLEXPORT const char * +bbf_lookup_ident_name(const char *truncated_name) +{ + IdentNameCacheEntry *entry; + + if (!ident_name_cache) + return NULL; + + entry = (IdentNameCacheEntry *) hash_search(ident_name_cache, truncated_name, HASH_FIND, NULL); + return entry ? entry->original_name : NULL; +} + +/* + * Scan error message for any cached truncated identifier and replace with original. + * Returns new message (allocated in TopMemoryContext) or NULL if no replacement. + */ +/* + * Look up a truncated identifier in the catalog by name alone. + * Used in error paths where we don't know the schema/parent context. + * Caches the result for future lookups in this session. + */ +static const char * +lookup_ident_from_catalog_by_name(const char *truncated_name) +{ + Relation rel; + TableScanDesc scan; + ScanKeyData skey[1]; + HeapTuple tuple; + NameData namedata; + const char *result = NULL; + + if (!IsTransactionState()) + return NULL; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return NULL; + + namestrcpy(&namedata, truncated_name); + ScanKeyInit(&skey[0], + Anum_bbf_ident_mapping_truncated_name, + BTEqualStrategyNumber, F_NAMEEQ, + NameGetDatum(&namedata)); + + rel = table_open(get_bbf_ident_mapping_oid(), AccessShareLock); + scan = table_beginscan_catalog(rel, 1, skey); + + tuple = heap_getnext(scan, ForwardScanDirection); + if (HeapTupleIsValid(tuple)) + { + bool isNull; + Datum datum; + + datum = heap_getattr(tuple, Anum_bbf_ident_mapping_original_name, + RelationGetDescr(rel), &isNull); + if (!isNull) + { + char *orig = TextDatumGetCString(datum); + bbf_cache_ident_name(truncated_name, orig); + result = bbf_lookup_ident_name(truncated_name); + pfree(orig); + } + } + + table_endscan(scan); + table_close(rel, AccessShareLock); + + return result; +} +PGDLLEXPORT char * +bbf_rewrite_truncated_identifiers(const char *msg) +{ + HASH_SEQ_STATUS status; + IdentNameCacheEntry *entry; + char *result = NULL; + + if (!msg) + return NULL; + + ensure_ident_name_cache(); + + /* Session cache pass: replace truncated identifiers with lowercased originals */ + if (hash_get_num_entries(ident_name_cache) > 0) + { + hash_seq_init(&status, ident_name_cache); + while ((entry = (IdentNameCacheEntry *) hash_seq_search(&status)) != NULL) + { + const char *key = entry->truncated_name; + int key_len = strlen(key); + const char *found; + const char *search_msg = result ? result : msg; + + /* Replace all occurrences of this key in the message */ + found = strstr(search_msg, key); + while (found) + { + int prefix_len = found - search_msg; + int orig_len = strlen(entry->original_name); + int suffix_len = strlen(found + key_len); + char *newmsg = MemoryContextAlloc(TopMemoryContext, + prefix_len + orig_len + suffix_len + 1); + char *oldresult = result; + + memcpy(newmsg, search_msg, prefix_len); + memcpy(newmsg + prefix_len, entry->original_name, orig_len); + memcpy(newmsg + prefix_len + orig_len, found + key_len, suffix_len + 1); + + if (oldresult) + pfree(oldresult); + + result = newmsg; + search_msg = newmsg; + found = strstr(search_msg + prefix_len + orig_len, key); + } + } + } + + /* Validate UTF-8 before returning — avoid crashing the TDS layer */ + if (result) + { + const unsigned char *p = (const unsigned char *) result; + while (*p) + { + if (*p >= 0x80) + { + if ((*p & 0xE0) == 0xC0) + { + if ((p[1] & 0xC0) != 0x80) goto invalid; + p += 2; + } + else if ((*p & 0xF0) == 0xE0) + { + if ((p[1] & 0xC0) != 0x80 || (p[2] & 0xC0) != 0x80) goto invalid; + p += 3; + } + else if ((*p & 0xF8) == 0xF0) + { + if ((p[1] & 0xC0) != 0x80 || (p[2] & 0xC0) != 0x80 || (p[3] & 0xC0) != 0x80) goto invalid; + p += 4; + } + else + goto invalid; + } + else + p++; + } + } + + return result; + +invalid: + pfree(result); + return NULL; +} + PG_FUNCTION_INFO_V1(init_catalog); Datum init_catalog(PG_FUNCTION_ARGS) @@ -235,6 +540,10 @@ init_catalog(PG_FUNCTION_ARGS) bbf_function_ext_oid = get_relname_relid(BBF_FUNCTION_EXT_TABLE_NAME, sys_schema_oid); bbf_function_ext_idx_oid = get_relname_relid(BBF_FUNCTION_EXT_IDX_NAME, sys_schema_oid); + /* bbf_ident_mapping */ + bbf_ident_mapping_oid = get_relname_relid(BBF_IDENT_MAPPING_TABLE_NAME, sys_schema_oid); + bbf_ident_mapping_idx_oid = get_relname_relid(BBF_IDENT_MAPPING_IDX_NAME, sys_schema_oid); + /* user ext */ bbf_authid_user_ext_oid = get_relname_relid(BBF_AUTHID_USER_EXT_TABLE_NAME, sys_schema_oid); @@ -252,6 +561,8 @@ init_catalog(PG_FUNCTION_ARGS) my_cacheinfo[3].indoid = namespace_ext_idx_oid_oid; my_cacheinfo[4].reloid = bbf_authid_user_ext_oid; my_cacheinfo[4].indoid = bbf_authid_user_ext_idx_oid; + my_cacheinfo[5].reloid = bbf_ident_mapping_oid; + my_cacheinfo[5].indoid = bbf_ident_mapping_idx_oid; /* login ext */ bbf_authid_login_ext_oid = get_relname_relid(BBF_AUTHID_LOGIN_EXT_TABLE_NAME, @@ -317,7 +628,7 @@ initTsqlSyscache() /* Initialize info for catcache */ if (!tsql_syscache_inited) { - InitExtensionCatalogCache(my_cacheinfo, SYSDATABASEOID, 5); + InitExtensionCatalogCache(my_cacheinfo, SYSDATABASEOID, 6); tsql_syscache_inited = true; } } @@ -343,7 +654,7 @@ IsPLtsqlExtendedCatalog(Oid relationId) relationId == bbf_syslanguages_oid || relationId == bbf_service_settings_oid || relationId == spt_datatype_info_table_oid || relationId == bbf_versions_oid || relationId == bbf_partition_function_oid || relationId == bbf_partition_scheme_oid || - relationId == bbf_partition_depend_oid)) + relationId == bbf_partition_depend_oid || relationId == bbf_ident_mapping_oid)) return true; if (PrevIsExtendedCatalogHook) return (*PrevIsExtendedCatalogHook) (relationId); @@ -398,8 +709,21 @@ get_db_id(const char *dbname) int16 db_id = 0; HeapTuple tuple; Form_sysdatabases sysdb; + char *dbname_lower = downcase_identifier(dbname, strlen(dbname), false, false); - tuple = SearchSysCache1(SYSDATABASENAME, CStringGetTextDatum(dbname)); + tuple = SearchSysCache1(SYSDATABASENAME, CStringGetTextDatum(dbname_lower)); + + if (!HeapTupleIsValid(tuple)) + { + /* For long names, the input might be the original name. + * Truncate with MD5 hash to match the stored key. */ + if (strlen(dbname_lower) >= NAMEDATALEN - 1) + { + char *truncated = pstrdup(dbname_lower); + truncate_tsql_identifier(truncated); + tuple = SearchSysCache1(SYSDATABASENAME, CStringGetTextDatum(truncated)); + } + } if (!HeapTupleIsValid(tuple)) return InvalidDbid; @@ -415,7 +739,7 @@ char * get_db_name(int16 dbid) { HeapTuple tuple; - Datum name_datum; + Datum datum; char *name = NULL; bool isNull; @@ -424,13 +748,132 @@ get_db_name(int16 dbid) if (!HeapTupleIsValid(tuple)) return NULL; - name_datum = SysCacheGetAttr(SYSDATABASEOID, tuple, Anum_sysdatabases_name, &isNull); - name = TextDatumGetCString(name_datum); + datum = SysCacheGetAttr(SYSDATABASEOID, tuple, Anum_sysdatabases_name, &isNull); + name = TextDatumGetCString(datum); ReleaseSysCache(tuple); return name; } +char * +dbid_get_original_db_name(int16 dbid) +{ + HeapTuple tuple; + Datum datum; + bool isNull; + char *name; + + tuple = SearchSysCache1(SYSDATABASEOID, Int16GetDatum(dbid)); + if (!HeapTupleIsValid(tuple)) + return NULL; + + /* Guard against old tuples that don't have orig_name yet (after pg_upgrade) */ + if (HeapTupleHeaderGetNatts(tuple->t_data) < Anum_sysdatabases_orig_name) + { + ReleaseSysCache(tuple); + return NULL; + } + + datum = SysCacheGetAttr(SYSDATABASEOID, tuple, Anum_sysdatabases_orig_name, &isNull); + if (isNull) + { + ReleaseSysCache(tuple); + return NULL; + } + + name = TextDatumGetCString(datum); + ReleaseSysCache(tuple); + return name; +} + +char * +dbname_get_original_db_name(const char *db_name) +{ + int16 dbid = get_db_id(db_name); + if (!DbidIsValid(dbid)) + return NULL; + return dbid_get_original_db_name(dbid); +} + +/* + * Hook implementation: resolve truncated constraint name from + * babelfish_identifier_mapping and return lowercased original. + */ +const char * +bbf_get_original_constraint_name(const char *conname) +{ + const char *orig; + + if (!conname || strlen(conname) < NAMEDATALEN - 1) + return conname; + + /* Check babelfish_identifier_mapping (constraints, parameters, sequences) */ + orig = lookup_ident_from_catalog_by_name(conname); + if (orig) + { + char *lower = downcase_identifier(orig, strlen(orig), false, false); + return lower; + } + + return conname; +} + +/* + * Look up original index name from pg_class.reloptions (bbf_original_rel_name). + * Used by nbtinsert.c hook for unique index violations. + */ +const char * +bbf_get_original_index_name(const char *idxname) +{ + HeapTuple tp; + Relation rel; + + if (!idxname || strlen(idxname) < NAMEDATALEN - 1) + return idxname; + + rel = table_open(RelationRelationId, AccessShareLock); + { + ScanKeyData skey[1]; + TableScanDesc scan; + + ScanKeyInit(&skey[0], Anum_pg_class_relname, + BTEqualStrategyNumber, F_NAMEEQ, + CStringGetDatum(idxname)); + scan = table_beginscan_catalog(rel, 1, skey); + tp = heap_getnext(scan, ForwardScanDirection); + if (HeapTupleIsValid(tp)) + { + bool isnull; + Datum opts = heap_getattr(tp, Anum_pg_class_reloptions, + RelationGetDescr(rel), &isnull); + if (!isnull) + { + ArrayType *arr = DatumGetArrayTypeP(opts); + int n = ARR_DIMS(arr)[0]; + Datum *elems; + int i; + + deconstruct_array(arr, TEXTOID, -1, false, TYPALIGN_INT, &elems, NULL, &n); + for (i = 0; i < n; i++) + { + char *s = TextDatumGetCString(elems[i]); + if (strncmp(s, "bbf_original_rel_name=", 22) == 0) + { + char *lower = downcase_identifier(s + 22, strlen(s + 22), false, false); + table_endscan(scan); + table_close(rel, AccessShareLock); + return lower; + } + } + } + } + table_endscan(scan); + } + table_close(rel, AccessShareLock); + + return idxname; +} + const char * get_one_user_db_name(void) { @@ -553,6 +996,9 @@ babelfish_helpdb(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_DATABASE), errmsg("The database '%s' does not exist. Supply a valid database name. To see available databases, use sys.databases.", dbname))); + /* Truncate for scan key - the index is on the truncated name */ + if (strlen(dbname_lower) >= NAMEDATALEN - 1) + truncate_tsql_identifier(dbname_lower); ScanKeyInit(&scanKey, Anum_sysdatabases_name, BTEqualStrategyNumber, F_TEXTEQ, @@ -584,7 +1030,7 @@ babelfish_helpdb(PG_FUNCTION_ARGS) MemSet(nulls, 0, sizeof(nulls)); - db_name_entry = TextDatumGetCString(heap_getattr(tuple, Anum_sysdatabases_name, + db_name_entry = TextDatumGetCString(heap_getattr(tuple, Anum_sysdatabases_orig_name, RelationGetDescr(rel), &isNull)); values[0] = CStringGetTextDatum(db_name_entry); @@ -1604,6 +2050,261 @@ clean_up_bbf_function_ext(int16 dbid) table_close(bbf_function_ext_rel, RowExclusiveLock); } +/***************************************** + * TRUNCATED IDENTIFIER helpers + *****************************************/ + +Oid +get_bbf_ident_mapping_oid(void) +{ + if (!OidIsValid(bbf_ident_mapping_oid)) + bbf_ident_mapping_oid = get_relname_relid(BBF_IDENT_MAPPING_TABLE_NAME, + get_namespace_oid("sys", false)); + return bbf_ident_mapping_oid; +} + +Oid +get_bbf_ident_mapping_idx_oid(void) +{ + if (!OidIsValid(bbf_ident_mapping_idx_oid)) + bbf_ident_mapping_idx_oid = get_relname_relid(BBF_IDENT_MAPPING_IDX_NAME, + get_namespace_oid("sys", false)); + return bbf_ident_mapping_idx_oid; +} + +/* + * insert_bbf_ident_mapping - Insert an entry mapping truncated name + * to its original name. Only inserts if original name exceeds NAMEDATALEN-1 bytes. + */ +void +insert_bbf_ident_mapping(const char *truncated_name, + const char *original_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name) +{ + Relation rel; + HeapTuple tuple; + Datum values[BBF_IDENT_MAPPING_NUM_COLS]; + bool nulls[BBF_IDENT_MAPPING_NUM_COLS]; + NameData truncated_namedata; + NameData nspname_data; + NameData parent_namedata; + + /* Only store if the original name was actually truncated */ + if (strlen(original_name) < NAMEDATALEN) + return; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return; + + /* Skip if entry already exists */ + { + char *existing = lookup_bbf_ident_mapping(truncated_name, nspname, + pg_catalog_type, parent_name); + if (existing) + { + pfree(existing); + return; + } + } + + rel = table_open(get_bbf_ident_mapping_oid(), RowExclusiveLock); + + MemSet(nulls, false, sizeof(nulls)); + + namestrcpy(&nspname_data, nspname); + namestrcpy(&truncated_namedata, truncated_name); + namestrcpy(&parent_namedata, parent_name ? parent_name : ""); + + values[Anum_bbf_ident_mapping_nspname - 1] = NameGetDatum(&nspname_data); + values[Anum_bbf_ident_mapping_pg_catalog_type - 1] = ObjectIdGetDatum(pg_catalog_type); + values[Anum_bbf_ident_mapping_truncated_name - 1] = NameGetDatum(&truncated_namedata); + values[Anum_bbf_ident_mapping_original_name - 1] = CStringGetTextDatum(original_name); + values[Anum_bbf_ident_mapping_parent_name - 1] = NameGetDatum(&parent_namedata); + + tuple = heap_form_tuple(RelationGetDescr(rel), values, nulls); + CatalogTupleInsert(rel, tuple); + + heap_freetuple(tuple); + table_close(rel, RowExclusiveLock); + + CommandCounterIncrement(); +} + +/* + * lookup_bbf_ident_mapping - Look up the original name for a truncated identifier. + * Returns a palloc'd string, or NULL if not found. + */ +char * +lookup_bbf_ident_mapping(const char *truncated_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name) +{ + HeapTuple tuple; + char *result = NULL; + NameData truncated_namedata; + NameData nspname_data; + NameData parent_namedata; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return NULL; + + namestrcpy(&truncated_namedata, truncated_name); + namestrcpy(&nspname_data, nspname); + namestrcpy(&parent_namedata, parent_name ? parent_name : ""); + + tuple = SearchSysCache4(IDENTMAPPINGNAME, + NameGetDatum(&truncated_namedata), + NameGetDatum(&nspname_data), + ObjectIdGetDatum(pg_catalog_type), + NameGetDatum(&parent_namedata)); + + if (HeapTupleIsValid(tuple)) + { + bool isNull; + Datum datum; + Relation rel; + + rel = table_open(get_bbf_ident_mapping_oid(), AccessShareLock); + datum = heap_getattr(tuple, Anum_bbf_ident_mapping_original_name, + RelationGetDescr(rel), &isNull); + if (!isNull) + result = TextDatumGetCString(datum); + table_close(rel, AccessShareLock); + ReleaseSysCache(tuple); + } + + return result; +} + +/* + * delete_bbf_ident_mapping - Delete a single catalog entry. + */ +void +delete_bbf_ident_mapping(const char *truncated_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name) +{ + Relation rel; + HeapTuple tuple; + NameData truncated_namedata; + NameData nspname_data; + NameData parent_namedata; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return; + + namestrcpy(&truncated_namedata, truncated_name); + namestrcpy(&nspname_data, nspname); + namestrcpy(&parent_namedata, parent_name ? parent_name : ""); + + tuple = SearchSysCache4(IDENTMAPPINGNAME, + NameGetDatum(&truncated_namedata), + NameGetDatum(&nspname_data), + ObjectIdGetDatum(pg_catalog_type), + NameGetDatum(&parent_namedata)); + + if (HeapTupleIsValid(tuple)) + { + rel = table_open(get_bbf_ident_mapping_oid(), RowExclusiveLock); + CatalogTupleDelete(rel, &tuple->t_self); + table_close(rel, RowExclusiveLock); + ReleaseSysCache(tuple); + } +} + +/* + * delete_bbf_ident_mapping_by_parent - Delete all entries matching + * nspname + pg_catalog_type + parent_name. Used when dropping a parent + * object (e.g., all constraints of a table). + */ +void +delete_bbf_ident_mapping_by_parent(const char *nspname, + Oid pg_catalog_type, + const char *parent_name) +{ + Relation rel; + TableScanDesc scan; + HeapTuple tuple; + NameData nspname_data; + NameData parent_namedata; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return; + + namestrcpy(&nspname_data, nspname); + namestrcpy(&parent_namedata, parent_name ? parent_name : ""); + + rel = table_open(get_bbf_ident_mapping_oid(), RowExclusiveLock); + + scan = table_beginscan_catalog(rel, 0, NULL); + + while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) + { + bool isNull; + Datum d_nsp, d_type, d_parent; + + d_nsp = heap_getattr(tuple, Anum_bbf_ident_mapping_nspname, + RelationGetDescr(rel), &isNull); + if (isNull || strcmp(NameStr(*DatumGetName(d_nsp)), nspname_data.data) != 0) + continue; + + d_type = heap_getattr(tuple, Anum_bbf_ident_mapping_pg_catalog_type, + RelationGetDescr(rel), &isNull); + if (isNull || DatumGetObjectId(d_type) != pg_catalog_type) + continue; + + d_parent = heap_getattr(tuple, Anum_bbf_ident_mapping_parent_name, + RelationGetDescr(rel), &isNull); + if (isNull || strcmp(NameStr(*DatumGetName(d_parent)), parent_namedata.data) != 0) + continue; + + CatalogTupleDelete(rel, &tuple->t_self); + } + + table_endscan(scan); + table_close(rel, RowExclusiveLock); +} + +/* + * clean_up_bbf_ident_mapping - Remove all entries for a given nspname. + * Used during DROP SCHEMA / DROP DATABASE. + */ +void +clean_up_bbf_ident_mapping(const char *nspname) +{ + Relation rel; + TableScanDesc scan; + ScanKeyData scanKey[1]; + HeapTuple tuple; + NameData nspname_data; + + if (!OidIsValid(get_bbf_ident_mapping_oid())) + return; + + namestrcpy(&nspname_data, nspname); + + rel = table_open(get_bbf_ident_mapping_oid(), RowExclusiveLock); + + ScanKeyInit(&scanKey[0], + Anum_bbf_ident_mapping_nspname, + BTEqualStrategyNumber, F_NAMEEQ, + NameGetDatum(&nspname_data)); + + scan = table_beginscan_catalog(rel, 1, scanKey); + + while ((tuple = heap_getnext(scan, ForwardScanDirection)) != NULL) + { + CatalogTupleDelete(rel, &tuple->t_self); + } + + table_endscan(scan); + table_close(rel, RowExclusiveLock); +} + /* * Look up the RECOMPILE flag in the extended catalog * This is called for every procedure execution so overhead should be minimized. @@ -2506,9 +3207,9 @@ get_name_db_owner(HeapTuple tuple, TupleDesc dsc) char *name_str = text_to_cstring(name); char *name_db_owner = palloc0(MAX_BBF_NAMEDATALEND); - truncate_identifier(name_str, strlen(name_str), false); + truncate_tsql_identifier(name_str); snprintf(name_db_owner, MAX_BBF_NAMEDATALEND, "%s_db_owner", name_str); - truncate_identifier(name_db_owner, strlen(name_db_owner), false); + truncate_tsql_identifier(name_db_owner); return CStringGetDatum(name_db_owner); } @@ -2520,9 +3221,9 @@ get_name_dbo(HeapTuple tuple, TupleDesc dsc) char *name_str = text_to_cstring(name); char *name_dbo = palloc0(MAX_BBF_NAMEDATALEND); - truncate_identifier(name_str, strlen(name_str), false); + truncate_tsql_identifier(name_str); snprintf(name_dbo, MAX_BBF_NAMEDATALEND, "%s_dbo", name_str); - truncate_identifier(name_dbo, strlen(name_dbo), false); + truncate_tsql_identifier(name_dbo); return CStringGetDatum(name_dbo); } @@ -2534,9 +3235,9 @@ get_name_guest(HeapTuple tuple, TupleDesc dsc) char *name_str = text_to_cstring(name); char *name_dbo = palloc0(MAX_BBF_NAMEDATALEND); - truncate_identifier(name_str, strlen(name_str), false); + truncate_tsql_identifier(name_str); snprintf(name_dbo, MAX_BBF_NAMEDATALEND, "%s_guest", name_str); - truncate_identifier(name_dbo, strlen(name_dbo), false); + truncate_tsql_identifier(name_dbo); return CStringGetDatum(name_dbo); } @@ -3372,10 +4073,24 @@ rename_update_bbf_catalog(RenameStmt *stmt) rename_object_update_bbf_schema_permission_catalog(stmt, stmt->renameType); break; case OBJECT_SEQUENCE: + /* Remove old entry from babelfish_identifier_mapping */ + if (stmt->relation && stmt->relation->schemaname) + delete_bbf_ident_mapping(stmt->relation->relname, + stmt->relation->schemaname, + RelationRelationId, NULL); break; case OBJECT_TRIGGER: break; case OBJECT_TYPE: + /* Remove old entry from babelfish_identifier_mapping */ + if (stmt->object) + { + List *names = (List *) stmt->object; + if (list_length(names) >= 2) + delete_bbf_ident_mapping(strVal(lsecond(names)), + strVal(linitial(names)), + TypeRelationId, NULL); + } break; case OBJECT_COLUMN: break; @@ -4776,7 +5491,9 @@ update_sysdatabases_db_name(const char *old_db_name, const char *new_db_name) /* Set up the new database. */ values[Anum_sysdatabases_name - 1] = CStringGetTextDatum(new_db_name); - replaces[Anum_sysdatabases_name - 1] = true; + replaces[Anum_sysdatabases_name - 1] = true; + values[Anum_sysdatabases_orig_name - 1] = CStringGetTextDatum(new_db_name); + replaces[Anum_sysdatabases_orig_name - 1] = true; tuple = heap_modify_tuple(db_found, sysdatabases_rel_descr, diff --git a/contrib/babelfishpg_tsql/src/catalog.h b/contrib/babelfishpg_tsql/src/catalog.h index b51458bf35d..f5fb5f07a3e 100644 --- a/contrib/babelfishpg_tsql/src/catalog.h +++ b/contrib/babelfishpg_tsql/src/catalog.h @@ -47,11 +47,12 @@ extern Oid sysdatabaese_idx_oid_oid; extern Oid sysdatabaese_idx_name_oid; /* MUST comply with babelfish_sysdatabases table */ -#define SYSDATABASES_NUM_COLS 8 +#define SYSDATABASES_NUM_COLS 9 #define Anum_sysdatabases_oid 1 #define Anum_sysdatabases_owner 4 #define Anum_sysdatabases_name 6 #define Anum_sysdatabases_crdate 7 +#define Anum_sysdatabases_orig_name 9 /* MUST comply with babelfish_sysdatabases table */ typedef struct FormData_sysdatabases @@ -92,6 +93,10 @@ typedef FormData_authid_login_ext *Form_authid_login_ext; extern int16 get_db_id(const char *dbname); extern char *get_db_name(int16 dbid); +extern char *dbid_get_original_db_name(int16 dbid); +extern char *dbname_get_original_db_name(const char *db_name); +extern const char *bbf_get_original_constraint_name(const char *conname); +extern const char *bbf_get_original_index_name(const char *idxname); extern char *get_db_owner_role_name(const char *dbname); extern void initTsqlSyscache(void); extern const char *get_one_user_db_name(void); @@ -116,6 +121,55 @@ extern int namespace_ext_num_cols; extern const char *get_logical_schema_name(const char *physical_schema_name, bool missingOk); extern int16 get_dbid_from_physical_schema_name(const char *physical_schema_name, bool missingOk); +/***************************************** + * TRUNCATED_IDENTIFIER + *****************************************/ +#define BBF_IDENT_MAPPING_TABLE_NAME "babelfish_identifier_mapping" +#define BBF_IDENT_MAPPING_IDX_NAME "babelfish_identifier_mapping_pkey" +#define BBF_IDENT_MAPPING_NUM_COLS 5 +#define Anum_bbf_ident_mapping_nspname 1 +#define Anum_bbf_ident_mapping_pg_catalog_type 2 +#define Anum_bbf_ident_mapping_truncated_name 3 +#define Anum_bbf_ident_mapping_original_name 4 +#define Anum_bbf_ident_mapping_parent_name 5 + +extern Oid bbf_ident_mapping_oid; +extern Oid bbf_ident_mapping_idx_oid; + +extern Oid get_bbf_ident_mapping_oid(void); +extern Oid get_bbf_ident_mapping_idx_oid(void); + +typedef struct IdentNameCacheEntry +{ + char truncated_name[NAMEDATALEN]; + char original_name[256]; +} IdentNameCacheEntry; + +extern void bbf_cache_ident_name(const char *truncated_name, const char *original_name); +extern void bbf_cache_index_name(const char *internal_name, const char *index_name); +extern const char *bbf_lookup_ident_name(const char *truncated_name); +extern void bbf_reset_ident_name_cache(void); +extern int bbf_snapshot_ident_cache(IdentNameCacheEntry **entries, MemoryContext cxt); +extern void bbf_restore_ident_cache(IdentNameCacheEntry *entries, int n); +extern char *bbf_rewrite_truncated_identifiers(const char *msg); +extern void insert_bbf_ident_mapping(const char *truncated_name, + const char *original_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name); +extern char *lookup_bbf_ident_mapping(const char *truncated_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name); +extern void delete_bbf_ident_mapping(const char *truncated_name, + const char *nspname, + Oid pg_catalog_type, + const char *parent_name); +extern void delete_bbf_ident_mapping_by_parent(const char *nspname, + Oid pg_catalog_type, + const char *parent_name); +extern void clean_up_bbf_ident_mapping(const char *nspname); + /***************************************** * LOGIN EXT *****************************************/ diff --git a/contrib/babelfishpg_tsql/src/dbcmds.c b/contrib/babelfishpg_tsql/src/dbcmds.c index 3d2be47abb3..6d084de328b 100644 --- a/contrib/babelfishpg_tsql/src/dbcmds.c +++ b/contrib/babelfishpg_tsql/src/dbcmds.c @@ -618,6 +618,7 @@ create_bbf_db_internal(ParseState *pstate, const char *dbname, List *options, co const char *old_createrole_self_grant; ListCell *option; const char *database_collation_name = NULL; + const char *orig_dbname = NULL; /* Check options */ foreach(option, options) @@ -629,6 +630,10 @@ create_bbf_db_internal(ParseState *pstate, const char *dbname, List *options, co database_collation_name = tsql_translate_tsql_collation_to_bbf_collation(defGetString(defel)); check_database_collation_name(database_collation_name); } + else if (strcmp(defel->defname, "bbf_original_name") == 0) + { + orig_dbname = defGetString(defel); + } else { ereport(ERROR, @@ -701,6 +706,10 @@ create_bbf_db_internal(ParseState *pstate, const char *dbname, List *options, co new_record[5] = CStringGetTextDatum(dbname); new_record[6] = TimestampGetDatum(GetSQLLocalTimestamp(0)); new_record[7] = CStringGetTextDatum("{}"); + if (orig_dbname) + new_record[8] = CStringGetTextDatum(orig_dbname); + else + new_record[8] = CStringGetTextDatum(dbname); tuple = heap_form_tuple(RelationGetDescr(sysdatabase_rel), new_record, new_record_nulls); diff --git a/contrib/babelfishpg_tsql/src/hooks.c b/contrib/babelfishpg_tsql/src/hooks.c index ea035176b7a..21667c4a3ef 100644 --- a/contrib/babelfishpg_tsql/src/hooks.c +++ b/contrib/babelfishpg_tsql/src/hooks.c @@ -179,7 +179,7 @@ static void check_insert_row(List *icolumns, List *exprList, Oid relid); static void pltsql_post_transform_column_definition(ParseState *pstate, RangeVar *relation, ColumnDef *column, List **alist); static void pltsql_post_transform_table_definition(ParseState *pstate, RangeVar *relation, char *relname, List **alist); static void pre_transform_target_entry(ResTarget *res, ParseState *pstate, ParseExprKind exprKind); -static bool tle_name_comparison(const char *tlename, const char *identifier); +static bool tle_name_comparison(const char *tlename, const char *identifier, const char *sourcetext, int location); static void resolve_target_list_unknowns(ParseState *pstate, List *targetlist); static inline bool is_identifier_char(unsigned char c); static int find_attr_by_name_from_relation(Relation rd, const char *attname, bool sysColOK); @@ -821,6 +821,62 @@ pltsql_bbfCustomProcessUtility(ParseState *pstate, PlannedStmt *pstmt, const cha } break; } + case T_IndexStmt: + { + if (sql_dialect == SQL_DIALECT_TSQL) + { + IndexStmt *idx = (IndexStmt *) parsetree; + if (idx->idxname && idx->options) + { + ListCell *lc; + foreach(lc, idx->options) + { + DefElem *defel = (DefElem *) lfirst(lc); + if (strcmp(defel->defname, "bbf_original_name_location") == 0) + { + int loc = intVal(defel->arg); + if (loc >= 0 && queryString && strlen(idx->idxname) >= NAMEDATALEN - 1) + { + char *orig = extract_identifier(queryString + loc, NULL); + if (orig && strlen(orig) >= NAMEDATALEN) + bbf_cache_ident_name(idx->idxname, orig); + } + idx->options = foreach_delete_current(idx->options, lc); + break; + } + } + } + } + return false; + } + case T_AlterTableStmt: + { + if (sql_dialect != SQL_DIALECT_TSQL && !IsBinaryUpgrade && !babelfish_dump_restore) + { + AlterTableStmt *atstmt = (AlterTableStmt *) parsetree; + ListCell *lcmd; + + foreach(lcmd, atstmt->cmds) + { + AlterTableCmd *cmd = (AlterTableCmd *) lfirst(lcmd); + if (cmd->subtype == AT_SetRelOptions || cmd->subtype == AT_SetOptions) + { + List *options = (List *) cmd->def; + ListCell *lopt; + foreach(lopt, options) + { + DefElem *defel = (DefElem *) lfirst(lopt); + if (strcmp(defel->defname, "bbf_original_rel_name") == 0 || + strcmp(defel->defname, "bbf_original_name") == 0) + ereport(ERROR, + (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), + errmsg("cannot modify \"%s\" for babelfish objects", defel->defname))); + } + } + } + } + return false; + } default: return false; break; @@ -2392,7 +2448,7 @@ extract_identifier(const char *start, int *last_pos) * is given as 'start'. This helper function basically returns the * last part of the multipart identifier. */ -static char * +char * extract_multipart_identifier_name(const char *start) { int identifier_len = strlen(start); @@ -2508,9 +2564,11 @@ pltsql_post_transform_table_definition(ParseState *pstate, RangeVar *relation, c /* * Only store original_name if there's a difference, and if the difference - * is only in capitalization + * is only in capitalization, OR if the name was truncated */ - if (strncmp(relname, original_name, strlen(relname)) != 0 && strncasecmp(relname, original_name, strlen(relname)) == 0) + if (strlen(original_name) >= NAMEDATALEN || + (strncmp(relname, original_name, strlen(relname)) != 0 && + strncasecmp(relname, original_name, strlen(relname)) == 0)) { /* * add "ALTER TABLE SET (bbf_original_table_name=)" to @@ -2854,19 +2912,11 @@ pre_transform_target_entry(ResTarget *res, ParseState *pstate, */ if (actual_alias_len >= NAMEDATALEN) { - /* Sanity checks */ - Assert(actual_alias_len > alias_len && alias_len >= 32); - - /* First 32 characters of original_name are assigned to alias. */ - /* cppcheck-suppress invalidFunctionArg */ - memcpy(alias, original_name, (alias_len - 32)); - - /* Last 32 characters of identifier_name are assigned to alias, as actual alias is truncated. */ - memcpy(alias + (alias_len - 32), - identifier_name + (alias_len - 32), - 32); - - alias[alias_len] = '\0'; + /* Use the full original name for TDS client display */ + pfree(alias); + alias = palloc0(actual_alias_len + 1); + memcpy(alias, original_name, actual_alias_len); + alias[actual_alias_len] = '\0'; } else { @@ -2884,6 +2934,13 @@ pre_transform_target_entry(ResTarget *res, ParseState *pstate, } } res->name = alias; + + /* Validate UTF-8 — fall back to identifier_name if invalid */ + if (!pg_verifymbstr(alias, strlen(alias), true)) + { + pfree(alias); + res->name = pstrdup(identifier_name); + } } } /* Update table set qualified column name, resolve qualifiers here */ @@ -3104,23 +3161,46 @@ pre_transform_target_entry(ResTarget *res, ParseState *pstate, } static bool -tle_name_comparison(const char *tlename, const char *identifier) +tle_name_comparison(const char *tlename, const char *identifier, const char *sourcetext, int location) { if (sql_dialect == SQL_DIALECT_TSQL) { int tlelen = strlen(tlename); + int identlen = strlen(identifier); - if (tlelen != strlen(identifier)) - return false; + if (tlelen == identlen) + { + if (pltsql_case_insensitive_identifiers) + return (0 == strcmp(downcase_identifier(tlename, tlelen, false, false), + downcase_identifier(identifier, identlen, false, false))); + else + return (0 == strcmp(tlename, identifier)); + } - if (pltsql_case_insensitive_identifiers) - return (0 == strcmp(downcase_identifier(tlename, tlelen, false, false), - downcase_identifier(identifier, tlelen, false, false))); - else - return (0 == strcmp(tlename, identifier)); + /* + * Handle long aliases: extract full name from source text + * and compare with tlename. + */ + if (tlelen > identlen && identlen >= NAMEDATALEN - 1 && + sourcetext && location >= 0) + { + char *full_ident = extract_identifier(sourcetext + location, NULL); + if (full_ident) + { + bool match; + if (pltsql_case_insensitive_identifiers) + match = (0 == pg_strcasecmp(full_ident, tlename)); + else + match = (0 == strcmp(full_ident, tlename)); + pfree(full_ident); + return match; + } + } + + return false; } else if (prev_tle_name_comparison_hook) - return (*prev_tle_name_comparison_hook) (tlename, identifier); + return (*prev_tle_name_comparison_hook) (tlename, identifier, sourcetext, location); else return (0 == strcmp(tlename, identifier)); } @@ -3493,16 +3573,18 @@ pltsql_report_proc_not_found_error(List *names, List *fargs, List *given_argname } if (!has_default) + { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION), - errmsg("%s %s expects parameter \"%s\", which was not supplied.", obj_type, NameListToString(names), p_argnames[pp])), + errmsg("%s %s expects parameter \"%s\", which was not supplied.", obj_type, NameListToString(names), bbf_get_original_constraint_name(p_argnames[pp]))), parser_errposition(pstate, location)); + } } else if (pp < first_arg_with_default) { ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION), - errmsg("%s %s expects parameter \"%s\", which was not supplied.", obj_type, NameListToString(names), p_argnames[pp])), + errmsg("%s %s expects parameter \"%s\", which was not supplied.", obj_type, NameListToString(names), bbf_get_original_constraint_name(p_argnames[pp]))), parser_errposition(pstate, location)); } } @@ -4237,6 +4319,10 @@ is_antlr_parse_cache_enabled_for_routine(HeapTuple proctup, HeapTuple bbftup) if (!HeapTupleIsValid(bbftup)) return pltsql_enable_antlr_parse_cache; + /* Guard against old tuples that don't have this column yet (e.g. after pg_upgrade) */ + if (HeapTupleHeaderGetNatts(bbftup->t_data) < Anum_bbf_function_ext_antlr_parse_cache_enabled) + return pltsql_enable_antlr_parse_cache; + cache_flag = SysCacheGetAttr(PROCNAMENSPSIGNATURE, bbftup, Anum_bbf_function_ext_antlr_parse_cache_enabled, &isnull); @@ -4489,6 +4575,30 @@ pltsql_store_func_default_positions(ObjectAddress address, List *parameters, con recordDependencyOn(&address, &index, DEPENDENCY_NORMAL); } + /* Store long parameter names in babelfish_identifier_mapping */ + if (queryString && physical_schemaname) + { + foreach(x, parameters) + { + FunctionParameter *fp = (FunctionParameter *) lfirst(x); + + if (fp->name && fp->location >= 0) + { + const char *param_start = queryString + fp->location; + char *orig_param = extract_identifier(param_start, NULL); + + if (orig_param) + { + insert_bbf_ident_mapping(fp->name, orig_param, + physical_schemaname, + ProcedureRelationId, + NameStr(form_proctup->proname)); + pfree(orig_param); + } + } + } + } + pfree(func_signature); pfree(physical_schemaname); pfree(schema_name_NameData); @@ -5512,13 +5622,14 @@ replace_pltsql_function_defaults(HeapTuple func_tuple, List *defaults, List *far } if (!has_default) { + arg_names = fetch_func_input_arg_names(func_tuple); if (proc_form->prokind == PROKIND_PROCEDURE) ereport(ERROR, (errcode(ERRCODE_UNDEFINED_FUNCTION), errmsg("Procedure or function \'%s\' expects parameter \'%s\', which was not supplied.", - NameStr(proc_form->proname), arg_names[i]))); + NameStr(proc_form->proname), bbf_get_original_constraint_name(arg_names[i])))); } ++i; } diff --git a/contrib/babelfishpg_tsql/src/multidb.c b/contrib/babelfishpg_tsql/src/multidb.c index efa4cbff0ad..95b1de18b68 100644 --- a/contrib/babelfishpg_tsql/src/multidb.c +++ b/contrib/babelfishpg_tsql/src/multidb.c @@ -1265,6 +1265,20 @@ get_physical_schema_name_by_mode(char *db_name, const char *schema_name, Migrati } truncate_tsql_identifier(result); + + /* Cache for error messages - with and without db prefix */ + { + const char *orig = bbf_lookup_ident_name(name); + const char *val = orig ? orig : schema_name; + bbf_cache_ident_name(result, val); + /* Also cache without db prefix for PG errors that strip it */ + { + int db_len = strlen(db_name); + if (strncmp(result, db_name, db_len) == 0 && result[db_len] == '_') + bbf_cache_ident_name(result + db_len + 1, val); + } + } + pfree(name); return result; @@ -1336,6 +1350,13 @@ get_physical_user_name(char *db_name, char *user_name, bool suppress_db_error, b /* Truncate final result to 64 bytes */ truncate_tsql_identifier(result); + /* Cache for error messages - with and without db prefix */ + { + const char *orig = bbf_lookup_ident_name(new_user_name); + const char *val = orig ? orig : user_name; + bbf_cache_ident_name(result, val); + } + /* * If the user or role is not found in the sys.babelfish_authid_user_ext * catalog, then an error is thrown. The 'suppress_role_error' flag indicates if diff --git a/contrib/babelfishpg_tsql/src/pl_comp.c b/contrib/babelfishpg_tsql/src/pl_comp.c index a9f5956133b..f18d365c76c 100644 --- a/contrib/babelfishpg_tsql/src/pl_comp.c +++ b/contrib/babelfishpg_tsql/src/pl_comp.c @@ -1236,6 +1236,10 @@ do_compile(FunctionCallInfo fcinfo, } PG_END_TRY(); + + /* Capture truncated identifier mappings from compilation for use at execution */ + function->n_ident_mappings = bbf_snapshot_ident_cache(&function->ident_mappings, + function->fn_cxt); return function; } diff --git a/contrib/babelfishpg_tsql/src/pl_exec.c b/contrib/babelfishpg_tsql/src/pl_exec.c index e15a9fcdba8..01fa8f03670 100644 --- a/contrib/babelfishpg_tsql/src/pl_exec.c +++ b/contrib/babelfishpg_tsql/src/pl_exec.c @@ -58,6 +58,7 @@ #include "pltsql.h" #include "pltsql_node/pltsql_nodetags.h" /* PLtsql NodeTag values — generated * by gen_pltsql_node_support.pl */ +#include "catalog.h" #include "access/xact.h" #include "err_handler.h" #include "iterative_exec.h" @@ -534,6 +535,10 @@ pltsql_exec_function(PLtsql_function *func, FunctionCallInfo fcinfo, int i; int rc; + /* Restore identifier mappings from prior execution for error messages */ + if (func->n_ident_mappings > 0) + bbf_restore_ident_cache(func->ident_mappings, func->n_ident_mappings); + /* * Setup the execution state */ @@ -949,6 +954,13 @@ pltsql_exec_function(PLtsql_function *func, FunctionCallInfo fcinfo, estate.err_text = gettext_noop("during function exit"); + /* + * Snapshot identifier cache into the function struct after first execution. + * On re-execution, these will be restored so error messages show full names. + */ + if (func->n_ident_mappings == 0) + func->n_ident_mappings = bbf_snapshot_ident_cache(&func->ident_mappings, func->fn_cxt); + /* * Let the instrumentation plugin peek at this function */ diff --git a/contrib/babelfishpg_tsql/src/pl_handler.c b/contrib/babelfishpg_tsql/src/pl_handler.c index 5475d0d49ca..26cb532d4a3 100644 --- a/contrib/babelfishpg_tsql/src/pl_handler.c +++ b/contrib/babelfishpg_tsql/src/pl_handler.c @@ -25,6 +25,7 @@ #include "catalog/namespace.h" #include "catalog/pg_authid.h" #include "catalog/pg_collation.h" +#include "catalog/pg_constraint.h" #include "catalog/pg_depend.h" #include "catalog/pg_language.h" #include "catalog/pg_proc.h" @@ -61,6 +62,7 @@ #include "parser/parse_type.h" #include "parser/parse_utilcmd.h" #include "parser/scansup.h" +#include "executor/executor.h" #include "pgstat.h" /* for pgstat related activities */ #include "tcop/pquery.h" #include "tcop/tcopprot.h" @@ -239,6 +241,7 @@ static TargetEntry* buildJsonEntry(int nestLevel, char* tableAlias, TargetEntry* static char *string_to_fixed_hash(const char *input); static void processAutoColumns(Query *wrapperQuery, Query *origQuery, Alias *wrapperRteAlias, ForAutoContext *ctx, ForAutoMode mode); extern const char *ATTOPTION_BBF_ORIGINAL_NAME; +extern const char *ATTOPTION_BBF_ORIGINAL_TABLE_NAME; extern bool pltsql_ansi_defaults; extern bool pltsql_quoted_identifier; extern bool pltsql_concat_null_yields_null; @@ -1019,6 +1022,9 @@ pltsql_pre_parse_analyze(ParseState *pstate, RawStmt *parseTree) Constraint *c = makeNode(Constraint); c->contype = CONSTR_NOTNULL; c->location = -1; + c->is_enforced = true; + c->skip_validation = false; + c->initially_valid = true; def->constraints = lappend(def->constraints, c); } @@ -3164,6 +3170,7 @@ validateUserAndRole(char *name) * CreateFunctionStmt could have elements in the options list that are specific * to tsql, like trigStmt and tbltypStmt. */ + static void bbf_ProcessUtility(PlannedStmt *pstmt, const char *queryString, @@ -3737,9 +3744,74 @@ bbf_ProcessUtility(PlannedStmt *pstmt, pltsql_current_query_is_view_definition = false; } PG_END_TRY(); + + /* + * Store original view name using RangeVar->location if + * the name differs in case from the lowercased version. + */ + if (stmt->view->location >= 0 && queryString && + !babelfish_dump_restore) + { + char *original_name = extract_multipart_identifier_name(queryString + stmt->view->location); + + if (original_name && + (strlen(original_name) >= NAMEDATALEN || + (strncmp(stmt->view->relname, original_name, strlen(stmt->view->relname)) != 0 && + strncasecmp(stmt->view->relname, original_name, strlen(stmt->view->relname)) == 0))) + { + Oid viewOid = RangeVarGetRelid(stmt->view, NoLock, true); + + if (OidIsValid(viewOid)) + { + AlterTableCmd *cmd = makeNode(AlterTableCmd); + cmd->subtype = AT_SetRelOptions; + cmd->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_TABLE_NAME), + (Node *) makeString(pstrdup(original_name)), -1)); + cmd->behavior = DROP_RESTRICT; + cmd->missing_ok = false; + AlterTableInternal(viewOid, list_make1(cmd), false); + CommandCounterIncrement(); + } + } + + if (original_name) + pfree(original_name); + } return; } - break; + + /* Plain CREATE VIEW: execute, then store original name */ + call_prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + + if (sql_dialect == SQL_DIALECT_TSQL && + stmt->view->location >= 0 && queryString && + !babelfish_dump_restore) + { + char *original_name = extract_multipart_identifier_name(queryString + stmt->view->location); + + if (original_name && + (strlen(original_name) >= NAMEDATALEN || + (strncmp(stmt->view->relname, original_name, strlen(stmt->view->relname)) != 0 && + strncasecmp(stmt->view->relname, original_name, strlen(stmt->view->relname)) == 0))) + { + Oid viewOid = RangeVarGetRelid(stmt->view, NoLock, true); + + if (OidIsValid(viewOid)) + { + AlterTableCmd *cmd = makeNode(AlterTableCmd); + cmd->subtype = AT_SetRelOptions; + cmd->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_TABLE_NAME), + (Node *) makeString(pstrdup(original_name)), -1)); + cmd->behavior = DROP_RESTRICT; + cmd->missing_ok = false; + AlterTableInternal(viewOid, list_make1(cmd), false); + CommandCounterIncrement(); + } + } + if (original_name) + pfree(original_name); + } + return; } case T_AlterTableStmt: @@ -3798,6 +3870,66 @@ bbf_ProcessUtility(PlannedStmt *pstmt, { restrict_alter_table_stmt(atstmt); } + + /* Store long constraint names from ALTER TABLE ADD CONSTRAINT */ + if (sql_dialect == SQL_DIALECT_TSQL && queryString) + { + foreach(lc, atstmt->cmds) + { + AlterTableCmd *cmd = (AlterTableCmd *)lfirst(lc); + if (cmd->subtype == AT_AddConstraint && cmd->def) + { + Constraint *con = (Constraint *) cmd->def; + if (con->conname && strlen(con->conname) >= NAMEDATALEN - 1 && + con->location >= 0) + { + /* con->location points to CONSTRAINT keyword; skip to name */ + const char *p = queryString + con->location + 10; + char *orig; + while (*p && scanner_isspace(*p)) + p++; /* skip whitespace after CONSTRAINT */ + + orig = extract_identifier(p, NULL); + if (orig && strlen(orig) >= NAMEDATALEN) + { + insert_bbf_ident_mapping(con->conname, orig, + atstmt->relation->schemaname ? atstmt->relation->schemaname : get_physical_schema_name(get_cur_db_name(), "dbo"), + ConstraintRelationId, + atstmt->relation->relname); + + /* UNIQUE/PRIMARY KEY create an index; store original name in reloptions */ + if (con->contype == CONSTR_UNIQUE || con->contype == CONSTR_PRIMARY) + { + call_prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + exec_add_original_index_name(con->conname, atstmt->relation->schemaname, orig); + pfree(orig); + return; + } + pfree(orig); + } + } + } + } + } + + /* Remove entries from babelfish_identifier_mapping on DROP CONSTRAINT */ + if (sql_dialect == SQL_DIALECT_TSQL) + { + foreach(lc, atstmt->cmds) + { + AlterTableCmd *cmd = (AlterTableCmd *)lfirst(lc); + if (cmd->subtype == AT_DropConstraint && cmd->name) + { + if (strlen(cmd->name) >= NAMEDATALEN - 1) + { + const char *nspname = atstmt->relation->schemaname ? + atstmt->relation->schemaname : + get_physical_schema_name(get_cur_db_name(), "dbo"); + delete_bbf_ident_mapping(cmd->name, nspname, ConstraintRelationId, atstmt->relation->relname); + } + } + } + } break; } case T_AlterOwnerStmt: @@ -5113,6 +5245,9 @@ bbf_ProcessUtility(PlannedStmt *pstmt, */ del_ns_ext_info(schemaname, drop_stmt->missing_ok); + /* Clean up truncated identifier entries for this schema */ + clean_up_bbf_ident_mapping(schemaname); + return; } else @@ -5329,6 +5464,72 @@ bbf_ProcessUtility(PlannedStmt *pstmt, } RelationClose(rel); + + /* Store original column names for SELECT INTO (long identifiers) */ + if (IsA(stmt->query, Query)) + { + Query *query = (Query *) stmt->query; + ListCell *lc; + int colno = 0; + Relation rel2; + TupleDesc td; + + CommandCounterIncrement(); + rel2 = RelationIdGetRelation(relid); + td = RelationGetDescr(rel2); + + foreach(lc, query->targetList) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc); + Form_pg_attribute attr; + + if (tle->resjunk) + continue; + + attr = TupleDescAttr(td, colno); + colno++; + + if (tle->resname && strlen(tle->resname) > strlen(NameStr(attr->attname))) + { + AlterTableStmt *atstmt; + AlterTableCmd *cmd; + PlannedStmt *wrapper; + List *parsetree_list; + Node *n; + char *query_str = "ALTER TABLE dummy ALTER COLUMN dummy SET (dummy=dummy)"; + + RelationClose(rel2); + + parsetree_list = raw_parser(query_str, RAW_PARSE_DEFAULT); + n = parsetree_nth_stmt(parsetree_list, 0); + atstmt = castNode(AlterTableStmt, n); + atstmt->relation->relname = get_rel_name(relid); + atstmt->relation->schemaname = get_namespace_name(get_rel_namespace(relid)); + cmd = castNode(AlterTableCmd, linitial(atstmt->cmds)); + cmd->name = NameStr(attr->attname); + cmd->def = (Node *) list_make1( + makeDefElem(pstrdup("bbf_original_name"), + (Node *) makeString(pstrdup(tle->resname)), -1)); + + wrapper = makeNode(PlannedStmt); + wrapper->commandType = CMD_UTILITY; + wrapper->canSetTag = false; + wrapper->utilityStmt = (Node *) atstmt; + wrapper->stmt_location = -1; + wrapper->stmt_len = 0; + + ProcessUtility(wrapper, query_str, false, + PROCESS_UTILITY_SUBCOMMAND, NULL, NULL, + None_Receiver, NULL); + CommandCounterIncrement(); + + rel2 = RelationIdGetRelation(relid); + td = RelationGetDescr(rel2); + } + } + RelationClose(rel2); + } + return; } break; @@ -5342,12 +5543,24 @@ bbf_ProcessUtility(PlannedStmt *pstmt, if (restore_tsql_tabletype) create_stmt->tsql_tabletype = true; + if (sql_dialect != SQL_DIALECT_TSQL) + { + if (prev_ProcessUtility) + prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, + queryEnv, dest, qc); + else + standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, + queryEnv, dest, qc); + } + else + { if (prev_ProcessUtility) prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); else standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + } /* end else sql_dialect == SQL_DIALECT_TSQL */ /* * Create partitions of babelfish partitioned table @@ -5373,6 +5586,53 @@ bbf_ProcessUtility(PlannedStmt *pstmt, revoke_type_permission_from_public(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc, name); } + /* Store long constraint names in babelfish_identifier_mapping */ + if (sql_dialect == SQL_DIALECT_TSQL && !babelfish_dump_restore && queryString) + { + ListCell *lc; + const char *nspname = rel->schemaname; + Oid relOid; + + if (!nspname) + { + relOid = RangeVarGetRelid(rel, NoLock, true); + if (OidIsValid(relOid)) + nspname = get_namespace_name(get_rel_namespace(relOid)); + } + + if (nspname) + { + foreach(lc, create_stmt->tableElts) + { + Node *elt = (Node *) lfirst(lc); + + if (IsA(elt, Constraint)) + { + Constraint *con = (Constraint *) elt; + + if (con->conname && con->location >= 0) + { + const char *start = queryString + con->location + 10; + char *original_name; + + while (*start && scanner_isspace(*start)) + start++; /* skip whitespace after CONSTRAINT */ + + original_name = extract_identifier(start, NULL); + + if (original_name) + { + insert_bbf_ident_mapping(con->conname, + original_name, nspname, + ConstraintRelationId, rel->relname); + pfree(original_name); + } + } + } + } + } + } + return; } case T_IndexStmt: @@ -5382,8 +5642,25 @@ bbf_ProcessUtility(PlannedStmt *pstmt, if (sql_dialect == SQL_DIALECT_TSQL && strcmp(queryString, CREATE_FULLTEXT_INDEX) != 0) /* Skip fulltext indexes since they don't even have an original name */ { - char *original_name = stmt->idxname != NULL ? stmt->idxname : NULL; + char *original_name = NULL; List *partition_schemes = stmt->excludeOpNames; + ListCell *opt_lc; + + /* Extract original index name using location from grammar */ + foreach(opt_lc, stmt->options) + { + DefElem *defel = (DefElem *) lfirst(opt_lc); + if (strcmp(defel->defname, "name_location") == 0) + { + int loc = intVal(defel->arg); + if (loc >= 0 && queryString) + original_name = extract_identifier(queryString + loc, NULL); + stmt->options = foreach_delete_current(stmt->options, opt_lc); + break; + } + } + if (!original_name) + original_name = stmt->idxname; stmt->excludeOpNames = NIL; if (stmt->idxname && !stmt->isconstraint) @@ -5392,7 +5669,29 @@ bbf_ProcessUtility(PlannedStmt *pstmt, * Create the index first so that columns and table name * checks get done before index alignment check. */ - call_prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + PG_TRY(); + { + call_prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + } + PG_CATCH(); + { + MemoryContext ecxt2 = MemoryContextSwitchTo(TopMemoryContext); + ErrorData *edata = CopyErrorData(); + MemoryContextSwitchTo(ecxt2); + + if (edata->sqlerrcode == ERRCODE_DUPLICATE_TABLE && original_name && + strlen(original_name) >= NAMEDATALEN) + { + FlushErrorState(); + FreeErrorData(edata); + ereport(ERROR, + (errcode(ERRCODE_DUPLICATE_TABLE), + errmsg("The index '%s' already exists.", original_name))); + } + FreeErrorData(edata); + PG_RE_THROW(); + } + PG_END_TRY(); /* * Create partitioned index if partition scheme is specified. * Allow only aligned-index. @@ -5409,23 +5708,93 @@ bbf_ProcessUtility(PlannedStmt *pstmt, errmsg("Un-aligned Index is not supported in Babelfish."))); } } - if (original_name && !stmt->isconstraint) + if (original_name) { /* Store the original index name in reloptions */ exec_add_original_index_name(stmt->idxname, stmt->relation->schemaname, original_name); + /* Restore the original index name so that cached plan remains valid */ - stmt->idxname = original_name; + if (!stmt->isconstraint) + stmt->idxname = original_name; } return; } break; } + case T_CreateSeqStmt: + { + CreateSeqStmt *seq_stmt = (CreateSeqStmt *) parsetree; + + call_prev_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + + /* + * Store original sequence name in babelfish_identifier_mapping catalog. + */ + if (sql_dialect == SQL_DIALECT_TSQL && + seq_stmt->sequence->location >= 0 && queryString && + !babelfish_dump_restore) + { + char *original_name = extract_multipart_identifier_name(queryString + seq_stmt->sequence->location); + + if (original_name) + { + Oid seqOid = RangeVarGetRelid(seq_stmt->sequence, NoLock, true); + const char *nspname = seq_stmt->sequence->schemaname; + + if (!nspname && OidIsValid(seqOid)) + nspname = get_namespace_name(get_rel_namespace(seqOid)); + + if (nspname) + insert_bbf_ident_mapping(seq_stmt->sequence->relname, + original_name, nspname, + RelationRelationId, NULL); + pfree(original_name); + } + } + return; + } case T_CreateDomainStmt: { HeapTuple typeTup; Form_pg_type baseType; int32 basetypeMod; CreateDomainStmt *create_domain = (CreateDomainStmt *) parsetree; + char *original_name = NULL; + int origname_location = -1; + + /* + * Extract original_type_name from the constraint's options. + * The grammar stores it as a DefElem in the existing + * Constraint->options. Remove it before passing to the engine. + */ + if (sql_dialect == SQL_DIALECT_TSQL) + { + ListCell *lc; + + foreach(lc, create_domain->constraints) + { + Constraint *constr = (Constraint *) lfirst(lc); + + if (constr->options != NIL) + { + ListCell *opt; + + foreach(opt, constr->options) + { + DefElem *defel = (DefElem *) lfirst(opt); + + if (strcmp(defel->defname, "bbf_original_name") == 0) + { + original_name = pstrdup(strVal(defel->arg)); + origname_location = defel->location; + constr->options = foreach_delete_current(constr->options, opt); + break; + } + } + break; + } + } + } if (sql_dialect == SQL_DIALECT_TSQL && !create_domain->collClause) { @@ -5465,6 +5834,34 @@ bbf_ProcessUtility(PlannedStmt *pstmt, standard_ProcessUtility(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc); + /* + * Store original type name if it was provided and differs + * in case from the lowercased version. + */ + if (sql_dialect == SQL_DIALECT_TSQL && original_name) + { + char *type_name = NameListToString(create_domain->domainname); + Oid typeOid = typenameTypeId(NULL, makeTypeNameFromNameList(create_domain->domainname)); + const char *nspname = NULL; + + if (OidIsValid(typeOid)) + { + HeapTuple tup = SearchSysCache1(TYPEOID, ObjectIdGetDatum(typeOid)); + if (HeapTupleIsValid(tup)) + { + Form_pg_type typform = (Form_pg_type) GETSTRUCT(tup); + nspname = get_namespace_name(typform->typnamespace); + ReleaseSysCache(tup); + } + } + + if (nspname) + insert_bbf_ident_mapping(type_name, original_name, + nspname, TypeRelationId, NULL); + pfree(original_name); + } + (void) origname_location; + revoke_type_permission_from_public(pstmt, queryString, readOnlyTree, context, params, queryEnv, dest, qc, create_domain->domainname); return; } @@ -6213,7 +6610,20 @@ pltsql_truncate_identifier(char *ident, int len, bool warn) errmsg("identifier \"%s\" will be truncated to \"%s\"", ident, buf))); - memcpy(ident, buf, len + MD5_HASH_LEN + 1); + { + char saved_ident[NAMEDATALEN * 2 + 1]; + int saved_len = strlen(ident); + + if (saved_len < (int) sizeof(saved_ident)) + memcpy(saved_ident, ident, saved_len + 1); + else + saved_ident[0] = '\0'; + + memcpy(ident, buf, len + MD5_HASH_LEN + 1); + + if (saved_ident[0] != '\0' && warn) + bbf_cache_ident_name(ident, saved_ident); + } return true; } @@ -6556,6 +6966,8 @@ _PG_init(void) make_fn_arguments_from_stored_proc_probin_hook = pltsql_function_probin_reader; truncate_identifier_hook = pltsql_truncate_identifier; cstr_to_name_hook = pltsql_cstr_to_name; + bbf_get_original_constraint_name_hook = bbf_get_original_constraint_name; + bbf_get_original_index_name_hook = bbf_get_original_index_name; tsql_has_pgstat_permissions_hook = tsql_has_pgstat_permissions; if (pltsql_enable_linked_servers) @@ -8270,6 +8682,34 @@ void pltsql_bbfSelectIntoUtility(ParseState *pstate, PlannedStmt *pstmt, const c Node *parsetree = pstmt->utilityStmt; List *stmts; + char *into_original_name = NULL; + + /* + * Extract bbf_original_name from IntoClause->options before the + * engine processes them as reloptions (which would error on unknown options). + */ + if (sql_dialect == SQL_DIALECT_TSQL) + { + CreateTableAsStmt *ctas = (CreateTableAsStmt *) parsetree; + + if (ctas->into && ctas->into->options) + { + ListCell *lc; + + foreach(lc, ctas->into->options) + { + DefElem *defel = (DefElem *) lfirst(lc); + + if (strcmp(defel->defname, "bbf_original_name") == 0) + { + into_original_name = pstrdup(strVal(defel->arg)); + ctas->into->options = foreach_delete_current(ctas->into->options, lc); + break; + } + } + } + } + stmts = transformSelectIntoStmt((CreateTableAsStmt *)parsetree); while (stmts != NIL) { @@ -8277,6 +8717,26 @@ void pltsql_bbfSelectIntoUtility(ParseState *pstate, PlannedStmt *pstmt, const c stmts = list_delete_first(stmts); if (IsA(stmt, CreateTableAsStmt)) { + /* + * pre_transform_target_entry extends tle->resname to the full + * original for "SELECT a AS LongAlias" display. For SELECT INTO, + * this causes namestrcpy to simple-cut it, producing an attname + * that won't match the parser's MD5-truncated form. Truncate + * tle->resname back to MD5 form before table creation. + */ + Query *query = castNode(Query, ((CreateTableAsStmt *)parsetree)->query); + ListCell *tlc; + + foreach(tlc, query->targetList) + { + TargetEntry *tle = (TargetEntry *) lfirst(tlc); + if (tle->resname && strlen(tle->resname) >= NAMEDATALEN) + { + tle->resname = pstrdup(tle->resname); + truncate_identifier(tle->resname, strlen(tle->resname), false); + } + } + *address = ExecCreateTableAs(pstate, (CreateTableAsStmt *)parsetree, params, queryEnv, qc); } else @@ -8296,6 +8756,39 @@ void pltsql_bbfSelectIntoUtility(ParseState *pstate, PlannedStmt *pstmt, const c } reseed_identity_post_select_into(address->objectId); + + /* + * Store original table name for SELECT INTO. + */ + if (sql_dialect == SQL_DIALECT_TSQL && !babelfish_dump_restore && + queryString && OidIsValid(address->objectId)) + { + CreateTableAsStmt *ctas = (CreateTableAsStmt *) parsetree; + + if (ctas->into && ctas->into->rel && ctas->into->rel->location >= 0) + { + char *original_name = extract_multipart_identifier_name(queryString + ctas->into->rel->location); + + if (original_name && + (strlen(original_name) >= NAMEDATALEN || + (strncmp(ctas->into->rel->relname, original_name, strlen(ctas->into->rel->relname)) != 0 && + strncasecmp(ctas->into->rel->relname, original_name, strlen(ctas->into->rel->relname)) == 0))) + { + AlterTableCmd *cmd = makeNode(AlterTableCmd); + cmd->subtype = AT_SetRelOptions; + cmd->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_TABLE_NAME), + (Node *) makeString(pstrdup(original_name)), -1)); + cmd->behavior = DROP_RESTRICT; + cmd->missing_ok = false; + AlterTableInternal(address->objectId, list_make1(cmd), false); + CommandCounterIncrement(); + } + if (original_name) + pfree(original_name); + } + if (into_original_name) + pfree(into_original_name); + } } void @@ -8426,6 +8919,12 @@ bbf_ExecDropStmt(DropStmt *stmt) type = ExtendedPropertyTypeNames[EXTENDED_PROPERTY_TABLE_COLUMN]; delete_extended_property(db_id, type, schema_name, major_name, NULL); + + /* Remove constraint entries from babelfish_identifier_mapping */ + if (schema_name) + delete_bbf_ident_mapping_by_parent(schema_name, + ConstraintRelationId, + major_name); } else if (stmt->removeType == OBJECT_VIEW) { @@ -8438,6 +8937,11 @@ bbf_ExecDropStmt(DropStmt *stmt) type = ExtendedPropertyTypeNames[EXTENDED_PROPERTY_SEQUENCE]; delete_extended_property(db_id, type, schema_name, major_name, NULL); + + /* Remove sequence entry from babelfish_identifier_mapping */ + if (schema_name) + delete_bbf_ident_mapping(major_name, schema_name, + RelationRelationId, NULL); } } clean_up_bbf_schema_permissions(logicalschema, major_name, false); @@ -8506,6 +9010,16 @@ bbf_ExecDropStmt(DropStmt *stmt) delete_extended_property(db_id, type, schema_name, major_name, NULL); + + /* Remove from babelfish_identifier_mapping */ + if (stmt->removeType == OBJECT_TYPE) + delete_bbf_ident_mapping(major_name, schema_name, + TypeRelationId, NULL); + else if (stmt->removeType == OBJECT_PROCEDURE || + stmt->removeType == OBJECT_FUNCTION) + delete_bbf_ident_mapping_by_parent(schema_name, + ProcedureRelationId, + major_name); } clean_up_bbf_schema_permissions(logicalschema, major_name, false); } diff --git a/contrib/babelfishpg_tsql/src/pltsql.h b/contrib/babelfishpg_tsql/src/pltsql.h index 728da7d42b6..9dbbee7de8b 100644 --- a/contrib/babelfishpg_tsql/src/pltsql.h +++ b/contrib/babelfishpg_tsql/src/pltsql.h @@ -1476,6 +1476,10 @@ typedef struct PLtsql_function /* arguments for inline code block */ InlineCodeBlockArgs *inline_args; + + /* cached truncated→original identifier mappings from compilation */ + int n_ident_mappings; + struct IdentNameCacheEntry *ident_mappings; } PLtsql_function; /* @@ -2318,6 +2322,7 @@ extern int pltsql_yyparse(void); /* functions in hooks.c */ extern char *extract_identifier(const char *start, int *last_pos); +extern char *extract_multipart_identifier_name(const char *start); /* functions in pltsql_utils.c */ extern char *gen_createfulltextindex_cmds(const char *table_name, const char *schema_name, const List *column_name, const char *index_name); diff --git a/contrib/babelfishpg_tsql/src/pltsql_utils.c b/contrib/babelfishpg_tsql/src/pltsql_utils.c index 9a091666ff8..6de1a644b9a 100644 --- a/contrib/babelfishpg_tsql/src/pltsql_utils.c +++ b/contrib/babelfishpg_tsql/src/pltsql_utils.c @@ -27,6 +27,7 @@ #include "access/table.h" #include "access/genam.h" #include "catalog.h" +#include "rewrite/rewriteHandler.h" #include "hooks.h" #include "tcop/utility.h" @@ -350,6 +351,29 @@ pltsql_createFunction(ParseState *pstate, PlannedStmt *pstmt, const char *queryS /* Store function/procedure related metadata in babelfish catalog */ pltsql_store_func_default_positions(address, stmt->parameters, queryString, origname_location, with_recompile); + /* Store original parameter names for long identifiers */ + if (queryString && stmt->parameters) + { + ListCell *plc; + char *funcname = strVal(llast(stmt->funcname)); + char *nspname = get_namespace_name(get_func_namespace(address.objectId)); + + foreach(plc, stmt->parameters) + { + FunctionParameter *fp = (FunctionParameter *) lfirst(plc); + + if (fp->name && fp->location >= 0 && strlen(fp->name) >= NAMEDATALEN - 1) + { + char *orig = extract_identifier(queryString + fp->location, NULL); + if (orig && strlen(orig) >= NAMEDATALEN) + insert_bbf_ident_mapping(fp->name, orig, nspname, + ProcedureRelationId, funcname); + if (orig) + pfree(orig); + } + } + } + if (tbltypStmt || restore_tsql_tabletype) { /* @@ -3195,4 +3219,39 @@ restrict_alter_table_stmt(AlterTableStmt *stmt) errmsg("ALTER .. OWNER .. is blocked in PG dialect on TSQL objects. Please set babelfishpg_tsql.enable_alter_owner_from_pg to true to enable."))); } } -} \ No newline at end of file +} +PG_FUNCTION_INFO_V1(bbf_get_view_column_name); +Datum +bbf_get_view_column_name(PG_FUNCTION_ARGS) +{ + Oid viewOid = PG_GETARG_OID(0); + int16 attnum = PG_GETARG_INT16(1); + Relation vrel; + Query *vquery; + ListCell *lc; + int colno = 0; + + /* Only process views - check relkind via syscache without opening */ + if (get_rel_relkind(viewOid) != RELKIND_VIEW) + PG_RETURN_NULL(); + + vrel = table_open(viewOid, AccessShareLock); + vquery = get_view_query(vrel); + + foreach(lc, vquery->targetList) + { + TargetEntry *tle = (TargetEntry *) lfirst(lc); + if (tle->resjunk) + continue; + colno++; + if (colno == attnum && tle->resname) + { + text *result = cstring_to_text(tle->resname); + table_close(vrel, AccessShareLock); + PG_RETURN_TEXT_P(result); + } + } + + table_close(vrel, AccessShareLock); + PG_RETURN_NULL(); +} diff --git a/contrib/babelfishpg_tsql/src/procedures.c b/contrib/babelfishpg_tsql/src/procedures.c index d10713eb158..0b58b066987 100644 --- a/contrib/babelfishpg_tsql/src/procedures.c +++ b/contrib/babelfishpg_tsql/src/procedures.c @@ -3839,6 +3839,17 @@ sp_rename_internal(PG_FUNCTION_ARGS) rename_extended_property(objtype_code, schema_name, curr_relname, obj_name, new_name); + + /* Insert new entry in babelfish_identifier_mapping if new name is long */ + if ((objtype_code == OBJECT_SEQUENCE || objtype_code == OBJECT_TYPE) && + strlen(new_name) >= NAMEDATALEN) + { + char *new_truncated = downcase_truncate_identifier(new_name, strlen(new_name), false); + Oid catalog_type = (objtype_code == OBJECT_SEQUENCE) ? RelationRelationId : TypeRelationId; + char *physical_schema = get_physical_schema_name(get_cur_db_name(), + str_tolower(schema_name, strlen(schema_name), DEFAULT_COLLATION_OID)); + insert_bbf_ident_mapping(new_truncated, new_name, physical_schema, catalog_type, NULL); + } } PG_FINALLY(); { @@ -4057,9 +4068,9 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche } else { - renamestmt->subname = str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID); - renamestmt->newname = str_tolower(newobjname, strlen(newobjname), DEFAULT_COLLATION_OID); - renamestmt->relation->relname = str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newobjname, strlen(newobjname), false); + renamestmt->relation->relname = downcase_truncate_identifier(objname, strlen(objname), false); } if (objtype == OBJECT_TABLE || objtype == OBJECT_INDEX) @@ -4076,7 +4087,7 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("query is not a AlterTableStmt"))); altertablestmt->relation->schemaname = str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID); - altertablestmt->relation->relname = str_tolower(newobjname, strlen(newobjname), DEFAULT_COLLATION_OID); + altertablestmt->relation->relname = downcase_truncate_identifier(newobjname, strlen(newobjname), false); /* get data of the first node */ lc = list_head(altertablestmt->cmds); cmd = (AlterTableCmd *) lfirst(lc); @@ -4089,19 +4100,20 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche renamestmt->renameType = objtype; objwargs->objname = list_make2(makeString(pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID))), - makeString(pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)))); + makeString(downcase_truncate_identifier(objname, strlen(objname), false))); orig_proc_funcname = pstrdup(newname); - renamestmt->subname = pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)); - renamestmt->newname = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newname, strlen(newname), false); } else if ((objtype == OBJECT_TRIGGER)) { ObjectWithArgs *objwargs; + orig_proc_funcname = pstrdup(newname); renamestmt->renameType = objtype; renamestmt->relation->schemaname = pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID)); - renamestmt->relation->relname = pstrdup(str_tolower(curr_relname, strlen(curr_relname), DEFAULT_COLLATION_OID)); - renamestmt->subname = pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)); - renamestmt->newname = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); + renamestmt->relation->relname = downcase_truncate_identifier(curr_relname, strlen(curr_relname), false); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newname, strlen(newname), false); rewrite_object_refs(stmt); // extra query nodes for ALTER FUNCTION @@ -4112,17 +4124,17 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche objwargs = (ObjectWithArgs *) renamestmt->object; renamestmt->renameType = OBJECT_FUNCTION; objwargs->objname = list_make2(makeString(pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID))), - makeString(pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)))); - renamestmt->subname = pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)); - renamestmt->newname = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); + makeString(downcase_truncate_identifier(objname, strlen(objname), false))); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newname, strlen(newname), false); } else if (objtype == OBJECT_TYPE) { renamestmt->renameType = objtype; renamestmt->object = (Node *)list_make2(makeString(pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID))), - makeString(pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)))); - renamestmt->subname = pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)); - renamestmt->newname = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); + makeString(downcase_truncate_identifier(objname, strlen(objname), false))); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newname, strlen(newname), false); } else { @@ -4133,10 +4145,10 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche renamestmt->renameType = objtype; renamestmt->relationType = OBJECT_TABLE; - renamestmt->subname = pstrdup(str_tolower(objname, strlen(objname), DEFAULT_COLLATION_OID)); - renamestmt->newname = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); + renamestmt->subname = downcase_truncate_identifier(objname, strlen(objname), false); + renamestmt->newname = downcase_truncate_identifier(newname, strlen(newname), false); renamestmt->relation->schemaname = pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID)); - renamestmt->relation->relname = pstrdup(str_tolower(curr_relname, strlen(curr_relname), DEFAULT_COLLATION_OID)); + renamestmt->relation->relname = downcase_truncate_identifier(curr_relname, strlen(curr_relname), false); rewrite_object_refs(stmt); /* extra query nodes for modifying attoption column */ @@ -4146,14 +4158,14 @@ gen_sp_rename_subcmds(const char *objname, const char *newname, const char *sche ereport(ERROR, (errcode(ERRCODE_SYNTAX_ERROR), errmsg("query is not a AlterTableStmt"))); altertablestmt->relation->schemaname = pstrdup(str_tolower(schemaname, strlen(schemaname), DEFAULT_COLLATION_OID)); - altertablestmt->relation->relname = pstrdup(str_tolower(curr_relname, strlen(curr_relname), DEFAULT_COLLATION_OID)); + altertablestmt->relation->relname = downcase_truncate_identifier(curr_relname, strlen(curr_relname), false); altertablestmt->objtype = OBJECT_TABLE; /* get data of the first node */ lc = list_head(altertablestmt->cmds); cmd = (AlterTableCmd *) lfirst(lc); cmd->subtype = AT_SetOptions; - cmd->name = pstrdup(str_tolower(newname, strlen(newname), DEFAULT_COLLATION_OID)); - cmd->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_NAME), (Node *) makeString(pstrdup(newname)), -1)); //column->location)); + cmd->name = downcase_truncate_identifier(newname, strlen(newname), false); + cmd->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_NAME), (Node *) makeString(pstrdup(newname)), -1)); } /* name mapping */ rewrite_object_refs(stmt); diff --git a/contrib/babelfishpg_tsql/src/session.c b/contrib/babelfishpg_tsql/src/session.c index 950c89805ce..16ca0fed7c0 100644 --- a/contrib/babelfishpg_tsql/src/session.c +++ b/contrib/babelfishpg_tsql/src/session.c @@ -1,6 +1,7 @@ #include "postgres.h" #include "fmgr.h" #include "miscadmin.h" +#include "parser/scansup.h" #include "varatt.h" #include "utils/acl.h" @@ -373,7 +374,11 @@ babelfish_db_name(PG_FUNCTION_ARGS) strncpy(dbname, "msdb", dbnamelen); } else - dbname = get_db_name(dbid); + { + dbname = dbid_get_original_db_name(dbid); + if (!dbname) + dbname = get_db_name(dbid); + } if (dbname == NULL) PG_RETURN_NULL(); @@ -381,6 +386,16 @@ babelfish_db_name(PG_FUNCTION_ARGS) PG_RETURN_TEXT_P(cstring_to_text(dbname)); } +PG_FUNCTION_INFO_V1(babelfish_db_name_internal); +Datum +babelfish_db_name_internal(PG_FUNCTION_ARGS) +{ + char *dbname = get_cur_db_name(); + if (!dbname) + PG_RETURN_NULL(); + PG_RETURN_TEXT_P(cstring_to_text(dbname)); +} + /* * Stores key-value pairs in a hashtable * Table takes a string as a key, and saves a pointer to the sql_variant-typed value diff --git a/test/JDBC/expected/AUTO_ANALYZE-vu-prepare.out b/test/JDBC/expected/AUTO_ANALYZE-vu-prepare.out index a77f0b4178e..ea13b90d1ae 100644 --- a/test/JDBC/expected/AUTO_ANALYZE-vu-prepare.out +++ b/test/JDBC/expected/AUTO_ANALYZE-vu-prepare.out @@ -21,6 +21,7 @@ babelfish_domain_mapping babelfish_extended_properties babelfish_function_ext babelfish_helpcollation +babelfish_identifier_mapping babelfish_namespace_ext babelfish_partition_depend babelfish_partition_function diff --git a/test/JDBC/expected/BABEL-1044.out b/test/JDBC/expected/BABEL-1044.out index b6e053453cb..7e68c3dc146 100644 --- a/test/JDBC/expected/BABEL-1044.out +++ b/test/JDBC/expected/BABEL-1044.out @@ -181,7 +181,7 @@ create table table_longer_than_63_0abcdefgij1abcdefgij2abcdefgij3abcdefgij4abcde GO ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "table_longer_than_63_0abcdefgijc2ed7b983a352405e4e26c711bd071bf" already exists)~~ +~~ERROR (Message: relation "table_longer_than_63_0abcdefgij1abcdefgij2abcdefgij3abcdefgij4abcdefgij5abcdefgij6abcdefgij7abcdefgij8abcdefghij9abcdefghij" already exists)~~ -- create table with a different name but have same prefix diff --git a/test/JDBC/expected/BABEL-1435.out b/test/JDBC/expected/BABEL-1435.out index 14db616e1e6..c55d3cf5cb9 100644 --- a/test/JDBC/expected/BABEL-1435.out +++ b/test/JDBC/expected/BABEL-1435.out @@ -2,7 +2,7 @@ SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb @@ -84,7 +84,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db1 master msdb @@ -179,7 +179,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db2 master msdb @@ -258,7 +258,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb @@ -340,7 +340,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db1 master msdb @@ -435,7 +435,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db2 master msdb diff --git a/test/JDBC/expected/BABEL-1813.out b/test/JDBC/expected/BABEL-1813.out index 9eb9ea3cfe0..97a62093f11 100644 --- a/test/JDBC/expected/BABEL-1813.out +++ b/test/JDBC/expected/BABEL-1813.out @@ -37,7 +37,7 @@ go ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "i1813t18132835522bc8db62c2e7873fbd5c7ec927")~~ +~~ERROR (Message: duplicate key value violates unique constraint "i1813")~~ select abs(-collation)*2 c, binary from t1813; go diff --git a/test/JDBC/expected/BABEL-2725.out b/test/JDBC/expected/BABEL-2725.out index e0a140dfd69..0ffa8e69620 100644 --- a/test/JDBC/expected/BABEL-2725.out +++ b/test/JDBC/expected/BABEL-2725.out @@ -37,7 +37,7 @@ go ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "i1813t27252835522bc8db62c2e7873fbd5c7ec927")~~ +~~ERROR (Message: duplicate key value violates unique constraint "i1813")~~ select abs(-offset)*2 c, binary from t2725; go diff --git a/test/JDBC/expected/BABEL-4792.out b/test/JDBC/expected/BABEL-4792.out index 19806688544..e5570985379 100644 --- a/test/JDBC/expected/BABEL-4792.out +++ b/test/JDBC/expected/BABEL-4792.out @@ -7,7 +7,7 @@ create proc [%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木 go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8' already exists with the same name)~~ +~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##' already exists with the same name)~~ -- Expect error for duplicate function @@ -19,7 +19,7 @@ end go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8' already exists with the same name)~~ +~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##' already exists with the same name)~~ -- Cleanup @@ -43,7 +43,7 @@ end go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8' already exists with the same name)~~ +~~ERROR (Message: Function '%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##' already exists with the same name)~~ -- Cleanup @@ -63,7 +63,7 @@ as go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8" already exists)~~ +~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##" already exists)~~ -- Expect error for duplicate relation @@ -73,7 +73,7 @@ create table [%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴 go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8" already exists)~~ +~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##" already exists)~~ -- Cleanup @@ -93,7 +93,7 @@ create table [%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴 go ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8" already exists)~~ +~~ERROR (Message: relation "%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##" already exists)~~ -- Cleanup @@ -126,7 +126,7 @@ rollback; go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: trigger "%%#%@$^$姓氏すず🤬🤯86d3db6066be0016789ff9cd274595b8" for relation "t1" already exists)~~ +~~ERROR (Message: trigger "%%#%@$^$姓氏すず🤬🤯🫣🤗🫡🤔🫢🤭き,😀 鈴木##" for relation "t1" already exists)~~ -- Cleanup diff --git a/test/JDBC/expected/BABEL-5119-before-18_5-vu-cleanup.out b/test/JDBC/expected/BABEL-5119-before-18_5-vu-cleanup.out new file mode 100644 index 00000000000..3b703115680 --- /dev/null +++ b/test/JDBC/expected/BABEL-5119-before-18_5-vu-cleanup.out @@ -0,0 +1,29 @@ +-- tsql +USE master +GO +DROP TABLE guest.BABEL5119_t4 +GO +DROP TABLE guest.BABEL5119_t5 +GO +DROP TABLE guest.BABEL5119_t6 +GO +DROP VIEW guest.BABEL5119_v4 +GO +DROP VIEW guest.BABEL5119_v5 +GO +DROP VIEW guest.BABEL5119_v6 +GO +DROP PROCEDURE guest.BABEL5119_p4 +GO +DROP PROCEDURE guest.BABEL5119_p5 +GO +DROP PROCEDURE guest.BABEL5119_p6 +GO +DROP LOGIN login_babel5119_1 +GO +DROP DATABASE BABEL5119_db +GO +DROP LOGIN login_babel5119_2 +GO +DROP USER user_babel5119_1 +go diff --git a/test/JDBC/expected/BABEL-5119-before-18_5-vu-prepare.out b/test/JDBC/expected/BABEL-5119-before-18_5-vu-prepare.out new file mode 100644 index 00000000000..463665bed4f --- /dev/null +++ b/test/JDBC/expected/BABEL-5119-before-18_5-vu-prepare.out @@ -0,0 +1,25 @@ +-- tsql +CREATE DATABASE BABEL5119_db +GO + +USE BABEL5119_db +GO +CREATE TABLE BABEL5119_t1(a int) +GO +CREATE TABLE BABEL5119_t2(a int) +GO +CREATE TABLE BABEL5119_t3(a int) +GO +CREATE VIEW BABEL5119_v1 AS SELECT 1 +GO +CREATE VIEW BABEL5119_v2 AS SELECT 1 +GO +CREATE VIEW BABEL5119_v3 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p1 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p2 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p3 AS SELECT 1 +GO +-- terminate-tsql-conn diff --git a/test/JDBC/expected/BABEL-5119-before-18_5-vu-verify.out b/test/JDBC/expected/BABEL-5119-before-18_5-vu-verify.out new file mode 100644 index 00000000000..ecfb8f280aa --- /dev/null +++ b/test/JDBC/expected/BABEL-5119-before-18_5-vu-verify.out @@ -0,0 +1,756 @@ +-- tsql +CREATE LOGIN login_babel5119_1 WITH PASSWORD = '12345678' +CREATE LOGIN login_babel5119_2 WITH PASSWORD = '12345678' +ALTER authorization on database::BABEL5119_db TO login_babel5119_1 +GO +CREATE USER user_babel5119_1 FOR LOGIN login_babel5119_1; +go +ALTER ROLE db_owner ADD MEMBER user_babel5119_1; +go +-- terminate-tsql-conn + +-- tsql user=login_babel5119_1 password=12345678 +-- Creating objects in the guest schema +USE master +GO +select current_user; +go +~~START~~ +varchar +user_babel5119_1 +~~END~~ + +CREATE TABLE guest.BABEL5119_t4(a int) +GO +CREATE TABLE guest.BABEL5119_t5(a int) +GO +CREATE TABLE guest.BABEL5119_t6(a int) +GO +CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +GO +CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +GO +CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p4 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p5 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p6 AS SELECT 1 +GO +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- tsql +-- Testing crossdb queries for sysadmin +-- From 'master' database +USE master +GO + +-- Checking crossdb for sys views +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_db +~~END~~ + + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_v1 +babel5119_v2 +babel5119_v3 +~~END~~ + + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_p1 +BABEL5119_p2 +BABEL5119_p3 +~~END~~ + + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar#!#varchar#!#varchar +babel5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE +babel5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE +babel5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE +babel5119_db#!#dbo#!#babel5119_v1#!#VIEW +babel5119_db#!#dbo#!#babel5119_v2#!#VIEW +babel5119_db#!#dbo#!#babel5119_v3#!#VIEW +~~END~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +BABEL5119_t1#!#a +BABEL5119_t2#!#a +BABEL5119_t3#!#a +babel5119_v1#!#?column? +babel5119_v2#!#?column? +babel5119_v3#!#?column? +~~END~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +babel5119_v1#!#CREATE VIEW BABEL5119_v1 AS SELECT 1 +babel5119_v2#!#CREATE VIEW BABEL5119_v2 AS SELECT 1 +babel5119_v3#!#CREATE VIEW BABEL5119_v3 AS SELECT 1 +~~END~~ + + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO +~~START~~ +int#!#int +~~END~~ + + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO +~~START~~ +int#!#int +1#!#1 +~~END~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_1(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_1 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 3~~ + + +CREATE TABLE #babel5119_tmp_table_2(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_2 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 1~~ + + +CREATE TABLE #babel5119_tmp_table_3(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_3 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ROW COUNT: 6~~ + + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO +~~START~~ +int +1 +~~END~~ + + +-- From 'BABEL5119_db' database +USE BABEL5119_db +GO + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_db +~~END~~ + + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 +~~END~~ + + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 +~~END~~ + + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar#!#varchar#!#varchar +master#!#guest#!#BABEL5119_t4#!#BASE TABLE +master#!#guest#!#BABEL5119_t5#!#BASE TABLE +master#!#guest#!#BABEL5119_t6#!#BASE TABLE +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW +~~END~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +BABEL5119_t4#!#a +BABEL5119_t5#!#a +BABEL5119_t6#!#a +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? +~~END~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +~~END~~ + + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO +~~START~~ +int#!#int +~~END~~ + + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO +~~START~~ +int#!#int +1#!#1 +~~END~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_4(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_4 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 3~~ + + +CREATE TABLE #babel5119_tmp_table_5(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_5 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 1~~ + + +CREATE TABLE #babel5119_tmp_table_6(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_6 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ROW COUNT: 6~~ + + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +~~START~~ +int +1 +~~END~~ + +-- terminate-tsql-conn + +-- tsql user=login_babel5119_1 password=12345678 +-- Testing crossdb queries for non-sysadmin db_owner +-- Checking crossdb for sys views +-- From 'master' database +USE master +GO + +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_db +~~END~~ + + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_v1 +babel5119_v2 +babel5119_v3 +~~END~~ + + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_p1 +BABEL5119_p2 +BABEL5119_p3 +~~END~~ + + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar#!#varchar#!#varchar +babel5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE +babel5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE +babel5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE +babel5119_db#!#dbo#!#babel5119_v1#!#VIEW +babel5119_db#!#dbo#!#babel5119_v2#!#VIEW +babel5119_db#!#dbo#!#babel5119_v3#!#VIEW +~~END~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +BABEL5119_t1#!#a +BABEL5119_t2#!#a +BABEL5119_t3#!#a +babel5119_v1#!#?column? +babel5119_v2#!#?column? +babel5119_v3#!#?column? +~~END~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +babel5119_v1#!#CREATE VIEW BABEL5119_v1 AS SELECT 1 +babel5119_v2#!#CREATE VIEW BABEL5119_v2 AS SELECT 1 +babel5119_v3#!#CREATE VIEW BABEL5119_v3 AS SELECT 1 +~~END~~ + + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO +~~START~~ +int#!#int +~~END~~ + + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO +~~START~~ +int#!#int +1#!#1 +~~END~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_7(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_7 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 3~~ + + +CREATE TABLE #babel5119_tmp_table_8(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_8 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 1~~ + + +CREATE TABLE #babel5119_tmp_table_9(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_9 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ROW COUNT: 6~~ + + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO +~~START~~ +int +1 +~~END~~ + + +-- From 'BABEL5119_db' database +USE BABEL5119_db +GO + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_db +~~END~~ + + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 +~~END~~ + + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 +~~END~~ + + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar#!#varchar#!#varchar +master#!#guest#!#BABEL5119_t4#!#BASE TABLE +master#!#guest#!#BABEL5119_t5#!#BASE TABLE +master#!#guest#!#BABEL5119_t6#!#BASE TABLE +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW +~~END~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +BABEL5119_t4#!#a +BABEL5119_t5#!#a +BABEL5119_t6#!#a +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? +~~END~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +~~END~~ + + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO +~~START~~ +int#!#int +~~END~~ + + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO +~~START~~ +int#!#int +1#!#1 +~~END~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_10(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_10 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 3~~ + + +CREATE TABLE #babel5119_tmp_table_11(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_11 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 1~~ + + +CREATE TABLE #babel5119_tmp_table_12(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_12 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ROW COUNT: 6~~ + + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +~~START~~ +int +1 +~~END~~ + +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- tsql user=login_babel5119_2 password=12345678 +-- Testing crossdb queries for non-sysadmin non-db_owner +-- Checking crossdb for sys views +-- From 'master' database +USE master +GO + +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: permission denied for table babel5119_t1)~~ + + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: permission denied for view babel5119_v1)~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_13(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_13 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +CREATE TABLE #babel5119_tmp_table_14(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_14 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +CREATE TABLE #babel5119_tmp_table_15(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_15 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +babel5119_db +~~END~~ + + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 +~~END~~ + + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO +~~START~~ +varchar +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 +~~END~~ + + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar#!#varchar#!#varchar +master#!#guest#!#BABEL5119_t4#!#BASE TABLE +master#!#guest#!#BABEL5119_t5#!#BASE TABLE +master#!#guest#!#BABEL5119_t6#!#BASE TABLE +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW +~~END~~ + + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +BABEL5119_t4#!#a +BABEL5119_t5#!#a +BABEL5119_t6#!#a +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? +~~END~~ + + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO +~~START~~ +nvarchar#!#nvarchar +babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +~~END~~ + + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_16(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_16 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 3~~ + + +CREATE TABLE #babel5119_tmp_table_17(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_17 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO +~~ROW COUNT: 1~~ + + +CREATE TABLE #babel5119_tmp_table_18(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_18 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO +~~ROW COUNT: 6~~ + + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +~~START~~ +int +0 +~~END~~ + +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 + +-- tsql user=login_babel5119_2 password=12345678 +-- Checking the permissions after alter +USE BABEL5119_db +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_2" is not able to access the database "babel5119_db" under the current security context)~~ + +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 + +-- tsql +ALTER authorization on database::BABEL5119_db TO login_babel5119_2 +GO +-- terminate-tsql-conn + +-- tsql user=login_babel5119_1 password=12345678 +USE BABEL5119_db +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The server principal "login_babel5119_1" is not able to access the database "babel5119_db" under the current security context)~~ + +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- tsql user=login_babel5119_2 password=12345678 +USE BABEL5119_db +GO +INSERT INTO BABEL5119_t1 VALUES(1) +GO +~~ROW COUNT: 1~~ + +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 diff --git a/test/JDBC/expected/BABEL-5119-vu-verify.out b/test/JDBC/expected/BABEL-5119-vu-verify.out index e5a68fcc0e7..41b70a1ebed 100644 --- a/test/JDBC/expected/BABEL-5119-vu-verify.out +++ b/test/JDBC/expected/BABEL-5119-vu-verify.out @@ -52,7 +52,7 @@ ORDER BY name GO ~~START~~ varchar -babel5119_db +BABEL5119_db ~~END~~ @@ -61,9 +61,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v1 -babel5119_v2 -babel5119_v3 +BABEL5119_v1 +BABEL5119_v2 +BABEL5119_v3 ~~END~~ @@ -72,9 +72,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_p1 -babel5119_p2 -babel5119_p3 +BABEL5119_p1 +BABEL5119_p2 +BABEL5119_p3 ~~END~~ @@ -84,12 +84,12 @@ ORDER BY TABLE_NAME GO ~~START~~ nvarchar#!#nvarchar#!#varchar#!#varchar -babel5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE -babel5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE -babel5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE -babel5119_db#!#dbo#!#babel5119_v1#!#VIEW -babel5119_db#!#dbo#!#babel5119_v2#!#VIEW -babel5119_db#!#dbo#!#babel5119_v3#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_v1#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_v2#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_v3#!#VIEW ~~END~~ @@ -101,9 +101,9 @@ nvarchar#!#nvarchar BABEL5119_t1#!#a BABEL5119_t2#!#a BABEL5119_t3#!#a -babel5119_v1#!#?column? -babel5119_v2#!#?column? -babel5119_v3#!#?column? +BABEL5119_v1#!#?column? +BABEL5119_v2#!#?column? +BABEL5119_v3#!#?column? ~~END~~ @@ -170,7 +170,7 @@ ORDER BY name GO ~~START~~ varchar -babel5119_db +BABEL5119_db ~~END~~ @@ -179,9 +179,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -190,9 +190,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_p4 -babel5119_p5 -babel5119_p6 +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 ~~END~~ @@ -205,9 +205,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -219,9 +219,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ @@ -292,7 +292,7 @@ ORDER BY name GO ~~START~~ varchar -babel5119_db +BABEL5119_db ~~END~~ @@ -301,9 +301,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v1 -babel5119_v2 -babel5119_v3 +BABEL5119_v1 +BABEL5119_v2 +BABEL5119_v3 ~~END~~ @@ -312,9 +312,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_p1 -babel5119_p2 -babel5119_p3 +BABEL5119_p1 +BABEL5119_p2 +BABEL5119_p3 ~~END~~ @@ -324,12 +324,12 @@ ORDER BY TABLE_NAME GO ~~START~~ nvarchar#!#nvarchar#!#varchar#!#varchar -babel5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE -babel5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE -babel5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE -babel5119_db#!#dbo#!#babel5119_v1#!#VIEW -babel5119_db#!#dbo#!#babel5119_v2#!#VIEW -babel5119_db#!#dbo#!#babel5119_v3#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_t1#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_t2#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_t3#!#BASE TABLE +BABEL5119_db#!#dbo#!#BABEL5119_v1#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_v2#!#VIEW +BABEL5119_db#!#dbo#!#BABEL5119_v3#!#VIEW ~~END~~ @@ -341,9 +341,9 @@ nvarchar#!#nvarchar BABEL5119_t1#!#a BABEL5119_t2#!#a BABEL5119_t3#!#a -babel5119_v1#!#?column? -babel5119_v2#!#?column? -babel5119_v3#!#?column? +BABEL5119_v1#!#?column? +BABEL5119_v2#!#?column? +BABEL5119_v3#!#?column? ~~END~~ @@ -410,7 +410,7 @@ ORDER BY name GO ~~START~~ varchar -babel5119_db +BABEL5119_db ~~END~~ @@ -419,9 +419,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -430,9 +430,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_p4 -babel5119_p5 -babel5119_p6 +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 ~~END~~ @@ -445,9 +445,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -459,9 +459,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ @@ -628,7 +628,7 @@ ORDER BY name GO ~~START~~ varchar -babel5119_db +BABEL5119_db ~~END~~ @@ -637,9 +637,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -648,9 +648,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_p4 -babel5119_p5 -babel5119_p6 +BABEL5119_p4 +BABEL5119_p5 +BABEL5119_p6 ~~END~~ @@ -663,9 +663,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -677,9 +677,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ diff --git a/test/JDBC/expected/BABEL-5119_before_16_5-vu-verify.out b/test/JDBC/expected/BABEL-5119_before_16_5-vu-verify.out index d2975cdbd38..e5926d85655 100644 --- a/test/JDBC/expected/BABEL-5119_before_16_5-vu-verify.out +++ b/test/JDBC/expected/BABEL-5119_before_16_5-vu-verify.out @@ -179,9 +179,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -205,9 +205,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -219,9 +219,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ @@ -230,9 +230,9 @@ ORDER BY TABLE_NAME GO ~~START~~ nvarchar#!#nvarchar -babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 -babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 -babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +BABEL5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +BABEL5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +BABEL5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 ~~END~~ @@ -419,9 +419,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -445,9 +445,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -459,9 +459,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ @@ -470,9 +470,9 @@ ORDER BY TABLE_NAME GO ~~START~~ nvarchar#!#nvarchar -babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 -babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 -babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +BABEL5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +BABEL5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +BABEL5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 ~~END~~ @@ -637,9 +637,9 @@ ORDER BY name GO ~~START~~ varchar -babel5119_v4 -babel5119_v5 -babel5119_v6 +BABEL5119_v4 +BABEL5119_v5 +BABEL5119_v6 ~~END~~ @@ -663,9 +663,9 @@ nvarchar#!#nvarchar#!#varchar#!#varchar master#!#guest#!#BABEL5119_t4#!#BASE TABLE master#!#guest#!#BABEL5119_t5#!#BASE TABLE master#!#guest#!#BABEL5119_t6#!#BASE TABLE -master#!#guest#!#babel5119_v4#!#VIEW -master#!#guest#!#babel5119_v5#!#VIEW -master#!#guest#!#babel5119_v6#!#VIEW +master#!#guest#!#BABEL5119_v4#!#VIEW +master#!#guest#!#BABEL5119_v5#!#VIEW +master#!#guest#!#BABEL5119_v6#!#VIEW ~~END~~ @@ -677,9 +677,9 @@ nvarchar#!#nvarchar BABEL5119_t4#!#a BABEL5119_t5#!#a BABEL5119_t6#!#a -babel5119_v4#!#?column? -babel5119_v5#!#?column? -babel5119_v6#!#?column? +BABEL5119_v4#!#?column? +BABEL5119_v5#!#?column? +BABEL5119_v6#!#?column? ~~END~~ @@ -688,9 +688,9 @@ ORDER BY TABLE_NAME GO ~~START~~ nvarchar#!#nvarchar -babel5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 -babel5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 -babel5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +BABEL5119_v4#!#CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +BABEL5119_v5#!#CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +BABEL5119_v6#!#CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 ~~END~~ diff --git a/test/JDBC/expected/BABEL-621-before-15_7-or-16_3-vu-cleanup.out b/test/JDBC/expected/BABEL-621-before-15_7-or-16_3-vu-cleanup.out index 5806e52d13e..04f7153f55b 100644 --- a/test/JDBC/expected/BABEL-621-before-15_7-or-16_3-vu-cleanup.out +++ b/test/JDBC/expected/BABEL-621-before-15_7-or-16_3-vu-cleanup.out @@ -6,7 +6,7 @@ DROP INDEX uniq on babel_621_vu_prepare_table_3; GO ~~ERROR (Code: 3723)~~ -~~ERROR (Message: cannot drop index uniqbabel_621_vu_prepare_table_d6716c55a366d04accd1036436eb2a86 because constraint uniqbabel_621_vu_prepare_table_d6716c55a366d04accd1036436eb2a86 on table babel_621_vu_prepare_table_3 requires it)~~ +~~ERROR (Message: cannot drop index uniq because constraint uniq on table babel_621_vu_prepare_table_3 requires it)~~ DROP INDEX very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_table_with_long_index_name; diff --git a/test/JDBC/expected/BABEL-621-before-18_5-vu-cleanup.out b/test/JDBC/expected/BABEL-621-before-18_5-vu-cleanup.out new file mode 100644 index 00000000000..984b6c86767 --- /dev/null +++ b/test/JDBC/expected/BABEL-621-before-18_5-vu-cleanup.out @@ -0,0 +1,41 @@ +DROP INDEX idx on babel_621_vu_prepare_table_1; +DROP INDEX idx on babel_621_vu_prepare_table_2; +GO + +DROP INDEX uniq on babel_621_vu_prepare_table_3; +GO + +DROP INDEX very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_table_with_long_index_name; +GO + +DROP INDEX very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO + +DROP TABLE babel_621_vu_prepare_table_1; +GO +DROP TABLE babel_621_vu_prepare_table_2; +GO +DROP TABLE babel_621_vu_prepare_table_3; +GO +DROP TABLE babel_621_vu_prepare_table_4; +GO +DROP TABLE babel_621_vu_prepare_table_with_long_index_name; +GO +DROP TABLE babel_621_vu_prepare_second_table_with_long_index_name; +GO +DROP TABLE babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO +DROP TABLE babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO +DROP TABLE babel_621_vu_prepare_table_6; +GO +DROP TABLE table_6; +GO +DROP TABLE table_7; +GO +DROP TABLE babel_621_vu_prepare_table_7; +GO +DROP TABLE babel_621_vu_prepare_table_8; +GO +DROP TABLE babel_621_vu_prepare_table_10; +GO diff --git a/test/JDBC/expected/BABEL-621-before-18_5-vu-prepare.out b/test/JDBC/expected/BABEL-621-before-18_5-vu-prepare.out new file mode 100644 index 00000000000..d31d521d5aa --- /dev/null +++ b/test/JDBC/expected/BABEL-621-before-18_5-vu-prepare.out @@ -0,0 +1,111 @@ +create table babel_621_vu_prepare_table_1 (a int); +go +create table babel_621_vu_prepare_table_2 (a int); +go +create index idx on babel_621_vu_prepare_table_1(a); +go +create index idx on babel_621_vu_prepare_table_2(a); +go + +create table babel_621_vu_prepare_table_3 (a int); +go +alter table babel_621_vu_prepare_table_3 add constraint uniq unique (a); +go +create index uniq on babel_621_vu_prepare_table_3(a); +go + +create table babel_621_vu_prepare_table_4 (a int); +go +create index uniq_table_4 on babel_621_vu_prepare_table_4(a); +go +alter table babel_621_vu_prepare_table_4 add constraint uniq_table_4 unique (a); +go +alter table babel_621_vu_prepare_table_4 drop constraint uniq_table_4; +go + +-- Very long index name +create table babel_621_vu_prepare_table_with_long_index_name (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_table_with_long_index_name(a); +go + +create table babel_621_vu_prepare_second_table_with_long_index_name (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_second_table_with_long_index_name(a); +go + +-- Very long table name and very long index name +create table babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890 (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890(a); +go + +create table babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890 (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890(a); +go + +-- Situation where simple concatenation of table and index name does not work +-- E.g. table_a + index_a == table_b + index_b +create table babel_621_vu_prepare_table_6 (a int); +go +create index idx_ on babel_621_vu_prepare_table_6(a); +go + +create table table_6 (a int); +go +create index idx_babel_621_vu_prepare_ on table_6(a); +go +-- Situation where simple concatenation of index and table name does not work (reverse of previous) +-- E.g. index_a + table_a == index_b + table_b +create table table_7 (a int); +go +create index idx_babel_621_vu_prepare_ on table_7(a); +go + +create table babel_621_vu_prepare_table_7 (a int); +go +create index idx_ on babel_621_vu_prepare_table_7(a); +go + +-- +create table babel_621_vu_prepare_table_8 ( + a int, + value int, + constraint constraint_8 unique nonclustered + ( + value asc + ) + ) +go +alter table babel_621_vu_prepare_table_8 drop constraint constraint_8; +go +insert into babel_621_vu_prepare_table_8 values(1, 1); +insert into babel_621_vu_prepare_table_8 values(2, 1); +go +~~ROW COUNT: 1~~ + +~~ROW COUNT: 1~~ + + +create table babel_621_vu_prepare_table_10 +( + a int, + b int, + c int +) +go +create unique index idx on babel_621_vu_prepare_table_10 (a, b); +go +insert into babel_621_vu_prepare_table_10 values(1, 1, 1); +insert into babel_621_vu_prepare_table_10 values(1, 2, 1); +insert into babel_621_vu_prepare_table_10 values(1, 2, 2); +go +~~ROW COUNT: 1~~ + +~~ROW COUNT: 1~~ + +~~ERROR (Code: 2627)~~ + +~~ERROR (Message: duplicate key value violates unique constraint "idxbabel_621_vu_prepare_table_147dc0d6e295169e8ba6e11ebeb1c6472")~~ + diff --git a/test/JDBC/expected/BABEL-621-before-18_5-vu-verify.out b/test/JDBC/expected/BABEL-621-before-18_5-vu-verify.out new file mode 100644 index 00000000000..cc987f7bfdd --- /dev/null +++ b/test/JDBC/expected/BABEL-621-before-18_5-vu-verify.out @@ -0,0 +1,15 @@ +select a, value from babel_621_vu_prepare_table_8 order by a; +go +~~START~~ +int#!#int +1#!#1 +2#!#1 +~~END~~ + + +drop index idx on babel_621_vu_prepare_table_10; +go +insert into babel_621_vu_prepare_table_10 values(1, 2, 2); +go +~~ROW COUNT: 1~~ + diff --git a/test/JDBC/expected/BABEL-621-vu-prepare.out b/test/JDBC/expected/BABEL-621-vu-prepare.out index d31d521d5aa..050e89dceb5 100644 --- a/test/JDBC/expected/BABEL-621-vu-prepare.out +++ b/test/JDBC/expected/BABEL-621-vu-prepare.out @@ -107,5 +107,5 @@ go ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "idxbabel_621_vu_prepare_table_147dc0d6e295169e8ba6e11ebeb1c6472")~~ +~~ERROR (Message: duplicate key value violates unique constraint "idx")~~ diff --git a/test/JDBC/expected/BABEL-CASE_EXPR-vu-verify.out b/test/JDBC/expected/BABEL-CASE_EXPR-vu-verify.out index 99575bf08b4..d0b75d824ec 100644 --- a/test/JDBC/expected/BABEL-CASE_EXPR-vu-verify.out +++ b/test/JDBC/expected/BABEL-CASE_EXPR-vu-verify.out @@ -14597,7 +14597,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v1#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V1#!#RESULT#!#numeric#!#10#!#2 ~~END~~ @@ -14617,7 +14617,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v2#!#RESULT#!#numeric#!#14#!#4 +BABEL_5341_V2#!#RESULT#!#numeric#!#14#!#4 ~~END~~ @@ -14637,7 +14637,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v3#!#RESULT#!#numeric#!#20#!#0 +BABEL_5341_V3#!#RESULT#!#numeric#!#20#!#0 ~~END~~ @@ -14657,7 +14657,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v4#!#RESULT#!#numeric#!#10#!#4 +BABEL_5341_V4#!#RESULT#!#numeric#!#10#!#4 ~~END~~ @@ -14677,7 +14677,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v5#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V5#!#RESULT#!#numeric#!#10#!#2 ~~END~~ @@ -14697,7 +14697,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v6#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V6#!#RESULT#!#numeric#!#10#!#2 ~~END~~ diff --git a/test/JDBC/expected/BABEL-EXTENDEDPROPERTY-v2-vu-verify.out b/test/JDBC/expected/BABEL-EXTENDEDPROPERTY-v2-vu-verify.out index 98648affba5..5a7d5aa7696 100644 --- a/test/JDBC/expected/BABEL-EXTENDEDPROPERTY-v2-vu-verify.out +++ b/test/JDBC/expected/BABEL-EXTENDEDPROPERTY-v2-vu-verify.out @@ -394,8 +394,8 @@ TABLE#!#babel_extended_properties_table1#!#table property1#!#table property1 bef TABLE#!#babel_extended_properties_table1#!#table property2#!#table property2 before TABLE#!#BABEL_extended_properties_table2#!#table property1#!#table property1 before TABLE#!#BABEL_extended_properties_table2#!#table property2#!#table property2 before -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property1#!#table property1 before -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property2#!#table property2 before +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property1#!#table property1 before +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property2#!#table property2 before ~~END~~ @@ -414,7 +414,7 @@ GO varchar#!#varchar#!#varchar#!#sql_variant TABLE#!#babel_extended_properties_table1#!#table property1#!#table property1 before TABLE#!#BABEL_extended_properties_table2#!#table property1#!#table property1 before -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property1#!#table property1 before +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property1#!#table property1 before ~~END~~ @@ -467,8 +467,8 @@ TABLE#!#babel_extended_properties_table1#!#table property1#!#table property1 aft TABLE#!#babel_extended_properties_table1#!#table property2#!#table property2 before TABLE#!#BABEL_extended_properties_table2#!#table property1#!#table property1 before TABLE#!#BABEL_extended_properties_table2#!#table property2#!#table property2 after -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property1#!#table property1 after -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property2#!#table property2 before +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property1#!#table property1 after +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property2#!#table property2 before ~~END~~ @@ -509,7 +509,7 @@ varchar#!#varchar#!#varchar#!#sql_variant TABLE#!#babel_extended_properties_table1#!#table property1#!#table property1 after TABLE#!#babel_extended_properties_table1#!#table property2#!#table property2 before TABLE#!#BABEL_extended_properties_table2#!#table property1#!#table property1 before -TABLE#!#babel_extended_properties_table783e9cd01e68686d0d071a20f0d03eba#!#table property2#!#table property2 before +TABLE#!#BABEL_extended_properties_table3_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_long_name#!#table property2#!#table property2 before ~~END~~ diff --git a/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.out b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.out new file mode 100644 index 00000000000..d36c968e99f --- /dev/null +++ b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.out @@ -0,0 +1,30 @@ +-- tsql +-- Clean up +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user1 +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user2 +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user3 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role5 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 +GO +USE master +GO +DROP DATABASE BABEL_ROLE_MEMBER_vu_prepare_db +GO diff --git a/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.out b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.out new file mode 100644 index 00000000000..ef825dbd0f7 --- /dev/null +++ b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.out @@ -0,0 +1,59 @@ +-- tsql +CREATE DATABASE BABEL_ROLE_MEMBER_vu_prepare_db +go + +USE BABEL_ROLE_MEMBER_vu_prepare_db +go + +CREATE PROC BABEL_ROLE_MEMBER_vu_prepare_proc AS +BEGIN + SELECT dp1.name AS RoleName, dp1.type AS RoleType, + dp2.name AS MemberName, dp2.type AS MemberType + FROM sys.database_role_members AS drm + INNER JOIN sys.database_principals AS dp1 + ON drm.role_principal_id = dp1.principal_id + INNER JOIN sys.database_principals AS dp2 + ON drm.member_principal_id = dp2.principal_id + ORDER BY dp1.name, dp2.name +END +GO + +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role5 +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 WITH PASSWORD = '123' +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 WITH PASSWORD = '123' +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 WITH PASSWORD = '123' +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user1 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user2 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user3 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 +GO + +-- role1 -> role2 -> role3 -> role4 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +-- role1 -> user1 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user1 +GO +-- role2 -> user2 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user2 +GO +-- role3 -> user3 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user3 +GO diff --git a/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-verify.out b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-verify.out new file mode 100644 index 00000000000..dc618fd255a --- /dev/null +++ b/test/JDBC/expected/BABEL-ROLE-MEMBER-before-18_5-vu-verify.out @@ -0,0 +1,702 @@ +USE BABEL_ROLE_MEMBER_vu_prepare_db +go + +SELECT DB_NAME() +GO +~~START~~ +nvarchar +babel_role_member_vu_prepare_db +~~END~~ + + +-- Print the current membership status +EXEC BABEL_ROLE_MEMBER_vu_prepare_proc +GO +~~START~~ +varchar#!#char#!#varchar#!#char +BABEL_ROLE_MEMBER_vu_prepare_role1#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_role2#!#R +BABEL_ROLE_MEMBER_vu_prepare_role1#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_user1#!#S +BABEL_ROLE_MEMBER_vu_prepare_role2#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_role3#!#R +BABEL_ROLE_MEMBER_vu_prepare_role2#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_user2#!#S +BABEL_ROLE_MEMBER_vu_prepare_role3#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_role4#!#R +BABEL_ROLE_MEMBER_vu_prepare_role3#!#R#!#BABEL_ROLE_MEMBER_vu_prepare_user3#!#S +db_owner#!#R#!#dbo#!#S +~~END~~ + + +-- IS_MEMBER and IS_ROLEMEMBER +-- Basic membership check +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_role4') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_user3') +GO +~~START~~ +int +1 +~~END~~ + + +-- Not member, should return 0 +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role4', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role5') +GO +~~START~~ +int +0 +~~END~~ + + +-- Nested membership check +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user3') +GO +~~START~~ +int +1 +~~END~~ + + +-- Membership of oneself, should return 1, this also applies to user +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('public', 'public') +GO +~~START~~ +int +1 +~~END~~ + + +-- Every db principal is member of PUBLIC +SELECT IS_MEMBER('public') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('public', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('public', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +1 +~~END~~ + + +-- Should return 0 +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'db_owner') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'db_owner') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'db_owner') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'dbo') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'dbo') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'dbo') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +0 +~~END~~ + + +-- Invalid role/principal name, should return NULL +SELECT IS_MEMBER('xxx') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('xxx') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('xxx', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'xxx') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER(NULL, 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', NULL) +GO +~~START~~ +int + +~~END~~ + + +-- Given name is a real user but not associated with login, should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +~~START~~ +int + +~~END~~ + + +-- NULL input, should return NULL +SELECT IS_MEMBER(NULL) +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER(NULL, 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', NULL) +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER(NULL, NULL) +GO +~~START~~ +int + +~~END~~ + + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1 ', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3 ') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3 ', 'BABEL_ROLE_MEMBER_vu_prepare_role4 ') +GO +~~START~~ +int +1 +~~END~~ + + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces - Should return 0 +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +0 +~~END~~ + + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces - Should return NULL +SELECT IS_ROLEMEMBER('xxx ') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('xxx ', 'BABEL_ROLE_MEMBER_vu_prepare_user1 ') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1 ', 'xxx ') +GO +~~START~~ +int + +~~END~~ + + +-- IS_MEMBER: Each Input with Trailing Spaces +SELECT IS_MEMBER('public ') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_MEMBER('xxx ') +GO +~~START~~ +int + +~~END~~ + + +-- IS_ROLEMEMBER, IS_MEMBER: Input with Leading Spaces - should not trim and return NULL +SELECT IS_ROLEMEMBER(' BABEL_ROLE_MEMBER_vu_prepare_role1', ' BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2 ', ' BABEL_ROLE_MEMBER_vu_prepare_role3 ') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_MEMBER(' public') +GO +~~START~~ +int + +~~END~~ + + +-- Case insensitive check +SELECT IS_ROLEMEMBER('PUBLIC', 'Babel_role_member_vu_prepare_User1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('Babel_role_member_vu_prepare_role1', 'babel_role_member_vu_prepare_ROLE3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_MEMBER('Public') +GO +~~START~~ +int +1 +~~END~~ + + +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 WITH PASSWORD = '123' +GO + +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login1 password=123 +-- Connect with different logins to test membership view permission +-- Test on user1 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO +~~START~~ +nvarchar +BABEL_ROLE_MEMBER_vu_prepare_user1 +~~END~~ + + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int +1 +~~END~~ + + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +0 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +0 +~~END~~ + + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int + +~~END~~ + + +USE master +GO + +-- tsql +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 WITH PASSWORD = '123' +GO + +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login2 password=123 +-- Test on user2 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO +~~START~~ +nvarchar +BABEL_ROLE_MEMBER_vu_prepare_user2 +~~END~~ + + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +~~START~~ +int +1 +~~END~~ + + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +0 +~~END~~ + + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +~~START~~ +int + +~~END~~ + + +USE master +GO + +-- tsql +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 WITH PASSWORD = '123' +GO + +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login3 password=123 +-- Test on user3 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO +~~START~~ +nvarchar +BABEL_ROLE_MEMBER_vu_prepare_user3 +~~END~~ + + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +~~START~~ +int +1 +~~END~~ + +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user3') +GO +~~START~~ +int +1 +~~END~~ + + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role4') +GO +~~START~~ +int +0 +~~END~~ + + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_role4') +GO +~~START~~ +int + +~~END~~ + +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +~~START~~ +int + +~~END~~ + + +-- tsql +USE master +GO diff --git a/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-prepare.out b/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-prepare.out index 83290916c2f..ef825dbd0f7 100644 --- a/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-prepare.out +++ b/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-prepare.out @@ -5,14 +5,6 @@ go USE BABEL_ROLE_MEMBER_vu_prepare_db go -SELECT DB_NAME() -GO -~~START~~ -nvarchar -babel_role_member_vu_prepare_db -~~END~~ - - CREATE PROC BABEL_ROLE_MEMBER_vu_prepare_proc AS BEGIN SELECT dp1.name AS RoleName, dp1.type AS RoleType, diff --git a/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-verify.out b/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-verify.out index 140c76a56ec..3282b8c22d2 100644 --- a/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-verify.out +++ b/test/JDBC/expected/BABEL-ROLE-MEMBER-vu-verify.out @@ -1,6 +1,14 @@ USE BABEL_ROLE_MEMBER_vu_prepare_db go +SELECT DB_NAME() +GO +~~START~~ +nvarchar +BABEL_ROLE_MEMBER_vu_prepare_db +~~END~~ + + -- Print the current membership status EXEC BABEL_ROLE_MEMBER_vu_prepare_proc GO diff --git a/test/JDBC/expected/BABEL-SP_FKEYS-vu-verify.out b/test/JDBC/expected/BABEL-SP_FKEYS-vu-verify.out index 1a942c49bfc..4807de56b66 100644 --- a/test/JDBC/expected/BABEL-SP_FKEYS-vu-verify.out +++ b/test/JDBC/expected/BABEL-SP_FKEYS-vu-verify.out @@ -86,10 +86,10 @@ exec sp_fkeys @pktable_name = 'babel_sp_fkeys_vu_prepare_mytable5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -97,10 +97,10 @@ exec sp_fkeys @pktable_name = 'babel_sp_fkeys_vu_prepare_MYTABLE5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -108,8 +108,8 @@ exec sp_fkeys @fktable_name = 'babel_sp_fkeys_vu_prepare_mytable6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -117,8 +117,8 @@ exec sp_fkeys @fktable_name = 'babel_sp_fkeys_vu_prepare_MYTABLE6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -126,8 +126,8 @@ exec sp_fkeys @fktable_name = 'babel_sp_fkeys_vu_prepare_mytable7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -135,8 +135,8 @@ exec sp_fkeys @fktable_name = 'babel_sp_fkeys_vu_prepare_MYTABLE7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ -- Delimiter table tests @@ -144,10 +144,10 @@ exec sp_fkeys @pktable_name = [babel_sp_fkeys_vu_prepare_mytable5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -155,10 +155,10 @@ exec sp_fkeys @pktable_name = [babel_sp_fkeys_vu_prepare_MYTABLE5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -166,8 +166,8 @@ exec sp_fkeys @fktable_name = [babel_sp_fkeys_vu_prepare_mytable6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -175,8 +175,8 @@ exec sp_fkeys @fktable_name = [babel_sp_fkeys_vu_prepare_MYTABLE6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable6_column_c_column_d_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -184,8 +184,8 @@ exec sp_fkeys @fktable_name = [babel_sp_fkeys_vu_prepare_mytable7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ @@ -193,8 +193,8 @@ exec sp_fkeys @fktable_name = [babel_sp_fkeys_vu_prepare_MYTABLE7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 -babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_mytable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#cOlUmN_a#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 +babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable5#!#CoLuMn_b#!#babel_sp_fkeys_vu_prepare_db1#!#dbo#!#babel_sp_fkeys_vu_prepare_MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#babel_sp_fkeys_vu_prepare_mytable7_mycolumn_a_mycolumn_b_fkey#!#babel_sp_fkeys_vu_prepare_mytable5_pkey#!#7 ~~END~~ diff --git a/test/JDBC/expected/BABEL-SP_FKEYS.out b/test/JDBC/expected/BABEL-SP_FKEYS.out index af849544ce7..98df8b689ef 100644 --- a/test/JDBC/expected/BABEL-SP_FKEYS.out +++ b/test/JDBC/expected/BABEL-SP_FKEYS.out @@ -102,10 +102,10 @@ exec sp_fkeys @pktable_name = 'mytable5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -113,10 +113,10 @@ exec sp_fkeys @pktable_name = 'MYTABLE5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -124,8 +124,8 @@ exec sp_fkeys @fktable_name = 'mytable6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -133,8 +133,8 @@ exec sp_fkeys @fktable_name = 'MYTABLE6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -142,8 +142,8 @@ exec sp_fkeys @fktable_name = 'mytable7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -151,8 +151,8 @@ exec sp_fkeys @fktable_name = 'MYTABLE7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ -- Delimiter table tests @@ -160,10 +160,10 @@ exec sp_fkeys @pktable_name = [mytable5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -171,10 +171,10 @@ exec sp_fkeys @pktable_name = [MYTABLE5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -182,8 +182,8 @@ exec sp_fkeys @fktable_name = [mytable6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -191,8 +191,8 @@ exec sp_fkeys @fktable_name = [MYTABLE6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -200,8 +200,8 @@ exec sp_fkeys @fktable_name = [mytable7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -209,8 +209,8 @@ exec sp_fkeys @fktable_name = [MYTABLE7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -359,10 +359,10 @@ exec sp_fkeys @pktable_name = 'mytable5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -370,10 +370,10 @@ exec sp_fkeys @pktable_name = 'MYTABLE5' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -381,8 +381,8 @@ exec sp_fkeys @fktable_name = 'mytable6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -390,8 +390,8 @@ exec sp_fkeys @fktable_name = 'MYTABLE6' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -399,8 +399,8 @@ exec sp_fkeys @fktable_name = 'mytable7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -408,8 +408,8 @@ exec sp_fkeys @fktable_name = 'MYTABLE7' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ -- Delimiter table tests @@ -417,10 +417,10 @@ exec sp_fkeys @pktable_name = [mytable5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -428,10 +428,10 @@ exec sp_fkeys @pktable_name = [MYTABLE5] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -439,8 +439,8 @@ exec sp_fkeys @fktable_name = [mytable6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -448,8 +448,8 @@ exec sp_fkeys @fktable_name = [MYTABLE6] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable6#!#cOlUmN_c#!#1#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable6#!#CoLuMn_d#!#2#!#1#!#1#!#mytable6_column_c_column_d_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -457,8 +457,8 @@ exec sp_fkeys @fktable_name = [mytable7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ @@ -466,8 +466,8 @@ exec sp_fkeys @fktable_name = [MYTABLE7] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint -db1#!#dbo#!#mytable5#!#cOlUmN_a#!#db1#!#dbo#!#mytable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 -db1#!#dbo#!#mytable5#!#CoLuMn_b#!#db1#!#dbo#!#mytable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#cOlUmN_a#!#db1#!#dbo#!#MyTable7#!#MyColumn_a#!#1#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 +db1#!#dbo#!#MyTable5#!#CoLuMn_b#!#db1#!#dbo#!#MyTable7#!#MyColumn_b#!#2#!#1#!#1#!#mytable7_mycolumn_a_mycolumn_b_fkey#!#mytable5_pkey#!#7 ~~END~~ diff --git a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-cleanup.out b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-cleanup.out index faa039f14f8..45f4c7d04c7 100644 --- a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-cleanup.out +++ b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-cleanup.out @@ -6,7 +6,7 @@ DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all GO DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_seluct_all GO -DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_Mixed +DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_mixed GO DROP TABLE babel_sp_stored_procedures_vu_prepare_t1 GO diff --git a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-prepare.out b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-prepare.out index 2bc0df62191..df7107b420b 100644 --- a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-prepare.out +++ b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES-vu-prepare.out @@ -24,9 +24,9 @@ AS SELECT * FROM babel_sp_stored_procedures_vu_prepare_t1 GO -DROP PROCEDURE IF EXISTS babel_sp_stored_procedures_vu_prepare_select_all_Mixed +DROP PROCEDURE IF EXISTS babel_sp_stored_procedures_vu_prepare_select_all_mixed GO -CREATE PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_Mixed +CREATE PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_mixed AS SELECT * FROM babel_sp_stored_procedures_vu_prepare_t1 GO diff --git a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES.out b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES.out index 9b0cb3ac6cb..17947e566fb 100644 --- a/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES.out +++ b/test/JDBC/expected/BABEL-SP_STORED_PROCEDURES.out @@ -124,7 +124,7 @@ EXEC sp_stored_procedures 'SELECT_ALL_MIXED' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -132,7 +132,7 @@ EXEC sp_stored_procedures 'select_all_mixed' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -140,7 +140,7 @@ EXEC sp_stored_procedures 'sELecT_aLL_miXed' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -157,7 +157,7 @@ EXEC sp_stored_procedures @sp_name='select_a%', @fusepattern=1 GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 db1#!#dbo#!#select_all;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -342,7 +342,7 @@ EXEC sp_stored_procedures 'SELECT_ALL_MIXED' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -350,7 +350,7 @@ EXEC sp_stored_procedures 'select_all_mixed' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -358,7 +358,7 @@ EXEC sp_stored_procedures 'sELecT_aLL_miXed' GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ @@ -375,7 +375,7 @@ EXEC sp_stored_procedures @sp_name='select_a%', @fusepattern=1 GO ~~START~~ varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint -db1#!#dbo#!#select_all_mixed;1#!#-1#!#-1#!#-1#!##!#2 +db1#!#dbo#!#SelEct_AlL_Mixed;1#!#-1#!#-1#!#-1#!##!#2 db1#!#dbo#!#select_all;1#!#-1#!#-1#!#-1#!##!#2 ~~END~~ diff --git a/test/JDBC/expected/BABEL-SP_TABLES-vu-verify.out b/test/JDBC/expected/BABEL-SP_TABLES-vu-verify.out index 6ec05d19774..5b3b181a04d 100644 --- a/test/JDBC/expected/BABEL-SP_TABLES-vu-verify.out +++ b/test/JDBC/expected/BABEL-SP_TABLES-vu-verify.out @@ -22,7 +22,7 @@ exec sp_tables @TABLE_NAME = 'babel_sp_tables_vu_prepare_mytable1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable1#!#TABLE#!# ~~END~~ @@ -30,7 +30,7 @@ exec sp_tables @TABLE_NAME = 'babel_sp_tables_vu_prepare_MYTABLE1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable1#!#TABLE#!# ~~END~~ @@ -38,7 +38,7 @@ exec sp_tables @TABLE_NAME = 'babel_sp_tables_vu_prepare_mytable2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable2#!#TABLE#!# ~~END~~ @@ -46,7 +46,7 @@ exec sp_tables @TABLE_NAME = 'babel_sp_tables_vu_prepare_MYTABLE2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable2#!#TABLE#!# ~~END~~ @@ -55,7 +55,7 @@ exec sp_tables @TABLE_NAME = [babel_sp_tables_vu_prepare_mytable1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable1#!#TABLE#!# ~~END~~ @@ -63,7 +63,7 @@ exec sp_tables @TABLE_NAME = [babel_sp_tables_vu_prepare_MYTABLE1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable1#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable1#!#TABLE#!# ~~END~~ @@ -71,7 +71,7 @@ exec sp_tables @TABLE_NAME = [babel_sp_tables_vu_prepare_mytable2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable2#!#TABLE#!# ~~END~~ @@ -79,7 +79,7 @@ exec sp_tables @TABLE_NAME = [babel_sp_tables_vu_prepare_MYTABLE2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_mytable2#!#TABLE#!# +babel_sp_tables_vu_prepare_db1#!#dbo#!#babel_sp_tables_vu_prepare_MyTable2#!#TABLE#!# ~~END~~ diff --git a/test/JDBC/expected/BABEL-SP_TABLES.out b/test/JDBC/expected/BABEL-SP_TABLES.out index aa9cc468526..bf28b2152cc 100644 --- a/test/JDBC/expected/BABEL-SP_TABLES.out +++ b/test/JDBC/expected/BABEL-SP_TABLES.out @@ -46,7 +46,7 @@ exec sp_tables @TABLE_NAME = 'mytable1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -54,7 +54,7 @@ exec sp_tables @TABLE_NAME = 'MYTABLE1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -62,7 +62,7 @@ exec sp_tables @TABLE_NAME = 'mytable2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -70,7 +70,7 @@ exec sp_tables @TABLE_NAME = 'MYTABLE2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -79,7 +79,7 @@ exec sp_tables @TABLE_NAME = [mytable1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -87,7 +87,7 @@ exec sp_tables @TABLE_NAME = [MYTABLE1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -95,7 +95,7 @@ exec sp_tables @TABLE_NAME = [mytable2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -103,7 +103,7 @@ exec sp_tables @TABLE_NAME = [MYTABLE2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -570,7 +570,7 @@ exec sp_tables @TABLE_NAME = 'mytable1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -578,7 +578,7 @@ exec sp_tables @TABLE_NAME = 'MYTABLE1' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -586,7 +586,7 @@ exec sp_tables @TABLE_NAME = 'mytable2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -594,7 +594,7 @@ exec sp_tables @TABLE_NAME = 'MYTABLE2' go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -603,7 +603,7 @@ exec sp_tables @TABLE_NAME = [mytable1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -611,7 +611,7 @@ exec sp_tables @TABLE_NAME = [MYTABLE1] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable1#!#TABLE#!# +db1#!#dbo#!#MyTable1#!#TABLE#!# ~~END~~ @@ -619,7 +619,7 @@ exec sp_tables @TABLE_NAME = [mytable2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ @@ -627,7 +627,7 @@ exec sp_tables @TABLE_NAME = [MYTABLE2] go ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#varchar -db1#!#dbo#!#mytable2#!#TABLE#!# +db1#!#dbo#!#MyTable2#!#TABLE#!# ~~END~~ diff --git a/test/JDBC/expected/BABEL-login-db-long-identifiers-vu-verify.out b/test/JDBC/expected/BABEL-login-db-long-identifiers-vu-verify.out index 05669f60671..ddce9002ef4 100644 --- a/test/JDBC/expected/BABEL-login-db-long-identifiers-vu-verify.out +++ b/test/JDBC/expected/BABEL-login-db-long-identifiers-vu-verify.out @@ -110,13 +110,15 @@ select db_name(); go ~~START~~ nvarchar -long_identifier_database_test_a894fb1797d5bd72eca891e48e292b226 +long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst ~~END~~ -- terminate-tsql-conn user=jdbc_user password=12345678 database=long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst -- tsql +USE master; +GO DROP DATABASE long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst; GO @@ -136,7 +138,7 @@ select db_name(); go ~~START~~ nvarchar -mixed_case_database_test_xyzabc30cf92ced03f7ac92f201f0af44b2711 +Mixed_Case_Database_Test_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuV ~~END~~ @@ -163,13 +165,15 @@ select db_name(); go ~~START~~ nvarchar -dätàbäsé_tëst_àáâãäåd6a6618170bcdd4e75eba3f835f8297b +Dätàbäsé_Tëst_àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóô ~~END~~ -- terminate-tsql-conn user=jdbc_user password=12345678 database=Dätàbäsé_Tëst_àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóô -- tsql +USE master; +GO DROP DATABASE Dätàbäsé_Tëst_àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóô; GO @@ -189,13 +193,15 @@ select suser_name(), db_name(); go ~~START~~ nvarchar#!#nvarchar -long_identifier_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqr#!#long_identifier_database_test_a894fb1797d5bd72eca891e48e292b226 +long_identifier_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqr#!#long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst ~~END~~ -- terminate-tsql-conn user=long_identifier_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqr password=1234 database=long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst -- tsql +USE master; +GO DROP DATABASE long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst; GO @@ -214,7 +220,7 @@ select suser_name(), db_name(); go ~~START~~ nvarchar#!#nvarchar -Mixed_Case_Login_Test_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXy#!#mixed_case_database_test_xyzabc30cf92ced03f7ac92f201f0af44b2711 +Mixed_Case_Login_Test_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXy#!#Mixed_Case_Database_Test_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuV ~~END~~ @@ -248,13 +254,16 @@ select suser_name(), db_name(); go ~~START~~ nvarchar#!#nvarchar -long_bracket_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu#!#long_bracket_database_test_abcd6e156c6615f983f78b93694caae2bfdb +long_bracket_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu#!#long_bracket_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw ~~END~~ -- terminate-tsql-conn user=long_bracket_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu password=1234 database=long_bracket_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw -- tsql +USE master; +GO + DROP DATABASE [long_bracket_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw]; GO @@ -273,12 +282,14 @@ select suser_name(), db_name(); go ~~START~~ nvarchar#!#nvarchar -Bracketed_Mixed_Case_Login_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsT#!#bracketed_mixed_case_database_x3aaf30f9af14101a36e10038975fbe5c +Bracketed_Mixed_Case_Login_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsT#!#Bracketed_Mixed_Case_Database_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoP ~~END~~ -- terminate-tsql-conn user=Bracketed_Mixed_Case_Login_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsT password=1234 database=Bracketed_Mixed_Case_Database_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoP -- tsql +USE master; +GO DROP DATABASE [Bracketed_Mixed_Case_Database_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoP]; GO diff --git a/test/JDBC/expected/BABEL_3571.out b/test/JDBC/expected/BABEL_3571.out index cba3ed82334..2512b55e547 100644 --- a/test/JDBC/expected/BABEL_3571.out +++ b/test/JDBC/expected/BABEL_3571.out @@ -144,14 +144,14 @@ INSERT INTO babel_3571_3 VALUES (NULL, '', 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 VALUES (0, NULL, 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 VALUES (NULL, NULL, NULL) @@ -163,7 +163,7 @@ INSERT INTO babel_3571_3 VALUES (NULL, NULL, 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ SELECT indexdef FROM pg_indexes @@ -697,7 +697,7 @@ INSERT INTO babel_3571_3 (id1, id2) VALUES (1,10) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 (id1, id2) VALUES (NULL,10) GO @@ -845,7 +845,7 @@ CREATE UNIQUE INDEX babel_3571_idx ON babel_3571_1(id) GO ~~ERROR (Code: 1505)~~ -~~ERROR (Message: could not create unique index "babel_3571_idxbabel_3571_176ad772d1712c20d411961692b38d002")~~ +~~ERROR (Message: could not create unique index "babel_3571_idx")~~ -- now table will contain only one NULL value and create unique index/constraint shoudl start working DELETE TOP (1) FROM babel_3571_1 WHERE id IS NULL; diff --git a/test/JDBC/expected/BABEL_4367.out b/test/JDBC/expected/BABEL_4367.out index 93057ebe04e..b0fccf49c4e 100644 --- a/test/JDBC/expected/BABEL_4367.out +++ b/test/JDBC/expected/BABEL_4367.out @@ -73,8 +73,8 @@ SELECT name FROM sys.tables WHERE name in ('BABEL_4367_1', 'BABEL_4367_2','BABEL GO ~~START~~ varchar -babel_4367_2 -babel_4367_3 +BABEL_4367_2 +BABEL_4367_3 ~~END~~ @@ -88,8 +88,8 @@ SELECT name FROM sys.tables WHERE name in ('BABEL_4367_1', 'BABEL_4367_2','BABEL GO ~~START~~ varchar -babel_4367_2 -babel_4367_3 +BABEL_4367_2 +BABEL_4367_3 ~~END~~ @@ -181,7 +181,7 @@ SELECT name FROM sys.objects WHERE name = 'BABEL_4367_VIEW_5' GO ~~START~~ varchar -babel_4367_view_5 +BABEL_4367_VIEW_5 ~~END~~ DROP VIEW BABEL_4367_VIEW_2, BABEL_4367_VIEW_5 @@ -194,7 +194,7 @@ SELECT name FROM sys.objects WHERE name = 'BABEL_4367_VIEW_5' GO ~~START~~ varchar -babel_4367_view_5 +BABEL_4367_VIEW_5 ~~END~~ DROP VIEW BABEL_4367_VIEW_5 @@ -300,8 +300,8 @@ SELECT name FROM sys.procedures WHERE name in ('BABEL_4367_PROCEDURE_1', 'BABEL_ GO ~~START~~ varchar -babel_4367_procedure_1 -babel_4367_procedure_2 +BABEL_4367_PROCEDURE_1 +BABEL_4367_PROCEDURE_2 ~~END~~ diff --git a/test/JDBC/expected/BABEL_4367_2.out b/test/JDBC/expected/BABEL_4367_2.out index b2e38dab687..5fa74524bea 100644 --- a/test/JDBC/expected/BABEL_4367_2.out +++ b/test/JDBC/expected/BABEL_4367_2.out @@ -106,16 +106,16 @@ SELECT name FROM sys.objects WHERE name LIKE 'babel_4367_%' ORDER BY name ASC GO ~~START~~ varchar -babel_4367_1 -babel_4367_2 -babel_4367_f1 -babel_4367_f2 -babel_4367_p_1 -babel_4367_p_2 +BABEL_4367_1 +BABEL_4367_2 +BABEL_4367_F1 +BABEL_4367_F2 +BABEL_4367_P_1 +BABEL_4367_P_2 babel_4367_s_1 babel_4367_s_2 -babel_4367_v_1 -babel_4367_v_2 +BABEL_4367_V_1 +BABEL_4367_V_2 ~~END~~ SELECT name FROM sys.types WHERE name LIKE 'babel_4367_%' ORDER BY name ASC diff --git a/test/JDBC/expected/BABEL_4553-vu-verify.out b/test/JDBC/expected/BABEL_4553-vu-verify.out index 47b0d1023f5..c602b5c209f 100644 --- a/test/JDBC/expected/BABEL_4553-vu-verify.out +++ b/test/JDBC/expected/BABEL_4553-vu-verify.out @@ -36,8 +36,8 @@ GO ~~START~~ varchar#!#varchar#!#varchar#!#int#!#int BABEL_4553#!#col_name#!#int#!##!# -babel_4553#!#col_name#!#int#!##!# -babel_4553#!#col_name_tsql#!#varchar#!#7#!# +BABEL_4553#!#col_name#!#int#!##!# +BABEL_4553#!#col_name_tsql#!#varchar#!#7#!# ~~END~~ diff --git a/test/JDBC/expected/BABEL_4553.out b/test/JDBC/expected/BABEL_4553.out index 9cab05f11bc..30ff2336dd5 100644 --- a/test/JDBC/expected/BABEL_4553.out +++ b/test/JDBC/expected/BABEL_4553.out @@ -149,23 +149,23 @@ GO babel_4544_1#!#col_1#!##!# bAbel_4544_1#!#col_1_psql#!##!# BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_datetime_128_psql#!##!#6 -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_datetime_128_tsql#!##!#3 +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_datetime_128_tsql#!##!#3 Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_datetime_63_psql#!##!#4 Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_datetime_63_tsql#!##!#1 BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_datetime_64_psql#!##!#5 -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_datetime_64_tsql#!##!#2 +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_datetime_64_tsql#!##!#2 BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_int_128_psql#!##!# -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_int_128_tsql#!##!# +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_int_128_tsql#!##!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_int_63_psql#!##!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_int_63_tsql#!##!# BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_int_64_psql#!##!# -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_int_64_tsql#!##!# +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_int_64_tsql#!##!# BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_varchar_128_psql#!#99#!# -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_varchar_128_tsql#!#13#!# +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_varchar_128_tsql#!#13#!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_varchar_63_psql#!#97#!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_varchar_63_tsql#!#11#!# BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_varchar_64_psql#!#98#!# -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_varchar_64_tsql#!#12#!# +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_varchar_64_tsql#!#12#!# BABEL_4544_2#!#col2#!##!# bABeL_4544_3#!#col3#!##!# babel_4544_4#!#col4#!##!# @@ -354,23 +354,23 @@ GO babel_4544_1#!#col_1#!##!# bAbel_4544_1#!#col_1_psql#!##!# BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_datetime_128_psql#!##!#6 -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_datetime_128_tsql#!##!#3 +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_datetime_128_tsql#!##!#3 Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_datetime_63_psql#!##!#4 Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_datetime_63_tsql#!##!#1 BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_datetime_64_psql#!##!#5 -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_datetime_64_tsql#!##!#2 +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_datetime_64_tsql#!##!#2 BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_int_128_psql#!##!# -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_int_128_tsql#!##!# +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_int_128_tsql#!##!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_int_63_psql#!##!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_int_63_tsql#!##!# BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_int_64_psql#!##!# -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_int_64_tsql#!##!# +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_int_64_tsql#!##!# BABEL_4544_this_is_hundred_and_twenty_eight_letters_long_word_a#!#col_varchar_128_psql#!#99#!# -babel_4544_this_is_hundred_and_e319d68769733eed3eafd97258aa9a1a#!#col_varchar_128_tsql#!#13#!# +bAbEl_4544_this_is_hundred_and_twenty_eight_letters_long_word_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#!#col_varchar_128_tsql#!#13#!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_varchar_63_psql#!#97#!# Babel_4544_this_is_sixty_three_letters_long_word_aaaaaaaaaaaaaa#!#col_varchar_63_tsql#!#11#!# BABEL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaa#!#col_varchar_64_psql#!#98#!# -babel_4544_this_is_sixty_four_lca3b3f6a911242ab2b20137ae3030beb#!#col_varchar_64_tsql#!#12#!# +BaBeL_4544_this_is_sixty_four_letters_long_word_aaaaaaaaaaaaaaaa#!#col_varchar_64_tsql#!#12#!# BABEL_4544_2#!#col2#!##!# bABeL_4544_3#!#col3#!##!# babel_4544_4#!#col4#!##!# diff --git a/test/JDBC/expected/Date.out b/test/JDBC/expected/Date.out index ea55f29ef91..493cdd7d9f3 100644 --- a/test/JDBC/expected/Date.out +++ b/test/JDBC/expected/Date.out @@ -8522,10 +8522,10 @@ WHERE TABLE_NAME = 'DateView' ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -dateview#!#ComputedDateColumn#!#date -dateview#!#DateColumn#!#date -dateview#!#DefaultDateColumn#!#date -dateview#!#ID#!#int +DateView#!#ComputedDateColumn#!#date +DateView#!#DateColumn#!#date +DateView#!#DefaultDateColumn#!#date +DateView#!#ID#!#int ~~END~~ diff --git a/test/JDBC/expected/Datetime.out b/test/JDBC/expected/Datetime.out index d2bf446ad49..e40bcd450af 100644 --- a/test/JDBC/expected/Datetime.out +++ b/test/JDBC/expected/Datetime.out @@ -9550,17 +9550,17 @@ ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -datetimeview#!#ComputedDateTimeColumn#!#datetime -datetimeview#!#DateTimeColumn#!#datetime -datetimeview#!#Day#!#int -datetimeview#!#DefaultDateTimeColumn#!#datetime -datetimeview#!#Hour#!#int -datetimeview#!#ID#!#int -datetimeview#!#Millisecond#!#int -datetimeview#!#Minute#!#int -datetimeview#!#Month#!#int -datetimeview#!#Second#!#int -datetimeview#!#Year#!#int +DateTimeView#!#ComputedDateTimeColumn#!#datetime +DateTimeView#!#DateTimeColumn#!#datetime +DateTimeView#!#Day#!#int +DateTimeView#!#DefaultDateTimeColumn#!#datetime +DateTimeView#!#Hour#!#int +DateTimeView#!#ID#!#int +DateTimeView#!#Millisecond#!#int +DateTimeView#!#Minute#!#int +DateTimeView#!#Month#!#int +DateTimeView#!#Second#!#int +DateTimeView#!#Year#!#int ~~END~~ diff --git a/test/JDBC/expected/Datetime2.out b/test/JDBC/expected/Datetime2.out index 1b6f2c1683a..8d548a6854d 100644 --- a/test/JDBC/expected/Datetime2.out +++ b/test/JDBC/expected/Datetime2.out @@ -8698,10 +8698,10 @@ WHERE TABLE_NAME = 'DateTime2View' ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -datetime2view#!#ComputedDateTime2Column#!#datetime2 -datetime2view#!#DateTime2Column#!#datetime2 -datetime2view#!#DefaultDateTime2Column#!#datetime2 -datetime2view#!#ID#!#int +DateTime2View#!#ComputedDateTime2Column#!#datetime2 +DateTime2View#!#DateTime2Column#!#datetime2 +DateTime2View#!#DefaultDateTime2Column#!#datetime2 +DateTime2View#!#ID#!#int ~~END~~ diff --git a/test/JDBC/expected/Datetimeoffset.out b/test/JDBC/expected/Datetimeoffset.out index 1af290d1b0e..33b50f1c238 100644 --- a/test/JDBC/expected/Datetimeoffset.out +++ b/test/JDBC/expected/Datetimeoffset.out @@ -9092,13 +9092,13 @@ WHERE TABLE_NAME = 'DTOView' ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -dtoview#!#CESTTime#!#datetimeoffset -dtoview#!#ComputedDTOColumn#!#datetimeoffset -dtoview#!#DefaultDTOColumn#!#datetimeoffset -dtoview#!#DTOColumn#!#datetimeoffset -dtoview#!#ID#!#int -dtoview#!#PSTTime#!#datetimeoffset -dtoview#!#UTCTime#!#datetimeoffset +DTOView#!#CESTTime#!#datetimeoffset +DTOView#!#ComputedDTOColumn#!#datetimeoffset +DTOView#!#DefaultDTOColumn#!#datetimeoffset +DTOView#!#DTOColumn#!#datetimeoffset +DTOView#!#ID#!#int +DTOView#!#PSTTime#!#datetimeoffset +DTOView#!#UTCTime#!#datetimeoffset ~~END~~ diff --git a/test/JDBC/expected/MONEY_OBJECT-before-16_4-vu-verify.out b/test/JDBC/expected/MONEY_OBJECT-before-16_4-vu-verify.out index 62a90d381ee..6702ad92531 100644 --- a/test/JDBC/expected/MONEY_OBJECT-before-16_4-vu-verify.out +++ b/test/JDBC/expected/MONEY_OBJECT-before-16_4-vu-verify.out @@ -282,10 +282,10 @@ EXEC babel_5512_get_column_info_p10 '@customerswithorders_babel_5512_upgrade_mst GO ~~START~~ varchar#!#varchar#!#smallint#!#tinyint#!#tinyint -customerid#!#int#!#4#!#10#!#0 +CustomerID#!#int#!#4#!#10#!#0 money_col#!#money#!#8#!#19#!#4 orderamt#!#money#!#8#!#19#!#4 -orderid#!#int#!#4#!#10#!#0 +Orderid#!#int#!#4#!#10#!#0 small_col#!#smallmoney#!#4#!#10#!#4 ~~END~~ diff --git a/test/JDBC/expected/MONEY_OBJECT-vu-verify.out b/test/JDBC/expected/MONEY_OBJECT-vu-verify.out index 7b5034aaf41..3a72617a817 100644 --- a/test/JDBC/expected/MONEY_OBJECT-vu-verify.out +++ b/test/JDBC/expected/MONEY_OBJECT-vu-verify.out @@ -292,10 +292,10 @@ EXEC babel_5512_get_column_info_p10 '@customerswithorders_babel_5512_upgrade_mst GO ~~START~~ varchar#!#varchar#!#smallint#!#tinyint#!#tinyint -customerid#!#int#!#4#!#10#!#0 +CustomerID#!#int#!#4#!#10#!#0 money_col#!#money#!#8#!#19#!#4 orderamt#!#money#!#8#!#19#!#4 -orderid#!#int#!#4#!#10#!#0 +Orderid#!#int#!#4#!#10#!#0 small_col#!#smallmoney#!#4#!#10#!#4 ~~END~~ diff --git a/test/JDBC/expected/NUMERIC_TYPMOD.out b/test/JDBC/expected/NUMERIC_TYPMOD.out index c83e705c07e..ceba38b7c14 100644 --- a/test/JDBC/expected/NUMERIC_TYPMOD.out +++ b/test/JDBC/expected/NUMERIC_TYPMOD.out @@ -3630,15 +3630,15 @@ ORDER BY ORDINAL_POSITION; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#int -roundresults#!#decimal_round#!#numeric#!#14#!#6 -roundresults#!#numeric_round#!#numeric#!#14#!#6 -roundresults#!#money_round#!#numeric#!#23#!#6 -roundresults#!#float_round#!#float#!#53#!# -roundresults#!#real_round#!#float#!#53#!# -roundresults#!#int_round#!#numeric#!#14#!#2 -roundresults#!#bigint_round#!#numeric#!#23#!#2 -roundresults#!#smallint_round#!#numeric#!#14#!#2 -roundresults#!#tinyint_round#!#numeric#!#14#!#2 +RoundResults#!#decimal_round#!#numeric#!#14#!#6 +RoundResults#!#numeric_round#!#numeric#!#14#!#6 +RoundResults#!#money_round#!#numeric#!#23#!#6 +RoundResults#!#float_round#!#float#!#53#!# +RoundResults#!#real_round#!#float#!#53#!# +RoundResults#!#int_round#!#numeric#!#14#!#2 +RoundResults#!#bigint_round#!#numeric#!#23#!#2 +RoundResults#!#smallint_round#!#numeric#!#14#!#2 +RoundResults#!#tinyint_round#!#numeric#!#14#!#2 ~~END~~ @@ -3667,9 +3667,9 @@ ORDER BY ORDINAL_POSITION; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#int -roundresultswithmultipliers#!#decimal_round#!#numeric#!#16#!#6 -roundresultswithmultipliers#!#numeric_round#!#numeric#!#21#!#8 -roundresultswithmultipliers#!#money_round#!#numeric#!#27#!#10 +RoundResultsWithMultipliers#!#decimal_round#!#numeric#!#16#!#6 +RoundResultsWithMultipliers#!#numeric_round#!#numeric#!#21#!#8 +RoundResultsWithMultipliers#!#money_round#!#numeric#!#27#!#10 ~~END~~ @@ -3699,10 +3699,10 @@ ORDER BY ORDINAL_POSITION; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#int -roundresultspositions#!#decimal_round_3#!#numeric#!#14#!#6 -roundresultspositions#!#decimal_round_1#!#numeric#!#14#!#6 -roundresultspositions#!#decimal_round_0#!#numeric#!#14#!#6 -roundresultspositions#!#decimal_round_minus_1#!#numeric#!#14#!#6 +RoundResultsPositions#!#decimal_round_3#!#numeric#!#14#!#6 +RoundResultsPositions#!#decimal_round_1#!#numeric#!#14#!#6 +RoundResultsPositions#!#decimal_round_0#!#numeric#!#14#!#6 +RoundResultsPositions#!#decimal_round_minus_1#!#numeric#!#14#!#6 ~~END~~ @@ -3731,9 +3731,9 @@ ORDER BY ORDINAL_POSITION; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#int -roundresultsedgecases#!#null_round#!#numeric#!#14#!#6 -roundresultsedgecases#!#large_decimal_round#!#numeric#!#19#!#8 -roundresultsedgecases#!#negative_large_decimal_round#!#numeric#!#19#!#8 +RoundResultsEdgeCases#!#null_round#!#numeric#!#14#!#6 +RoundResultsEdgeCases#!#large_decimal_round#!#numeric#!#19#!#8 +RoundResultsEdgeCases#!#negative_large_decimal_round#!#numeric#!#19#!#8 ~~END~~ diff --git a/test/JDBC/expected/PARTITION-before-17_7-vu-verify.out b/test/JDBC/expected/PARTITION-before-17_7-vu-verify.out index c67bc9d0738..47bc767a2bb 100644 --- a/test/JDBC/expected/PARTITION-before-17_7-vu-verify.out +++ b/test/JDBC/expected/PARTITION-before-17_7-vu-verify.out @@ -990,25 +990,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1016,48 +1016,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1077,7 +1077,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ diff --git a/test/JDBC/expected/PARTITION-collations.out b/test/JDBC/expected/PARTITION-collations.out index 8d9fba0ce96..030ab7e7a1e 100644 --- a/test/JDBC/expected/PARTITION-collations.out +++ b/test/JDBC/expected/PARTITION-collations.out @@ -588,9 +588,9 @@ SELECT name, collation_name FROM sys.all_columns where object_id = object_id('Pa GO ~~START~~ varchar#!#varchar -id#!# -partitionkey#!#bbf_unicode_cp1_ci_as -value#!#bbf_unicode_cp1_ci_as +ID#!# +PartitionKey#!#bbf_unicode_cp1_ci_as +Value#!#bbf_unicode_cp1_ci_as ~~END~~ @@ -630,9 +630,9 @@ SELECT name, collation_name FROM sys.all_columns where object_id = object_id('Pa GO ~~START~~ varchar#!#varchar -id#!# -partitionkey#!#bbf_unicode_cp1_ci_ai -value#!#bbf_unicode_cp1_ci_as +ID#!# +PartitionKey#!#bbf_unicode_cp1_ci_ai +Value#!#bbf_unicode_cp1_ci_as ~~END~~ diff --git a/test/JDBC/expected/PARTITION-vu-verify.out b/test/JDBC/expected/PARTITION-vu-verify.out index fa356825e5b..2c55c8bf178 100644 --- a/test/JDBC/expected/PARTITION-vu-verify.out +++ b/test/JDBC/expected/PARTITION-vu-verify.out @@ -1008,25 +1008,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1034,48 +1034,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1095,7 +1095,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ @@ -1795,7 +1795,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.752 ms +Babelfish T-SQL Batch Parsing Time: 0.383 ms ~~END~~ @@ -1814,7 +1814,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.129 ms +Babelfish T-SQL Batch Parsing Time: 0.082 ms ~~END~~ @@ -1832,7 +1832,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.124 ms +Babelfish T-SQL Batch Parsing Time: 0.065 ms ~~END~~ @@ -1850,7 +1850,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.099 ms +Babelfish T-SQL Batch Parsing Time: 0.061 ms ~~END~~ @@ -1869,7 +1869,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.095 ms +Babelfish T-SQL Batch Parsing Time: 0.059 ms ~~END~~ @@ -1888,7 +1888,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.095 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -1906,7 +1906,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.130 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -1924,7 +1924,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.131 ms +Babelfish T-SQL Batch Parsing Time: 0.061 ms ~~END~~ @@ -1942,7 +1942,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.093 ms +Babelfish T-SQL Batch Parsing Time: 0.057 ms ~~END~~ @@ -1960,7 +1960,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.091 ms +Babelfish T-SQL Batch Parsing Time: 0.057 ms ~~END~~ @@ -1978,7 +1978,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.098 ms +Babelfish T-SQL Batch Parsing Time: 0.057 ms ~~END~~ @@ -1996,7 +1996,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.096 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -2018,7 +2018,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.094 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -2038,7 +2038,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.097 ms +Babelfish T-SQL Batch Parsing Time: 0.062 ms ~~END~~ @@ -2058,7 +2058,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.097 ms +Babelfish T-SQL Batch Parsing Time: 0.069 ms ~~END~~ @@ -2080,7 +2080,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.095 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -2099,7 +2099,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.094 ms +Babelfish T-SQL Batch Parsing Time: 0.059 ms ~~END~~ @@ -2118,7 +2118,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.098 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -2136,7 +2136,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.096 ms +Babelfish T-SQL Batch Parsing Time: 0.058 ms ~~END~~ @@ -2175,7 +2175,7 @@ Index Scan using "363863941f079adaa9aa733200e57c9f_partition_1_id_key" on "36386 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 11.417 ms +Babelfish T-SQL Batch Parsing Time: 4.677 ms ~~END~~ @@ -2190,7 +2190,7 @@ Index Scan using "548bb344374ce8d65342b36428375873_partition_1_id_idx" on "548bb ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.174 ms +Babelfish T-SQL Batch Parsing Time: 0.124 ms ~~END~~ @@ -2205,7 +2205,7 @@ Index Scan using "12025e103721b70925744c196ce004cd_partition_1_id_idx" on "12025 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 7.570 ms +Babelfish T-SQL Batch Parsing Time: 3.091 ms ~~END~~ @@ -2220,7 +2220,7 @@ Index Scan using "61446d711d19b5970809387caa7fd3d3_partition_1_id_idx" on "61446 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.175 ms +Babelfish T-SQL Batch Parsing Time: 0.107 ms ~~END~~ @@ -2235,7 +2235,7 @@ Index Scan using cda2902d769fd61eb60b1a461650212f_partition_1_id_idx on cda2902d ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 6.722 ms +Babelfish T-SQL Batch Parsing Time: 2.715 ms ~~END~~ @@ -2250,7 +2250,7 @@ Index Scan using "57405760297bb338f333c148aac5f845_partition_1_id_idx" on "57405 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.194 ms +Babelfish T-SQL Batch Parsing Time: 0.109 ms ~~END~~ @@ -2268,7 +2268,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.230 ms +Babelfish T-SQL Batch Parsing Time: 0.137 ms ~~END~~ @@ -2286,7 +2286,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.163 ms +Babelfish T-SQL Batch Parsing Time: 0.107 ms ~~END~~ @@ -2301,7 +2301,7 @@ Index Scan using "4867824426e52acac5c93d9cbe8aa366_partition_1_id_idx" on "48678 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.273 ms +Babelfish T-SQL Batch Parsing Time: 0.125 ms ~~END~~ @@ -2316,7 +2316,7 @@ Index Scan using "751ce655481adf15600727bf291667f7_partition_1_id_idx" on "751ce ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.170 ms +Babelfish T-SQL Batch Parsing Time: 0.103 ms ~~END~~ @@ -2331,7 +2331,7 @@ Index Scan using "5ed003cf80dacbb8cce0b21e175f7f94_partition_1_id_idx" on "5ed00 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.169 ms +Babelfish T-SQL Batch Parsing Time: 0.102 ms ~~END~~ @@ -2346,7 +2346,7 @@ Index Scan using b5c2e665ec4a1219ba8510e33e45379b_partition_1_id_idx on b5c2e665 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.246 ms +Babelfish T-SQL Batch Parsing Time: 0.102 ms ~~END~~ @@ -2361,7 +2361,7 @@ Index Scan using "5d20bd977eb6e6f1304dec45598c09f5_partition_1_id_idx" on "5d20b ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.180 ms +Babelfish T-SQL Batch Parsing Time: 0.107 ms ~~END~~ @@ -2376,7 +2376,7 @@ Index Scan using "933a5c7f0de13890324e53ee0711424b_partition_1_id_idx" on "933a5 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.168 ms +Babelfish T-SQL Batch Parsing Time: 0.100 ms ~~END~~ @@ -2391,7 +2391,7 @@ Index Scan using "320465af1d1bd21f5b29c57f9f4e5c51_partition_1_id_idx" on "32046 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.172 ms +Babelfish T-SQL Batch Parsing Time: 0.109 ms ~~END~~ @@ -2429,7 +2429,7 @@ Append ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.184 ms +Babelfish T-SQL Batch Parsing Time: 0.113 ms ~~END~~ @@ -2444,7 +2444,7 @@ Index Scan using "3a3cd2fe373a5dc4b9281d49f7960143_partition_1_id_idx" on "3a3cd ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 7.260 ms +Babelfish T-SQL Batch Parsing Time: 3.042 ms ~~END~~ @@ -2459,7 +2459,7 @@ Index Scan using "77718961234110c3a22a3c977bc252d8_partition_1_id_idx" on "77718 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.180 ms +Babelfish T-SQL Batch Parsing Time: 0.121 ms ~~END~~ @@ -2474,7 +2474,7 @@ Index Scan using f3baf999c06d6ea82082a4c549baeb77_partition_1_id_idx on f3baf999 ~~START~~ text -Babelfish T-SQL Batch Parsing Time: 0.198 ms +Babelfish T-SQL Batch Parsing Time: 0.123 ms ~~END~~ diff --git a/test/JDBC/expected/SELECT_INTO_TEST-vu-verify.out b/test/JDBC/expected/SELECT_INTO_TEST-vu-verify.out index 88353f42526..0f59bf284b3 100644 --- a/test/JDBC/expected/SELECT_INTO_TEST-vu-verify.out +++ b/test/JDBC/expected/SELECT_INTO_TEST-vu-verify.out @@ -578,7 +578,7 @@ select column_name from information_schema.columns where table_name = 'select_in go ~~START~~ nvarchar -中文_col_select_into_select_icefa3744f642e9df762aa877d7ccd6e7 +中文_COL_select_into_select_into_select_into_select_into_select_into_select_into_select_into_select_into ~~END~~ -- dropping the table select_into @@ -681,7 +681,7 @@ select column_name from information_schema.columns where table_name = 'select_in go ~~START~~ nvarchar -select_into_col_select_into_colb0110865143217c65f7939886bc07595 +select_into_COL_select_into_COL_Col_length_greater_then_sixty_four ~~END~~ diff --git a/test/JDBC/expected/TEST_PUBLICATION.out b/test/JDBC/expected/TEST_PUBLICATION.out index 10a38dfd481..5473a0afd61 100644 --- a/test/JDBC/expected/TEST_PUBLICATION.out +++ b/test/JDBC/expected/TEST_PUBLICATION.out @@ -34,6 +34,7 @@ sys.babelfish_domain_mapping sys.babelfish_extended_properties sys.babelfish_function_ext sys.babelfish_helpcollation +sys.babelfish_identifier_mapping sys.babelfish_namespace_ext sys.babelfish_partition_depend sys.babelfish_partition_function diff --git a/test/JDBC/expected/Test-Spatial_Index-vu-verify.out b/test/JDBC/expected/Test-Spatial_Index-vu-verify.out index aeff2a91236..7ba021c2f44 100644 --- a/test/JDBC/expected/Test-Spatial_Index-vu-verify.out +++ b/test/JDBC/expected/Test-Spatial_Index-vu-verify.out @@ -94,7 +94,7 @@ CREATE SPATIAL INDEX si_dup ON si_ddl_tbl(geom); GO ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "si_dupsi_ddl_tblefc70e6ee50389004ff8215c689e5467" already exists)~~ +~~ERROR (Message: relation "si_dup" already exists)~~ -- 1.3 DROP and recreate @@ -110,7 +110,7 @@ DROP INDEX si_fake ON si_ddl_tbl; GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "si_fakesi_ddl_tbl94fe14b60d353fa399b536a197c4650c" does not exist)~~ +~~ERROR (Message: index "si_fake" does not exist)~~ -- 1.5 Strict escape hatch blocks options diff --git a/test/JDBC/expected/Test-sp_rename-vu-verify.out b/test/JDBC/expected/Test-sp_rename-vu-verify.out index 0562834ecf9..d8b412904ce 100644 --- a/test/JDBC/expected/Test-sp_rename-vu-verify.out +++ b/test/JDBC/expected/Test-sp_rename-vu-verify.out @@ -120,10 +120,10 @@ varchar#!#varchar#!#nvarchar#!#text master_dbo#!#sp_rename_vu_func1#!#sp_rename_vu_func1#!#sp_rename_vu_func1() master_dbo#!#sp_rename_vu_func2#!#sp_rename_vu_func2#!#sp_rename_vu_func2(integer) master_dbo#!#sp_rename_vu_proc1#!#sp_rename_vu_proc1#!#sp_rename_vu_proc1() -master_dbo#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_dbo#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() master_sp_rename_vu_schema1#!#sp_rename_vu_func3#!#sp_rename_vu_func3#!#sp_rename_vu_func3(integer) master_sp_rename_vu_schema1#!#sp_rename_vu_proc2#!#sp_rename_vu_proc2#!#sp_rename_vu_proc2() -master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() ~~END~~ @@ -162,10 +162,10 @@ varchar#!#varchar#!#nvarchar#!#text master_dbo#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new() master_dbo#!#sp_rename_vu_func2#!#sp_rename_vu_func2#!#sp_rename_vu_func2(integer) master_dbo#!#sp_rename_vu_proc1_new#!#sp_rename_vu_proc1_new#!#sp_rename_vu_proc1_new() -master_dbo#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_dbo#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() master_sp_rename_vu_schema1#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new(integer) master_sp_rename_vu_schema1#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new() -master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() ~~END~~ @@ -400,10 +400,10 @@ varchar#!#varchar#!#nvarchar#!#text master_dbo#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new() master_dbo#!#sp_rename_vu_func2_new#!#sp_rename_vu_FUNC2_neW#!#sp_rename_vu_func2_new(integer) master_dbo#!#sp_rename_vu_proc1_new2#!#sp_rename_vu_PRoc1_new2#!#sp_rename_vu_proc1_new2() -master_dbo#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_dbo#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() master_sp_rename_vu_schema1#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new(integer) master_sp_rename_vu_schema1#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new() -master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() ~~END~~ @@ -459,10 +459,10 @@ varchar#!#varchar#!#nvarchar#!#text master_dbo#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new() master_dbo#!#sp_rename_vu_func2_new#!#sp_rename_vu_FUNC2_neW#!#sp_rename_vu_func2_new(integer) master_dbo#!#sp_rename_vu_proc1_new2#!#sp_rename_vu_PRoc1_new2#!#sp_rename_vu_proc1_new2() -master_dbo#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_dbo#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() master_sp_rename_vu_schema1#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new(integer) master_sp_rename_vu_schema1#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new() -master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!##!#sp_rename_vu_trig1() +master_sp_rename_vu_schema1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1#!#sp_rename_vu_trig1() ~~END~~ @@ -499,10 +499,10 @@ varchar#!#varchar#!#nvarchar#!#text master_dbo#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new#!#sp_rename_vu_func1_new() master_dbo#!#sp_rename_vu_func2_new#!#sp_rename_vu_FUNC2_neW#!#sp_rename_vu_func2_new(integer) master_dbo#!#sp_rename_vu_proc1_new2#!#sp_rename_vu_PRoc1_new2#!#sp_rename_vu_proc1_new2() -master_dbo#!#sp_rename_vu_trig1_new#!##!#sp_rename_vu_trig1_new() +master_dbo#!#sp_rename_vu_trig1_new#!#sp_rename_vu_trig1_new#!#sp_rename_vu_trig1_new() master_sp_rename_vu_schema1#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new#!#sp_rename_vu_func3_new(integer) master_sp_rename_vu_schema1#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new#!#sp_rename_vu_proc2_new() -master_sp_rename_vu_schema1#!#sp_rename_vu_trig1_schema1_new#!##!#sp_rename_vu_trig1_schema1_new() +master_sp_rename_vu_schema1#!#sp_rename_vu_trig1_schema1_new#!#sp_rename_vu_trig1_schema1_new#!#sp_rename_vu_trig1_schema1_new() ~~END~~ diff --git a/test/JDBC/expected/Test_alter_db_rename-vu-verify.out b/test/JDBC/expected/Test_alter_db_rename-vu-verify.out index a7c4889edb6..e9568dc960d 100644 --- a/test/JDBC/expected/Test_alter_db_rename-vu-verify.out +++ b/test/JDBC/expected/Test_alter_db_rename-vu-verify.out @@ -218,7 +218,7 @@ use [ThisOldDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTestRenameDb]; go ~~ERROR (Code: 911)~~ -~~ERROR (Message: database "thisolddatabasenameiscasesensit70deaa61d81bc286d3760d346a37224c" does not exist)~~ +~~ERROR (Message: database "thisolddatabasenameiscasesensitiveandislongerthan64digitstotestrenamedb" does not exist)~~ use [ThisNewDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTestRenameDb] go diff --git a/test/JDBC/expected/Test_sp_rename_database-vu-verify.out b/test/JDBC/expected/Test_sp_rename_database-vu-verify.out index dbfbd775fb5..f3bcc55f70c 100644 --- a/test/JDBC/expected/Test_sp_rename_database-vu-verify.out +++ b/test/JDBC/expected/Test_sp_rename_database-vu-verify.out @@ -225,7 +225,7 @@ use [sp_rename_ThisOldDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTestRe go ~~ERROR (Code: 911)~~ -~~ERROR (Message: database "sp_rename_thisolddatabasenameis486955ab4c9cc6b742c1a6caa1f22a49" does not exist)~~ +~~ERROR (Message: database "sp_rename_thisolddatabasenameiscasesensitiveandislongerthan64digitstotestrenamedb" does not exist)~~ use [sp_rename_ThisNewDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTestRenameDb] go diff --git a/test/JDBC/expected/Test_sp_renamedb-vu-verify.out b/test/JDBC/expected/Test_sp_renamedb-vu-verify.out index 88599997059..d67693230eb 100644 --- a/test/JDBC/expected/Test_sp_renamedb-vu-verify.out +++ b/test/JDBC/expected/Test_sp_renamedb-vu-verify.out @@ -225,7 +225,7 @@ use [sp_renamedb_ThisOldDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTest go ~~ERROR (Code: 911)~~ -~~ERROR (Message: database "sp_renamedb_thisolddatabasenamefe795a102eba19ee201b1eff90c69b35" does not exist)~~ +~~ERROR (Message: database "sp_renamedb_thisolddatabasenameiscasesensitiveandislongerthan64digitstotestrenamedb" does not exist)~~ use [sp_renamedb_ThisNewDatabaseNameIsCaseSensitiveAndIsLongerThan64DigitsToTestRenameDb] go diff --git a/test/JDBC/expected/Time.out b/test/JDBC/expected/Time.out index 765b35e1ba8..7cc690a3467 100644 --- a/test/JDBC/expected/Time.out +++ b/test/JDBC/expected/Time.out @@ -8966,10 +8966,10 @@ WHERE TABLE_NAME = 'TimeView' ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -timeview#!#ComputedTimeColumn#!#time -timeview#!#DefaultTimeColumn#!#time -timeview#!#ID#!#int -timeview#!#TimeColumn#!#time +TimeView#!#ComputedTimeColumn#!#time +TimeView#!#DefaultTimeColumn#!#time +TimeView#!#ID#!#int +TimeView#!#TimeColumn#!#time ~~END~~ diff --git a/test/JDBC/expected/alter_authorization_change_db_owner-vu-verify.out b/test/JDBC/expected/alter_authorization_change_db_owner-vu-verify.out index a19a8911786..813e9e732ff 100644 --- a/test/JDBC/expected/alter_authorization_change_db_owner-vu-verify.out +++ b/test/JDBC/expected/alter_authorization_change_db_owner-vu-verify.out @@ -51,7 +51,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'msdb' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar msdb#!#new_OWNER_login ~~END~~ @@ -69,7 +69,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -79,7 +79,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#new_OWNER_login ~~END~~ @@ -90,7 +90,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -189,8 +189,8 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar -change_owner_db#!#new_OWNER_login +nvarchar#!#nvarchar +CHANGE_OWNER_DB#!#new_OWNER_login ~~END~~ @@ -221,7 +221,7 @@ select suser_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dba_login#!#change_owner_db +dba_login#!#CHANGE_OWNER_DB ~~END~~ -- when new owner is already a DB user, granting ownership is not allowed @@ -248,7 +248,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -263,7 +263,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -293,12 +293,12 @@ go exec p_change_db_owner_1 go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_1: before owner change#!#change_owner_db#!#dba_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_1: after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -336,12 +336,12 @@ alter authorization on database::change_owner_db to new_owner_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_2: before owner change#!#change_owner_db#!#dba_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_2: after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -415,7 +415,7 @@ go select 'before owner change', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar before owner change#!#change_owner_db#!#dba_login ~~END~~ @@ -424,7 +424,7 @@ go select 'after owner change', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -433,7 +433,7 @@ go select 'after rollback', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar after rollback#!#change_owner_db#!#dba_login ~~END~~ @@ -462,8 +462,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ alter authorization on database::[DB63long_012345678901234567890123456789012345678901234567890123] to dba_login @@ -471,8 +471,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#dba_login +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#dba_login ~~END~~ alter authorization on database::[DB63long_012345678901234567890123456789012345678901234567890123] to [LOGIN63long_345678901234567890123456789012345678901234567890123] @@ -480,8 +480,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ set quoted_identifier on @@ -491,8 +491,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#dba_login +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#dba_login ~~END~~ alter authorization on database::"DB63long_012345678901234567890123456789012345678901234567890123" to "LOGIN63long_345678901234567890123456789012345678901234567890123" @@ -500,8 +500,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ set quoted_identifier off @@ -514,7 +514,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#db63long_012345678901234567890123456789012345678901234567890123 +dbo#!#DB63long_012345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -532,8 +532,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to dba_login @@ -541,8 +541,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login ~~END~~ alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to [LOGIN64long_3456789012345678901234567890123456789012345678901234] @@ -550,8 +550,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ set quoted_identifier on @@ -561,8 +561,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login ~~END~~ alter authorization on DATABASE::"DB64long_0123456789012345678901234567890123456789012345678901234" to "LOGIN64long_3456789012345678901234567890123456789012345678901234" @@ -570,8 +570,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ set quoted_identifier off @@ -644,7 +644,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'msdb' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar msdb#!#new_OWNER_login ~~END~~ @@ -662,7 +662,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -672,7 +672,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#new_OWNER_login ~~END~~ @@ -683,7 +683,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -782,8 +782,8 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar -change_owner_db#!#new_OWNER_login +nvarchar#!#nvarchar +CHANGE_OWNER_DB#!#new_OWNER_login ~~END~~ @@ -814,7 +814,7 @@ select suser_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dba_login#!#change_owner_db +dba_login#!#CHANGE_OWNER_DB ~~END~~ -- when new owner is already a DB user, granting ownership is not allowed @@ -841,7 +841,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -856,7 +856,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar change_owner_db#!#dba_login ~~END~~ @@ -886,12 +886,12 @@ go exec p_change_db_owner_1 go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_1: before owner change#!#change_owner_db#!#dba_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_1: after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -929,12 +929,12 @@ alter authorization on database::change_owner_db to new_owner_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_2: before owner change#!#change_owner_db#!#dba_login ~~END~~ ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar p_change_db_owner_2: after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -1008,7 +1008,7 @@ go select 'before owner change', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar before owner change#!#change_owner_db#!#dba_login ~~END~~ @@ -1017,7 +1017,7 @@ go select 'after owner change', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar after owner change#!#change_owner_db#!#new_OWNER_login ~~END~~ @@ -1026,7 +1026,7 @@ go select 'after rollback', name, suser_sname(sid) from sysdatabases where name = 'change_owner_db' go ~~START~~ -varchar#!#text#!#nvarchar +varchar#!#nvarchar#!#nvarchar after rollback#!#change_owner_db#!#dba_login ~~END~~ @@ -1053,8 +1053,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ alter authorization on database::[DB63long_012345678901234567890123456789012345678901234567890123] to dba_login @@ -1062,8 +1062,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#dba_login +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#dba_login ~~END~~ alter authorization on database::[DB63long_012345678901234567890123456789012345678901234567890123] to [LOGIN63long_345678901234567890123456789012345678901234567890123] @@ -1071,8 +1071,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ set quoted_identifier on @@ -1082,8 +1082,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#dba_login +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#dba_login ~~END~~ alter authorization on database::"DB63long_012345678901234567890123456789012345678901234567890123" to "LOGIN63long_345678901234567890123456789012345678901234567890123" @@ -1091,8 +1091,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ set quoted_identifier off @@ -1105,7 +1105,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#db63long_012345678901234567890123456789012345678901234567890123 +dbo#!#DB63long_012345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -1123,8 +1123,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to dba_login @@ -1132,8 +1132,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login ~~END~~ alter authorization on database::[DB64long_0123456789012345678901234567890123456789012345678901234] to [LOGIN64long_3456789012345678901234567890123456789012345678901234] @@ -1141,8 +1141,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ set quoted_identifier on @@ -1152,8 +1152,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login ~~END~~ alter authorization on DATABASE::"DB64long_0123456789012345678901234567890123456789012345678901234" to "LOGIN64long_3456789012345678901234567890123456789012345678901234" @@ -1161,8 +1161,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#LOGIN64long_3456789012345678901234567890123456789012345678901234 ~~END~~ set quoted_identifier off diff --git a/test/JDBC/expected/babel_621.out b/test/JDBC/expected/babel_621.out index 8c0a57452fc..a99ef852171 100644 --- a/test/JDBC/expected/babel_621.out +++ b/test/JDBC/expected/babel_621.out @@ -130,7 +130,7 @@ go ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "idxtable_107f9bec28bc8902d45d905788d7aa59a1")~~ +~~ERROR (Message: duplicate key value violates unique constraint "idx")~~ drop index idx on table_10; go diff --git a/test/JDBC/expected/babel_numeric.out b/test/JDBC/expected/babel_numeric.out index be4e7d6ae7c..348f49c2621 100644 --- a/test/JDBC/expected/babel_numeric.out +++ b/test/JDBC/expected/babel_numeric.out @@ -1951,7 +1951,7 @@ where TABLE_NAME = 'BABEL_6081_t3' order by COLUMN_NAME GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#smallint#!#int -master#!#dbo#!#babel_6081_t3#!#product#!#15#!#10#!#2 +master#!#dbo#!#BABEL_6081_t3#!#product#!#15#!#10#!#2 ~~END~~ @@ -1979,7 +1979,7 @@ where TABLE_NAME = 'BABEL_6081_t4' order by COLUMN_NAME GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#smallint#!#int -master#!#dbo#!#babel_6081_t4#!#product#!#15#!#10#!#2 +master#!#dbo#!#BABEL_6081_t4#!#product#!#15#!#10#!#2 ~~END~~ @@ -2007,7 +2007,7 @@ where TABLE_NAME = 'BABEL_6081_t5' order by COLUMN_NAME GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#smallint#!#int -master#!#dbo#!#babel_6081_t5#!#product#!#38#!#10#!#6 +master#!#dbo#!#BABEL_6081_t5#!#product#!#38#!#10#!#6 ~~END~~ @@ -2036,8 +2036,8 @@ where TABLE_NAME = 'BABEL_6081_t6' order by COLUMN_NAME GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar#!#nvarchar#!#tinyint#!#smallint#!#int -master#!#dbo#!#babel_6081_t6#!#id#!#4#!#10#!#2 -master#!#dbo#!#babel_6081_t6#!#product#!#15#!#10#!#2 +master#!#dbo#!#BABEL_6081_t6#!#id#!#4#!#10#!#2 +master#!#dbo#!#BABEL_6081_t6#!#product#!#15#!#10#!#2 ~~END~~ diff --git a/test/JDBC/expected/babelfish_integrity_checker-vu-verify.out b/test/JDBC/expected/babelfish_integrity_checker-vu-verify.out index 0cb4470f70c..38d5d333e67 100644 --- a/test/JDBC/expected/babelfish_integrity_checker-vu-verify.out +++ b/test/JDBC/expected/babelfish_integrity_checker-vu-verify.out @@ -35,6 +35,7 @@ babelfish_db_seq babelfish_domain_mapping babelfish_extended_properties babelfish_function_ext +babelfish_identifier_mapping babelfish_namespace_ext babelfish_partition_depend babelfish_partition_function diff --git a/test/JDBC/expected/babelfish_migration_mode-vu-verify.out b/test/JDBC/expected/babelfish_migration_mode-vu-verify.out index 29d10922443..86346e37f24 100644 --- a/test/JDBC/expected/babelfish_migration_mode-vu-verify.out +++ b/test/JDBC/expected/babelfish_migration_mode-vu-verify.out @@ -157,7 +157,7 @@ WHERE name LIKE 'babelfish_migration_mode%' ORDER BY name GO ~~START~~ -text +nvarchar babelfish_migration_mode_db1 babelfish_migration_mode_db2 ~~END~~ @@ -288,7 +288,7 @@ WHERE name LIKE 'babelfish_migration_mode%' ORDER BY name GO ~~START~~ -text +nvarchar babelfish_migration_mode_db1 babelfish_migration_mode_db2 ~~END~~ diff --git a/test/JDBC/expected/bbf_view_def.out b/test/JDBC/expected/bbf_view_def.out index 840b467e1d4..ff53bfab227 100644 --- a/test/JDBC/expected/bbf_view_def.out +++ b/test/JDBC/expected/bbf_view_def.out @@ -90,7 +90,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like '%def_%' order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext master#!#dbo#!#def_v1#!#create view def_v1 as select c1 as a from vd_t1; master#!#dbo#!#def_v2#!#-- definition should not get trimmedcreate view def_v2asselect 2 as a; ~~END~~ @@ -205,7 +205,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from sys.babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('def_vwalt') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#"sys"."varchar"#!#"sys"."varchar"#!#text +"sys"."varchar"#!#"sys"."varchar"#!#"sys"."varchar"#!#text master#!#dbo#!#def_vwalt#!#-- CASE: Test after setting GUC to truecreate view def_vwalt as select 123 as a; ~~END~~ @@ -251,7 +251,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('%def_v%') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext master#!#dbo#!#def_v1#!#create view def_v1 as select c1 as a from vd_t1; master#!#dbo#!#def_v2#!#-- definition should not get trimmedcreate view def_v2asselect 2 as a; ~~END~~ @@ -268,7 +268,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('%def_v%') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext master#!#dbo#!#def_v1#!#create view def_v1 as select c1 as a from vd_t1; master#!#dbo#!#def_v2#!#-- definition should not get trimmedcreate view def_v2asselect 2 as a; master#!#def_sch1#!#def_v1#!#create view def_sch1.def_v1 as select 1; @@ -293,7 +293,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('%db1_v%') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext db1#!#db1_sch1#!#db1_v2#!#create view db1_sch1.db1_v2 as select 2; db1#!#dbo#!#db1_v1#!#create view db1_v1 as select 1; ~~END~~ @@ -334,7 +334,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('%db1_v%') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext db1#!#db1_sch1#!#db1_v2#!#create view db1_sch1.db1_v2 as select 2; db1#!#dbo#!#db1_v1#!#create view db1_v1 as select 1; ~~END~~ @@ -349,7 +349,7 @@ go select sb.name, vd.schema_name, vd.object_name, vd.definition from babelfish_view_def vd left join sys.sysdatabases sb on vd.dbid=sb.dbid where vd.object_name like ('%db1_v%') order by vd.dbid, vd.schema_name, vd.object_name, vd.definition; go ~~START~~ -text#!#varchar#!#varchar#!#ntext +nvarchar#!#varchar#!#varchar#!#ntext ~~END~~ diff --git a/test/JDBC/expected/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out b/test/JDBC/expected/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out index 499b7fa5c63..3749fae1eb1 100644 --- a/test/JDBC/expected/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out +++ b/test/JDBC/expected/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out @@ -2,7 +2,7 @@ select name from sys.columns where name = 'Test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -10,7 +10,7 @@ select name from sys.columns where name = 'TesT'; go ~~START~~ varchar -test +Test ~~END~~ diff --git a/test/JDBC/expected/case_insensitive_collation-vu-verify.out b/test/JDBC/expected/case_insensitive_collation-vu-verify.out index 763b4625b65..6dffad5d162 100644 --- a/test/JDBC/expected/case_insensitive_collation-vu-verify.out +++ b/test/JDBC/expected/case_insensitive_collation-vu-verify.out @@ -2,7 +2,7 @@ select name from sys.columns where name = 'Test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -10,7 +10,7 @@ select name from sys.columns where name = 'TesT'; go ~~START~~ varchar -test +Test ~~END~~ @@ -50,7 +50,7 @@ select name from sys.databases where name = 'test'; go ~~START~~ varchar -test +TEST ~~END~~ @@ -58,7 +58,7 @@ select name from sys.databases where name = 'TEST'; go ~~START~~ varchar -test +TEST ~~END~~ diff --git a/test/JDBC/expected/cast_datetime_to_binary-before-17_7-16_11-vu-cleanup.out b/test/JDBC/expected/cast_datetime_to_binary-before-17_7-16_11-vu-cleanup.out index b1be59e24b2..dfd95ac439f 100644 --- a/test/JDBC/expected/cast_datetime_to_binary-before-17_7-16_11-vu-cleanup.out +++ b/test/JDBC/expected/cast_datetime_to_binary-before-17_7-16_11-vu-cleanup.out @@ -16,7 +16,7 @@ DROP INDEX IX_computed_binary ON test_computed_binary; GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix_computed_binarytest_computed31c5988ff854870479cd098146452e5b" does not exist)~~ +~~ERROR (Message: index "ix_computed_binary" does not exist)~~ DROP TABLE test_computed_binary; diff --git a/test/JDBC/expected/catalogs_dbo_sys_schema-upgrade-vu-verify.out b/test/JDBC/expected/catalogs_dbo_sys_schema-upgrade-vu-verify.out index 82fe40a68e2..193db393150 100644 --- a/test/JDBC/expected/catalogs_dbo_sys_schema-upgrade-vu-verify.out +++ b/test/JDBC/expected/catalogs_dbo_sys_schema-upgrade-vu-verify.out @@ -6,175 +6,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2365,134 +2365,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2606,175 +2606,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -4867,134 +4867,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -5107,175 +5107,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -7487,134 +7487,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ diff --git a/test/JDBC/expected/catalogs_dbo_sys_schema-vu-verify.out b/test/JDBC/expected/catalogs_dbo_sys_schema-vu-verify.out index 610e70bdced..31f056e7604 100644 --- a/test/JDBC/expected/catalogs_dbo_sys_schema-vu-verify.out +++ b/test/JDBC/expected/catalogs_dbo_sys_schema-vu-verify.out @@ -3,175 +3,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2362,134 +2362,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2603,175 +2603,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -4864,134 +4864,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -5104,175 +5104,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -7484,134 +7484,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ diff --git a/test/JDBC/expected/db_collation/PARTITION-vu-verify.out b/test/JDBC/expected/db_collation/PARTITION-vu-verify.out index 43d25b5117d..2cd0cf7abee 100644 --- a/test/JDBC/expected/db_collation/PARTITION-vu-verify.out +++ b/test/JDBC/expected/db_collation/PARTITION-vu-verify.out @@ -1008,25 +1008,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1034,48 +1034,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1095,7 +1095,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ diff --git a/test/JDBC/expected/db_ddladmin-vu-verify.out b/test/JDBC/expected/db_ddladmin-vu-verify.out index c065d447705..ab8479fcf9c 100644 --- a/test/JDBC/expected/db_ddladmin-vu-verify.out +++ b/test/JDBC/expected/db_ddladmin-vu-verify.out @@ -307,7 +307,7 @@ DROP INDEX babel_5116_idx1 ON babel_5116_t1 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: must be owner of index babel_5116_idx1babel_5116_t1e29153c477c95d679c4b63370567552b)~~ +~~ERROR (Message: must be owner of index babel_5116_idx1)~~ DROP TABLE babel_5116_t1 GO diff --git a/test/JDBC/expected/drop_index-vu-verify.out b/test/JDBC/expected/drop_index-vu-verify.out index e929ab47c8d..6802a5325e3 100644 --- a/test/JDBC/expected/drop_index-vu-verify.out +++ b/test/JDBC/expected/drop_index-vu-verify.out @@ -41,7 +41,7 @@ drop index guest.t1_drop_index.ix1 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists guest.t1_drop_index.ix1 go @@ -49,7 +49,7 @@ drop index guest.t1_drop_index.ix2 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix2t1_drop_indexbe63f9a1e6e197a9b4c58fbc7b470d87" does not exist)~~ +~~ERROR (Message: index "ix2" does not exist)~~ drop index if exists guest.t1_drop_index.ix2 go @@ -66,7 +66,7 @@ drop index dbo.t1_drop_index.ix1 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists dbo.t1_drop_index.ix1 go @@ -74,7 +74,7 @@ drop index dbo.t1_drop_index.ix2 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix2t1_drop_indexbe63f9a1e6e197a9b4c58fbc7b470d87" does not exist)~~ +~~ERROR (Message: index "ix2" does not exist)~~ drop index if exists dbo.t1_drop_index.ix2 go @@ -105,7 +105,7 @@ drop index t1_drop_index.ix1 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists t1_drop_index.ix1 go @@ -134,7 +134,7 @@ execute('drop index guest.t1_drop_index.ix1') go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute('drop index if exists guest.t1_drop_index.ix1') go @@ -151,7 +151,7 @@ execute('drop index t1_drop_index.ix1') go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute('drop index if exists t1_drop_index.ix1') go @@ -172,7 +172,7 @@ execute p1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute p1_drop_index 1 go @@ -187,7 +187,7 @@ drop index nosuchtable.ix1 go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1nosuchtablea5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists nosuchtable.ix1 go @@ -344,7 +344,7 @@ drop index ix1 on guest.t1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists ix1 on guest.t1_drop_index go @@ -352,7 +352,7 @@ drop index ix2 on guest.t1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix2t1_drop_indexbe63f9a1e6e197a9b4c58fbc7b470d87" does not exist)~~ +~~ERROR (Message: index "ix2" does not exist)~~ drop index if exists ix2 on guest.t1_drop_index go @@ -369,7 +369,7 @@ drop index ix1 on dbo.t1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists ix1 on dbo.t1_drop_index go @@ -377,7 +377,7 @@ drop index ix2 on dbo.t1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix2t1_drop_indexbe63f9a1e6e197a9b4c58fbc7b470d87" does not exist)~~ +~~ERROR (Message: index "ix2" does not exist)~~ drop index if exists ix2 on dbo.t1_drop_index go @@ -408,7 +408,7 @@ drop index ix1 on t1_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists ix1 on t1_drop_index go @@ -437,7 +437,7 @@ execute('drop index ix1 on guest.t1_drop_index') go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute('drop index if exists ix1 on guest.t1_drop_index') go @@ -454,7 +454,7 @@ execute('drop index ix1 on t1_drop_index') go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute('drop index if exists ix1 on t1_drop_index') go @@ -475,7 +475,7 @@ execute p2_drop_index go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1t1_drop_indexa5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ execute p2_drop_index 1 go @@ -490,7 +490,7 @@ drop index ix1 on nosuchtable go ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "ix1nosuchtablea5111d2a1767bc43a700e9f2162be019" does not exist)~~ +~~ERROR (Message: index "ix1" does not exist)~~ drop index if exists ix1 on nosuchtable go diff --git a/test/JDBC/expected/forxml-auto-before-17_11-or-18_5-vu-verify.out b/test/JDBC/expected/forxml-auto-before-17_11-or-18_5-vu-verify.out index ed9f2347778..9a17b8335c1 100644 --- a/test/JDBC/expected/forxml-auto-before-17_11-or-18_5-vu-verify.out +++ b/test/JDBC/expected/forxml-auto-before-17_11-or-18_5-vu-verify.out @@ -1993,7 +1993,7 @@ FOR XML AUTO; GO ~~START~~ ntext - + ~~END~~ diff --git a/test/JDBC/expected/forxml-auto-vu-verify.out b/test/JDBC/expected/forxml-auto-vu-verify.out index 6b776dc8051..4d6a1b6c829 100644 --- a/test/JDBC/expected/forxml-auto-vu-verify.out +++ b/test/JDBC/expected/forxml-auto-vu-verify.out @@ -1999,7 +1999,7 @@ FOR XML AUTO; GO ~~START~~ ntext - + ~~END~~ diff --git a/test/JDBC/expected/four-part-names-vu-verify.out b/test/JDBC/expected/four-part-names-vu-verify.out index 92cfad839af..9903b895488 100644 --- a/test/JDBC/expected/four-part-names-vu-verify.out +++ b/test/JDBC/expected/four-part-names-vu-verify.out @@ -406,7 +406,7 @@ GO varchar#!#int#!#int#!#varbinary#!#datetime#!#tinyint#!#varchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#tinyint#!#nvarchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#uniqueidentifier#!#int#!#smallint#!#nvarchar#!#int#!#nvarchar#!#bit#!#bit#!#smallint#!#tinyint#!#nvarchar#!#int#!#int#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#int#!#nvarchar#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openq8c86d09e50d4f800f5a8c351ddbe1b23" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openquery('bbf_fpn_server', 'select * from master" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server."fpn_table'') select * from openquery(''bbf_fpn_server'', ''select * from master".sys.databases @@ -415,7 +415,7 @@ GO varchar#!#int#!#int#!#varbinary#!#datetime#!#tinyint#!#varchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#tinyint#!#nvarchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#uniqueidentifier#!#int#!#smallint#!#nvarchar#!#int#!#nvarchar#!#bit#!#bit#!#smallint#!#tinyint#!#nvarchar#!#int#!#int#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#int#!#nvarchar#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openq8c86d09e50d4f800f5a8c351ddbe1b23" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openquery('bbf_fpn_server', 'select * from master" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ -- SQL Injection in schema name @@ -426,14 +426,14 @@ select * from bbf_fpn_server.master.[sys.tables'') select * from openquery(''bbf GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * fr465ba21cd478dfdbfd9c4c52873fc1ec.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server.master."sys.tables'') select * from openquery(''bbf_fpn_server'', ''select * from master.sys".databases GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * fr465ba21cd478dfdbfd9c4c52873fc1ec.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ -- SQL Injection in object name @@ -444,14 +444,14 @@ select * from bbf_fpn_server.master.sys.[tables'') select * from openquery(''bbf GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquer6fae7895a55a5b386bac33a1b4ac3386" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server.master.sys."tables'') select * from openquery(''bbf_fpn_server'', ''select * from master.sys.databases" GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquer6fae7895a55a5b386bac33a1b4ac3386" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ DROP TABLE fpn_table_insert_into diff --git a/test/JDBC/expected/long-identifiers-error-messages.out b/test/JDBC/expected/long-identifiers-error-messages.out new file mode 100644 index 00000000000..a1d32458b11 --- /dev/null +++ b/test/JDBC/expected/long-identifiers-error-messages.out @@ -0,0 +1,839 @@ + + +-- Long Identifier Error Message Tests +-- Verifies error messages show full original names (not truncated+hashed PG names) +-- tsql +-- =========================================== +-- SETUP +-- =========================================== +CREATE TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT, col1 INT); +GO +CREATE VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a; +GO +CREATE SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +CREATE FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END; +GO +CREATE PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +CREATE INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO + + +-- =========================================== +-- CREATE "already exists" errors +-- =========================================== +-- TABLE already exists +CREATE TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errtest_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + + +-- VIEW already exists +CREATE VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errtest_very_long_view_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + + +-- SEQUENCE already exists +CREATE SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errtest_very_long_sequence_name_that_exceeds_postgresql_limit_of_sixty_three_chars" already exists)~~ + + +-- FUNCTION already exists +CREATE FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'errtest_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_chars' already exists with the same name)~~ + + +-- PROCEDURE already exists +CREATE PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'errtest_very_long_procedure_name_that_exceeds_postgresql_limit_of_sixty_three_chars' already exists with the same name)~~ + + +-- INDEX already exists +CREATE INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The index 'ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters' already exists.)~~ + + + +-- =========================================== +-- DROP "does not exist" errors +-- =========================================== +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +DROP VIEW NonExist_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: view "nonexist_very_long_view_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: could not find a function named "nonexist_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_characters")~~ + + +DROP PROCEDURE NonExist_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: could not find a procedure named "nonexist_very_long_procedure_name_that_exceeds_postgresql_limit_of_sixty_three_characters")~~ + + +DROP SEQUENCE NonExist_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: sequence "nonexist_very_long_sequence_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +DROP INDEX NonExist_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: index "nonexist_very_long_index_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- ALTER errors - object not found +-- =========================================== +-- ALTER TABLE that doesn't exist +ALTER TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ADD col2 INT; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- ALTER TABLE ADD COLUMN that already exists +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ADD col1 INT; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: column "col1" of relation "errtest_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + + +-- ALTER TABLE DROP COLUMN that doesn't exist +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters DROP COLUMN nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: column "nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars" of relation "errtest_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- INSERT/UPDATE referencing non-existent table +-- =========================================== +INSERT INTO NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +UPDATE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters SET id = 1; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +DELETE FROM NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +SELECT * FROM NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- DATABASE errors +-- =========================================== +-- USE non-existent database +USE Very_Long_Nonexistent_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 911)~~ + +~~ERROR (Message: database "very_long_nonexistent_database_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- DROP DATABASE that doesn't exist +DROP DATABASE Very_Long_Nonexistent_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 911)~~ + +~~ERROR (Message: database "very_long_nonexistent_database_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- LOGIN errors +-- =========================================== +-- CREATE LOGIN already exists +CREATE LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test WITH PASSWORD = '12345678'; +GO +CREATE LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test WITH PASSWORD = '12345678'; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The Server principal 'very_long_login_name_that_exceeds_postgresql_limit_of_sixty_three_characters_test' already exists)~~ + + +-- ALTER LOGIN does not exist +ALTER LOGIN NonExist_Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters WITH PASSWORD = 'test123'; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Cannot drop the login 'nonexist_very_long_login_name_that_exceeds_postgresql_limit_of_sixty_three_characters', because it does not exist or you do not have permission.)~~ + + +-- DROP LOGIN does not exist +DROP LOGIN NonExist_Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Cannot drop the login 'nonexist_very_long_login_name_that_exceeds_postgresql_limit_of_sixty_three_characters', because it does not exist or you do not have permission.)~~ + + +-- cleanup login +DROP LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test; +GO + + +-- =========================================== +-- USER/ROLE errors +-- =========================================== +-- CREATE USER already exists +CREATE USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: role "very_long_user_name_that_exceeds_postgresql_limit_of_sixty_three_characters_testuser" does not exist)~~ + +CREATE USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: role "very_long_user_name_that_exceeds_postgresql_limit_of_sixty_three_characters_testuser" does not exist)~~ + + +-- DROP USER does not exist +DROP USER NonExist_Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Cannot drop the user 'nonexist_very_long_user_name_that_exceeds_postgresql_limit_of_sixty_three_characters', because it does not exist or you do not have permission.)~~ + + +-- CREATE ROLE already exists +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: role "very_long_role_name_that_exceeds_postgresql_limit_of_sixty_three_characters_testrole" already exists)~~ + + +-- DROP ROLE does not exist +DROP ROLE NonExist_Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Cannot drop the role 'nonexist_very_long_role_name_that_exceeds_postgresql_limit_of_sixty_three_characters', because it does not exist or you do not have permission.)~~ + + +-- cleanup user/role +DROP USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Cannot drop the user 'very_long_user_name_that_exceeds_postgresql_limit_of_sixty_three_characters_testuser', because it does not exist or you do not have permission.)~~ + +DROP ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO + + +-- =========================================== +-- CONSTRAINT errors +-- =========================================== +-- Duplicate key constraint name +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ADD CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE (id); +GO +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ADD CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE (col1); +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errtest_very_long_constraint_name_that_exceeds_postgresql_limit_of_sixty_three_chars" already exists)~~ + + +-- =========================================== +-- TYPE errors +-- =========================================== +CREATE TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +CREATE TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +~~ERROR (Code: 219)~~ + +~~ERROR (Message: type "errtest_very_long_type_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + +DROP TYPE NonExist_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: type "nonexist_very_long_type_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- SCHEMA errors +-- =========================================== +CREATE SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +CREATE SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: schema "nonexist_very_long_schema_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + + +DROP SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: schema "nonexist_very_long_schema_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- TRIGGER errors +-- =========================================== +DROP TRIGGER NonExist_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: trigger "nonexist_very_long_trigger_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + + +-- =========================================== +-- Column reference errors in DML +-- =========================================== +-- SELECT non-existent column +SELECT nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars +FROM ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: column "nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars" does not exist)~~ + + + +-- =========================================== +-- CONSTRAINT violation errors (runtime) +-- =========================================== +-- CHECK constraint violation +CREATE TABLE ErrTest_Constraint_Table (c1 INT, c2 INT, CONSTRAINT ErrTest_Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three CHECK (c2 > c1)); +GO +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(5, 2); +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "errtest_constraint_table" violates check constraint "errtest_very_long_check_constraint_name_that_exceeds_postgresql_limit_of_sixty_three")~~ + + +-- UNIQUE constraint violation +ALTER TABLE ErrTest_Constraint_Table ADD CONSTRAINT ErrTest_Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three UNIQUE (c1); +GO +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(1, 5); +GO +~~ROW COUNT: 1~~ + +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(1, 5); +GO +~~ERROR (Code: 2627)~~ + +~~ERROR (Message: duplicate key value violates unique constraint "errtest_very_long_unique_constraint_name_that_exceeds_postgresql_limit_of_sixty_three")~~ + + +DROP TABLE ErrTest_Constraint_Table; +GO + + +-- =========================================== +-- INDEX-specific errors +-- =========================================== +-- CREATE INDEX on non-existent table +CREATE INDEX SomeIdx_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- CREATE INDEX on non-existent column +CREATE INDEX SomeIdx_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: column "nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars" does not exist)~~ + + + +-- =========================================== +-- Errors inside stored procedures +-- =========================================== +-- Table already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Table AS +BEGIN + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +END; +GO +EXEC ErrTest_Proc_Table; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errproc_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + +DROP TABLE IF EXISTS ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_Table; +GO + +-- Drop non-existent table inside proc +CREATE PROCEDURE ErrTest_Proc_Drop AS +BEGIN + DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +END; +GO +EXEC ErrTest_Proc_Drop; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + +DROP PROCEDURE ErrTest_Proc_Drop; +GO + +-- Column not found inside proc +CREATE PROCEDURE ErrTest_Proc_Col AS +BEGIN + SELECT nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars FROM ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +END; +GO +EXEC ErrTest_Proc_Col; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: column "nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars" does not exist)~~ + +DROP PROCEDURE ErrTest_Proc_Col; +GO + +-- Constraint violation inside proc +CREATE PROCEDURE ErrTest_Proc_Constraint AS +BEGIN + INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(10, 1); +END; +GO +CREATE TABLE ErrTest_Constraint_Table2 (c1 INT, c2 INT, CONSTRAINT ErrProc_Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three CHECK (c2 > c1)); +GO +CREATE PROCEDURE ErrTest_Proc_Constraint2 AS +BEGIN + INSERT INTO ErrTest_Constraint_Table2(c1, c2) VALUES(10, 1); +END; +GO +EXEC ErrTest_Proc_Constraint2; +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "errtest_constraint_table2" violates check constraint "errproc_very_long_check_constraint_name_that_exceeds_postgresql_limit_of_sixty_three")~~ + +DROP PROCEDURE ErrTest_Proc_Constraint2; +GO +DROP TABLE ErrTest_Constraint_Table2; +GO + +-- Index already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Index AS +BEGIN + CREATE INDEX ErrProc_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +END; +GO +EXEC ErrTest_Proc_Index; +GO +EXEC ErrTest_Proc_Index; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The index 'ErrProc_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters' already exists.)~~ + +DROP INDEX IF EXISTS ErrProc_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_Index; +GO + +-- Error in nested proc +CREATE PROCEDURE ErrTest_Inner_Proc AS +BEGIN + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +END; +GO +CREATE PROCEDURE ErrTest_Outer_Proc AS +BEGIN + EXEC ErrTest_Inner_Proc; + EXEC ErrTest_Inner_Proc; +END; +GO +EXEC ErrTest_Outer_Proc; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errproc_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + +DROP TABLE IF EXISTS ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Outer_Proc; +GO +DROP PROCEDURE ErrTest_Inner_Proc; +GO + +-- Function already exists inside proc (via EXEC) +CREATE PROCEDURE ErrTest_Proc_Func AS +BEGIN + EXEC('CREATE FUNCTION ErrProc_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END'); +END; +GO +EXEC ErrTest_Proc_Func; +GO +EXEC ErrTest_Proc_Func; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'errproc_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_chars' already exists with the same name)~~ + +DROP FUNCTION IF EXISTS ErrProc_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Func; +GO + +-- View already exists inside proc (via EXEC) +CREATE PROCEDURE ErrTest_Proc_View AS +BEGIN + EXEC('CREATE VIEW ErrProc_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a'); +END; +GO +EXEC ErrTest_Proc_View; +GO +EXEC ErrTest_Proc_View; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errproc_very_long_view_name_that_exceeds_postgresql_limit_of_sixty_three_characters" already exists)~~ + +DROP VIEW IF EXISTS ErrProc_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_View; +GO + +-- Sequence already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Seq AS +BEGIN + CREATE SEQUENCE ErrProc_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +END; +GO +EXEC ErrTest_Proc_Seq; +GO +EXEC ErrTest_Proc_Seq; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "errproc_very_long_sequence_name_that_exceeds_postgresql_limit_of_sixty_three_chars" already exists)~~ + +DROP SEQUENCE IF EXISTS ErrProc_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Seq; +GO + +-- DML on non-existent table inside proc +CREATE PROCEDURE ErrTest_Proc_DML AS +BEGIN + INSERT INTO NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +END; +GO +EXEC ErrTest_Proc_DML; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + +DROP PROCEDURE ErrTest_Proc_DML; +GO + + + +-- =========================================== +-- =========================================== +-- Temp table errors +-- =========================================== +-- Long temp table name +CREATE TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "#temp_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- Duplicate temp table - should show original name in error +CREATE TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "#temp_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- Insert into temp table to verify it works +INSERT INTO #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "#temp_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- Drop non-existent temp table - should show original name in error +DROP TABLE #NonExist_Very_Long_Temp_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "#nonexist_very_long_temp_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- Multibyte temp table +CREATE TABLE #テンプ_非常に長い一時テーブル名前がPostgreSQLの制限を超える場合のテスト (id INT); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "#テンプ_非常に長い一時テーブル名前がpostgresqlの制限を超える場合のテスト" does not exist)~~ + +CREATE TABLE #テンプ_非常に長い一時テーブル名前がPostgreSQLの制限を超える場合のテスト (id INT); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "#テンプ_非常に長い一時テーブル名前がpostgresqlの制限を超える場合のテスト" does not exist)~~ + + + + + +-- Index on temp table with long name +-- TODO: Enable once BABEL-6433 (temp table name truncation) is merged +-- CREATE INDEX IX_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters(id); +-- GO +-- Duplicate index on temp table - should show original name in error +-- CREATE INDEX IX_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters(id); +-- GO +-- Drop non-existent index on temp table +-- DROP INDEX NonExist_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +-- GO +-- Constraint on temp table with long name +-- TODO: Enable once BABEL-6433 (temp table name truncation) is merged +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- ADD CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three CHECK (id > 0); +-- GO +-- Duplicate constraint on temp table - should show original name in error +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- ADD CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three CHECK (id > 0); +-- GO +-- Drop constraint with long name +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- DROP CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three; +-- GO +-- =========================================== +-- LOGIN with invalid default database +-- =========================================== +CREATE LOGIN babel5975_test_long_login_name_that_exceeds_postgresql_limit_of_sixty_three_chars WITH PASSWORD = '12345678', DEFAULT_DATABASE = nonexistent_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The database 'nonexistent_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars' does not exist. Supply a valid database name. To see available databases, use sys.databases.)~~ + + + +-- =========================================== +-- Table variable errors +-- =========================================== +-- First batch declares (populates cache), second batch references (triggers error with full name) +DECLARE @Very_Long_Table_Variable_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters TABLE (id INT); +GO +SELECT * FROM @Very_Long_Table_Variable_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: relation "@very_long_table_variable_name_that_exceeds_postgresql_limit_of_sixty_three_characters" does not exist)~~ + + +-- =========================================== +-- Cross-session constraint name display +-- =========================================== +-- Unique constraint violation shows full constraint name (cross-session) +CREATE TABLE ErrTest_Constraint_Cross (id INT, CONSTRAINT uq_Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE(id)); +GO +INSERT INTO ErrTest_Constraint_Cross VALUES (1); +GO +~~ROW COUNT: 1~~ + +INSERT INTO ErrTest_Constraint_Cross VALUES (1); +GO +~~ERROR (Code: 2627)~~ + +~~ERROR (Message: duplicate key value violates unique constraint "uq_very_long_unique_constraint_name_that_exceeds_postgresql_limit_of_sixty_three_chars")~~ + +DROP TABLE ErrTest_Constraint_Cross; +GO + +-- PRIMARY KEY constraint violation +CREATE TABLE ErrTest_PK_Table (id INT, CONSTRAINT Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three PRIMARY KEY (id)); +GO +INSERT INTO ErrTest_PK_Table VALUES (1); +GO +~~ROW COUNT: 1~~ + +INSERT INTO ErrTest_PK_Table VALUES (1); +GO +~~ERROR (Code: 2627)~~ + +~~ERROR (Message: duplicate key value violates unique constraint "very_long_primary_key_constraint_name_that_exceeds_postgresql_limit_of_sixty_three")~~ + +DROP TABLE ErrTest_PK_Table; +GO + +-- FOREIGN KEY constraint violation +CREATE TABLE ErrTest_FK_Parent (id INT PRIMARY KEY); +GO +CREATE TABLE ErrTest_FK_Child (id INT, parent_id INT, CONSTRAINT Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three FOREIGN KEY (parent_id) REFERENCES ErrTest_FK_Parent(id)); +GO +INSERT INTO ErrTest_FK_Child VALUES (1, 999); +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: insert or update on table "errtest_fk_child" violates foreign key constraint "very_long_foreign_key_constraint_name_that_exceeds_postgresql_limit_of_sixty_three")~~ + +DROP TABLE ErrTest_FK_Child; +GO +DROP TABLE ErrTest_FK_Parent; +GO + + + +-- =========================================== +-- Parameter name display in error messages +-- =========================================== +-- Function with long parameter name - missing required param shows full name +CREATE FUNCTION ErrTest_Func_Long_Param(@Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT) RETURNS INT AS BEGIN RETURN @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO +SELECT dbo.ErrTest_Func_Long_Param(); +GO +~~ERROR (Code: 201)~~ + +~~ERROR (Message: function master_dbo.errtest_func_long_param expects parameter "@very_long_parameter_name_that_exceeds_postgresql_limit_of_sixty_three_characters", which was not supplied.)~~ + + +-- Procedure with long parameter name - missing required param shows full name +CREATE PROCEDURE ErrTest_Proc_Long_Param @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT AS SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +EXEC ErrTest_Proc_Long_Param; +GO +~~ERROR (Code: 201)~~ + +~~ERROR (Message: procedure errtest_proc_long_param expects parameter "@very_long_parameter_name_that_exceeds_postgresql_limit_of_sixty_three_characters", which was not supplied.)~~ + + +-- Procedure with long TVP parameter name - missing required param shows full name +CREATE TYPE ErrTest_TVP_Type AS TABLE (id INT); +GO +CREATE PROCEDURE ErrTest_Proc_Long_TVP_Param @Very_Long_TVP_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ErrTest_TVP_Type READONLY AS SELECT * FROM @Very_Long_TVP_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +EXEC ErrTest_Proc_Long_TVP_Param; +GO +~~ERROR (Code: 201)~~ + +~~ERROR (Message: procedure errtest_proc_long_tvp_param expects parameter "@very_long_tvp_parameter_name_that_exceeds_postgresql_limit_of_sixty_three_characters", which was not supplied.)~~ + + +DROP FUNCTION ErrTest_Func_Long_Param; +GO +DROP PROCEDURE ErrTest_Proc_Long_Param; +GO +DROP PROCEDURE ErrTest_Proc_Long_TVP_Param; +GO +DROP TYPE ErrTest_TVP_Type; +GO + +-- CLEANUP +-- =========================================== +DROP INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +DROP CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Constraint; +GO +DROP TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO diff --git a/test/JDBC/expected/long-identifiers-vu-cleanup.out b/test/JDBC/expected/long-identifiers-vu-cleanup.out new file mode 100644 index 00000000000..8135d74753f --- /dev/null +++ b/test/JDBC/expected/long-identifiers-vu-cleanup.out @@ -0,0 +1,34 @@ + +-- Long identifiers vu-cleanup: Drop all objects +DROP TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TRIGGER MixedCase_Trig_VU; +GO +DROP INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TABLE babel5975_vu_fk_child; +GO +DROP TABLE babel5975_vu_fk_parent; +GO +DROP TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +DROP PROCEDURE Mixed_Case_Proc_VU; +GO +DROP FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TABLE [テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト_VU]; +GO +DROP TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +DROP ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO diff --git a/test/JDBC/expected/long-identifiers-vu-prepare.out b/test/JDBC/expected/long-identifiers-vu-prepare.out new file mode 100644 index 00000000000..b9583877a25 --- /dev/null +++ b/test/JDBC/expected/long-identifiers-vu-prepare.out @@ -0,0 +1,79 @@ + +-- Long identifiers vu-prepare: Create all types of objects with long names +-- Table with long name +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU ( + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 INT NOT NULL, + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 VARCHAR(50), + CONSTRAINT Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU PRIMARY KEY (Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1), + CONSTRAINT Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU CHECK (Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 > 0) +); +GO + +-- Index with long name +CREATE INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU(Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2); +GO + +-- Foreign key parent and child +CREATE TABLE babel5975_vu_fk_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_vu_fk_child (id INT, + CONSTRAINT Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU FOREIGN KEY (id) REFERENCES babel5975_vu_fk_parent(id)); +GO + +-- View with long name +CREATE VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU AS +SELECT Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 AS id FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- Procedure with long name and long parameter +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU END; +GO +-- Procedure with mixed case (short name) +CREATE PROCEDURE Mixed_Case_Proc_VU +AS SELECT 1; +GO + + +-- Function with long name +CREATE FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU(@a INT) +RETURNS INT AS BEGIN RETURN @a END; +GO + +-- Trigger with long name +CREATE TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- Short mixed-case trigger +CREATE TRIGGER MixedCase_Trig_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- Sequence with long name +CREATE SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU AS INT START WITH 1; +GO + +-- Type with long name +CREATE TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU FROM INT; +GO + +-- Database with long name +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- Multibyte table +CREATE TABLE [テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト_VU] (id INT, val NVARCHAR(50)); +GO + +-- Mixed case table +CREATE TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU (id INT); +GO + +-- Role with long name +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO diff --git a/test/JDBC/expected/long-identifiers-vu-verify.out b/test/JDBC/expected/long-identifiers-vu-verify.out new file mode 100644 index 00000000000..5418f317220 --- /dev/null +++ b/test/JDBC/expected/long-identifiers-vu-verify.out @@ -0,0 +1,407 @@ + +-- Long identifiers vu-verify: Verify all system objects show original names +-- sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%VU'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%VU'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- Case-insensitive lookup +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.all_columns +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.indexes +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%VU'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.key_constraints +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.check_constraints +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%VU'; +GO +~~START~~ +varchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.foreign_keys +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.views +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.procedures +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%VU'; +GO +~~START~~ +varchar +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.triggers +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%VU'; +GO +~~START~~ +varchar +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- Trigger rename preserves orig_name +EXEC sp_rename 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very_Long_Trigger_Renamed%'; +GO +~~START~~ +nvarchar +Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + +-- Rename back +EXEC sp_rename 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO + +-- Short mixed-case trigger rename +EXEC sp_rename 'MixedCase_Trig_VU', 'MixedCase_Trig_VU_Renamed', 'OBJECT'; +GO +SELECT name FROM sys.triggers WHERE name LIKE '%MixedCase_Trig_VU%'; +GO +~~START~~ +varchar +MixedCase_Trig_VU_Renamed +~~END~~ + +EXEC sp_rename 'MixedCase_Trig_VU_Renamed', 'MixedCase_Trig_VU', 'OBJECT'; +GO + +-- sys.types +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%VU'; +GO +~~START~~ +varchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.objects (sequence) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Sequence%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#SEQUENCE_OBJECT +~~END~~ + + +-- sys.all_objects (constraints) +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_PK%VU' OR name LIKE 'Very_Long_Check%VU' OR name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU#!#FOREIGN_KEY_CONSTRAINT +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#PRIMARY_KEY_CONSTRAINT +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#CHECK_CONSTRAINT +~~END~~ + + +-- sys.databases +SELECT name FROM sys.databases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +varchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.sysdatabases +SELECT name FROM sys.sysdatabases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- DB_NAME() in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_principals in long-named database +SELECT name FROM sys.database_principals WHERE name = 'dbo'; +GO +~~START~~ +varchar +dbo +~~END~~ + +USE master; +GO + +-- sp_helpdb with long name +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +int +1 +~~END~~ + + +-- Multibyte table +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%VU'; +GO +~~START~~ +varchar +?????????????????PostgreSQL?????????????_VU +~~END~~ + + +-- information_schema.table_constraints +SELECT CONSTRAINT_NAME FROM information_schema.table_constraints WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- information_schema.key_column_usage +SELECT CONSTRAINT_NAME, COLUMN_NAME FROM information_schema.key_column_usage WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +nvarchar#!#nvarchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +~~END~~ + + +-- Error messages show original names +-- Duplicate table +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU (id INT); +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" already exists)~~ + + +-- Duplicate procedure +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU AS SELECT 1; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'very_long_procedure_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu' already exists with the same name)~~ + + +-- Drop non-existent table +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" does not exist)~~ + + +-- Drop non-existent function +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: could not find a function named "nonexist_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu")~~ + + +-- sys.all_views +SELECT name FROM sys.all_views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_role_members +ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU'; +GO +~~START~~ +int +1 +~~END~~ + + +ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- sp_tables +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#TABLE#!# +~~END~~ + + +-- sp_fkeys +EXEC sp_fkeys @pktable_name = 'babel5975_vu_fk_parent'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint +master#!#dbo#!#babel5975_vu_fk_parent#!#id#!#master#!#dbo#!#babel5975_vu_fk_child#!#id#!#1#!#1#!#1#!#very_long_fk_constraint_name_thb4fc9f26bf1dbc1d877db6cf99be5888#!#babel5975_vu_fk_parent_pkey#!#7 +~~END~~ + + +-- sp_stored_procedures +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + +GO +-- sp_stored_procedures with mixed case short name +EXEC sp_stored_procedures @sp_name = 'Mixed_Case_Proc_VU'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Mixed_Case_Proc_VU;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + + +-- sp_special_columns +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +smallint#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint +1#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1#!##!#int#!##!##!##!#1 +~~END~~ + + +-- information_schema.columns +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%VU' ORDER BY ORDINAL_POSITION; +GO +~~START~~ +nvarchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.database_principals shows role with full name +SELECT name, type_desc FROM sys.database_principals WHERE name LIKE 'Very_Long_Role%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#DATABASE_ROLE +~~END~~ + + +-- sp_helpuser/helprole/helprolemember in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DECLARE @t1 TABLE(userName sys.SYSNAME, roleName sys.SYSNAME, loginName sys.SYSNAME NULL, defdb sys.SYSNAME NULL, defschema sys.SYSNAME, userid INT, sid sys.VARBINARY(85)); +INSERT INTO @t1 EXEC sp_helpuser; +SELECT userName, roleName, loginName, defdb, defschema FROM @t1 ORDER BY userName; +GO +~~ROW COUNT: 2~~ + +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +dbo#!#db_owner#!#jdbc_user#!##!#dbo +guest#!#public#!##!##!#guest +~~END~~ + +DECLARE @t2 TABLE(RoleName sys.SYSNAME, RoleId INT, IsAppRole INT); +INSERT INTO @t2 EXEC sp_helprole; +SELECT RoleName, IsAppRole FROM @t2 ORDER BY RoleName; +GO +~~ROW COUNT: 6~~ + +~~START~~ +varchar#!#int +db_accessadmin#!#0 +db_datareader#!#0 +db_datawriter#!#0 +db_ddladmin#!#0 +db_owner#!#0 +db_securityadmin#!#0 +~~END~~ + +DECLARE @t3 TABLE(DbRole sys.SYSNAME, MemberName sys.SYSNAME, MemberSID sys.VARBINARY(85)); +INSERT INTO @t3 EXEC sp_helprolemember; +SELECT DbRole, MemberName FROM @t3 ORDER BY DbRole, MemberName; +GO +~~ROW COUNT: 1~~ + +~~START~~ +varchar#!#varchar +db_owner#!#dbo +~~END~~ + +USE master; +GO diff --git a/test/JDBC/expected/long-identifiers.out b/test/JDBC/expected/long-identifiers.out new file mode 100644 index 00000000000..02c882d03c1 --- /dev/null +++ b/test/JDBC/expected/long-identifiers.out @@ -0,0 +1,1606 @@ + +-- tsql + +-- Long Identifier Storage Tests +-- Tests all DDL paths that store original names for identifiers > 63 chars +-- =========================================== +-- CREATION: All object types with long names +-- =========================================== +-- 1. CREATE TABLE with long name +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id INT NOT NULL, name NVARCHAR(100)); +GO + +-- 2. CREATE TABLE with long column names +CREATE TABLE babel5975_col_test ( + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 INT, + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 NVARCHAR(50) +); +GO + +-- 3. CREATE TABLE with long constraint name (PK) +CREATE TABLE babel5975_pk_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three PRIMARY KEY (id) +); +GO + +-- 4. CREATE TABLE with long constraint name (UNIQUE) +CREATE TABLE babel5975_uq_test ( + val INT, + CONSTRAINT Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val) +); +GO + +-- 5. CREATE TABLE with long constraint name (CHECK) +CREATE TABLE babel5975_ck_test ( + val INT, + CONSTRAINT Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters CHECK (val > 0) +); +GO + +-- 6. CREATE VIEW with long name +CREATE VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 7. CREATE INDEX with long name +CREATE INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id); +GO + +-- 8. CREATE SEQUENCE with long name +CREATE SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS INT START WITH 1 INCREMENT BY 1; +GO + +-- 9. CREATE FUNCTION with long name +CREATE FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing(@a INT) +RETURNS INT AS BEGIN RETURN @a + 1 END; +GO + +-- 10. CREATE PROCEDURE with long name and long parameter +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 11. CREATE TRIGGER with long name +CREATE TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- 12. CREATE TYPE with long name +CREATE TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing FROM INT; +GO + +-- 13. SELECT INTO with long table name +SELECT 1 AS col1 INTO Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + + +-- 14. ALTER TABLE ADD COLUMN with long name +ALTER TABLE babel5975_col_test ADD Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT; +GO + +-- 14b. SELECT INTO preserves long column names +SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INTO babel5975_select_into_col_test FROM babel5975_col_test; +GO + +-- 15. CREATE FUNCTION with multiple long parameters +CREATE FUNCTION babel5975_multi_param_func( + @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT, + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) +RETURNS INT AS BEGIN RETURN @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 16. SELECT with long alias - verify full name in result metadata +SELECT name FROM sys.sp_describe_first_result_set_internal(N'SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing', NULL, 0); +GO +~~START~~ +varchar +Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing +~~END~~ + + +-- 17. CREATE DATABASE with long name +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +-- Verify database original name stored in babelfish_sysdatabases.orig_name +SELECT orig_name FROM sys.babelfish_sysdatabases WHERE orig_name LIKE 'Very_Long_Database%'; +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing +~~END~~ + + +-- 18. sp_rename TABLE with long name +EXEC sp_rename 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 19. sp_rename COLUMN with long name +EXEC sp_rename 'babel5975_col_test.Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2', + 'Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'COLUMN'; +GO + +-- Verify renamed table shows new full name in sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Renamed_Table%'; +GO +~~START~~ +varchar +Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify renamed column shows new full name in sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE 'Very_Long_Renamed_Column%'; +GO +~~START~~ +varchar +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- 20. sp_rename FUNCTION with long name +EXEC sp_rename 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 21. sp_rename PROCEDURE with long name +EXEC sp_rename 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- Rename back for cleanup +EXEC sp_rename 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO + + + + + +-- 17. CREATE DATABASE with long name (uses babelfish_sysdatabases) +-- Skipped: database names limited to 128 but stored separately +-- 18. CREATE SCHEMA with long name (uses babelfish_namespace_ext) +-- Skipped: schema names limited differently +-- 19. CREATE LOGIN with long name (uses babelfish_authid_login_ext) +-- Skipped: requires sysadmin +-- =========================================== +-- ADDITIONAL SCENARIOS +-- =========================================== +-- 22. Long name with bracket delimiters - table +CREATE TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ( + [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] INT, + CONSTRAINT [Very Long Constraint Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Chars] CHECK ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] > 0) +); +GO + +-- 22b. Bracket delimiters - view +CREATE VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +AS SELECT [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] FROM [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 22c. Bracket delimiters - function +CREATE FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters](@a INT) +RETURNS INT AS BEGIN RETURN @a END; +GO + +-- 22d. Bracket delimiters - index +CREATE INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]); +GO + +-- 22e. Bracket delimiters - sequence +CREATE SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] AS INT START WITH 1; +GO + +-- 22f. Bracket delimiters - alias +SELECT 1 AS [Very Long Alias Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +~~START~~ +int +1 +~~END~~ + + +-- Verify bracket identifiers stored in babelfish_function_ext +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very Long Function%'; +GO +~~START~~ +nvarchar +Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters +~~END~~ + + +-- Verify bracket identifiers stored in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very Long%' ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very Long Constraint Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Chars +Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters +~~END~~ + + +-- Cleanup bracket objects +DROP VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 24. Long name with double-quote delimiters +SET QUOTED_IDENTIFIER ON; +GO +CREATE TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test" (id INT); +GO +DROP TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test"; +GO + +-- 25. CREATE TABLE with long FK constraint name +CREATE TABLE babel5975_fk_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_child ( + id INT, + parent_id INT, + CONSTRAINT Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three FOREIGN KEY (parent_id) REFERENCES babel5975_fk_parent(id) +); +GO + +-- 27. CREATE OR ALTER VIEW with long name +CREATE OR ALTER VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 28. ALTER PROCEDURE with long name +ALTER PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + 1 END; +GO + +-- 28. Multiple long aliases in one SELECT +SELECT 1 AS Very_Long_First_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing, + 2 AS Very_Long_Second_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +-- 29. View column display tests +-- 29a. SELECT * FROM view with long alias shows full name +CREATE VIEW babel5975_view_alias AS SELECT 1 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO +~~START~~ +int +1 +~~END~~ + + +-- 29b. sys.columns shows full view column name +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_alias'); +GO +~~START~~ +varchar +Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- 29c. CREATE OR ALTER VIEW preserves long alias +CREATE OR ALTER VIEW babel5975_view_alias AS SELECT 2 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO +~~START~~ +int +2 +~~END~~ + + +-- 29d. View selecting long column from table +CREATE VIEW babel5975_view_from_tbl AS SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM babel5975_col_test; +GO +SELECT * FROM babel5975_view_from_tbl; +GO +~~START~~ +int +~~END~~ + +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_from_tbl'); +GO +~~START~~ +varchar +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +DROP VIEW babel5975_view_alias; +GO +DROP VIEW IF EXISTS babel5975_view_from_tbl; +GO + +-- 30. Long name with multibyte characters (Japanese) +CREATE TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ (id INT); +GO +DROP TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ; +GO + +-- 30. CREATE TABLE with long DEFAULT constraint name +CREATE TABLE babel5975_df_test ( + val INT CONSTRAINT Very_Long_Default_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars DEFAULT 0 +); +GO + + +-- =========================================== +-- DROP CLEANUP TESTS: Verify entries are removed +-- =========================================== +-- Create objects to test drop cleanup +CREATE TABLE babel5975_drop_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Drop_Test_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars PRIMARY KEY (id) +); +GO +CREATE SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +CREATE TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +CREATE FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters( + @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) RETURNS INT AS BEGIN RETURN @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- Verify entries exist before drop +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test%'; +GO +~~START~~ +int +3 +~~END~~ + + +-- Drop and verify entries are removed +DROP TABLE babel5975_drop_test; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Constraint%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Sequence%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Type%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Param%'; +GO +~~START~~ +int +0 +~~END~~ + + + +-- =========================================== +-- VERIFICATION: System views show original names +-- =========================================== +-- sys.tables shows full original name +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.views shows full original name +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View_Name%'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.columns shows full original column names +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + + +-- sys.all_columns shows full original column names +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE '%Very_Long%' ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sys.procedures shows full original name +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%'; +GO +~~START~~ +varchar +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.types shows full original type name +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%'; +GO +~~START~~ +varchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.indexes shows full original index name +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.indexes LIKE search with partial name works +SELECT name FROM sys.indexes WHERE name LIKE '%Exceeds_PostgreSQL_Limit%'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.objects shows full original names (inherits from above) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Table_Name%' OR name LIKE 'Very_Long_Function%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#USER_TABLE +Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#SQL_SCALAR_FUNCTION +~~END~~ + + +-- sys.key_constraints shows full original constraint name +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_Primary%'; +GO +~~START~~ +varchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +~~END~~ + + +-- sys.check_constraints shows full original constraint name +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%'; +GO +~~START~~ +varchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sys.foreign_keys shows full original constraint name +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_Foreign%'; +GO +~~START~~ +varchar +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +~~END~~ + + +-- sys.all_objects shows full original names for constraints +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Primary%' OR name LIKE 'Very_Long_Check%' OR name LIKE 'Very_Long_Foreign%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#FOREIGN_KEY_CONSTRAINT +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#PRIMARY_KEY_CONSTRAINT +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#CHECK_CONSTRAINT +~~END~~ + + +-- sys.all_objects shows full original names for sequences +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Sequence%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#SEQUENCE_OBJECT +~~END~~ + + +-- information_schema.table_constraints shows original constraint names +SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.table_constraints +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%' OR CONSTRAINT_NAME LIKE 'Very_Long_Unique%'; +GO +~~START~~ +varchar#!#varchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#babel5975_pk_test +Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_uq_test +~~END~~ + + +-- information_schema.key_column_usage shows original names +SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM information_schema.key_column_usage +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%'; +GO +~~START~~ +nvarchar#!#nvarchar#!#nvarchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#babel5975_pk_test#!#id +~~END~~ + + +-- sp_statistics shows original index/table names +EXEC sp_statistics @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#1#!#very_long_table_name_that_excee93167071de365a0cba68700e242774dd#!#Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#3#!#1#!#id#!#A#!##!#0#!# +~~END~~ + + + +-- =========================================== +-- VERIFICATION: Check actual storage locations +-- =========================================== +-- Verify functions/procedures/triggers in babelfish_function_ext.orig_name +SELECT orig_name FROM sys.babelfish_function_ext +WHERE orig_name LIKE 'Very_Long_Function%' + OR orig_name LIKE 'Very_Long_Procedure%' + OR orig_name LIKE 'Very_Long_Trigger%' +ORDER BY orig_name; +GO +~~START~~ +nvarchar +Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify sequences in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1259 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify types in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1247 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify constraints in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 2606 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify parameters in babelfish_identifier_mapping +SELECT original_identifier_name, parent_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1255 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar#!#varchar +@Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_multi_param_func +@Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#very_long_procedure_name_that_e61b6230e662738953e607931c33a9021 +@Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_multi_param_func +~~END~~ + + +-- psql +-- Verify table original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_table_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify view original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_view_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify index original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE '%very_long_index%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify SELECT INTO table in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_select_into%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + + + +-- tsql +-- Verify SELECT INTO column original name preserved +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_select_into_col_test') AND name LIKE '%Very_Long%'; +GO +~~START~~ +varchar +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify sp_tables works with long table names +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#TABLE#!# +~~END~~ + + +-- Verify sp_columns works with long table names +EXEC sp_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#int +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#id#!#4#!#int#!#10#!#4#!#0#!#10#!#0#!##!##!#4#!##!##!#1#!#NO#!#38 +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#name#!#-9#!#nvarchar#!#100#!#200#!##!##!#1#!##!##!#-9#!##!#200#!#2#!#YES#!#39 +~~END~~ + + +-- Verify OBJECT_ID works with long names +SELECT CASE WHEN OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END; +GO +~~START~~ +varchar +FOUND +~~END~~ + + +-- Verify OBJECT_NAME returns full original name +SELECT OBJECT_NAME(OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing')); +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify sp_stored_procedures works with long procedure name +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + + +-- Verify DB_NAME() returns case-preserved name +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +master +~~END~~ + + +-- sys.databases shows case-preserved database name +SELECT name FROM sys.databases WHERE name LIKE '%Long_Database%'; +GO +~~START~~ +varchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing +~~END~~ + + +USE master; +GO + +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +CREATE DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- sys.sysdatabases shows case-preserved name +SELECT name FROM sys.sysdatabases WHERE name LIKE '%Long_DB_Name%'; +GO +~~START~~ +nvarchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- DB_NAME() comparison with sys.sysdatabases works (CI collation) +SELECT name FROM sys.sysdatabases WHERE name = DB_NAME() collate database_default; +GO +~~START~~ +nvarchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sp_tables works in long-named database +EXEC sp_tables; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#dbo#!#sysdatabases#!#VIEW#!# +~~END~~ + + +-- information_schema.tables works in long-named database +SELECT TABLE_CATALOG FROM information_schema.tables WHERE TABLE_CATALOG LIKE '%Long_DB%'; +GO +~~START~~ +nvarchar +~~END~~ + + +USE master; +GO +DROP DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Verify information_schema.tables returns full table name +SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify information_schema.columns returns full column name +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%' AND COLUMN_NAME LIKE '%id%'; +GO +~~START~~ +nvarchar +id +~~END~~ + + +-- sys.triggers shows full trigger name +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%'; +GO +~~START~~ +varchar +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + + + +-- sp_fkeys with long table name +EXEC sp_fkeys @pktable_name = 'babel5975_fk_parent'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint +master#!#dbo#!#babel5975_fk_parent#!#id#!#master#!#dbo#!#babel5975_fk_child#!#parent_id#!#1#!#1#!#1#!#very_long_foreign_key_constrain8ae1bf6a621fff2f280f3a0f9f70d1f8#!#babel5975_fk_parent_pkey#!#7 +~~END~~ + + +-- sp_special_columns with long table name +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +smallint#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint +1#!#id#!#4#!#int#!#10#!#4#!#0#!#1 +~~END~~ + + + +-- psql +-- Verify column original names in pg_attribute.attoptions +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attoptions IS NOT NULL AND attoptions::text LIKE '%Very_Long%' +ORDER BY attnum; +GO +~~START~~ +name#!#_text +very_long_column_name_that_excec56ed1dfbe550fc8e689a0b82eabb305#!#{bbf_original_name=Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1} +very_long_renamed_column_name_t5127d87a119eb55c397d5d2818fa2606#!#{bbf_original_name=Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +very_long_added_column_name_thaceca5ee9cb8761d8bce6e44cff6cc23e#!#{bbf_original_name=Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +~~END~~ + + +-- psql +-- Verify ALTER TABLE ADD column +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attname LIKE 'very_long_added%'; +GO +~~START~~ +name#!#_text +very_long_added_column_name_thaceca5ee9cb8761d8bce6e44cff6cc23e#!#{bbf_original_name=Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +~~END~~ + + +-- tsql + + +-- Section 7: DML Result Set Headers +-- =========================================== +-- Long alias in SELECT +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_In_Select; +GO +~~START~~ +int +1 +~~END~~ + + +-- Long alias in UNION (first SELECT preserved) +SELECT 1 AS Very_Long_Union_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +UNION ALL +SELECT 2 +ORDER BY 1; +GO +~~START~~ +int +1 +2 +~~END~~ + + + +-- =========================================== +-- Section 8: Case Sensitivity +-- =========================================== +-- Mixed case preserved +CREATE TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (Id_MiXeD INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MiXeD_CaSe%'; +GO +~~START~~ +varchar +MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- Section 12: Edge Cases +-- =========================================== +-- Exactly 63 bytes - no catalog entry needed +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Exactly 64 bytes - catalog entry created +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%'; +GO +~~START~~ +varchar +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +~~END~~ + +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Quoted identifiers with special characters +CREATE TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!] (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE '%Quoted%'; +GO +~~START~~ +varchar +Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters! +~~END~~ + +DROP TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!]; +GO + + +-- psql +-- =========================================== +-- Section 9: PG Endpoint Isolation +-- =========================================== +-- Verify truncated names visible in pg_class +SELECT relname FROM pg_class WHERE relname LIKE 'very_long_table_name%' LIMIT 1; +GO +~~START~~ +name +very_long_table_name_that_excee93167071de365a0cba68700e242774dd +~~END~~ + + +-- Verify modification of bbf_original_rel_name is blocked +ALTER TABLE master_dbo.very_long_table_name_that_exceed05596e9412ba2b6bc9c227f800f8ca5a SET (bbf_original_rel_name='hacked'); +GO +~~ERROR (Code: 0)~~ + +~~ERROR (Message: ERROR: cannot modify "bbf_original_rel_name" for babelfish objects + Server SQLState: 42501)~~ + + +-- Verify modification of bbf_original_name (column) is blocked +ALTER TABLE master_dbo.babel5975_col_test ALTER COLUMN very_long_column_name_that_excee78cb009a0e5eb4aba1c0243be4884f78 SET (bbf_original_name='hacked'); +GO +~~ERROR (Code: 0)~~ + +~~ERROR (Message: ERROR: cannot modify "bbf_original_name" for babelfish objects + Server SQLState: 42501)~~ + + +-- tsql + + +-- =========================================== +-- Section 6.5: Constraint-backed indexes +-- =========================================== +CREATE TABLE babel5975_idx_constraint_test (id INT, val INT, + CONSTRAINT PK_Very_Long_Primary_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT UQ_Very_Long_Unique_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val)); +GO +SELECT name, type_desc FROM sys.indexes WHERE object_id = OBJECT_ID('babel5975_idx_constraint_test') ORDER BY type; +GO +~~START~~ +varchar#!#nvarchar +#!#HEAP +uq_very_long_unique_key_name_th0cf69e6e308abe9a1f6051a789c850d5#!#NONCLUSTERED +pk_very_long_primary_key_name_t1584497a86c81db8e7e6195152e9e43a#!#NONCLUSTERED +~~END~~ + + +DROP TABLE babel5975_idx_constraint_test; +-- Section 7: Additional DML headers +-- =========================================== +-- CTE with long alias +;WITH Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE AS (SELECT 1 AS val) +SELECT val FROM Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE; +GO +~~START~~ +int +1 +~~END~~ + + +-- Subquery alias preserved in result +SELECT * FROM (SELECT 1 AS Very_Long_SubQuery_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters) sub; +GO +~~START~~ +int +1 +~~END~~ + + +-- =========================================== +-- Section 10: Catalog cleanup - rapid CREATE/DROP +-- =========================================== +-- Rapid create/drop should not leave orphan entries +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +-- Verify no orphan entries +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE truncated_identifier_name LIKE '%rapid_very_long%'; +GO +~~START~~ +int +0 +~~END~~ + + +-- =========================================== +-- ORDER BY with long alias +-- =========================================== +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing ORDER BY Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing; +GO +~~START~~ +int +1 +~~END~~ + + +-- =========================================== +-- CREATE INDEX on SELECT INTO column with long name +-- =========================================== +CREATE INDEX babel5975_idx_select_into ON babel5975_select_into_col_test(Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters); +GO +DROP INDEX babel5975_idx_select_into ON babel5975_select_into_col_test; +GO + + + + + +-- =========================================== +-- DROP cleanup verification +-- =========================================== +-- Verify catalog entries are removed after DROP TABLE +CREATE TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters INT, CONSTRAINT ck_very_long_constraint_name_that_exceeds_postgresql_limit_of_sixty_three CHECK (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters > 0)); +GO +-- Verify entries exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three; +GO +-- Verify entries removed +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO +~~START~~ +int +0 +~~END~~ + + +-- Verify catalog entries removed after DROP DATABASE +USE master; +GO +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +CREATE TABLE babel5975_db_drop_test_table_very_long_name_that_exceeds_postgresql_limit_chars (id INT); +GO +USE master; +GO +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- RENAME TESTS: Verify mapping is updated on sp_rename +-- =========================================== +-- Test sequence rename +CREATE SEQUENCE Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +~~START~~ +int +1 +~~END~~ + +EXEC sp_rename 'Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars', 'Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +~~START~~ +int +0 +~~END~~ + +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Sequence%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP SEQUENCE Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Test type rename +CREATE TYPE Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +~~START~~ +int +1 +~~END~~ + +EXEC sp_rename 'Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New', 'USERDATATYPE'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +~~START~~ +int +0 +~~END~~ + +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Type%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP TYPE Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New; +GO + + +-- =========================================== +-- CASE SENSITIVITY TESTS: Verify original casing is preserved +-- =========================================== +-- Mixed case table name +CREATE TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +SELECT name FROM sys.all_objects WHERE name LIKE 'MixedCase_Very_Long%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +-- Case-insensitive lookup should work +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_abc'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +DROP TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC; +GO + +-- Mixed case constraint +CREATE TABLE babel5975_case_test (id INT NOT NULL, + CONSTRAINT MixedCase_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT MixedCase_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'MixedCase_PK%'; +GO +~~START~~ +varchar +MixedCase_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +SELECT name FROM sys.check_constraints WHERE name LIKE 'MixedCase_Check%'; +GO +~~START~~ +varchar +MixedCase_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + + +-- Foreign key with mixed case +CREATE TABLE babel5975_fk_case_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_case_child (id INT, + CONSTRAINT MixedCase_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FOREIGN KEY (id) REFERENCES babel5975_fk_case_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'MixedCase_FK%'; +GO +~~START~~ +varchar +MixedCase_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TABLE babel5975_fk_case_child; +GO +DROP TABLE babel5975_fk_case_parent; +GO +DROP TABLE babel5975_case_test; +GO + +-- Mixed case sequence +CREATE SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE 'MixedCase_Very_Long_Seq%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +DROP SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Mixed case type +CREATE TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'MixedCase_Very_Long_Type%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- MULTIBYTE CHARACTER TESTS: Unicode identifiers +-- =========================================== +-- Japanese characters in table name (each char = 3 bytes, so 22+ chars exceed 63 bytes) +CREATE TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト (id INT, val NVARCHAR(50)); +GO +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%'; +GO +~~START~~ +varchar +?????????????????PostgreSQL????????????? +~~END~~ + +DROP TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト; +GO + +-- Emoji and special characters in constraint name +CREATE TABLE babel5975_emoji_test (id INT NOT NULL, + CONSTRAINT PK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥😮 PRIMARY KEY (id), + CONSTRAINT CHK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥 CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'PK_Emoji%'; +GO +~~START~~ +varchar +PK_Emoji_????????????????????????? +~~END~~ + +SELECT name FROM sys.check_constraints WHERE name LIKE 'CHK_Emoji%'; +GO +~~START~~ +varchar +CHK_Emoji_???????????????????????? +~~END~~ + + +-- Foreign key with multibyte +CREATE TABLE babel5975_fk_mb_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_mb_child (id INT, + CONSTRAINT FK_外部キー_制約名_非常に長い名前_PostgreSQLの制限を超える場合のテスト FOREIGN KEY (id) REFERENCES babel5975_fk_mb_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'FK_外部キー%'; +GO +~~START~~ +varchar +FK_????_???_???????_PostgreSQL????????????? +~~END~~ + +DROP TABLE babel5975_fk_mb_child; +GO +DROP TABLE babel5975_fk_mb_parent; +GO +DROP TABLE babel5975_emoji_test; +GO + +-- Chinese characters in sequence name +CREATE SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式 AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE '这是一个%'; +GO +~~START~~ +varchar +????????????????PostgreSQL?????????????????? +~~END~~ + +DROP SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式; +GO + +-- Korean characters in column name +CREATE TABLE babel5975_korean_test ( + [아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼] INT +); +GO +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO +~~START~~ +varchar +??_?_?_??_PostgreSQL_???_????_??_???_???_??_??_???_?? +~~END~~ + +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO +~~START~~ +varchar +??_?_?_??_PostgreSQL_???_????_??_???_???_??_??_???_?? +~~END~~ + + +-- Multibyte index name +CREATE INDEX [インデックス_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子切り捨て] ON babel5975_korean_test([아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼]); +GO +SELECT name FROM sys.indexes WHERE name LIKE 'インデックス%'; +GO +~~START~~ +varchar +??????_???????_PostgreSQL?????????????_??????? +~~END~~ + +DROP TABLE babel5975_korean_test; +GO + +-- Mixed multibyte + ASCII in type name +CREATE TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'タイプ_Mixed%'; +GO +~~START~~ +varchar +???_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_???_Characters_Added +~~END~~ + +DROP TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added; +GO + + +-- =========================================== +-- DATABASE SYSTEM OBJECT TESTS +-- =========================================== +-- Mixed case long database name +CREATE DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT name FROM sys.databases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +SELECT name FROM sys.sysdatabases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +~~START~~ +nvarchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Case-insensitive lookup +SELECT name FROM sys.databases WHERE name = 'mixedcase_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Verify DB_NAME() returns original name +USE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Verify sp_helpdb can find database with long name (dbid is non-deterministic, just check it works) +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars'; +GO +~~START~~ +int +1 +~~END~~ + +USE master; +GO +DROP DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte database name +CREATE DATABASE データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT name FROM sys.databases WHERE name LIKE 'データベース%'; +GO +~~START~~ +varchar +??????_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +SELECT name FROM sys.sysdatabases WHERE name LIKE 'データベース%'; +GO +~~START~~ +nvarchar +データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +-- Verify user operations in multibyte-named database +USE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +USE master; +GO +DROP DATABASE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO + + +-- =========================================== +-- PROCEDURES AND TRIGGERS TESTS +-- =========================================== +-- Mixed case procedure name +CREATE PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'MixedCase_Very_Long_Proc%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +DROP PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte procedure name +CREATE PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'プロシージャ%'; +GO +~~START~~ +varchar +??????_???????_PostgreSQL????????????? +~~END~~ + +DROP PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト; +GO + +-- Mixed case trigger name +CREATE TABLE babel5975_trig_case_test (id INT); +GO +CREATE TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON babel5975_trig_case_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'MixedCase_Very_Long_Trig%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP TABLE babel5975_trig_case_test; +GO + +-- Multibyte trigger name +CREATE TABLE babel5975_trig_mb_test (id INT); +GO +CREATE TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理 +ON babel5975_trig_mb_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'トリガー%'; +GO +~~START~~ +varchar +????_???????_PostgreSQL?????????????_????? +~~END~~ + +DROP TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理; +GO +DROP TABLE babel5975_trig_mb_test; +GO + +-- =========================================== +-- CLEANUP +-- =========================================== +DROP TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP FUNCTION babel5975_multi_param_func; +GO +DROP PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_col_test; +GO +DROP TABLE babel5975_pk_test; +GO +DROP TABLE babel5975_uq_test; +GO +DROP TABLE babel5975_ck_test; +GO +DROP TABLE Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP TABLE IF EXISTS babel5975_select_into_col_test; +GO +DROP SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_fk_child; +GO +DROP TABLE babel5975_fk_parent; +GO +DROP TABLE babel5975_df_test; +GO diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/BABEL-CASE_EXPR-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/BABEL-CASE_EXPR-vu-verify.out index 27d45874836..2c71617b03a 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/BABEL-CASE_EXPR-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/BABEL-CASE_EXPR-vu-verify.out @@ -14597,7 +14597,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v1#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V1#!#RESULT#!#numeric#!#10#!#2 ~~END~~ @@ -14617,7 +14617,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v2#!#RESULT#!#numeric#!#14#!#4 +BABEL_5341_V2#!#RESULT#!#numeric#!#14#!#4 ~~END~~ @@ -14637,7 +14637,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v3#!#RESULT#!#numeric#!#20#!#0 +BABEL_5341_V3#!#RESULT#!#numeric#!#20#!#0 ~~END~~ @@ -14657,7 +14657,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v4#!#RESULT#!#numeric#!#10#!#4 +BABEL_5341_V4#!#RESULT#!#numeric#!#10#!#4 ~~END~~ @@ -14677,7 +14677,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v5#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V5#!#RESULT#!#numeric#!#10#!#2 ~~END~~ @@ -14697,7 +14697,7 @@ WHERE GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint#!#tinyint -babel_5341_v6#!#RESULT#!#numeric#!#10#!#2 +BABEL_5341_V6#!#RESULT#!#numeric#!#10#!#2 ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-before-17_7-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-before-17_7-vu-verify.out index 626efc38077..cca704d598e 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-before-17_7-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-before-17_7-vu-verify.out @@ -990,25 +990,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1016,48 +1016,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1077,7 +1077,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-vu-verify.out index dd05b5eda7d..661acf4aa4a 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/PARTITION-vu-verify.out @@ -1008,25 +1008,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1034,48 +1034,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1095,7 +1095,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out index 9156b76ed30..9af09cf00fa 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-before-16_5-or-15_9-vu-verify.out @@ -2,7 +2,7 @@ select name from sys.columns where name = 'Test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -10,7 +10,7 @@ select name from sys.columns where name = 'TesT'; go ~~START~~ varchar -test +Test ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-vu-verify.out index f3abc3b9cca..593ffff05ef 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/case_insensitive_collation-vu-verify.out @@ -2,7 +2,7 @@ select name from sys.columns where name = 'Test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -10,7 +10,7 @@ select name from sys.columns where name = 'TesT'; go ~~START~~ varchar -test +Test ~~END~~ @@ -50,7 +50,7 @@ select name from sys.databases where name = 'test'; go ~~START~~ varchar -test +TEST ~~END~~ @@ -58,7 +58,7 @@ select name from sys.databases where name = 'TEST'; go ~~START~~ varchar -test +TEST ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers-vu-verify.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers-vu-verify.out new file mode 100644 index 00000000000..d8571b4210a --- /dev/null +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers-vu-verify.out @@ -0,0 +1,407 @@ + +-- Long identifiers vu-verify: Verify all system objects show original names +-- sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%VU'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%VU'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- Case-insensitive lookup +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.all_columns +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.indexes +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%VU'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.key_constraints +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.check_constraints +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%VU'; +GO +~~START~~ +varchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.foreign_keys +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.views +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.procedures +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%VU'; +GO +~~START~~ +varchar +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.triggers +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%VU'; +GO +~~START~~ +varchar +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- Trigger rename preserves orig_name +EXEC sp_rename 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very_Long_Trigger_Renamed%'; +GO +~~START~~ +nvarchar +Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + +-- Rename back +EXEC sp_rename 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO + +-- Short mixed-case trigger rename +EXEC sp_rename 'MixedCase_Trig_VU', 'MixedCase_Trig_VU_Renamed', 'OBJECT'; +GO +SELECT name FROM sys.triggers WHERE name LIKE '%MixedCase_Trig_VU%'; +GO +~~START~~ +varchar +MixedCase_Trig_VU_Renamed +~~END~~ + +EXEC sp_rename 'MixedCase_Trig_VU_Renamed', 'MixedCase_Trig_VU', 'OBJECT'; +GO + +-- sys.types +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%VU'; +GO +~~START~~ +varchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.objects (sequence) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Sequence%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#SEQUENCE_OBJECT +~~END~~ + + +-- sys.all_objects (constraints) +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_PK%VU' OR name LIKE 'Very_Long_Check%VU' OR name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU#!#FOREIGN_KEY_CONSTRAINT +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#PRIMARY_KEY_CONSTRAINT +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#CHECK_CONSTRAINT +~~END~~ + + +-- sys.databases +SELECT name FROM sys.databases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +varchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.sysdatabases +SELECT name FROM sys.sysdatabases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- DB_NAME() in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_principals in long-named database +SELECT name FROM sys.database_principals WHERE name = 'dbo'; +GO +~~START~~ +varchar +dbo +~~END~~ + +USE master; +GO + +-- sp_helpdb with long name +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +int +1 +~~END~~ + + +-- Multibyte table +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%VU'; +GO +~~START~~ +varchar +テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト_VU +~~END~~ + + +-- information_schema.table_constraints +SELECT CONSTRAINT_NAME FROM information_schema.table_constraints WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- information_schema.key_column_usage +SELECT CONSTRAINT_NAME, COLUMN_NAME FROM information_schema.key_column_usage WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +nvarchar#!#nvarchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +~~END~~ + + +-- Error messages show original names +-- Duplicate table +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU (id INT); +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" already exists)~~ + + +-- Duplicate procedure +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU AS SELECT 1; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'very_long_procedure_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu' already exists with the same name)~~ + + +-- Drop non-existent table +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" does not exist)~~ + + +-- Drop non-existent function +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: could not find a function named "nonexist_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu")~~ + + +-- sys.all_views +SELECT name FROM sys.all_views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_role_members +ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU'; +GO +~~START~~ +int +1 +~~END~~ + + +ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- sp_tables +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#TABLE#!# +~~END~~ + + +-- sp_fkeys +EXEC sp_fkeys @pktable_name = 'babel5975_vu_fk_parent'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint +master#!#dbo#!#babel5975_vu_fk_parent#!#id#!#master#!#dbo#!#babel5975_vu_fk_child#!#id#!#1#!#1#!#1#!#very_long_fk_constraint_name_thb4fc9f26bf1dbc1d877db6cf99be5888#!#babel5975_vu_fk_parent_pkey#!#7 +~~END~~ + + +-- sp_stored_procedures +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + +GO +-- sp_stored_procedures with mixed case short name +EXEC sp_stored_procedures @sp_name = 'Mixed_Case_Proc_VU'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Mixed_Case_Proc_VU;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + + +-- sp_special_columns +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +smallint#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint +1#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1#!##!#int#!##!##!##!#1 +~~END~~ + + +-- information_schema.columns +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%VU' ORDER BY ORDINAL_POSITION; +GO +~~START~~ +nvarchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.database_principals shows role with full name +SELECT name, type_desc FROM sys.database_principals WHERE name LIKE 'Very_Long_Role%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#DATABASE_ROLE +~~END~~ + + +-- sp_helpuser/helprole/helprolemember in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DECLARE @t1 TABLE(userName sys.SYSNAME, roleName sys.SYSNAME, loginName sys.SYSNAME NULL, defdb sys.SYSNAME NULL, defschema sys.SYSNAME, userid INT, sid sys.VARBINARY(85)); +INSERT INTO @t1 EXEC sp_helpuser; +SELECT userName, roleName, loginName, defdb, defschema FROM @t1 ORDER BY userName; +GO +~~ROW COUNT: 2~~ + +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +dbo#!#db_owner#!#jdbc_user#!##!#dbo +guest#!#public#!##!##!#guest +~~END~~ + +DECLARE @t2 TABLE(RoleName sys.SYSNAME, RoleId INT, IsAppRole INT); +INSERT INTO @t2 EXEC sp_helprole; +SELECT RoleName, IsAppRole FROM @t2 ORDER BY RoleName; +GO +~~ROW COUNT: 6~~ + +~~START~~ +varchar#!#int +db_accessadmin#!#0 +db_datareader#!#0 +db_datawriter#!#0 +db_ddladmin#!#0 +db_owner#!#0 +db_securityadmin#!#0 +~~END~~ + +DECLARE @t3 TABLE(DbRole sys.SYSNAME, MemberName sys.SYSNAME, MemberSID sys.VARBINARY(85)); +INSERT INTO @t3 EXEC sp_helprolemember; +SELECT DbRole, MemberName FROM @t3 ORDER BY DbRole, MemberName; +GO +~~ROW COUNT: 1~~ + +~~START~~ +varchar#!#varchar +db_owner#!#dbo +~~END~~ + +USE master; +GO diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers.out new file mode 100644 index 00000000000..370443bc41d --- /dev/null +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/long-identifiers.out @@ -0,0 +1,1606 @@ + +-- tsql + +-- Long Identifier Storage Tests +-- Tests all DDL paths that store original names for identifiers > 63 chars +-- =========================================== +-- CREATION: All object types with long names +-- =========================================== +-- 1. CREATE TABLE with long name +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id INT NOT NULL, name NVARCHAR(100)); +GO + +-- 2. CREATE TABLE with long column names +CREATE TABLE babel5975_col_test ( + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 INT, + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 NVARCHAR(50) +); +GO + +-- 3. CREATE TABLE with long constraint name (PK) +CREATE TABLE babel5975_pk_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three PRIMARY KEY (id) +); +GO + +-- 4. CREATE TABLE with long constraint name (UNIQUE) +CREATE TABLE babel5975_uq_test ( + val INT, + CONSTRAINT Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val) +); +GO + +-- 5. CREATE TABLE with long constraint name (CHECK) +CREATE TABLE babel5975_ck_test ( + val INT, + CONSTRAINT Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters CHECK (val > 0) +); +GO + +-- 6. CREATE VIEW with long name +CREATE VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 7. CREATE INDEX with long name +CREATE INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id); +GO + +-- 8. CREATE SEQUENCE with long name +CREATE SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS INT START WITH 1 INCREMENT BY 1; +GO + +-- 9. CREATE FUNCTION with long name +CREATE FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing(@a INT) +RETURNS INT AS BEGIN RETURN @a + 1 END; +GO + +-- 10. CREATE PROCEDURE with long name and long parameter +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 11. CREATE TRIGGER with long name +CREATE TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- 12. CREATE TYPE with long name +CREATE TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing FROM INT; +GO + +-- 13. SELECT INTO with long table name +SELECT 1 AS col1 INTO Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + + +-- 14. ALTER TABLE ADD COLUMN with long name +ALTER TABLE babel5975_col_test ADD Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT; +GO + +-- 14b. SELECT INTO preserves long column names +SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INTO babel5975_select_into_col_test FROM babel5975_col_test; +GO + +-- 15. CREATE FUNCTION with multiple long parameters +CREATE FUNCTION babel5975_multi_param_func( + @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT, + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) +RETURNS INT AS BEGIN RETURN @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 16. SELECT with long alias - verify full name in result metadata +SELECT name FROM sys.sp_describe_first_result_set_internal(N'SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing', NULL, 0); +GO +~~START~~ +varchar +Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing +~~END~~ + + +-- 17. CREATE DATABASE with long name +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +-- Verify database original name stored in babelfish_sysdatabases.orig_name +SELECT orig_name FROM sys.babelfish_sysdatabases WHERE orig_name LIKE 'Very_Long_Database%'; +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing +~~END~~ + + +-- 18. sp_rename TABLE with long name +EXEC sp_rename 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 19. sp_rename COLUMN with long name +EXEC sp_rename 'babel5975_col_test.Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2', + 'Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'COLUMN'; +GO + +-- Verify renamed table shows new full name in sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Renamed_Table%'; +GO +~~START~~ +varchar +Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify renamed column shows new full name in sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE 'Very_Long_Renamed_Column%'; +GO +~~START~~ +varchar +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- 20. sp_rename FUNCTION with long name +EXEC sp_rename 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 21. sp_rename PROCEDURE with long name +EXEC sp_rename 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- Rename back for cleanup +EXEC sp_rename 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO + + + + + +-- 17. CREATE DATABASE with long name (uses babelfish_sysdatabases) +-- Skipped: database names limited to 128 but stored separately +-- 18. CREATE SCHEMA with long name (uses babelfish_namespace_ext) +-- Skipped: schema names limited differently +-- 19. CREATE LOGIN with long name (uses babelfish_authid_login_ext) +-- Skipped: requires sysadmin +-- =========================================== +-- ADDITIONAL SCENARIOS +-- =========================================== +-- 22. Long name with bracket delimiters - table +CREATE TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ( + [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] INT, + CONSTRAINT [Very Long Constraint Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Chars] CHECK ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] > 0) +); +GO + +-- 22b. Bracket delimiters - view +CREATE VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +AS SELECT [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] FROM [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 22c. Bracket delimiters - function +CREATE FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters](@a INT) +RETURNS INT AS BEGIN RETURN @a END; +GO + +-- 22d. Bracket delimiters - index +CREATE INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]); +GO + +-- 22e. Bracket delimiters - sequence +CREATE SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] AS INT START WITH 1; +GO + +-- 22f. Bracket delimiters - alias +SELECT 1 AS [Very Long Alias Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +~~START~~ +int +1 +~~END~~ + + +-- Verify bracket identifiers stored in babelfish_function_ext +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very Long Function%'; +GO +~~START~~ +nvarchar +Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters +~~END~~ + + +-- Verify bracket identifiers stored in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very Long%' ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very Long Constraint Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Chars +Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters +~~END~~ + + +-- Cleanup bracket objects +DROP VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 24. Long name with double-quote delimiters +SET QUOTED_IDENTIFIER ON; +GO +CREATE TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test" (id INT); +GO +DROP TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test"; +GO + +-- 25. CREATE TABLE with long FK constraint name +CREATE TABLE babel5975_fk_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_child ( + id INT, + parent_id INT, + CONSTRAINT Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three FOREIGN KEY (parent_id) REFERENCES babel5975_fk_parent(id) +); +GO + +-- 27. CREATE OR ALTER VIEW with long name +CREATE OR ALTER VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 28. ALTER PROCEDURE with long name +ALTER PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + 1 END; +GO + +-- 28. Multiple long aliases in one SELECT +SELECT 1 AS Very_Long_First_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing, + 2 AS Very_Long_Second_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +-- 29. View column display tests +-- 29a. SELECT * FROM view with long alias shows full name +CREATE VIEW babel5975_view_alias AS SELECT 1 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO +~~START~~ +int +1 +~~END~~ + + +-- 29b. sys.columns shows full view column name +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_alias'); +GO +~~START~~ +varchar +Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- 29c. CREATE OR ALTER VIEW preserves long alias +CREATE OR ALTER VIEW babel5975_view_alias AS SELECT 2 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO +~~START~~ +int +2 +~~END~~ + + +-- 29d. View selecting long column from table +CREATE VIEW babel5975_view_from_tbl AS SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM babel5975_col_test; +GO +SELECT * FROM babel5975_view_from_tbl; +GO +~~START~~ +int +~~END~~ + +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_from_tbl'); +GO +~~START~~ +varchar +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +DROP VIEW babel5975_view_alias; +GO +DROP VIEW IF EXISTS babel5975_view_from_tbl; +GO + +-- 30. Long name with multibyte characters (Japanese) +CREATE TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ (id INT); +GO +DROP TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ; +GO + +-- 30. CREATE TABLE with long DEFAULT constraint name +CREATE TABLE babel5975_df_test ( + val INT CONSTRAINT Very_Long_Default_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars DEFAULT 0 +); +GO + + +-- =========================================== +-- DROP CLEANUP TESTS: Verify entries are removed +-- =========================================== +-- Create objects to test drop cleanup +CREATE TABLE babel5975_drop_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Drop_Test_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars PRIMARY KEY (id) +); +GO +CREATE SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +CREATE TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +CREATE FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters( + @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) RETURNS INT AS BEGIN RETURN @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- Verify entries exist before drop +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test%'; +GO +~~START~~ +int +3 +~~END~~ + + +-- Drop and verify entries are removed +DROP TABLE babel5975_drop_test; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Constraint%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Sequence%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Type%'; +GO +~~START~~ +int +0 +~~END~~ + + +DROP FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Param%'; +GO +~~START~~ +int +0 +~~END~~ + + + +-- =========================================== +-- VERIFICATION: System views show original names +-- =========================================== +-- sys.tables shows full original name +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.views shows full original name +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View_Name%'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.columns shows full original column names +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + + +-- sys.all_columns shows full original column names +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE '%Very_Long%' ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sys.procedures shows full original name +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%'; +GO +~~START~~ +varchar +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.types shows full original type name +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%'; +GO +~~START~~ +varchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.indexes shows full original index name +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.indexes LIKE search with partial name works +SELECT name FROM sys.indexes WHERE name LIKE '%Exceeds_PostgreSQL_Limit%'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- sys.objects shows full original names (inherits from above) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Table_Name%' OR name LIKE 'Very_Long_Function%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#USER_TABLE +Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#SQL_SCALAR_FUNCTION +~~END~~ + + +-- sys.key_constraints shows full original constraint name +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_Primary%'; +GO +~~START~~ +varchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +~~END~~ + + +-- sys.check_constraints shows full original constraint name +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%'; +GO +~~START~~ +varchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sys.foreign_keys shows full original constraint name +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_Foreign%'; +GO +~~START~~ +varchar +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +~~END~~ + + +-- sys.all_objects shows full original names for constraints +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Primary%' OR name LIKE 'Very_Long_Check%' OR name LIKE 'Very_Long_Foreign%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#FOREIGN_KEY_CONSTRAINT +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#PRIMARY_KEY_CONSTRAINT +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#CHECK_CONSTRAINT +~~END~~ + + +-- sys.all_objects shows full original names for sequences +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Sequence%'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#SEQUENCE_OBJECT +~~END~~ + + +-- information_schema.table_constraints shows original constraint names +SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.table_constraints +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%' OR CONSTRAINT_NAME LIKE 'Very_Long_Unique%'; +GO +~~START~~ +varchar#!#varchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#babel5975_pk_test +Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_uq_test +~~END~~ + + +-- information_schema.key_column_usage shows original names +SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM information_schema.key_column_usage +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%'; +GO +~~START~~ +nvarchar#!#nvarchar#!#nvarchar +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three#!#babel5975_pk_test#!#id +~~END~~ + + +-- sp_statistics shows original index/table names +EXEC sp_statistics @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#1#!#very_long_table_name_that_excee93167071de365a0cba68700e242774dd#!#Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#3#!#1#!#id#!#A#!##!#0#!# +~~END~~ + + + +-- =========================================== +-- VERIFICATION: Check actual storage locations +-- =========================================== +-- Verify functions/procedures/triggers in babelfish_function_ext.orig_name +SELECT orig_name FROM sys.babelfish_function_ext +WHERE orig_name LIKE 'Very_Long_Function%' + OR orig_name LIKE 'Very_Long_Procedure%' + OR orig_name LIKE 'Very_Long_Trigger%' +ORDER BY orig_name; +GO +~~START~~ +nvarchar +Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify sequences in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1259 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify types in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1247 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify constraints in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 2606 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify parameters in babelfish_identifier_mapping +SELECT original_identifier_name, parent_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1255 +ORDER BY original_identifier_name; +GO +~~START~~ +nvarchar#!#varchar +@Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_multi_param_func +@Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#very_long_procedure_name_that_e61b6230e662738953e607931c33a9021 +@Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#babel5975_multi_param_func +~~END~~ + + +-- psql +-- Verify table original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_table_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify view original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_view_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify index original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE '%very_long_index%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- psql +-- Verify SELECT INTO table in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_select_into%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO +~~START~~ +text +bbf_original_rel_name=Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + + + +-- tsql +-- Verify SELECT INTO column original name preserved +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_select_into_col_test') AND name LIKE '%Very_Long%'; +GO +~~START~~ +varchar +Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- Verify sp_tables works with long table names +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#TABLE#!# +~~END~~ + + +-- Verify sp_columns works with long table names +EXEC sp_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#int +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#id#!#4#!#int#!#10#!#4#!#0#!#10#!#0#!##!##!#4#!##!##!#1#!#NO#!#38 +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing#!#name#!#-9#!#nvarchar#!#100#!#200#!##!##!#1#!##!##!#-9#!##!#200#!#2#!#YES#!#39 +~~END~~ + + +-- Verify OBJECT_ID works with long names +SELECT CASE WHEN OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END; +GO +~~START~~ +varchar +FOUND +~~END~~ + + +-- Verify OBJECT_NAME returns full original name +SELECT OBJECT_NAME(OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing')); +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify sp_stored_procedures works with long procedure name +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + + +-- Verify DB_NAME() returns case-preserved name +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +master +~~END~~ + + +-- sys.databases shows case-preserved database name +SELECT name FROM sys.databases WHERE name LIKE '%Long_Database%'; +GO +~~START~~ +varchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing +~~END~~ + + +USE master; +GO + +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +CREATE DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- sys.sysdatabases shows case-preserved name +SELECT name FROM sys.sysdatabases WHERE name LIKE '%Long_DB_Name%'; +GO +~~START~~ +nvarchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- DB_NAME() comparison with sys.sysdatabases works (CI collation) +SELECT name FROM sys.sysdatabases WHERE name = DB_NAME() collate database_default; +GO +~~START~~ +nvarchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + + +-- sp_tables works in long-named database +EXEC sp_tables; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters#!#dbo#!#sysdatabases#!#VIEW#!# +~~END~~ + + +-- information_schema.tables works in long-named database +SELECT TABLE_CATALOG FROM information_schema.tables WHERE TABLE_CATALOG LIKE '%Long_DB%'; +GO +~~START~~ +nvarchar +~~END~~ + + +USE master; +GO +DROP DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Verify information_schema.tables returns full table name +SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + +-- Verify information_schema.columns returns full column name +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%' AND COLUMN_NAME LIKE '%id%'; +GO +~~START~~ +nvarchar +id +~~END~~ + + +-- sys.triggers shows full trigger name +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%'; +GO +~~START~~ +varchar +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +~~END~~ + + + + +-- sp_fkeys with long table name +EXEC sp_fkeys @pktable_name = 'babel5975_fk_parent'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint +master#!#dbo#!#babel5975_fk_parent#!#id#!#master#!#dbo#!#babel5975_fk_child#!#parent_id#!#1#!#1#!#1#!#very_long_foreign_key_constrain8ae1bf6a621fff2f280f3a0f9f70d1f8#!#babel5975_fk_parent_pkey#!#7 +~~END~~ + + +-- sp_special_columns with long table name +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO +~~START~~ +smallint#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint +1#!#id#!#4#!#int#!#10#!#4#!#0#!#1 +~~END~~ + + + +-- psql +-- Verify column original names in pg_attribute.attoptions +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attoptions IS NOT NULL AND attoptions::text LIKE '%Very_Long%' +ORDER BY attnum; +GO +~~START~~ +name#!#_text +very_long_column_name_that_excec56ed1dfbe550fc8e689a0b82eabb305#!#{bbf_original_name=Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1} +very_long_renamed_column_name_t5127d87a119eb55c397d5d2818fa2606#!#{bbf_original_name=Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +very_long_added_column_name_thaceca5ee9cb8761d8bce6e44cff6cc23e#!#{bbf_original_name=Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +~~END~~ + + +-- psql +-- Verify ALTER TABLE ADD column +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attname LIKE 'very_long_added%'; +GO +~~START~~ +name#!#_text +very_long_added_column_name_thaceca5ee9cb8761d8bce6e44cff6cc23e#!#{bbf_original_name=Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters} +~~END~~ + + +-- tsql + + +-- Section 7: DML Result Set Headers +-- =========================================== +-- Long alias in SELECT +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_In_Select; +GO +~~START~~ +int +1 +~~END~~ + + +-- Long alias in UNION (first SELECT preserved) +SELECT 1 AS Very_Long_Union_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +UNION ALL +SELECT 2 +ORDER BY 1; +GO +~~START~~ +int +1 +2 +~~END~~ + + + +-- =========================================== +-- Section 8: Case Sensitivity +-- =========================================== +-- Mixed case preserved +CREATE TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (Id_MiXeD INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MiXeD_CaSe%'; +GO +~~START~~ +varchar +MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- Section 12: Edge Cases +-- =========================================== +-- Exactly 63 bytes - no catalog entry needed +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Exactly 64 bytes - catalog entry created +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%'; +GO +~~START~~ +varchar +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +~~END~~ + +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Quoted identifiers with special characters +CREATE TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!] (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE '%Quoted%'; +GO +~~START~~ +varchar +Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters! +~~END~~ + +DROP TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!]; +GO + + +-- psql +-- =========================================== +-- Section 9: PG Endpoint Isolation +-- =========================================== +-- Verify truncated names visible in pg_class +SELECT relname FROM pg_class WHERE relname LIKE 'very_long_table_name%' LIMIT 1; +GO +~~START~~ +name +very_long_table_name_that_excee93167071de365a0cba68700e242774dd +~~END~~ + + +-- Verify modification of bbf_original_rel_name is blocked +ALTER TABLE master_dbo.very_long_table_name_that_exceed05596e9412ba2b6bc9c227f800f8ca5a SET (bbf_original_rel_name='hacked'); +GO +~~ERROR (Code: 0)~~ + +~~ERROR (Message: ERROR: cannot modify "bbf_original_rel_name" for babelfish objects + Server SQLState: 42501)~~ + + +-- Verify modification of bbf_original_name (column) is blocked +ALTER TABLE master_dbo.babel5975_col_test ALTER COLUMN very_long_column_name_that_excee78cb009a0e5eb4aba1c0243be4884f78 SET (bbf_original_name='hacked'); +GO +~~ERROR (Code: 0)~~ + +~~ERROR (Message: ERROR: cannot modify "bbf_original_name" for babelfish objects + Server SQLState: 42501)~~ + + +-- tsql + + +-- =========================================== +-- Section 6.5: Constraint-backed indexes +-- =========================================== +CREATE TABLE babel5975_idx_constraint_test (id INT, val INT, + CONSTRAINT PK_Very_Long_Primary_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT UQ_Very_Long_Unique_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val)); +GO +SELECT name, type_desc FROM sys.indexes WHERE object_id = OBJECT_ID('babel5975_idx_constraint_test') ORDER BY type; +GO +~~START~~ +varchar#!#nvarchar +#!#HEAP +uq_very_long_unique_key_name_th0cf69e6e308abe9a1f6051a789c850d5#!#NONCLUSTERED +pk_very_long_primary_key_name_t1584497a86c81db8e7e6195152e9e43a#!#NONCLUSTERED +~~END~~ + + +DROP TABLE babel5975_idx_constraint_test; +-- Section 7: Additional DML headers +-- =========================================== +-- CTE with long alias +;WITH Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE AS (SELECT 1 AS val) +SELECT val FROM Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE; +GO +~~START~~ +int +1 +~~END~~ + + +-- Subquery alias preserved in result +SELECT * FROM (SELECT 1 AS Very_Long_SubQuery_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters) sub; +GO +~~START~~ +int +1 +~~END~~ + + +-- =========================================== +-- Section 10: Catalog cleanup - rapid CREATE/DROP +-- =========================================== +-- Rapid create/drop should not leave orphan entries +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +-- Verify no orphan entries +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE truncated_identifier_name LIKE '%rapid_very_long%'; +GO +~~START~~ +int +0 +~~END~~ + + +-- =========================================== +-- ORDER BY with long alias +-- =========================================== +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing ORDER BY Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing; +GO +~~START~~ +int +1 +~~END~~ + + +-- =========================================== +-- CREATE INDEX on SELECT INTO column with long name +-- =========================================== +CREATE INDEX babel5975_idx_select_into ON babel5975_select_into_col_test(Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters); +GO +DROP INDEX babel5975_idx_select_into ON babel5975_select_into_col_test; +GO + + + + + +-- =========================================== +-- DROP cleanup verification +-- =========================================== +-- Verify catalog entries are removed after DROP TABLE +CREATE TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters INT, CONSTRAINT ck_very_long_constraint_name_that_exceeds_postgresql_limit_of_sixty_three CHECK (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters > 0)); +GO +-- Verify entries exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three; +GO +-- Verify entries removed +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO +~~START~~ +int +0 +~~END~~ + + +-- Verify catalog entries removed after DROP DATABASE +USE master; +GO +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +CREATE TABLE babel5975_db_drop_test_table_very_long_name_that_exceeds_postgresql_limit_chars (id INT); +GO +USE master; +GO +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- RENAME TESTS: Verify mapping is updated on sp_rename +-- =========================================== +-- Test sequence rename +CREATE SEQUENCE Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +~~START~~ +int +1 +~~END~~ + +EXEC sp_rename 'Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars', 'Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +~~START~~ +int +0 +~~END~~ + +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Sequence%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP SEQUENCE Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Test type rename +CREATE TYPE Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +~~START~~ +int +1 +~~END~~ + +EXEC sp_rename 'Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New', 'USERDATATYPE'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +~~START~~ +int +0 +~~END~~ + +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Type%'; +GO +~~START~~ +int +1 +~~END~~ + +DROP TYPE Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New; +GO + + +-- =========================================== +-- CASE SENSITIVITY TESTS: Verify original casing is preserved +-- =========================================== +-- Mixed case table name +CREATE TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +SELECT name FROM sys.all_objects WHERE name LIKE 'MixedCase_Very_Long%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +-- Case-insensitive lookup should work +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_abc'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC +~~END~~ + +DROP TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC; +GO + +-- Mixed case constraint +CREATE TABLE babel5975_case_test (id INT NOT NULL, + CONSTRAINT MixedCase_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT MixedCase_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'MixedCase_PK%'; +GO +~~START~~ +varchar +MixedCase_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +SELECT name FROM sys.check_constraints WHERE name LIKE 'MixedCase_Check%'; +GO +~~START~~ +varchar +MixedCase_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + + +-- Foreign key with mixed case +CREATE TABLE babel5975_fk_case_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_case_child (id INT, + CONSTRAINT MixedCase_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FOREIGN KEY (id) REFERENCES babel5975_fk_case_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'MixedCase_FK%'; +GO +~~START~~ +varchar +MixedCase_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TABLE babel5975_fk_case_child; +GO +DROP TABLE babel5975_fk_case_parent; +GO +DROP TABLE babel5975_case_test; +GO + +-- Mixed case sequence +CREATE SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE 'MixedCase_Very_Long_Seq%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +DROP SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Mixed case type +CREATE TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'MixedCase_Very_Long_Type%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + + +-- =========================================== +-- MULTIBYTE CHARACTER TESTS: Unicode identifiers +-- =========================================== +-- Japanese characters in table name (each char = 3 bytes, so 22+ chars exceed 63 bytes) +CREATE TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト (id INT, val NVARCHAR(50)); +GO +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%'; +GO +~~START~~ +varchar +テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト +~~END~~ + +DROP TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト; +GO + +-- Emoji and special characters in constraint name +CREATE TABLE babel5975_emoji_test (id INT NOT NULL, + CONSTRAINT PK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥😮 PRIMARY KEY (id), + CONSTRAINT CHK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥 CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'PK_Emoji%'; +GO +~~START~~ +varchar +PK_Emoji_????????????????????????? +~~END~~ + +SELECT name FROM sys.check_constraints WHERE name LIKE 'CHK_Emoji%'; +GO +~~START~~ +varchar +CHK_Emoji_???????????????????????? +~~END~~ + + +-- Foreign key with multibyte +CREATE TABLE babel5975_fk_mb_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_mb_child (id INT, + CONSTRAINT FK_外部キー_制約名_非常に長い名前_PostgreSQLの制限を超える場合のテスト FOREIGN KEY (id) REFERENCES babel5975_fk_mb_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'FK_外部キー%'; +GO +~~START~~ +varchar +FK_外部キー_制約名_非常に長い名前_PostgreSQLの制限を超える場合のテスト +~~END~~ + +DROP TABLE babel5975_fk_mb_child; +GO +DROP TABLE babel5975_fk_mb_parent; +GO +DROP TABLE babel5975_emoji_test; +GO + +-- Chinese characters in sequence name +CREATE SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式 AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE '这是一个%'; +GO +~~START~~ +varchar +这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式 +~~END~~ + +DROP SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式; +GO + +-- Korean characters in column name +CREATE TABLE babel5975_korean_test ( + [아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼] INT +); +GO +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO +~~START~~ +varchar +??_?_?_??_PostgreSQL_???_????_??_???_???_??_??_???_?? +~~END~~ + +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO +~~START~~ +varchar +??_?_?_??_PostgreSQL_???_????_??_???_???_??_??_???_?? +~~END~~ + + +-- Multibyte index name +CREATE INDEX [インデックス_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子切り捨て] ON babel5975_korean_test([아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼]); +GO +SELECT name FROM sys.indexes WHERE name LIKE 'インデックス%'; +GO +~~START~~ +varchar +インデックス_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子切り捨て +~~END~~ + +DROP TABLE babel5975_korean_test; +GO + +-- Mixed multibyte + ASCII in type name +CREATE TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'タイプ_Mixed%'; +GO +~~START~~ +varchar +タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added +~~END~~ + +DROP TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added; +GO + + +-- =========================================== +-- DATABASE SYSTEM OBJECT TESTS +-- =========================================== +-- Mixed case long database name +CREATE DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT name FROM sys.databases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +SELECT name FROM sys.sysdatabases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +~~START~~ +nvarchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Case-insensitive lookup +SELECT name FROM sys.databases WHERE name = 'mixedcase_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Verify DB_NAME() returns original name +USE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +-- Verify sp_helpdb can find database with long name (dbid is non-deterministic, just check it works) +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars'; +GO +~~START~~ +int +1 +~~END~~ + +USE master; +GO +DROP DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte database name +CREATE DATABASE データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT name FROM sys.databases WHERE name LIKE 'データベース%'; +GO +~~START~~ +varchar +データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +SELECT name FROM sys.sysdatabases WHERE name LIKE 'データベース%'; +GO +~~START~~ +nvarchar +データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +-- Verify user operations in multibyte-named database +USE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +USE master; +GO +DROP DATABASE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO + + +-- =========================================== +-- PROCEDURES AND TRIGGERS TESTS +-- =========================================== +-- Mixed case procedure name +CREATE PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'MixedCase_Very_Long_Proc%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +~~END~~ + +DROP PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte procedure name +CREATE PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'プロシージャ%'; +GO +~~START~~ +varchar +プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト +~~END~~ + +DROP PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト; +GO + +-- Mixed case trigger name +CREATE TABLE babel5975_trig_case_test (id INT); +GO +CREATE TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON babel5975_trig_case_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'MixedCase_Very_Long_Trig%'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +~~END~~ + +DROP TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP TABLE babel5975_trig_case_test; +GO + +-- Multibyte trigger name +CREATE TABLE babel5975_trig_mb_test (id INT); +GO +CREATE TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理 +ON babel5975_trig_mb_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'トリガー%'; +GO +~~START~~ +varchar +トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理 +~~END~~ + +DROP TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理; +GO +DROP TABLE babel5975_trig_mb_test; +GO + +-- =========================================== +-- CLEANUP +-- =========================================== +DROP TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP FUNCTION babel5975_multi_param_func; +GO +DROP PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_col_test; +GO +DROP TABLE babel5975_pk_test; +GO +DROP TABLE babel5975_uq_test; +GO +DROP TABLE babel5975_ck_test; +GO +DROP TABLE Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP TABLE IF EXISTS babel5975_select_into_col_test; +GO +DROP SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_fk_child; +GO +DROP TABLE babel5975_fk_parent; +GO +DROP TABLE babel5975_df_test; +GO diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/psql_logical_babelfish_db.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/psql_logical_babelfish_db.out index 73b79284b19..73f70bc6593 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/psql_logical_babelfish_db.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/psql_logical_babelfish_db.out @@ -40,7 +40,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -73,7 +73,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -106,7 +106,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -129,7 +129,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -166,7 +166,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -194,7 +194,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -227,7 +227,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -250,7 +250,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -273,7 +273,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -296,7 +296,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#chinese_prc_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/sp_columns_100.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/sp_columns_100.out index 049c9a518f6..e083c669cdd 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/sp_columns_100.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/sp_columns_100.out @@ -289,11 +289,11 @@ EXEC [sys].sp_columns_100 'tidentityintbigwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#data_type_test#!#1#!#char#!#50#!#50#!##!##!#1#!##!##!#1#!##!#50#!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#test_scenario#!#1#!#char#!#60#!#60#!##!##!#1#!##!##!#1#!##!#60#!#2#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#value_test#!#-5#!#bigint#!#19#!#8#!#0#!#10#!#0#!##!##!#-5#!##!##!#3#!#NO#!#0#!#0#!#0#!#1#!##!##!##!##!##!##!#63 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#inserted_dt#!#93#!#datetime#!#23#!#16#!#3#!##!#1#!##!#getdate()#!#9#!#3#!##!#4#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#111 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#user_login#!#1#!#char#!#255#!#255#!##!##!#1#!##!#user_name_sysname()#!#1#!##!#255#!#5#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#data_type_test#!#1#!#char#!#50#!#50#!##!##!#1#!##!##!#1#!##!#50#!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#test_scenario#!#1#!#char#!#60#!#60#!##!##!#1#!##!##!#1#!##!#60#!#2#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#value_test#!#-5#!#bigint#!#19#!#8#!#0#!#10#!#0#!##!##!#-5#!##!##!#3#!#NO#!#0#!#0#!#0#!#1#!##!##!##!##!##!##!#63 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#inserted_dt#!#93#!#datetime#!#23#!#16#!#3#!##!#1#!##!#getdate()#!#9#!#3#!##!#4#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#111 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#user_login#!#1#!#char#!#255#!#255#!##!##!#1#!##!#user_name_sysname()#!#1#!##!#255#!#5#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 ~~END~~ @@ -870,7 +870,7 @@ EXEC sys.sp_columns_100 'tidentityintbiddgwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbiddgwithareallylonbc33a3b4e73f8ec86bac8ebd627c0fb4#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -878,7 +878,7 @@ EXEC sys.sp_columns_100 'tidentityintbiddgwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbiddgwithareallylonbc33a3b4e73f8ec86bac8ebd627c0fb4#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -887,6 +887,7 @@ EXEC sys.sp_columns_100 '%tidentityintbiddgwithareallylongtablenamewhickcausesba GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -940,7 +941,7 @@ EXEC sys.sp_columns_100 N'tide Ntityintbiddgwithareallyl ongtablenamewhickcauses GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tide ntityintbiddgwithareallyl 8a403e70114ba4af4e01a3b922ac10fa#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -948,7 +949,7 @@ EXEC sys.sp_columns_100 N'tide Ntityintbiddgwithareallyl ongtablenamewhickcauses GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tide ntityintbiddgwithareallyl 8a403e70114ba4af4e01a3b922ac10fa#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -957,6 +958,7 @@ EXEC sys.sp_columns_100 N'tide[ ]Ntityintbiddgwithareallyl ongtablenamewhickcaus GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1011,7 +1013,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1019,7 +1021,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1027,7 +1029,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1035,7 +1037,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/case_insensitive_collation-vu-verify.out b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/case_insensitive_collation-vu-verify.out index b502d538def..2c9ae379f87 100644 --- a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/case_insensitive_collation-vu-verify.out +++ b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/case_insensitive_collation-vu-verify.out @@ -2,7 +2,7 @@ select name from sys.columns where name = 'Test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -10,7 +10,7 @@ select name from sys.columns where name = 'TesT'; go ~~START~~ varchar -test +Test ~~END~~ @@ -50,7 +50,7 @@ select name from sys.databases where name = 'test'; go ~~START~~ varchar -test +Test ~~END~~ @@ -58,7 +58,7 @@ select name from sys.databases where name = 'TEST'; go ~~START~~ varchar -test +Test ~~END~~ diff --git a/test/JDBC/expected/parallel_query/BABEL_3571.out b/test/JDBC/expected/parallel_query/BABEL_3571.out index 062186fabf2..25a5a06e55f 100644 --- a/test/JDBC/expected/parallel_query/BABEL_3571.out +++ b/test/JDBC/expected/parallel_query/BABEL_3571.out @@ -144,14 +144,14 @@ INSERT INTO babel_3571_3 VALUES (NULL, '', 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 VALUES (0, NULL, 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 VALUES (NULL, NULL, NULL) @@ -163,7 +163,7 @@ INSERT INTO babel_3571_3 VALUES (NULL, NULL, 0x9999) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ SELECT indexdef FROM pg_indexes @@ -721,7 +721,7 @@ INSERT INTO babel_3571_3 (id1, id2) VALUES (1,10) GO ~~ERROR (Code: 2627)~~ -~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idxbabel_35df79da2a42216884edca5a4a798829ce")~~ +~~ERROR (Message: duplicate key value violates unique constraint "babel_3571_3_unique_idx")~~ INSERT INTO babel_3571_3 (id1, id2) VALUES (NULL,10) GO @@ -881,7 +881,7 @@ CREATE UNIQUE INDEX babel_3571_idx ON babel_3571_1(id) GO ~~ERROR (Code: 1505)~~ -~~ERROR (Message: could not create unique index "babel_3571_idxbabel_3571_176ad772d1712c20d411961692b38d002")~~ +~~ERROR (Message: could not create unique index "babel_3571_idx")~~ -- now table will contain only one NULL value and create unique index/constraint shoudl start working DELETE TOP (1) FROM babel_3571_1 WHERE id IS NULL; diff --git a/test/JDBC/expected/parallel_query/PARTITION-vu-verify.out b/test/JDBC/expected/parallel_query/PARTITION-vu-verify.out index faa7b8a4b63..9729542d366 100644 --- a/test/JDBC/expected/parallel_query/PARTITION-vu-verify.out +++ b/test/JDBC/expected/parallel_query/PARTITION-vu-verify.out @@ -1008,25 +1008,25 @@ SELECT * FROM GetPartitionedTablePartitioningColumn GO ~~START~~ varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1034,48 +1034,48 @@ SELECT * FROM GetPartitionedIndexPartitioningColumn GO ~~START~~ varchar#!#varchar#!#varchar#!#tinyint -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 -partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_bigint_index_new#!#partition_vu_prepare_bigint_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_binary_index_new#!#partition_vu_prepare_binary_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_char_index_new#!#partition_vu_prepare_char_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_date_index_new#!#partition_vu_prepare_date_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime_index_new#!#partition_vu_prepare_datetime_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_datetime2_index_new#!#partition_vu_prepare_datetime2_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_decimal_index_new#!#partition_vu_prepare_decimal_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_index_new#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_int_table_id_key#!#partition_vu_prepare_int_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_money_index_new#!#partition_vu_prepare_money_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_nchar_index_new#!#partition_vu_prepare_nchar_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_numeric_index_new#!#partition_vu_prepare_numeric_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_nvarchar_index_new#!#partition_vu_prepare_nvarchar_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smalldatetime_index_new#!#partition_vu_prepare_smalldatetime_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallint_index_new#!#partition_vu_prepare_smallint_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_smallmoney_index_new#!#partition_vu_prepare_smallmoney_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_tinyint_index_new#!#partition_vu_prepare_tinyint_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_uniqueidentifier_index_new#!#partition_vu_prepare_uniqueidentifier_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varbinary_index_new#!#partition_vu_prepare_varbinary_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 +partition_vu_prepare_varchar_index_new#!#partition_vu_prepare_varchar_table#!#Id#!#1 ~~END~~ @@ -1095,7 +1095,7 @@ varchar#!#int#!#int 363863941f079adaa9aa733200e57c9f_partition_3_value_idx#!#4#!#3 363863941f079adaa9aa733200e57c9f_partition_3#!#4#!#0 363863941f079adaa9aa733200e57c9f_partition_3_id_key#!#4#!#2 -partition_vu_prepare_normal_ind5f5fcd81a18b69e8a21aef69ce61f7b6#!#1#!#2 +partition_vu_prepare_normal_index_new#!#1#!#2 partition_vu_prepare_normal_table#!#1#!#0 ~~END~~ diff --git a/test/JDBC/expected/parallel_query/Test-Spatial_Index-vu-verify.out b/test/JDBC/expected/parallel_query/Test-Spatial_Index-vu-verify.out index 386c94a9411..69ddb5ba8fd 100644 --- a/test/JDBC/expected/parallel_query/Test-Spatial_Index-vu-verify.out +++ b/test/JDBC/expected/parallel_query/Test-Spatial_Index-vu-verify.out @@ -94,7 +94,7 @@ CREATE SPATIAL INDEX si_dup ON si_ddl_tbl(geom); GO ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "si_dupsi_ddl_tblefc70e6ee50389004ff8215c689e5467" already exists)~~ +~~ERROR (Message: relation "si_dup" already exists)~~ -- 1.3 DROP and recreate @@ -110,7 +110,7 @@ DROP INDEX si_fake ON si_ddl_tbl; GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "si_fakesi_ddl_tbl94fe14b60d353fa399b536a197c4650c" does not exist)~~ +~~ERROR (Message: index "si_fake" does not exist)~~ -- 1.5 Strict escape hatch blocks options diff --git a/test/JDBC/expected/psql_logical_babelfish_db.out b/test/JDBC/expected/psql_logical_babelfish_db.out index 09d9a2fc80d..560b8c8cc97 100644 --- a/test/JDBC/expected/psql_logical_babelfish_db.out +++ b/test/JDBC/expected/psql_logical_babelfish_db.out @@ -40,7 +40,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -73,7 +73,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -106,7 +106,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -129,7 +129,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -166,7 +166,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -194,7 +194,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -227,7 +227,7 @@ master#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime#!##!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +master#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# master#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# master#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -250,7 +250,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -273,7 +273,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# @@ -296,7 +296,7 @@ logical_database_db1#!#dbo#!#sysdatabases#!#crdate#!#7#!##!#YES#!#datetime logical_database_db1#!#dbo#!#sysdatabases#!#dbid#!#2#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#filename#!#11#!##!#YES#!#nvarchar#!#260#!#520#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#mode#!#4#!##!#YES#!#smallint#!##!##!#5#!#10#!#0#!##!##!##!##!##!##!##!##!##!# -logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#text#!#2147483647#!#2147483647#!##!##!##!##!##!##!##!##!##!#C#!##!##!# +logical_database_db1#!#dbo#!#sysdatabases#!#name#!#1#!##!#YES#!#nvarchar#!#128#!#256#!##!##!##!##!##!##!##!##!##!#bbf_unicode_cp1_ci_as#!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#reserved#!#8#!##!#YES#!#datetime#!##!##!##!##!##!#3#!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#sid#!#3#!##!#YES#!#varbinary#!#85#!#85#!##!##!##!##!##!##!##!##!##!##!##!##!# logical_database_db1#!#dbo#!#sysdatabases#!#status#!#5#!##!#YES#!#int#!##!##!#10#!#10#!#0#!##!##!##!##!##!##!##!##!##!# diff --git a/test/JDBC/expected/single_db/BABEL-1435.out b/test/JDBC/expected/single_db/BABEL-1435.out index 355724d5db2..c6d0361a5c3 100644 --- a/test/JDBC/expected/single_db/BABEL-1435.out +++ b/test/JDBC/expected/single_db/BABEL-1435.out @@ -2,7 +2,7 @@ SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb @@ -84,7 +84,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db1 master msdb @@ -187,7 +187,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb @@ -269,7 +269,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb @@ -351,7 +351,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar db1 master msdb @@ -454,7 +454,7 @@ GO SELECT name FROM sys.sysdatabases ORDER BY name; GO ~~START~~ -text +nvarchar master msdb tempdb diff --git a/test/JDBC/expected/single_db/Test-Spatial_Index-vu-verify.out b/test/JDBC/expected/single_db/Test-Spatial_Index-vu-verify.out index 652521b4fbc..d9f09965943 100644 --- a/test/JDBC/expected/single_db/Test-Spatial_Index-vu-verify.out +++ b/test/JDBC/expected/single_db/Test-Spatial_Index-vu-verify.out @@ -94,7 +94,7 @@ CREATE SPATIAL INDEX si_dup ON si_ddl_tbl(geom); GO ~~ERROR (Code: 2714)~~ -~~ERROR (Message: relation "si_dupsi_ddl_tblefc70e6ee50389004ff8215c689e5467" already exists)~~ +~~ERROR (Message: relation "si_dup" already exists)~~ -- 1.3 DROP and recreate @@ -110,7 +110,7 @@ DROP INDEX si_fake ON si_ddl_tbl; GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "si_fakesi_ddl_tbl94fe14b60d353fa399b536a197c4650c" does not exist)~~ +~~ERROR (Message: index "si_fake" does not exist)~~ -- 1.5 Strict escape hatch blocks options diff --git a/test/JDBC/expected/single_db/babelfish_migration_mode-vu-verify.out b/test/JDBC/expected/single_db/babelfish_migration_mode-vu-verify.out index 10411b14621..fca8ccf90d1 100644 --- a/test/JDBC/expected/single_db/babelfish_migration_mode-vu-verify.out +++ b/test/JDBC/expected/single_db/babelfish_migration_mode-vu-verify.out @@ -161,7 +161,7 @@ WHERE name LIKE 'babelfish_migration_mode%' ORDER BY name GO ~~START~~ -text +nvarchar babelfish_migration_mode_db1 ~~END~~ @@ -311,7 +311,7 @@ WHERE name LIKE 'babelfish_migration_mode%' ORDER BY name GO ~~START~~ -text +nvarchar babelfish_migration_mode_db1 ~~END~~ diff --git a/test/JDBC/expected/single_db/catalogs_dbo_sys_schema-vu-verify.out b/test/JDBC/expected/single_db/catalogs_dbo_sys_schema-vu-verify.out index a2ee780838d..bbe18335fb2 100644 --- a/test/JDBC/expected/single_db/catalogs_dbo_sys_schema-vu-verify.out +++ b/test/JDBC/expected/single_db/catalogs_dbo_sys_schema-vu-verify.out @@ -3,175 +3,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2362,134 +2362,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -2603,175 +2603,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -4864,134 +4864,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -5104,175 +5104,175 @@ go select name from sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ...sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from ..dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .master..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .tempdb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.dbo.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb.sys.sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from .myschematest_mydb..sysdatabases where name = 'myschematest_mydb' order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ @@ -7484,134 +7484,134 @@ user_myschematest_mydb exec p_myschematest go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ select name from vw_myschematest order by 1 go ~~START~~ -text +nvarchar myschematest_mydb ~~END~~ diff --git a/test/JDBC/expected/single_db/db_ddladmin-vu-verify.out b/test/JDBC/expected/single_db/db_ddladmin-vu-verify.out index 686dc382c4e..4ed7415f803 100644 --- a/test/JDBC/expected/single_db/db_ddladmin-vu-verify.out +++ b/test/JDBC/expected/single_db/db_ddladmin-vu-verify.out @@ -307,7 +307,7 @@ DROP INDEX babel_5116_idx1 ON babel_5116_t1 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: must be owner of index babel_5116_idx1babel_5116_t1e29153c477c95d679c4b63370567552b)~~ +~~ERROR (Message: must be owner of index babel_5116_idx1)~~ DROP TABLE babel_5116_t1 GO diff --git a/test/JDBC/expected/single_db/four-part-names-vu-verify.out b/test/JDBC/expected/single_db/four-part-names-vu-verify.out index 759cb81cde9..db58c2f3b2b 100644 --- a/test/JDBC/expected/single_db/four-part-names-vu-verify.out +++ b/test/JDBC/expected/single_db/four-part-names-vu-verify.out @@ -406,7 +406,7 @@ GO varchar#!#int#!#int#!#varbinary#!#datetime#!#tinyint#!#varchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#tinyint#!#nvarchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#uniqueidentifier#!#int#!#smallint#!#nvarchar#!#int#!#nvarchar#!#bit#!#bit#!#smallint#!#tinyint#!#nvarchar#!#int#!#int#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#int#!#nvarchar#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openq8c86d09e50d4f800f5a8c351ddbe1b23" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openquery('bbf_fpn_server', 'select * from master" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server."fpn_table'') select * from openquery(''bbf_fpn_server'', ''select * from master".sys.databases @@ -415,7 +415,7 @@ GO varchar#!#int#!#int#!#varbinary#!#datetime#!#tinyint#!#varchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#tinyint#!#nvarchar#!#bit#!#tinyint#!#nvarchar#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#bit#!#tinyint#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#uniqueidentifier#!#uniqueidentifier#!#int#!#smallint#!#nvarchar#!#int#!#nvarchar#!#bit#!#bit#!#smallint#!#tinyint#!#nvarchar#!#int#!#int#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#int#!#nvarchar#!#nvarchar#!#bit#!#bit#!#bit#!#bit#!#bit#!#bit ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openq8c86d09e50d4f800f5a8c351ddbe1b23" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 911, Msg state: 1, Msg: database "fpn_table') select * from openquery('bbf_fpn_server', 'select * from master" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ -- SQL Injection in schema name @@ -426,14 +426,14 @@ select * from bbf_fpn_server.master.[sys.tables'') select * from openquery(''bbf GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * fr465ba21cd478dfdbfd9c4c52873fc1ec.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server.master."sys.tables'') select * from openquery(''bbf_fpn_server'', ''select * from master.sys".databases GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * fr465ba21cd478dfdbfd9c4c52873fc1ec.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "master_sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ -- SQL Injection in object name @@ -444,14 +444,14 @@ select * from bbf_fpn_server.master.sys.[tables'') select * from openquery(''bbf GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquer6fae7895a55a5b386bac33a1b4ac3386" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ select * from bbf_fpn_server.master.sys."tables'') select * from openquery(''bbf_fpn_server'', ''select * from master.sys.databases" GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquer6fae7895a55a5b386bac33a1b4ac3386" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ +~~ERROR (Message: TDS client library error: Msg #: 33557097, Msg state: 1, Msg: relation "sys.tables') select * from openquery('bbf_fpn_server', 'select * from master.sys.databases" does not exist, Server: BABELFISH, Process: , Line: 1, Level: 16)~~ DROP TABLE fpn_table_insert_into diff --git a/test/JDBC/expected/single_db/long-identifiers-vu-verify.out b/test/JDBC/expected/single_db/long-identifiers-vu-verify.out new file mode 100644 index 00000000000..306359fa013 --- /dev/null +++ b/test/JDBC/expected/single_db/long-identifiers-vu-verify.out @@ -0,0 +1,366 @@ + +-- Long identifiers vu-verify: Verify all system objects show original names +-- sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%VU'; +GO +~~START~~ +varchar +Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%VU'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- Case-insensitive lookup +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu'; +GO +~~START~~ +varchar +MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.all_columns +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO +~~START~~ +varchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.indexes +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%VU'; +GO +~~START~~ +varchar +Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.key_constraints +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.check_constraints +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%VU'; +GO +~~START~~ +varchar +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- sys.foreign_keys +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.views +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.procedures +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%VU'; +GO +~~START~~ +varchar +Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU +~~END~~ + + +-- sys.triggers +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%VU'; +GO +~~START~~ +varchar +Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.types +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%VU'; +GO +~~START~~ +varchar +Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.objects (sequence) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Sequence%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#SEQUENCE_OBJECT +~~END~~ + + +-- sys.all_objects (constraints) +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_PK%VU' OR name LIKE 'Very_Long_Check%VU' OR name LIKE 'Very_Long_FK%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU#!#FOREIGN_KEY_CONSTRAINT +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#PRIMARY_KEY_CONSTRAINT +Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#CHECK_CONSTRAINT +~~END~~ + + +-- sys.databases +SELECT name FROM sys.databases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +varchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.sysdatabases +SELECT name FROM sys.sysdatabases WHERE name LIKE 'Very_Long_Database%VU'; +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- DB_NAME() in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT DB_NAME(); +GO +~~START~~ +nvarchar +Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_principals in long-named database +SELECT name FROM sys.database_principals WHERE name = 'dbo'; +GO +~~START~~ +varchar +dbo +~~END~~ + +USE master; +GO + +-- sp_helpdb with long name +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +int +1 +~~END~~ + + +-- Multibyte table +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%VU'; +GO +~~START~~ +varchar +?????????????????PostgreSQL?????????????_VU +~~END~~ + + +-- information_schema.table_constraints +SELECT CONSTRAINT_NAME FROM information_schema.table_constraints WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +varchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU +~~END~~ + + +-- information_schema.key_column_usage +SELECT CONSTRAINT_NAME, COLUMN_NAME FROM information_schema.key_column_usage WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO +~~START~~ +nvarchar#!#nvarchar +Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +~~END~~ + + +-- Error messages show original names +-- Duplicate table +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU (id INT); +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" already exists)~~ + + +-- Duplicate procedure +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU AS SELECT 1; +GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: Function 'very_long_procedure_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu' already exists with the same name)~~ + + +-- Drop non-existent table +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: table "nonexist_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_vu" does not exist)~~ + + +-- Drop non-existent function +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +~~ERROR (Code: 3701)~~ + +~~ERROR (Message: could not find a function named "nonexist_very_long_function_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu")~~ + + +-- sys.all_views +SELECT name FROM sys.all_views WHERE name LIKE 'Very_Long_View%VU'; +GO +~~START~~ +varchar +Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +~~END~~ + + +-- sys.database_role_members +SELECT COUNT(*) FROM sys.database_role_members; +GO +~~START~~ +int +1 +~~END~~ + + +-- sp_tables +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +master#!#dbo#!#Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#TABLE#!# +~~END~~ + + +-- sp_fkeys +EXEC sp_fkeys @pktable_name = 'babel5975_vu_fk_parent'; +GO +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#smallint +master#!#dbo#!#babel5975_vu_fk_parent#!#id#!#master#!#dbo#!#babel5975_vu_fk_child#!#id#!#1#!#1#!#1#!#very_long_fk_constraint_name_thb4fc9f26bf1dbc1d877db6cf99be5888#!#babel5975_vu_fk_parent_pkey#!#7 +~~END~~ + + +-- sp_stored_procedures +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU'; +GO +~~START~~ +varchar#!#varchar#!#nvarchar#!#int#!#int#!#int#!#varchar#!#smallint +master#!#dbo#!#Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU;1#!#-1#!#-1#!#-1#!##!#2 +~~END~~ + + +-- sp_special_columns +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO +~~START~~ +smallint#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint +1#!#Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1#!##!#int#!##!##!##!#1 +~~END~~ + + +-- information_schema.columns +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%VU' ORDER BY ORDINAL_POSITION; +GO +~~START~~ +nvarchar +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 +Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 +~~END~~ + + +-- sys.database_principals shows role with full name +SELECT name, type_desc FROM sys.database_principals WHERE name LIKE 'Very_Long_Role%VU'; +GO +~~START~~ +varchar#!#nvarchar +Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU#!#DATABASE_ROLE +~~END~~ + + +-- sp_helpuser/helprole/helprolemember in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DECLARE @t1 TABLE(userName sys.SYSNAME, roleName sys.SYSNAME, loginName sys.SYSNAME NULL, defdb sys.SYSNAME NULL, defschema sys.SYSNAME, userid INT, sid sys.VARBINARY(85)); +INSERT INTO @t1 EXEC sp_helpuser; +SELECT userName, roleName, loginName, defdb, defschema FROM @t1 ORDER BY userName; +GO +~~ROW COUNT: 2~~ + +~~START~~ +varchar#!#varchar#!#varchar#!#varchar#!#varchar +dbo#!#db_owner#!#jdbc_user#!##!#dbo +guest#!#public#!##!##!#guest +~~END~~ + +DECLARE @t2 TABLE(RoleName sys.SYSNAME, RoleId INT, IsAppRole INT); +INSERT INTO @t2 EXEC sp_helprole; +SELECT RoleName, IsAppRole FROM @t2 ORDER BY RoleName; +GO +~~ROW COUNT: 6~~ + +~~START~~ +varchar#!#int +db_accessadmin#!#0 +db_datareader#!#0 +db_datawriter#!#0 +db_ddladmin#!#0 +db_owner#!#0 +db_securityadmin#!#0 +~~END~~ + +DECLARE @t3 TABLE(DbRole sys.SYSNAME, MemberName sys.SYSNAME, MemberSID sys.VARBINARY(85)); +INSERT INTO @t3 EXEC sp_helprolemember; +SELECT DbRole, MemberName FROM @t3 ORDER BY DbRole, MemberName; +GO +~~ROW COUNT: 1~~ + +~~START~~ +varchar#!#varchar +db_owner#!#dbo +~~END~~ + +USE master; +GO diff --git a/test/JDBC/expected/smalldatetime.out b/test/JDBC/expected/smalldatetime.out index cac21e83c89..f1283fcecd9 100644 --- a/test/JDBC/expected/smalldatetime.out +++ b/test/JDBC/expected/smalldatetime.out @@ -9848,15 +9848,15 @@ ORDER BY COLUMN_NAME; GO ~~START~~ nvarchar#!#nvarchar#!#nvarchar -smalldatetimeview#!#ComputedSmallDateTimeColumn#!#smalldatetime -smalldatetimeview#!#Day#!#int -smalldatetimeview#!#DefaultSmallDateTimeColumn#!#smalldatetime -smalldatetimeview#!#Hour#!#int -smalldatetimeview#!#ID#!#int -smalldatetimeview#!#Minute#!#int -smalldatetimeview#!#Month#!#int -smalldatetimeview#!#SmallDateTimeColumn#!#smalldatetime -smalldatetimeview#!#Year#!#int +SmallDateTimeView#!#ComputedSmallDateTimeColumn#!#smalldatetime +SmallDateTimeView#!#Day#!#int +SmallDateTimeView#!#DefaultSmallDateTimeColumn#!#smalldatetime +SmallDateTimeView#!#Hour#!#int +SmallDateTimeView#!#ID#!#int +SmallDateTimeView#!#Minute#!#int +SmallDateTimeView#!#Month#!#int +SmallDateTimeView#!#SmallDateTimeColumn#!#smalldatetime +SmallDateTimeView#!#Year#!#int ~~END~~ diff --git a/test/JDBC/expected/sp_changedbowner-vu-verify.out b/test/JDBC/expected/sp_changedbowner-vu-verify.out index 7c993b221c9..7b63a235c0d 100644 --- a/test/JDBC/expected/sp_changedbowner-vu-verify.out +++ b/test/JDBC/expected/sp_changedbowner-vu-verify.out @@ -51,7 +51,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'msdb' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar msdb#!#new_OWNER_login_sp ~~END~~ @@ -60,7 +60,7 @@ go select name, suser_sname(sid) from sysdatabases where name = 'msdb' go ~~START~~ -text#!#nvarchar +nvarchar#!#nvarchar msdb#!#dba_login_sp ~~END~~ @@ -86,8 +86,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#dba_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#dba_login_sp ~~END~~ execute sp_changedbowner 'no_such_login_sp' @@ -109,8 +109,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#dba_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#dba_login_sp ~~END~~ drop user new_owner_login_sp @@ -120,8 +120,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -132,7 +132,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#change_owner_db_sp +dbo#!#change_OWNER_db_sp ~~END~~ use master @@ -147,8 +147,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp2 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp2 ~~END~~ execute sp_changedbowner [new_owner_LOGIN_SP3], 12345 @@ -156,8 +156,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp3 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp3 ~~END~~ execute sp_changedbowner [NEW_owner_login_sp3], 'abcde' @@ -165,8 +165,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp3 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp3 ~~END~~ execute sp_changedbowner [new_owner_LOGIN_SP 4], 'abcdefgh' @@ -174,8 +174,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp 4 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp 4 ~~END~~ execute sp_changedbowner "NEW_owner_login_sp5" @@ -183,8 +183,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp5 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp5 ~~END~~ execute sp_changedbowner @loginame = "new_owner_LOGIN_SP 6", @map = 'some-string' @@ -192,8 +192,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp 6 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp 6 ~~END~~ @@ -212,14 +212,14 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#change_owner_db_sp +dbo#!#change_OWNER_db_sp ~~END~~ select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner "new_owner_login_sp" @@ -227,8 +227,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner "NEW_OWNER_LOGIN_SP" @@ -236,8 +236,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner [NEW_owner_login_sp] @@ -245,8 +245,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ use master @@ -261,8 +261,8 @@ go select 'before owner change', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -before owner change#!#change_owner_db_sp#!#new_OWNER_login_sp +varchar#!#nvarchar#!#nvarchar +before owner change#!#change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner NEW_owner_login_sp2 @@ -270,8 +270,8 @@ go select 'after owner change', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -after owner change#!#change_owner_db_sp#!#new_OWNER_login_sp2 +varchar#!#nvarchar#!#nvarchar +after owner change#!#change_OWNER_db_sp#!#new_OWNER_login_sp2 ~~END~~ rollback @@ -279,8 +279,8 @@ go select 'after rollback', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -after rollback#!#change_owner_db_sp#!#new_OWNER_login_sp +varchar#!#nvarchar#!#nvarchar +after rollback#!#change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -291,8 +291,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner @loginame=NULL @@ -300,8 +300,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -352,8 +352,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#dba_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#dba_login_sp ~~END~~ execute sp_changedbowner 'no_such_login_sp' @@ -375,8 +375,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#dba_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#dba_login_sp ~~END~~ drop user new_owner_login_sp @@ -386,8 +386,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -398,7 +398,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#change_owner_db_sp +dbo#!#change_OWNER_db_sp ~~END~~ use master @@ -413,8 +413,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp2 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp2 ~~END~~ execute sp_changedbowner [new_owner_LOGIN_SP3], 12345 @@ -422,8 +422,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp3 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp3 ~~END~~ execute sp_changedbowner [NEW_owner_login_sp3], 'abcde' @@ -431,8 +431,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp3 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp3 ~~END~~ execute sp_changedbowner [new_owner_LOGIN_SP 4], 'abcdefgh' @@ -440,8 +440,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp 4 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp 4 ~~END~~ execute sp_changedbowner "NEW_owner_login_sp5" @@ -449,8 +449,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp5 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp5 ~~END~~ execute sp_changedbowner @loginame = "new_owner_LOGIN_SP 6", @map = 'some-string' @@ -458,8 +458,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp 6 +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp 6 ~~END~~ @@ -478,14 +478,14 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#change_owner_db_sp +dbo#!#change_OWNER_db_sp ~~END~~ select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner "new_owner_login_sp" @@ -493,8 +493,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner "NEW_OWNER_LOGIN_SP" @@ -502,8 +502,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner [NEW_owner_login_sp] @@ -511,8 +511,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ use master @@ -527,8 +527,8 @@ go select 'before owner change', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -before owner change#!#change_owner_db_sp#!#new_OWNER_login_sp +varchar#!#nvarchar#!#nvarchar +before owner change#!#change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner NEW_owner_login_sp2 @@ -536,8 +536,8 @@ go select 'after owner change', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -after owner change#!#change_owner_db_sp#!#new_OWNER_login_sp2 +varchar#!#nvarchar#!#nvarchar +after owner change#!#change_OWNER_db_sp#!#new_OWNER_login_sp2 ~~END~~ rollback @@ -545,8 +545,8 @@ go select 'after rollback', name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -varchar#!#text#!#nvarchar -after rollback#!#change_owner_db_sp#!#new_OWNER_login_sp +varchar#!#nvarchar#!#nvarchar +after rollback#!#change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -557,8 +557,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ execute sp_changedbowner @loginame=NULL @@ -566,8 +566,8 @@ go select name, suser_sname(sid) from sysdatabases where lower(name) = 'change_owner_db_sp' go ~~START~~ -text#!#nvarchar -change_owner_db_sp#!#new_OWNER_login_sp +nvarchar#!#nvarchar +change_OWNER_db_sp#!#new_OWNER_login_sp ~~END~~ @@ -619,8 +619,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -633,7 +633,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#db63long_012345678901234567890123456789012345678901234567890123 +dbo#!#DB63long_012345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -653,8 +653,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB63LONG%' go ~~START~~ -text#!#nvarchar -db63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 +nvarchar#!#nvarchar +DB63long_012345678901234567890123456789012345678901234567890123#!#LOGIN63long_345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -667,7 +667,7 @@ select user_name(), db_name() go ~~START~~ nvarchar#!#nvarchar -dbo#!#db63long_012345678901234567890123456789012345678901234567890123 +dbo#!#DB63long_012345678901234567890123456789012345678901234567890123 ~~END~~ use master @@ -692,8 +692,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login_sp +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login_sp ~~END~~ use master @@ -716,8 +716,8 @@ go select name, suser_sname(sid) from sysdatabases where upper(name) like 'DB64LONG%' go ~~START~~ -text#!#nvarchar -db64long_012345678901234567890109e0da63a1cdb0673c21e39afa6178e9#!#dba_login_sp +nvarchar#!#nvarchar +DB64long_0123456789012345678901234567890123456789012345678901234#!#dba_login_sp ~~END~~ use master diff --git a/test/JDBC/expected/sp_columns_100.out b/test/JDBC/expected/sp_columns_100.out index dcf4a0d3d25..83c03dfb30b 100644 --- a/test/JDBC/expected/sp_columns_100.out +++ b/test/JDBC/expected/sp_columns_100.out @@ -289,11 +289,11 @@ EXEC [sys].sp_columns_100 'tidentityintbigwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#data_type_test#!#1#!#char#!#50#!#50#!##!##!#1#!##!##!#1#!##!#50#!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#test_scenario#!#1#!#char#!#60#!#60#!##!##!#1#!##!##!#1#!##!#60#!#2#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#value_test#!#-5#!#bigint#!#19#!#8#!#0#!#10#!#0#!##!##!#-5#!##!##!#3#!#NO#!#0#!#0#!#0#!#1#!##!##!##!##!##!##!#63 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#inserted_dt#!#93#!#datetime#!#23#!#16#!#3#!##!#1#!##!#getdate()#!#9#!#3#!##!#4#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#111 -master#!#dbo#!#tidentityintbigwithareallylongteba669a8099c8b172adc8a937e6cf71d#!#user_login#!#1#!#char#!#255#!#255#!##!##!#1#!##!#user_name_sysname()#!#1#!##!#255#!#5#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#data_type_test#!#1#!#char#!#50#!#50#!##!##!#1#!##!##!#1#!##!#50#!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#test_scenario#!#1#!#char#!#60#!#60#!##!##!#1#!##!##!#1#!##!#60#!#2#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#value_test#!#-5#!#bigint#!#19#!#8#!#0#!#10#!#0#!##!##!#-5#!##!##!#3#!#NO#!#0#!#0#!#0#!#1#!##!##!##!##!##!##!#63 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#inserted_dt#!#93#!#datetime#!#23#!#16#!#3#!##!#1#!##!#getdate()#!#9#!#3#!##!#4#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#111 +master#!#dbo#!#tidentityintbigwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#user_login#!#1#!#char#!#255#!#255#!##!##!#1#!##!#user_name_sysname()#!#1#!##!#255#!#5#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#39 ~~END~~ @@ -870,7 +870,7 @@ EXEC sys.sp_columns_100 'tidentityintbiddgwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbiddgwithareallylonbc33a3b4e73f8ec86bac8ebd627c0fb4#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -878,7 +878,7 @@ EXEC sys.sp_columns_100 'tidentityintbiddgwithareallylongtablenamewhickcausesbab GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tidentityintbiddgwithareallylonbc33a3b4e73f8ec86bac8ebd627c0fb4#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -887,6 +887,7 @@ EXEC sys.sp_columns_100 '%tidentityintbiddgwithareallylongtablenamewhickcausesba GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int +master#!#dbo#!#tidentityintbiddgwithareallylongtablenamewhickcausesbabelfishtoaddahashcodetothenamebecauseofdefault63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -940,7 +941,7 @@ EXEC sys.sp_columns_100 N'tide Ntityintbiddgwithareallyl ongtablenamewhickcauses GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tide ntityintbiddgwithareallyl 8a403e70114ba4af4e01a3b922ac10fa#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -948,7 +949,7 @@ EXEC sys.sp_columns_100 N'tide Ntityintbiddgwithareallyl ongtablenamewhickcauses GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#dbo#!#tide ntityintbiddgwithareallyl 8a403e70114ba4af4e01a3b922ac10fa#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -957,6 +958,7 @@ EXEC sys.sp_columns_100 N'tide[ ]Ntityintbiddgwithareallyl ongtablenamewhickcaus GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int +master#!#dbo#!#tide Ntityintbiddgwithareallyl ongtablenamewhickcausesbabelfishtoaddahadddededjnfjsnjfbsd bbfjdhft63#!#a#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1011,7 +1013,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1019,7 +1021,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1027,7 +1029,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ @@ -1035,7 +1037,7 @@ EXEC sys.sp_columns_100 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012 GO ~~START~~ varchar#!#varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#int#!#int#!#smallint#!#smallint#!#smallint#!#varchar#!#nvarchar#!#smallint#!#smallint#!#int#!#int#!#varchar#!#smallint#!#smallint#!#smallint#!#smallint#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#int -master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzabcdee1dd8a3ecc87bbae9264077b047a1648#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 +master#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongSchema#!#abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_LongTable#!#ID#!#4#!#int#!#10#!#4#!#0#!#10#!#1#!##!##!#4#!##!##!#1#!#YES#!#0#!#0#!#0#!#0#!##!##!##!##!##!##!#38 ~~END~~ diff --git a/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-cleanup.out b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-cleanup.out new file mode 100644 index 00000000000..381d85309bb --- /dev/null +++ b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-cleanup.out @@ -0,0 +1,24 @@ +use sys_sp_statistics_vu_prepare_db1 +go +drop index sys_sp_statistics_vu_prepare_i1 on sys_sp_statistics_vu_prepare_t1 +go +drop index sys_sp_statistics_vu_prepare_i2 on sys_sp_statistics_vu_prepare_t2 +go +drop index sys_sp_statistics_vu_prepare_i3 on sys_sp_statistics_vu_prepare_t3 +go +drop index sys_sp_statistics_vu_prepare_i4 on sys_sp_statistics_vu_prepare_t4 +go +drop table sys_sp_statistics_vu_prepare_t1 +go +drop table sys_sp_statistics_vu_prepare_t2 +go +drop table sys_sp_statistics_vu_prepare_t3 +go +drop table sys_sp_statistics_vu_prepare_t4 +go +drop table sys_sp_statistics_vu_prepare_t5 +go +use master +go +drop database sys_sp_statistics_vu_prepare_db1 +go diff --git a/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-prepare.out b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-prepare.out new file mode 100644 index 00000000000..43e31def50d --- /dev/null +++ b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-prepare.out @@ -0,0 +1,27 @@ +create database sys_sp_statistics_vu_prepare_db1 +go +use sys_sp_statistics_vu_prepare_db1 +go +create table sys_sp_statistics_vu_prepare_t1(a int) +go +create index sys_sp_statistics_vu_prepare_i1 on sys_sp_statistics_vu_prepare_t1(a) +go +create table sys_sp_statistics_vu_prepare_t2(a int, b int) +go +create index sys_sp_statistics_vu_prepare_i2 on sys_sp_statistics_vu_prepare_t2(a,b) +go +create table sys_sp_statistics_vu_prepare_t3(a int, b int, c int) +go +create index sys_sp_statistics_vu_prepare_i3 on sys_sp_statistics_vu_prepare_t3(c,a) +go +CREATE TABLE sys_sp_statistics_vu_prepare_t4( + c1 INT PRIMARY KEY + , c2 CHAR(10) NOT NULL UNIQUE + , c3 VARCHAR(20) NULL +) +create index sys_sp_statistics_vu_prepare_i4 on sys_sp_statistics_vu_prepare_t4(c2) +go + + +create table sys_sp_statistics_vu_prepare_t5(a int) +go diff --git a/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-verify.out b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-verify.out new file mode 100644 index 00000000000..a83684a276e --- /dev/null +++ b/test/JDBC/expected/sys-sp_statistics-before-18_5-vu-verify.out @@ -0,0 +1,108 @@ +use sys_sp_statistics_vu_prepare_db1 +go + +-- syntax error: @table_name is required +exec sp_statistics +go +~~ERROR (Code: 201)~~ + +~~ERROR (Message: procedure sp_statistics expects parameter "@table_name", which was not supplied.)~~ + + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t1' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!#sys_sp_statistics_vu_prepare_i1d74ae65711a4e190fe4ddcac01afaa82#!#3#!#1#!#a#!#A#!##!#0#!# +~~END~~ + + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t2', @table_qualifier = 'sys_sp_statistics_vu_prepare_db1' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2744efb41538d63e2234a73d113db3804#!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2744efb41538d63e2234a73d113db3804#!#3#!#2#!#b#!#A#!##!#0#!# +~~END~~ + + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t3', @table_owner = 'dbo' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3a95df99223431ae57fffb69b5cb281b1#!#3#!#1#!#c#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3a95df99223431ae57fffb69b5cb281b1#!#3#!#2#!#a#!#A#!##!#0#!# +~~END~~ + + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t4' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_c2_key#!#3#!#1#!#c2#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_pkey#!#3#!#1#!#c1#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#1#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_i49931110ed9f3356fec5c0a7b3f944fda#!#3#!#1#!#c2#!#A#!##!#0#!# +~~END~~ + + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t4', @is_unique = 'Y' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_c2_key#!#3#!#1#!#c2#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_pkey#!#3#!#1#!#c1#!#A#!##!#0#!# +~~END~~ + + +exec [sys].sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t5' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t5#!##!##!##!#0#!##!##!##!#-1#!#0#!# +~~END~~ + + +-- unnamed invocation +exec sp_statistics 'sys_sp_statistics_vu_prepare_t1', 'dbo', 'sys_sp_statistics_vu_prepare_db1' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!#sys_sp_statistics_vu_prepare_i1d74ae65711a4e190fe4ddcac01afaa82#!#3#!#1#!#a#!#A#!##!#0#!# +~~END~~ + + +-- case-insensative invocation +EXEC sp_statistics @TABLE_NAME = 'sys_sp_statistics_vu_prepare_t2', @TABLE_OWNER = 'dbo', @TABLE_QUALIFIER = 'sys_sp_statistics_vu_prepare_db1' +GO +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2744efb41538d63e2234a73d113db3804#!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2744efb41538d63e2234a73d113db3804#!#3#!#2#!#b#!#A#!##!#0#!# +~~END~~ + + +exec sp_statistics N'sys_sp_statistics_vu_prepare_t1',N'dbo',NULL,N'%',N'Y',N'Q' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# +~~END~~ + + +-- sp_statistics_100 is implemented as same as sp_statistics +exec sp_statistics_100 @table_name = 'sys_sp_statistics_vu_prepare_t3' +go +~~START~~ +varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!##!##!##!#0#!##!##!##!#-1#!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3a95df99223431ae57fffb69b5cb281b1#!#3#!#1#!#c#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3a95df99223431ae57fffb69b5cb281b1#!#3#!#2#!#a#!#A#!##!#0#!# +~~END~~ + diff --git a/test/JDBC/expected/sys-sp_statistics-vu-verify.out b/test/JDBC/expected/sys-sp_statistics-vu-verify.out index 4e3194c1898..43e70122e61 100644 --- a/test/JDBC/expected/sys-sp_statistics-vu-verify.out +++ b/test/JDBC/expected/sys-sp_statistics-vu-verify.out @@ -14,7 +14,7 @@ go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!##!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!#sys_sp_statistics_vu_prepare_i1#!#3#!#1#!#a#!#A#!##!#0#!# ~~END~~ @@ -23,8 +23,8 @@ go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!##!#3#!#1#!#a#!#A#!##!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!##!#3#!#2#!#b#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2#!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2#!#3#!#2#!#b#!#A#!##!#0#!# ~~END~~ @@ -33,8 +33,8 @@ go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!##!#3#!#1#!#c#!#A#!##!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!##!#3#!#2#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3#!#3#!#1#!#c#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3#!#3#!#2#!#a#!#A#!##!#0#!# ~~END~~ @@ -45,7 +45,7 @@ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!##!##!##!#0#!##!##!##!#-1#!#0#!# sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_c2_key#!#3#!#1#!#c2#!#A#!##!#0#!# sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#0#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_t4_pkey#!#3#!#1#!#c1#!#A#!##!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#1#!#sys_sp_statistics_vu_prepare_t4#!##!#3#!#1#!#c2#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t4#!#1#!#sys_sp_statistics_vu_prepare_t4#!#sys_sp_statistics_vu_prepare_i4#!#3#!#1#!#c2#!#A#!##!#0#!# ~~END~~ @@ -73,7 +73,7 @@ go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!##!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t1#!#1#!#sys_sp_statistics_vu_prepare_t1#!#sys_sp_statistics_vu_prepare_i1#!#3#!#1#!#a#!#A#!##!#0#!# ~~END~~ @@ -83,8 +83,8 @@ GO ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!##!#3#!#1#!#a#!#A#!##!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!##!#3#!#2#!#b#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2#!#3#!#1#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t2#!#1#!#sys_sp_statistics_vu_prepare_t2#!#sys_sp_statistics_vu_prepare_i2#!#3#!#2#!#b#!#A#!##!#0#!# ~~END~~ @@ -102,7 +102,7 @@ go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!##!##!##!#0#!##!##!##!#-1#!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!##!#3#!#1#!#c#!#A#!##!#0#!# -sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!##!#3#!#2#!#a#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3#!#3#!#1#!#c#!#A#!##!#0#!# +sys_sp_statistics_vu_prepare_db1#!#dbo#!#sys_sp_statistics_vu_prepare_t3#!#1#!#sys_sp_statistics_vu_prepare_t3#!#sys_sp_statistics_vu_prepare_i3#!#3#!#2#!#a#!#A#!##!#0#!# ~~END~~ diff --git a/test/JDBC/expected/sys-sp_statistics_100-vu-verify.out b/test/JDBC/expected/sys-sp_statistics_100-vu-verify.out index 0db45fef63b..1aaabb0d631 100644 --- a/test/JDBC/expected/sys-sp_statistics_100-vu-verify.out +++ b/test/JDBC/expected/sys-sp_statistics_100-vu-verify.out @@ -10,36 +10,40 @@ exec [sys].sp_statistics_100 @table_name = 'sys_sp_statistics_100_vu_prepare_t1' go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: negative substring length not allowed)~~ +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t1#!#1#!#sys_sp_statistics_100_vu_prepare_t1#!#sys_sp_statistics_100_vu_prepare_i1#!#3#!#1#!#a#!#A#!##!#0#!# +~~END~~ exec [sys].sp_statistics_100 @table_name = 'sys_sp_statistics_100_vu_prepare_t2', @table_owner = 'dbo' go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: negative substring length not allowed)~~ +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#0#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_t2_pkey#!#3#!#1#!#b#!#A#!##!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#1#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_i2#!#3#!#1#!#a#!#A#!##!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#1#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_i2#!#3#!#2#!#b#!#A#!##!#0#!# +~~END~~ exec [sys].sp_statistics_100 @table_name = 'sys_sp_statistics_100_vu_prepare_t2', @table_qualifier = 'master' go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: negative substring length not allowed)~~ +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#0#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_t2_pkey#!#3#!#1#!#b#!#A#!##!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#1#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_i2#!#3#!#1#!#a#!#A#!##!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t2#!#1#!#sys_sp_statistics_100_vu_prepare_t2#!#sys_sp_statistics_100_vu_prepare_i2#!#3#!#2#!#b#!#A#!##!#0#!# +~~END~~ exec [sys].sp_statistics_100 'sys_sp_statistics_100_vu_prepare_t1', 'dbo' go ~~START~~ varchar#!#varchar#!#varchar#!#smallint#!#varchar#!#varchar#!#smallint#!#smallint#!#varchar#!#varchar#!#int#!#int#!#varchar -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: negative substring length not allowed)~~ +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t1#!##!##!##!#0#!##!##!##!#-1#!#0#!# +master#!#dbo#!#sys_sp_statistics_100_vu_prepare_t1#!#1#!#sys_sp_statistics_100_vu_prepare_t1#!#sys_sp_statistics_100_vu_prepare_i1#!#3#!#1#!#a#!#A#!##!#0#!# +~~END~~ exec sp_statistics_100 N'sys_sp_statistics_100_vu_prepare_t1',N'dbo',NULL,N'%',N'Y',N'Q' diff --git a/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-cleanup.out b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-cleanup.out new file mode 100644 index 00000000000..e35ae7f1770 --- /dev/null +++ b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-cleanup.out @@ -0,0 +1,11 @@ +DROP DATABASE sys_sysdatabases_vu_prepare_db +GO + +DROP VIEW sys_sysdatabases_vu_prepare_view +GO + +DROP PROC sys_sysdatabases_vu_prepare_proc +GO + +DROP FUNCTION sys_sysdatabases_vu_prepare_func +GO diff --git a/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-prepare.out b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-prepare.out new file mode 100644 index 00000000000..2945d86fdc7 --- /dev/null +++ b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-prepare.out @@ -0,0 +1,26 @@ +CREATE DATABASE sys_sysdatabases_vu_prepare_db +GO + +CREATE VIEW sys_sysdatabases_vu_prepare_view +AS +SELECT name, cmptlevel +FROM sys.sysdatabases +WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%' +ORDER BY name +GO + +CREATE PROC sys_sysdatabases_vu_prepare_proc +AS +SELECT name, cmptlevel +FROM sys.sysdatabases +WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%' +ORDER BY name +GO + +CREATE FUNCTION sys_sysdatabases_vu_prepare_func() +RETURNS INT +AS +BEGIN +RETURN (SELECT COUNT(*) FROM sys.sysdatabases WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%') +END +GO diff --git a/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-verify.out b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-verify.out new file mode 100644 index 00000000000..a8c05415874 --- /dev/null +++ b/test/JDBC/expected/sys-sysdatabases-before-18_5-vu-verify.out @@ -0,0 +1,64 @@ +SELECT * FROM sys_sysdatabases_vu_prepare_view +GO +~~START~~ +text#!#tinyint +sys_sysdatabases_vu_prepare_db#!#120 +~~END~~ + + +EXEC sys_sysdatabases_vu_prepare_proc +GO +~~START~~ +nvarchar#!#tinyint +sys_sysdatabases_vu_prepare_db#!#120 +~~END~~ + + +SELECT sys_sysdatabases_vu_prepare_func() +GO +~~START~~ +int +1 +~~END~~ + + +-- BABEL-3441: Ensure that sys.databases.compatibilty_level and sysdatabases.cmptlevel is equal +SELECT compatibility_level FROM sys.databases WHERE name = 'master' +GO +~~START~~ +tinyint +120 +~~END~~ + + +SELECT cmptlevel FROM sys.sysdatabases WHERE name = 'master' +GO +~~START~~ +tinyint +120 +~~END~~ + + +SELECT cmptlevel FROM master.dbo.sysdatabases WHERE name = 'master' +GO +~~START~~ +tinyint +120 +~~END~~ + + +SELECT cmptlevel FROM msdb.dbo.sysdatabases WHERE name = 'master' +GO +~~START~~ +tinyint +120 +~~END~~ + + +SELECT cmptlevel FROM tempdb.dbo.sysdatabases WHERE name = 'master' +GO +~~START~~ +tinyint +120 +~~END~~ + diff --git a/test/JDBC/expected/sys-sysdatabases-vu-verify.out b/test/JDBC/expected/sys-sysdatabases-vu-verify.out index d6e55a2ce3a..81af946f07c 100644 --- a/test/JDBC/expected/sys-sysdatabases-vu-verify.out +++ b/test/JDBC/expected/sys-sysdatabases-vu-verify.out @@ -1,7 +1,7 @@ SELECT * FROM sys_sysdatabases_vu_prepare_view GO ~~START~~ -text#!#tinyint +nvarchar#!#tinyint sys_sysdatabases_vu_prepare_db#!#120 ~~END~~ @@ -9,7 +9,7 @@ sys_sysdatabases_vu_prepare_db#!#120 EXEC sys_sysdatabases_vu_prepare_proc GO ~~START~~ -text#!#tinyint +nvarchar#!#tinyint sys_sysdatabases_vu_prepare_db#!#120 ~~END~~ diff --git a/test/JDBC/expected/temp_table_rollback-vu-verify.out b/test/JDBC/expected/temp_table_rollback-vu-verify.out index b7e23bfb49c..e296cfbb077 100644 --- a/test/JDBC/expected/temp_table_rollback-vu-verify.out +++ b/test/JDBC/expected/temp_table_rollback-vu-verify.out @@ -582,7 +582,7 @@ ROLLBACK GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ SELECT * FROM #temp_table_rollback_t5 @@ -598,7 +598,7 @@ DROP INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ CREATE INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5(b) diff --git a/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out b/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out index ddfcc34b464..8a6054a6916 100644 --- a/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out +++ b/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out @@ -1168,7 +1168,7 @@ ROLLBACK GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ SELECT * FROM #temp_table_rollback_t5 @@ -1184,7 +1184,7 @@ DROP INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ CREATE INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5(b) diff --git a/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out b/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out index 7c4926cf21a..ca246cea32c 100644 --- a/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out +++ b/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out @@ -1168,7 +1168,7 @@ ROLLBACK GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ SELECT * FROM #temp_table_rollback_t5 @@ -1184,7 +1184,7 @@ DROP INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ CREATE INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5(b) diff --git a/test/JDBC/expected/temp_table_rollback_xact_abort_on.out b/test/JDBC/expected/temp_table_rollback_xact_abort_on.out index 8ec29ee2943..dc16c7d0d03 100644 --- a/test/JDBC/expected/temp_table_rollback_xact_abort_on.out +++ b/test/JDBC/expected/temp_table_rollback_xact_abort_on.out @@ -1169,7 +1169,7 @@ ROLLBACK GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ SELECT * FROM #temp_table_rollback_t5 @@ -1185,7 +1185,7 @@ DROP INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5 GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: index "#temp_table_rollback_t5_idx2#te2a202739f4e4dbd1ebea8195fe760b6f" does not exist)~~ +~~ERROR (Message: index "#temp_table_rollback_t5_idx2" does not exist)~~ CREATE INDEX #temp_table_rollback_t5_idx2 ON #temp_table_rollback_t5(b) diff --git a/test/JDBC/input/BABEL-3640-vu-cleanup.sql b/test/JDBC/input/BABEL-3640-vu-cleanup.sql index 677056cd183..d21be1c29af 100644 --- a/test/JDBC/input/BABEL-3640-vu-cleanup.sql +++ b/test/JDBC/input/BABEL-3640-vu-cleanup.sql @@ -21,7 +21,7 @@ go drop view t_sptables5 go -drop table MyTable1 +drop table mytable1 go use master diff --git a/test/JDBC/input/BABEL-3640-vu-prepare.sql b/test/JDBC/input/BABEL-3640-vu-prepare.sql index 77266747b48..eb9f797a13e 100644 --- a/test/JDBC/input/BABEL-3640-vu-prepare.sql +++ b/test/JDBC/input/BABEL-3640-vu-prepare.sql @@ -4,11 +4,11 @@ go use babel_3640_db; go -create table MyTable1 (a int, b int, c int) +create table mytable1 (a int, b int, c int) go create view t_sptables5 as -select a from MyTable1 +select a from mytable1 go create table trans2(id int identity(1,1) primary key, source int, target int, amount int); diff --git a/test/JDBC/input/BABEL-5119-before-18_5-vu-cleanup.mix b/test/JDBC/input/BABEL-5119-before-18_5-vu-cleanup.mix new file mode 100644 index 00000000000..19854648fcb --- /dev/null +++ b/test/JDBC/input/BABEL-5119-before-18_5-vu-cleanup.mix @@ -0,0 +1,29 @@ +-- tsql +USE master +GO +DROP TABLE guest.BABEL5119_t4 +GO +DROP TABLE guest.BABEL5119_t5 +GO +DROP TABLE guest.BABEL5119_t6 +GO +DROP VIEW guest.BABEL5119_v4 +GO +DROP VIEW guest.BABEL5119_v5 +GO +DROP VIEW guest.BABEL5119_v6 +GO +DROP PROCEDURE guest.BABEL5119_p4 +GO +DROP PROCEDURE guest.BABEL5119_p5 +GO +DROP PROCEDURE guest.BABEL5119_p6 +GO +DROP LOGIN login_babel5119_1 +GO +DROP DATABASE BABEL5119_db +GO +DROP LOGIN login_babel5119_2 +GO +DROP USER user_babel5119_1 +go \ No newline at end of file diff --git a/test/JDBC/input/BABEL-5119-before-18_5-vu-prepare.mix b/test/JDBC/input/BABEL-5119-before-18_5-vu-prepare.mix new file mode 100644 index 00000000000..f986075b5e5 --- /dev/null +++ b/test/JDBC/input/BABEL-5119-before-18_5-vu-prepare.mix @@ -0,0 +1,25 @@ +-- tsql +CREATE DATABASE BABEL5119_db +GO + +USE BABEL5119_db +GO +CREATE TABLE BABEL5119_t1(a int) +GO +CREATE TABLE BABEL5119_t2(a int) +GO +CREATE TABLE BABEL5119_t3(a int) +GO +CREATE VIEW BABEL5119_v1 AS SELECT 1 +GO +CREATE VIEW BABEL5119_v2 AS SELECT 1 +GO +CREATE VIEW BABEL5119_v3 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p1 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p2 AS SELECT 1 +GO +CREATE PROCEDURE BABEL5119_p3 AS SELECT 1 +GO +-- terminate-tsql-conn \ No newline at end of file diff --git a/test/JDBC/input/BABEL-5119-before-18_5-vu-verify.mix b/test/JDBC/input/BABEL-5119-before-18_5-vu-verify.mix new file mode 100644 index 00000000000..1d345a95b8f --- /dev/null +++ b/test/JDBC/input/BABEL-5119-before-18_5-vu-verify.mix @@ -0,0 +1,372 @@ +-- tsql +CREATE LOGIN login_babel5119_1 WITH PASSWORD = '12345678' +CREATE LOGIN login_babel5119_2 WITH PASSWORD = '12345678' +ALTER authorization on database::BABEL5119_db TO login_babel5119_1 +GO +CREATE USER user_babel5119_1 FOR LOGIN login_babel5119_1; +go +ALTER ROLE db_owner ADD MEMBER user_babel5119_1; +go +-- terminate-tsql-conn + +-- tsql user=login_babel5119_1 password=12345678 +-- Creating objects in the guest schema +USE master +GO +select current_user; +go +CREATE TABLE guest.BABEL5119_t4(a int) +GO +CREATE TABLE guest.BABEL5119_t5(a int) +GO +CREATE TABLE guest.BABEL5119_t6(a int) +GO +CREATE VIEW guest.BABEL5119_v4 AS SELECT 1 +GO +CREATE VIEW guest.BABEL5119_v5 AS SELECT 1 +GO +CREATE VIEW guest.BABEL5119_v6 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p4 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p5 AS SELECT 1 +GO +CREATE PROCEDURE guest.BABEL5119_p6 AS SELECT 1 +GO +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- Testing crossdb queries for sysadmin +-- tsql +-- From 'master' database +USE master +GO + +-- Checking crossdb for sys views +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_1(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_1 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_2(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_2 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_3(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_3 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO + +-- From 'BABEL5119_db' database +USE BABEL5119_db +GO + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_4(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_4 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_5(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_5 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_6(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_6 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +-- terminate-tsql-conn + +-- Testing crossdb queries for non-sysadmin db_owner +-- tsql user=login_babel5119_1 password=12345678 +-- Checking crossdb for sys views +-- From 'master' database +USE master +GO + +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_7(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_7 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_8(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_8 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_9(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_9 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO + +-- From 'BABEL5119_db' database +USE BABEL5119_db +GO + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_10(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_10 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_11(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_11 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_12(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_12 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- Testing crossdb queries for non-sysadmin non-db_owner +-- tsql user=login_babel5119_2 password=12345678 +-- Checking crossdb for sys views +-- From 'master' database +USE master +GO + +SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM BABEL5119_db.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM BABEL5119_db.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM BABEL5119_db.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- General crossdb queries +SELECT tb_1.*, tb_2.* FROM BABEL5119_db.dbo.BABEL5119_t1 tb_1, master.guest.BABEL5119_t4 tb_2 +GO + +SELECT vw_1.*, vw_2.* FROM BABEL5119_db.dbo.BABEL5119_v1 vw_1, master.guest.BABEL5119_v4 vw_2 +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_13(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_13 select name, object_id, schema_id from BABEL5119_db.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_14(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_14 SELECT name FROM BABEL5119_db.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_15(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_15 SELECT TABLE_NAME FROM BABEL5119_db.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(BABEL5119_db.sys.databases.name) FROM BABEL5119_db.sys.databases WHERE BABEL5119_db.sys.databases.name='BABEL5119_db' +GO + +SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.views WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +SELECT name FROM master.sys.procedures WHERE name LIKE 'BABEL5119%' +ORDER BY name +GO + +-- Checking crossdb for information_schema +SELECT * FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, COLUMN_NAME FROM master.information_schema.columns WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +SELECT TABLE_NAME, VIEW_DEFINITION FROM master.information_schema.views WHERE TABLE_NAME LIKE 'BABEL5119%' +ORDER BY TABLE_NAME +GO + +-- Using crossdb query data +CREATE TABLE #babel5119_tmp_table_16(name VARCHAR(MAX), object_id int, schema_id int) +INSERT INTO #babel5119_tmp_table_16 select name, object_id, schema_id from master.sys.tables WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_17(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_17 SELECT name FROM master.sys.databases WHERE name LIKE 'BABEL5119%' +GO + +CREATE TABLE #babel5119_tmp_table_18(name VARCHAR(MAX)) +INSERT INTO #babel5119_tmp_table_18 SELECT TABLE_NAME FROM master.information_schema.tables WHERE TABLE_NAME LIKE 'BABEL5119%' +GO + +SELECT has_dbaccess(master.sys.databases.name) FROM master.sys.databases WHERE master.sys.databases.name='BABEL5119_db' +GO +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 + +-- Checking the permissions after alter +-- tsql user=login_babel5119_2 password=12345678 +USE BABEL5119_db +GO +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 + +-- tsql +ALTER authorization on database::BABEL5119_db TO login_babel5119_2 +GO +-- terminate-tsql-conn + +-- tsql user=login_babel5119_1 password=12345678 +USE BABEL5119_db +GO +-- terminate-tsql-conn user=login_babel5119_1 password=12345678 + +-- tsql user=login_babel5119_2 password=12345678 +USE BABEL5119_db +GO +INSERT INTO BABEL5119_t1 VALUES(1) +GO +-- terminate-tsql-conn user=login_babel5119_2 password=12345678 diff --git a/test/JDBC/input/BABEL-621-before-18_5-vu-cleanup.sql b/test/JDBC/input/BABEL-621-before-18_5-vu-cleanup.sql new file mode 100644 index 00000000000..5ad2c5a4516 --- /dev/null +++ b/test/JDBC/input/BABEL-621-before-18_5-vu-cleanup.sql @@ -0,0 +1,41 @@ +DROP INDEX idx on babel_621_vu_prepare_table_1; +DROP INDEX idx on babel_621_vu_prepare_table_2; +GO + +DROP INDEX uniq on babel_621_vu_prepare_table_3; +GO + +DROP INDEX very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_table_with_long_index_name; +GO + +DROP INDEX very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO + +DROP TABLE babel_621_vu_prepare_table_1; +GO +DROP TABLE babel_621_vu_prepare_table_2; +GO +DROP TABLE babel_621_vu_prepare_table_3; +GO +DROP TABLE babel_621_vu_prepare_table_4; +GO +DROP TABLE babel_621_vu_prepare_table_with_long_index_name; +GO +DROP TABLE babel_621_vu_prepare_second_table_with_long_index_name; +GO +DROP TABLE babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO +DROP TABLE babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890; +GO +DROP TABLE babel_621_vu_prepare_table_6; +GO +DROP TABLE table_6; +GO +DROP TABLE table_7; +GO +DROP TABLE babel_621_vu_prepare_table_7; +GO +DROP TABLE babel_621_vu_prepare_table_8; +GO +DROP TABLE babel_621_vu_prepare_table_10; +GO \ No newline at end of file diff --git a/test/JDBC/input/BABEL-621-before-18_5-vu-prepare.sql b/test/JDBC/input/BABEL-621-before-18_5-vu-prepare.sql new file mode 100644 index 00000000000..db26b4a1d7d --- /dev/null +++ b/test/JDBC/input/BABEL-621-before-18_5-vu-prepare.sql @@ -0,0 +1,99 @@ +create table babel_621_vu_prepare_table_1 (a int); +go +create table babel_621_vu_prepare_table_2 (a int); +go +create index idx on babel_621_vu_prepare_table_1(a); +go +create index idx on babel_621_vu_prepare_table_2(a); +go + +create table babel_621_vu_prepare_table_3 (a int); +go +alter table babel_621_vu_prepare_table_3 add constraint uniq unique (a); +go +create index uniq on babel_621_vu_prepare_table_3(a); +go + +create table babel_621_vu_prepare_table_4 (a int); +go +create index uniq_table_4 on babel_621_vu_prepare_table_4(a); +go +alter table babel_621_vu_prepare_table_4 add constraint uniq_table_4 unique (a); +go +alter table babel_621_vu_prepare_table_4 drop constraint uniq_table_4; +go + +-- Very long index name +create table babel_621_vu_prepare_table_with_long_index_name (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_table_with_long_index_name(a); +go + +create table babel_621_vu_prepare_second_table_with_long_index_name (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_vu_prepare_second_table_with_long_index_name(a); +go + +-- Very long table name and very long index name +create table babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890 (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890(a); +go + +create table babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890 (a int); +go +create index very_long_index_name_on_a_table_1234567890_1234567890_1234567890_1234567890_1234567890 on babel_621_second_table_with_long_name_1234567890_1234567890_1234567890_1234567890_1234567890(a); +go + +-- Situation where simple concatenation of table and index name does not work +-- E.g. table_a + index_a == table_b + index_b +create table babel_621_vu_prepare_table_6 (a int); +go +create index idx_ on babel_621_vu_prepare_table_6(a); +go + +create table table_6 (a int); +go +create index idx_babel_621_vu_prepare_ on table_6(a); +go +-- Situation where simple concatenation of index and table name does not work (reverse of previous) +-- E.g. index_a + table_a == index_b + table_b +create table table_7 (a int); +go +create index idx_babel_621_vu_prepare_ on table_7(a); +go + +create table babel_621_vu_prepare_table_7 (a int); +go +create index idx_ on babel_621_vu_prepare_table_7(a); +go + +-- +create table babel_621_vu_prepare_table_8 ( + a int, + value int, + constraint constraint_8 unique nonclustered + ( + value asc + ) + ) +go +alter table babel_621_vu_prepare_table_8 drop constraint constraint_8; +go +insert into babel_621_vu_prepare_table_8 values(1, 1); +insert into babel_621_vu_prepare_table_8 values(2, 1); +go + +create table babel_621_vu_prepare_table_10 +( + a int, + b int, + c int +) +go +create unique index idx on babel_621_vu_prepare_table_10 (a, b); +go +insert into babel_621_vu_prepare_table_10 values(1, 1, 1); +insert into babel_621_vu_prepare_table_10 values(1, 2, 1); +insert into babel_621_vu_prepare_table_10 values(1, 2, 2); +go \ No newline at end of file diff --git a/test/JDBC/input/BABEL-621-before-18_5-vu-verify.sql b/test/JDBC/input/BABEL-621-before-18_5-vu-verify.sql new file mode 100644 index 00000000000..d099bd49472 --- /dev/null +++ b/test/JDBC/input/BABEL-621-before-18_5-vu-verify.sql @@ -0,0 +1,7 @@ +select a, value from babel_621_vu_prepare_table_8 order by a; +go + +drop index idx on babel_621_vu_prepare_table_10; +go +insert into babel_621_vu_prepare_table_10 values(1, 2, 2); +go \ No newline at end of file diff --git a/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.mix b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.mix new file mode 100644 index 00000000000..35146158df4 --- /dev/null +++ b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-cleanup.mix @@ -0,0 +1,30 @@ +-- Clean up +-- tsql +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user1 +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user2 +GO +DROP USER BABEL_ROLE_MEMBER_vu_prepare_user3 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role5 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +DROP ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 +GO +DROP LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 +GO +USE master +GO +DROP DATABASE BABEL_ROLE_MEMBER_vu_prepare_db +GO \ No newline at end of file diff --git a/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.mix b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.mix new file mode 100644 index 00000000000..6e8c289e28c --- /dev/null +++ b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-prepare.mix @@ -0,0 +1,59 @@ +-- tsql +CREATE DATABASE BABEL_ROLE_MEMBER_vu_prepare_db +go + +USE BABEL_ROLE_MEMBER_vu_prepare_db +go + +CREATE PROC BABEL_ROLE_MEMBER_vu_prepare_proc AS +BEGIN + SELECT dp1.name AS RoleName, dp1.type AS RoleType, + dp2.name AS MemberName, dp2.type AS MemberType + FROM sys.database_role_members AS drm + INNER JOIN sys.database_principals AS dp1 + ON drm.role_principal_id = dp1.principal_id + INNER JOIN sys.database_principals AS dp2 + ON drm.member_principal_id = dp2.principal_id + ORDER BY dp1.name, dp2.name +END +GO + +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +CREATE ROLE BABEL_ROLE_MEMBER_vu_prepare_role5 +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 WITH PASSWORD = '123' +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 WITH PASSWORD = '123' +GO +CREATE LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 WITH PASSWORD = '123' +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user1 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user2 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 +GO +CREATE USER BABEL_ROLE_MEMBER_vu_prepare_user3 FOR LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 +GO + +-- role1 -> role2 -> role3 -> role4 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role2 +GO +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role3 +GO +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_role4 +GO +-- role1 -> user1 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role1 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user1 +GO +-- role2 -> user2 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role2 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user2 +GO +-- role3 -> user3 +ALTER ROLE BABEL_ROLE_MEMBER_vu_prepare_role3 ADD MEMBER BABEL_ROLE_MEMBER_vu_prepare_user3 +GO \ No newline at end of file diff --git a/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-verify.mix b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-verify.mix new file mode 100644 index 00000000000..bfd9171fdbd --- /dev/null +++ b/test/JDBC/input/BABEL-ROLE-MEMBER-before-18_5-vu-verify.mix @@ -0,0 +1,266 @@ +USE BABEL_ROLE_MEMBER_vu_prepare_db +go + +SELECT DB_NAME() +GO + +-- Print the current membership status +EXEC BABEL_ROLE_MEMBER_vu_prepare_proc +GO + +-- IS_MEMBER and IS_ROLEMEMBER +-- Basic membership check +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_role4') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_user3') +GO + +-- Not member, should return 0 +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role4', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role5') +GO + +-- Nested membership check +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user3') +GO + +-- Membership of oneself, should return 1, this also applies to user +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('public', 'public') +GO + +-- Every db principal is member of PUBLIC +SELECT IS_MEMBER('public') +GO +SELECT IS_ROLEMEMBER('public', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('public', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO + +-- Should return 0 +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'db_owner') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'db_owner') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'db_owner') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'dbo') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'dbo') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'dbo') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO + +-- Invalid role/principal name, should return NULL +SELECT IS_MEMBER('xxx') +GO +SELECT IS_ROLEMEMBER('xxx') +GO +SELECT IS_ROLEMEMBER('xxx', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'xxx') +GO +SELECT IS_ROLEMEMBER(NULL, 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', NULL) +GO + +-- Given name is a real user but not associated with login, should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO + +-- NULL input, should return NULL +SELECT IS_MEMBER(NULL) +GO +SELECT IS_ROLEMEMBER(NULL, 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', NULL) +GO +SELECT IS_ROLEMEMBER(NULL, NULL) +GO + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1 ', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3 ') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3 ', 'BABEL_ROLE_MEMBER_vu_prepare_role4 ') +GO + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces - Should return 0 +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('db_owner', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO + +-- IS_ROLEMEMBER: Each Input with Trailing Spaces - Should return NULL +SELECT IS_ROLEMEMBER('xxx ') +GO +SELECT IS_ROLEMEMBER('xxx ', 'BABEL_ROLE_MEMBER_vu_prepare_user1 ') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1 ', 'xxx ') +GO + +-- IS_MEMBER: Each Input with Trailing Spaces +SELECT IS_MEMBER('public ') +GO +SELECT IS_MEMBER('xxx ') +GO + +-- IS_ROLEMEMBER, IS_MEMBER: Input with Leading Spaces - should not trim and return NULL +SELECT IS_ROLEMEMBER(' BABEL_ROLE_MEMBER_vu_prepare_role1', ' BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2 ', ' BABEL_ROLE_MEMBER_vu_prepare_role3 ') +GO +SELECT IS_MEMBER(' public') +GO + +-- Case insensitive check +SELECT IS_ROLEMEMBER('PUBLIC', 'Babel_role_member_vu_prepare_User1') +GO +SELECT IS_ROLEMEMBER('Babel_role_member_vu_prepare_role1', 'babel_role_member_vu_prepare_ROLE3') +GO +SELECT IS_MEMBER('Public') +GO + +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login1 WITH PASSWORD = '123' +GO + +-- Connect with different logins to test membership view permission +-- Test on user1 +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login1 password=123 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user1') +GO + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO + +USE master +GO + +-- tsql +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login2 WITH PASSWORD = '123' +GO + +-- Test on user2 +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login2 password=123 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user2') +GO + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_user1') +GO + +USE master +GO + +-- tsql +-- reset the login password +ALTER LOGIN BABEL_ROLE_MEMBER_vu_prepare_login3 WITH PASSWORD = '123' +GO + +-- Test on user3 +-- tsql user=BABEL_ROLE_MEMBER_vu_prepare_login3 password=123 +USE BABEL_ROLE_MEMBER_vu_prepare_db +GO +SELECT USER_NAME() +GO + +-- Should return 1 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role2') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role1', 'BABEL_ROLE_MEMBER_vu_prepare_role3') +GO +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_user3') +GO + +-- Should return 0 +SELECT IS_MEMBER('BABEL_ROLE_MEMBER_vu_prepare_role4') +GO + +-- Doesn't have permission, should return NULL +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role3', 'BABEL_ROLE_MEMBER_vu_prepare_role4') +GO +SELECT IS_ROLEMEMBER('BABEL_ROLE_MEMBER_vu_prepare_role2', 'BABEL_ROLE_MEMBER_vu_prepare_user2') +GO + +-- tsql +USE master +GO \ No newline at end of file diff --git a/test/JDBC/input/BABEL-ROLE-MEMBER-vu-prepare.mix b/test/JDBC/input/BABEL-ROLE-MEMBER-vu-prepare.mix index 46b476d8ff8..6e8c289e28c 100644 --- a/test/JDBC/input/BABEL-ROLE-MEMBER-vu-prepare.mix +++ b/test/JDBC/input/BABEL-ROLE-MEMBER-vu-prepare.mix @@ -5,9 +5,6 @@ go USE BABEL_ROLE_MEMBER_vu_prepare_db go -SELECT DB_NAME() -GO - CREATE PROC BABEL_ROLE_MEMBER_vu_prepare_proc AS BEGIN SELECT dp1.name AS RoleName, dp1.type AS RoleType, diff --git a/test/JDBC/input/BABEL-ROLE-MEMBER-vu-verify.mix b/test/JDBC/input/BABEL-ROLE-MEMBER-vu-verify.mix index f8ce2a45240..bfd9171fdbd 100644 --- a/test/JDBC/input/BABEL-ROLE-MEMBER-vu-verify.mix +++ b/test/JDBC/input/BABEL-ROLE-MEMBER-vu-verify.mix @@ -1,6 +1,9 @@ USE BABEL_ROLE_MEMBER_vu_prepare_db go +SELECT DB_NAME() +GO + -- Print the current membership status EXEC BABEL_ROLE_MEMBER_vu_prepare_proc GO diff --git a/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-cleanup.sql b/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-cleanup.sql index 974b109cb3f..9be3773187e 100644 --- a/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-cleanup.sql +++ b/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-cleanup.sql @@ -6,7 +6,7 @@ DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all GO DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_seluct_all GO -DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_Mixed +DROP PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_mixed GO DROP TABLE babel_sp_stored_procedures_vu_prepare_t1 GO diff --git a/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-prepare.sql b/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-prepare.sql index ba6673fc414..503af843980 100644 --- a/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-prepare.sql +++ b/test/JDBC/input/BABEL-SP_STORED_PROCEDURES-vu-prepare.sql @@ -24,9 +24,9 @@ AS SELECT * FROM babel_sp_stored_procedures_vu_prepare_t1 GO -DROP PROCEDURE IF EXISTS babel_sp_stored_procedures_vu_prepare_select_all_Mixed +DROP PROCEDURE IF EXISTS babel_sp_stored_procedures_vu_prepare_select_all_mixed GO -CREATE PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_Mixed +CREATE PROCEDURE babel_sp_stored_procedures_vu_prepare_select_all_mixed AS SELECT * FROM babel_sp_stored_procedures_vu_prepare_t1 GO diff --git a/test/JDBC/input/long-identifiers-error-messages.sql b/test/JDBC/input/long-identifiers-error-messages.sql new file mode 100644 index 00000000000..6588b6ff0f1 --- /dev/null +++ b/test/JDBC/input/long-identifiers-error-messages.sql @@ -0,0 +1,573 @@ +-- Long Identifier Error Message Tests +-- Verifies error messages show full original names (not truncated+hashed PG names) + +-- tsql + +-- =========================================== +-- SETUP +-- =========================================== +CREATE TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT, col1 INT); +GO +CREATE VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a; +GO +CREATE SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +CREATE FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END; +GO +CREATE PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +CREATE INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO + +-- =========================================== +-- CREATE "already exists" errors +-- =========================================== + +-- TABLE already exists +CREATE TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO + +-- VIEW already exists +CREATE VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a; +GO + +-- SEQUENCE already exists +CREATE SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO + +-- FUNCTION already exists +CREATE FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END; +GO + +-- PROCEDURE already exists +CREATE PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO + +-- INDEX already exists +CREATE INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO + +-- =========================================== +-- DROP "does not exist" errors +-- =========================================== + +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP VIEW NonExist_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP PROCEDURE NonExist_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP SEQUENCE NonExist_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP INDEX NonExist_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- ALTER errors - object not found +-- =========================================== + +-- ALTER TABLE that doesn't exist +ALTER TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ADD col2 INT; +GO + +-- ALTER TABLE ADD COLUMN that already exists +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ADD col1 INT; +GO + +-- ALTER TABLE DROP COLUMN that doesn't exist +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters DROP COLUMN nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars; +GO + +-- =========================================== +-- INSERT/UPDATE referencing non-existent table +-- =========================================== + +INSERT INTO NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +GO + +UPDATE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters SET id = 1; +GO + +DELETE FROM NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +SELECT * FROM NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- DATABASE errors +-- =========================================== + +-- USE non-existent database +USE Very_Long_Nonexistent_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- DROP DATABASE that doesn't exist +DROP DATABASE Very_Long_Nonexistent_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- LOGIN errors +-- =========================================== + +-- CREATE LOGIN already exists +CREATE LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test WITH PASSWORD = '12345678'; +GO +CREATE LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test WITH PASSWORD = '12345678'; +GO + +-- ALTER LOGIN does not exist +ALTER LOGIN NonExist_Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters WITH PASSWORD = 'test123'; +GO + +-- DROP LOGIN does not exist +DROP LOGIN NonExist_Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- cleanup login +DROP LOGIN Very_Long_Login_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test; +GO + +-- =========================================== +-- USER/ROLE errors +-- =========================================== + +-- CREATE USER already exists +CREATE USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO +CREATE USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO + +-- DROP USER does not exist +DROP USER NonExist_Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- CREATE ROLE already exists +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO + +-- DROP ROLE does not exist +DROP ROLE NonExist_Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- cleanup user/role +DROP USER Very_Long_User_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestUser; +GO +DROP ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_TestRole; +GO + +-- =========================================== +-- CONSTRAINT errors +-- =========================================== + +-- Duplicate key constraint name +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ADD CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE (id); +GO +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ADD CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE (col1); +GO +-- =========================================== +-- TYPE errors +-- =========================================== + +CREATE TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +CREATE TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +DROP TYPE NonExist_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- SCHEMA errors +-- =========================================== + +CREATE SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +CREATE SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +DROP SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP SCHEMA NonExist_Very_Long_Schema_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- TRIGGER errors +-- =========================================== + +DROP TRIGGER NonExist_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- Column reference errors in DML +-- =========================================== + +-- SELECT non-existent column +SELECT nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars +FROM ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- CONSTRAINT violation errors (runtime) +-- =========================================== + +-- CHECK constraint violation +CREATE TABLE ErrTest_Constraint_Table (c1 INT, c2 INT, CONSTRAINT ErrTest_Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three CHECK (c2 > c1)); +GO +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(5, 2); +GO + +-- UNIQUE constraint violation +ALTER TABLE ErrTest_Constraint_Table ADD CONSTRAINT ErrTest_Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three UNIQUE (c1); +GO +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(1, 5); +GO +INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(1, 5); +GO + +DROP TABLE ErrTest_Constraint_Table; +GO + +-- =========================================== +-- INDEX-specific errors +-- =========================================== + +-- CREATE INDEX on non-existent table +CREATE INDEX SomeIdx_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +GO + +-- CREATE INDEX on non-existent column +CREATE INDEX SomeIdx_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars); +GO + +-- =========================================== +-- Errors inside stored procedures +-- =========================================== + +-- Table already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Table AS +BEGIN + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +END; +GO +EXEC ErrTest_Proc_Table; +GO +DROP TABLE IF EXISTS ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_Table; +GO + +-- Drop non-existent table inside proc +CREATE PROCEDURE ErrTest_Proc_Drop AS +BEGIN + DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +END; +GO +EXEC ErrTest_Proc_Drop; +GO +DROP PROCEDURE ErrTest_Proc_Drop; +GO + +-- Column not found inside proc +CREATE PROCEDURE ErrTest_Proc_Col AS +BEGIN + SELECT nonexist_very_long_column_name_that_exceeds_postgresql_limit_of_sixty_three_chars FROM ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +END; +GO +EXEC ErrTest_Proc_Col; +GO +DROP PROCEDURE ErrTest_Proc_Col; +GO + +-- Constraint violation inside proc +CREATE PROCEDURE ErrTest_Proc_Constraint AS +BEGIN + INSERT INTO ErrTest_Constraint_Table(c1, c2) VALUES(10, 1); +END; +GO +CREATE TABLE ErrTest_Constraint_Table2 (c1 INT, c2 INT, CONSTRAINT ErrProc_Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three CHECK (c2 > c1)); +GO +CREATE PROCEDURE ErrTest_Proc_Constraint2 AS +BEGIN + INSERT INTO ErrTest_Constraint_Table2(c1, c2) VALUES(10, 1); +END; +GO +EXEC ErrTest_Proc_Constraint2; +GO +DROP PROCEDURE ErrTest_Proc_Constraint2; +GO +DROP TABLE ErrTest_Constraint_Table2; +GO + +-- Index already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Index AS +BEGIN + CREATE INDEX ErrProc_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id); +END; +GO +EXEC ErrTest_Proc_Index; +GO +EXEC ErrTest_Proc_Index; +GO +DROP INDEX IF EXISTS ErrProc_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_Index; +GO + +-- Error in nested proc +CREATE PROCEDURE ErrTest_Inner_Proc AS +BEGIN + CREATE TABLE ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +END; +GO +CREATE PROCEDURE ErrTest_Outer_Proc AS +BEGIN + EXEC ErrTest_Inner_Proc; + EXEC ErrTest_Inner_Proc; +END; +GO +EXEC ErrTest_Outer_Proc; +GO +DROP TABLE IF EXISTS ErrProc_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Outer_Proc; +GO +DROP PROCEDURE ErrTest_Inner_Proc; +GO + +-- Function already exists inside proc (via EXEC) +CREATE PROCEDURE ErrTest_Proc_Func AS +BEGIN + EXEC('CREATE FUNCTION ErrProc_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars(@a INT) RETURNS INT AS BEGIN RETURN @a END'); +END; +GO +EXEC ErrTest_Proc_Func; +GO +EXEC ErrTest_Proc_Func; +GO +DROP FUNCTION IF EXISTS ErrProc_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Func; +GO + +-- View already exists inside proc (via EXEC) +CREATE PROCEDURE ErrTest_Proc_View AS +BEGIN + EXEC('CREATE VIEW ErrProc_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters AS SELECT 1 AS a'); +END; +GO +EXEC ErrTest_Proc_View; +GO +EXEC ErrTest_Proc_View; +GO +DROP VIEW IF EXISTS ErrProc_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP PROCEDURE ErrTest_Proc_View; +GO + +-- Sequence already exists inside proc +CREATE PROCEDURE ErrTest_Proc_Seq AS +BEGIN + CREATE SEQUENCE ErrProc_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +END; +GO +EXEC ErrTest_Proc_Seq; +GO +EXEC ErrTest_Proc_Seq; +GO +DROP SEQUENCE IF EXISTS ErrProc_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Seq; +GO + +-- DML on non-existent table inside proc +CREATE PROCEDURE ErrTest_Proc_DML AS +BEGIN + INSERT INTO NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +END; +GO +EXEC ErrTest_Proc_DML; +GO +DROP PROCEDURE ErrTest_Proc_DML; +GO + +-- =========================================== + +-- =========================================== +-- Temp table errors +-- =========================================== + +-- Long temp table name +CREATE TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO + +-- Duplicate temp table - should show original name in error +CREATE TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (id INT); +GO + +-- Insert into temp table to verify it works +INSERT INTO #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters VALUES (1); +GO + +-- Drop non-existent temp table - should show original name in error +DROP TABLE #NonExist_Very_Long_Temp_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Multibyte temp table +CREATE TABLE #テンプ_非常に長い一時テーブル名前がPostgreSQLの制限を超える場合のテスト (id INT); +GO +CREATE TABLE #テンプ_非常に長い一時テーブル名前がPostgreSQLの制限を超える場合のテスト (id INT); +GO + +-- Index on temp table with long name +-- TODO: Enable once BABEL-6433 (temp table name truncation) is merged +-- CREATE INDEX IX_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters(id); +-- GO +-- Duplicate index on temp table - should show original name in error +-- CREATE INDEX IX_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters(id); +-- GO +-- Drop non-existent index on temp table +-- DROP INDEX NonExist_Very_Long_Index_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three +-- ON #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +-- GO + +-- Constraint on temp table with long name +-- TODO: Enable once BABEL-6433 (temp table name truncation) is merged +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- ADD CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three CHECK (id > 0); +-- GO +-- Duplicate constraint on temp table - should show original name in error +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- ADD CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three CHECK (id > 0); +-- GO +-- Drop constraint with long name +-- ALTER TABLE #Temp_Very_Long_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +-- DROP CONSTRAINT CK_Very_Long_Constraint_Name_On_Temp_Table_That_Exceeds_PostgreSQL_Limit_Sixty_Three; +-- GO + +-- =========================================== +-- LOGIN with invalid default database +-- =========================================== + +CREATE LOGIN babel5975_test_long_login_name_that_exceeds_postgresql_limit_of_sixty_three_chars WITH PASSWORD = '12345678', DEFAULT_DATABASE = nonexistent_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars; +GO + +-- =========================================== +-- Table variable errors +-- =========================================== + +-- First batch declares (populates cache), second batch references (triggers error with full name) +DECLARE @Very_Long_Table_Variable_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters TABLE (id INT); +GO +SELECT * FROM @Very_Long_Table_Variable_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +-- =========================================== +-- Cross-session constraint name display +-- =========================================== + +-- Unique constraint violation shows full constraint name (cross-session) +CREATE TABLE ErrTest_Constraint_Cross (id INT, CONSTRAINT uq_Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars UNIQUE(id)); +GO +INSERT INTO ErrTest_Constraint_Cross VALUES (1); +GO +INSERT INTO ErrTest_Constraint_Cross VALUES (1); +GO +DROP TABLE ErrTest_Constraint_Cross; +GO + +-- PRIMARY KEY constraint violation +CREATE TABLE ErrTest_PK_Table (id INT, CONSTRAINT Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three PRIMARY KEY (id)); +GO +INSERT INTO ErrTest_PK_Table VALUES (1); +GO +INSERT INTO ErrTest_PK_Table VALUES (1); +GO +DROP TABLE ErrTest_PK_Table; +GO + +-- FOREIGN KEY constraint violation +CREATE TABLE ErrTest_FK_Parent (id INT PRIMARY KEY); +GO +CREATE TABLE ErrTest_FK_Child (id INT, parent_id INT, CONSTRAINT Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three FOREIGN KEY (parent_id) REFERENCES ErrTest_FK_Parent(id)); +GO +INSERT INTO ErrTest_FK_Child VALUES (1, 999); +GO +DROP TABLE ErrTest_FK_Child; +GO +DROP TABLE ErrTest_FK_Parent; +GO + + +-- =========================================== +-- Parameter name display in error messages +-- =========================================== + +-- Function with long parameter name - missing required param shows full name +CREATE FUNCTION ErrTest_Func_Long_Param(@Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT) RETURNS INT AS BEGIN RETURN @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO +SELECT dbo.ErrTest_Func_Long_Param(); +GO + +-- Procedure with long parameter name - missing required param shows full name +CREATE PROCEDURE ErrTest_Proc_Long_Param @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT AS SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +EXEC ErrTest_Proc_Long_Param; +GO + +-- Procedure with long TVP parameter name - missing required param shows full name +CREATE TYPE ErrTest_TVP_Type AS TABLE (id INT); +GO +CREATE PROCEDURE ErrTest_Proc_Long_TVP_Param @Very_Long_TVP_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters ErrTest_TVP_Type READONLY AS SELECT * FROM @Very_Long_TVP_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +EXEC ErrTest_Proc_Long_TVP_Param; +GO + +DROP FUNCTION ErrTest_Func_Long_Param; +GO +DROP PROCEDURE ErrTest_Proc_Long_Param; +GO +DROP PROCEDURE ErrTest_Proc_Long_TVP_Param; +GO +DROP TYPE ErrTest_TVP_Type; +GO + +-- CLEANUP +-- =========================================== +DROP INDEX ErrTest_Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +ALTER TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +DROP CONSTRAINT ErrTest_Very_Long_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP VIEW ErrTest_Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP TABLE ErrTest_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP SEQUENCE ErrTest_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP FUNCTION ErrTest_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP PROCEDURE ErrTest_Proc_Constraint; +GO +DROP TYPE ErrTest_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO diff --git a/test/JDBC/input/long-identifiers-vu-cleanup.mix b/test/JDBC/input/long-identifiers-vu-cleanup.mix new file mode 100644 index 00000000000..27399125fe8 --- /dev/null +++ b/test/JDBC/input/long-identifiers-vu-cleanup.mix @@ -0,0 +1,34 @@ +-- Long identifiers vu-cleanup: Drop all objects + +DROP TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TRIGGER MixedCase_Trig_VU; +GO +DROP INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TABLE babel5975_vu_fk_child; +GO +DROP TABLE babel5975_vu_fk_parent; +GO +DROP TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +DROP PROCEDURE Mixed_Case_Proc_VU; +GO +DROP FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DROP TABLE [テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト_VU]; +GO +DROP TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO +DROP ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO diff --git a/test/JDBC/input/long-identifiers-vu-prepare.mix b/test/JDBC/input/long-identifiers-vu-prepare.mix new file mode 100644 index 00000000000..21424207345 --- /dev/null +++ b/test/JDBC/input/long-identifiers-vu-prepare.mix @@ -0,0 +1,79 @@ +-- Long identifiers vu-prepare: Create all types of objects with long names + +-- Table with long name +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU ( + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 INT NOT NULL, + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 VARCHAR(50), + CONSTRAINT Very_Long_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU PRIMARY KEY (Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1), + CONSTRAINT Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_VU CHECK (Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 > 0) +); +GO + +-- Index with long name +CREATE INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU(Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2); +GO + +-- Foreign key parent and child +CREATE TABLE babel5975_vu_fk_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_vu_fk_child (id INT, + CONSTRAINT Very_Long_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU FOREIGN KEY (id) REFERENCES babel5975_vu_fk_parent(id)); +GO + +-- View with long name +CREATE VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU AS +SELECT Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 AS id FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- Procedure with long name and long parameter +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU END; +GO +-- Procedure with mixed case (short name) +CREATE PROCEDURE Mixed_Case_Proc_VU +AS SELECT 1; +GO + + +-- Function with long name +CREATE FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU(@a INT) +RETURNS INT AS BEGIN RETURN @a END; +GO + +-- Trigger with long name +CREATE TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- Short mixed-case trigger +CREATE TRIGGER MixedCase_Trig_VU +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- Sequence with long name +CREATE SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU AS INT START WITH 1; +GO + +-- Type with long name +CREATE TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU FROM INT; +GO + +-- Database with long name +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- Multibyte table +CREATE TABLE [テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト_VU] (id INT, val NVARCHAR(50)); +GO + +-- Mixed case table +CREATE TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU (id INT); +GO + +-- Role with long name +CREATE ROLE Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO diff --git a/test/JDBC/input/long-identifiers-vu-verify.mix b/test/JDBC/input/long-identifiers-vu-verify.mix new file mode 100644 index 00000000000..03f67c182ed --- /dev/null +++ b/test/JDBC/input/long-identifiers-vu-verify.mix @@ -0,0 +1,189 @@ +-- Long identifiers vu-verify: Verify all system objects show original names + +-- sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%VU'; +GO + +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%VU'; +GO + +-- Case-insensitive lookup +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_chars_vu'; +GO + +-- sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO + +-- sys.all_columns +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU') ORDER BY column_id; +GO + +-- sys.indexes +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%VU'; +GO + +-- sys.key_constraints +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_PK%VU'; +GO + +-- sys.check_constraints +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%VU'; +GO + +-- sys.foreign_keys +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_FK%VU'; +GO + +-- sys.views +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View%VU'; +GO + +-- sys.procedures +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%VU'; +GO + +-- sys.triggers +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%VU'; +GO + +-- Trigger rename preserves orig_name +EXEC sp_rename 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very_Long_Trigger_Renamed%'; +GO +-- Rename back +EXEC sp_rename 'Very_Long_Trigger_Renamed_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU', 'OBJECT'; +GO + +-- Short mixed-case trigger rename +EXEC sp_rename 'MixedCase_Trig_VU', 'MixedCase_Trig_VU_Renamed', 'OBJECT'; +GO +SELECT name FROM sys.triggers WHERE name LIKE '%MixedCase_Trig_VU%'; +GO +EXEC sp_rename 'MixedCase_Trig_VU_Renamed', 'MixedCase_Trig_VU', 'OBJECT'; +GO + +-- sys.types +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%VU'; +GO + +-- sys.objects (sequence) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Sequence%VU'; +GO + +-- sys.all_objects (constraints) +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_PK%VU' OR name LIKE 'Very_Long_Check%VU' OR name LIKE 'Very_Long_FK%VU'; +GO + +-- sys.databases +SELECT name FROM sys.databases WHERE name LIKE 'Very_Long_Database%VU'; +GO + +-- sys.sysdatabases +SELECT name FROM sys.sysdatabases WHERE name LIKE 'Very_Long_Database%VU'; +GO + +-- DB_NAME() in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT DB_NAME(); +GO + +-- sys.database_principals in long-named database +SELECT name FROM sys.database_principals WHERE name = 'dbo'; +GO +USE master; +GO + +-- sp_helpdb with long name +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO + +-- Multibyte table +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%VU'; +GO + +-- information_schema.table_constraints +SELECT CONSTRAINT_NAME FROM information_schema.table_constraints WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO + +-- information_schema.key_column_usage +SELECT CONSTRAINT_NAME, COLUMN_NAME FROM information_schema.key_column_usage WHERE CONSTRAINT_NAME LIKE 'Very_Long_PK%VU'; +GO + +-- Error messages show original names +-- Duplicate table +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU (id INT); +GO + +-- Duplicate procedure +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU AS SELECT 1; +GO + +-- Drop non-existent table +DROP TABLE NonExist_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- Drop non-existent function +DROP FUNCTION NonExist_Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU; +GO + +-- sys.all_views +SELECT name FROM sys.all_views WHERE name LIKE 'Very_Long_View%VU'; +GO + +-- sys.database_role_members +ALTER ROLE db_datareader ADD MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +SELECT COUNT(*) FROM sys.database_role_members m JOIN sys.database_principals p ON m.member_principal_id = p.principal_id WHERE p.name LIKE 'Very_Long_Role%VU'; +GO + +ALTER ROLE db_datareader DROP MEMBER Very_Long_Role_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO + +-- sp_tables +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO + +-- sp_fkeys +EXEC sp_fkeys @pktable_name = 'babel5975_vu_fk_parent'; +GO + +-- sp_stored_procedures +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_VU'; +GO +GO +-- sp_stored_procedures with mixed case short name +EXEC sp_stored_procedures @sp_name = 'Mixed_Case_Proc_VU'; +GO + +-- sp_special_columns +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU'; +GO + +-- information_schema.columns +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%VU' ORDER BY ORDINAL_POSITION; +GO + +-- sys.database_principals shows role with full name +SELECT name, type_desc FROM sys.database_principals WHERE name LIKE 'Very_Long_Role%VU'; +GO + +-- sp_helpuser/helprole/helprolemember in long-named database +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_VU; +GO +DECLARE @t1 TABLE(userName sys.SYSNAME, roleName sys.SYSNAME, loginName sys.SYSNAME NULL, defdb sys.SYSNAME NULL, defschema sys.SYSNAME, userid INT, sid sys.VARBINARY(85)); +INSERT INTO @t1 EXEC sp_helpuser; +SELECT userName, roleName, loginName, defdb, defschema FROM @t1 ORDER BY userName; +GO +DECLARE @t2 TABLE(RoleName sys.SYSNAME, RoleId INT, IsAppRole INT); +INSERT INTO @t2 EXEC sp_helprole; +SELECT RoleName, IsAppRole FROM @t2 ORDER BY RoleName; +GO +DECLARE @t3 TABLE(DbRole sys.SYSNAME, MemberName sys.SYSNAME, MemberSID sys.VARBINARY(85)); +INSERT INTO @t3 EXEC sp_helprolemember; +SELECT DbRole, MemberName FROM @t3 ORDER BY DbRole, MemberName; +GO +USE master; +GO diff --git a/test/JDBC/input/long-identifiers.mix b/test/JDBC/input/long-identifiers.mix new file mode 100644 index 00000000000..5290df76f73 --- /dev/null +++ b/test/JDBC/input/long-identifiers.mix @@ -0,0 +1,1020 @@ +-- Long Identifier Storage Tests +-- Tests all DDL paths that store original names for identifiers > 63 chars + +-- tsql +-- =========================================== +-- CREATION: All object types with long names +-- =========================================== + +-- 1. CREATE TABLE with long name +CREATE TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id INT NOT NULL, name NVARCHAR(100)); +GO + +-- 2. CREATE TABLE with long column names +CREATE TABLE babel5975_col_test ( + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col1 INT, + Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2 NVARCHAR(50) +); +GO + +-- 3. CREATE TABLE with long constraint name (PK) +CREATE TABLE babel5975_pk_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Primary_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three PRIMARY KEY (id) +); +GO + +-- 4. CREATE TABLE with long constraint name (UNIQUE) +CREATE TABLE babel5975_uq_test ( + val INT, + CONSTRAINT Very_Long_Unique_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val) +); +GO + +-- 5. CREATE TABLE with long constraint name (CHECK) +CREATE TABLE babel5975_ck_test ( + val INT, + CONSTRAINT Very_Long_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters CHECK (val > 0) +); +GO + +-- 6. CREATE VIEW with long name +CREATE VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 7. CREATE INDEX with long name +CREATE INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing (id); +GO + +-- 8. CREATE SEQUENCE with long name +CREATE SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +AS INT START WITH 1 INCREMENT BY 1; +GO + +-- 9. CREATE FUNCTION with long name +CREATE FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing(@a INT) +RETURNS INT AS BEGIN RETURN @a + 1 END; +GO + +-- 10. CREATE PROCEDURE with long name and long parameter +CREATE PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 11. CREATE TRIGGER with long name +CREATE TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing +FOR INSERT AS BEGIN SELECT 1 END; +GO + +-- 12. CREATE TYPE with long name +CREATE TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing FROM INT; +GO + +-- 13. SELECT INTO with long table name +SELECT 1 AS col1 INTO Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + + +-- 14. ALTER TABLE ADD COLUMN with long name +ALTER TABLE babel5975_col_test ADD Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT; +GO + +-- 14b. SELECT INTO preserves long column names +SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INTO babel5975_select_into_col_test FROM babel5975_col_test; +GO + +-- 15. CREATE FUNCTION with multiple long parameters +CREATE FUNCTION babel5975_multi_param_func( + @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT, + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) +RETURNS INT AS BEGIN RETURN @Very_Long_First_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + @Very_Long_Second_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- 16. SELECT with long alias - verify full name in result metadata +SELECT name FROM sys.sp_describe_first_result_set_internal(N'SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing', NULL, 0); +GO + +-- 17. CREATE DATABASE with long name +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +-- Verify database original name stored in babelfish_sysdatabases.orig_name +SELECT orig_name FROM sys.babelfish_sysdatabases WHERE orig_name LIKE 'Very_Long_Database%'; +GO + +-- 18. sp_rename TABLE with long name +EXEC sp_rename 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 19. sp_rename COLUMN with long name +EXEC sp_rename 'babel5975_col_test.Very_Long_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Col2', + 'Very_Long_Renamed_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'COLUMN'; +GO + +-- Verify renamed table shows new full name in sys.tables +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Renamed_Table%'; +GO + +-- Verify renamed column shows new full name in sys.columns +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE 'Very_Long_Renamed_Column%'; +GO + +-- 20. sp_rename FUNCTION with long name +EXEC sp_rename 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- 21. sp_rename PROCEDURE with long name +EXEC sp_rename 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', + 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO + +-- Rename back for cleanup +EXEC sp_rename 'Very_Long_Renamed_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO +EXEC sp_rename 'Very_Long_Renamed_Proc_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', + 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing', 'OBJECT'; +GO + +-- 17. CREATE DATABASE with long name (uses babelfish_sysdatabases) +-- Skipped: database names limited to 128 but stored separately + +-- 18. CREATE SCHEMA with long name (uses babelfish_namespace_ext) +-- Skipped: schema names limited differently + +-- 19. CREATE LOGIN with long name (uses babelfish_authid_login_ext) +-- Skipped: requires sysadmin + +-- =========================================== +-- ADDITIONAL SCENARIOS +-- =========================================== + +-- 22. Long name with bracket delimiters - table +CREATE TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ( + [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] INT, + CONSTRAINT [Very Long Constraint Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Chars] CHECK ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] > 0) +); +GO + +-- 22b. Bracket delimiters - view +CREATE VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +AS SELECT [Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] FROM [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 22c. Bracket delimiters - function +CREATE FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters](@a INT) +RETURNS INT AS BEGIN RETURN @a END; +GO + +-- 22d. Bracket delimiters - index +CREATE INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] +ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ([Very Long Column Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]); +GO + +-- 22e. Bracket delimiters - sequence +CREATE SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] AS INT START WITH 1; +GO + +-- 22f. Bracket delimiters - alias +SELECT 1 AS [Very Long Alias Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- Verify bracket identifiers stored in babelfish_function_ext +SELECT orig_name FROM sys.babelfish_function_ext WHERE orig_name LIKE 'Very Long Function%'; +GO + +-- Verify bracket identifiers stored in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very Long%' ORDER BY original_identifier_name; +GO + +-- Cleanup bracket objects +DROP VIEW [Very Long View Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP FUNCTION [Very Long Function Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP INDEX [Very Long Index Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters] ON [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP TABLE [Very Long Table Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO +DROP SEQUENCE [Very Long Sequence Name With Spaces That Exceeds PostgreSQL Limit Of Sixty Three Characters]; +GO + +-- 24. Long name with double-quote delimiters +SET QUOTED_IDENTIFIER ON; +GO +CREATE TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test" (id INT); +GO +DROP TABLE "Very_Long_Quoted_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Test"; +GO + +-- 25. CREATE TABLE with long FK constraint name +CREATE TABLE babel5975_fk_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_child ( + id INT, + parent_id INT, + CONSTRAINT Very_Long_Foreign_Key_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three FOREIGN KEY (parent_id) REFERENCES babel5975_fk_parent(id) +); +GO + +-- 27. CREATE OR ALTER VIEW with long name +CREATE OR ALTER VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars +AS SELECT id, name FROM Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO + +-- 28. ALTER PROCEDURE with long name +ALTER PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing + @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +AS BEGIN SELECT @Very_Long_Parameter_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters + 1 END; +GO + +-- 28. Multiple long aliases in one SELECT +SELECT 1 AS Very_Long_First_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing, + 2 AS Very_Long_Second_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +-- 29. View column display tests +-- 29a. SELECT * FROM view with long alias shows full name +CREATE VIEW babel5975_view_alias AS SELECT 1 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO + +-- 29b. sys.columns shows full view column name +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_alias'); +GO + +-- 29c. CREATE OR ALTER VIEW preserves long alias +CREATE OR ALTER VIEW babel5975_view_alias AS SELECT 2 AS Very_Long_View_Column_Alias_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT * FROM babel5975_view_alias; +GO + +-- 29d. View selecting long column from table +CREATE VIEW babel5975_view_from_tbl AS SELECT Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM babel5975_col_test; +GO +SELECT * FROM babel5975_view_from_tbl; +GO +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_view_from_tbl'); +GO + +DROP VIEW babel5975_view_alias; +GO +DROP VIEW IF EXISTS babel5975_view_from_tbl; +GO + +-- 30. Long name with multibyte characters (Japanese) +CREATE TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ (id INT); +GO +DROP TABLE ああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああああ; +GO + +-- 30. CREATE TABLE with long DEFAULT constraint name +CREATE TABLE babel5975_df_test ( + val INT CONSTRAINT Very_Long_Default_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars DEFAULT 0 +); +GO + +-- =========================================== +-- DROP CLEANUP TESTS: Verify entries are removed +-- =========================================== + +-- Create objects to test drop cleanup +CREATE TABLE babel5975_drop_test ( + id INT NOT NULL, + CONSTRAINT Very_Long_Drop_Test_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars PRIMARY KEY (id) +); +GO +CREATE SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +CREATE TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +CREATE FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters( + @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters INT +) RETURNS INT AS BEGIN RETURN @Very_Long_Drop_Test_Param_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters END; +GO + +-- Verify entries exist before drop +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test%'; +GO + +-- Drop and verify entries are removed +DROP TABLE babel5975_drop_test; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Constraint%'; +GO + +DROP SEQUENCE Very_Long_Drop_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Sequence%'; +GO + +DROP TYPE Very_Long_Drop_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Type%'; +GO + +DROP FUNCTION Very_Long_Drop_Test_Func_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Drop_Test_Param%'; +GO + +-- =========================================== +-- VERIFICATION: System views show original names +-- =========================================== + +-- sys.tables shows full original name +SELECT name FROM sys.tables WHERE name LIKE 'Very_Long_Table_Name%'; +GO + +-- sys.views shows full original name +SELECT name FROM sys.views WHERE name LIKE 'Very_Long_View_Name%'; +GO + +-- sys.columns shows full original column names +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_col_test') ORDER BY column_id; +GO + + +-- sys.all_columns shows full original column names +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_col_test') AND name LIKE '%Very_Long%' ORDER BY column_id; +GO + +-- sys.procedures shows full original name +SELECT name FROM sys.procedures WHERE name LIKE 'Very_Long_Procedure%'; +GO + +-- sys.types shows full original type name +SELECT name FROM sys.types WHERE name LIKE 'Very_Long_Type%'; +GO + +-- sys.indexes shows full original index name +SELECT name FROM sys.indexes WHERE name LIKE 'Very_Long_Index%'; +GO + +-- sys.indexes LIKE search with partial name works +SELECT name FROM sys.indexes WHERE name LIKE '%Exceeds_PostgreSQL_Limit%'; +GO + +-- sys.objects shows full original names (inherits from above) +SELECT name, type_desc FROM sys.objects WHERE name LIKE 'Very_Long_Table_Name%' OR name LIKE 'Very_Long_Function%'; +GO + +-- sys.key_constraints shows full original constraint name +SELECT name FROM sys.key_constraints WHERE name LIKE 'Very_Long_Primary%'; +GO + +-- sys.check_constraints shows full original constraint name +SELECT name FROM sys.check_constraints WHERE name LIKE 'Very_Long_Check%'; +GO + +-- sys.foreign_keys shows full original constraint name +SELECT name FROM sys.foreign_keys WHERE name LIKE 'Very_Long_Foreign%'; +GO + +-- sys.all_objects shows full original names for constraints +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Primary%' OR name LIKE 'Very_Long_Check%' OR name LIKE 'Very_Long_Foreign%'; +GO + +-- sys.all_objects shows full original names for sequences +SELECT name, type_desc FROM sys.all_objects WHERE name LIKE 'Very_Long_Sequence%'; +GO + +-- information_schema.table_constraints shows original constraint names +SELECT CONSTRAINT_NAME, TABLE_NAME FROM information_schema.table_constraints +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%' OR CONSTRAINT_NAME LIKE 'Very_Long_Unique%'; +GO + +-- information_schema.key_column_usage shows original names +SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME FROM information_schema.key_column_usage +WHERE CONSTRAINT_NAME LIKE 'Very_Long_Primary%'; +GO + +-- sp_statistics shows original index/table names +EXEC sp_statistics @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO + +-- =========================================== +-- VERIFICATION: Check actual storage locations +-- =========================================== + +-- Verify functions/procedures/triggers in babelfish_function_ext.orig_name +SELECT orig_name FROM sys.babelfish_function_ext +WHERE orig_name LIKE 'Very_Long_Function%' + OR orig_name LIKE 'Very_Long_Procedure%' + OR orig_name LIKE 'Very_Long_Trigger%' +ORDER BY orig_name; +GO + +-- Verify sequences in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1259 +ORDER BY original_identifier_name; +GO + +-- Verify types in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1247 +ORDER BY original_identifier_name; +GO + +-- Verify constraints in babelfish_identifier_mapping +SELECT original_identifier_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 2606 +ORDER BY original_identifier_name; +GO + +-- Verify parameters in babelfish_identifier_mapping +SELECT original_identifier_name, parent_name FROM sys.babelfish_identifier_mapping +WHERE pg_catalog_type = 1255 +ORDER BY original_identifier_name; +GO + +-- psql +-- Verify table original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_table_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO + +-- psql +-- Verify view original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_view_name%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO + +-- psql +-- Verify index original name in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE '%very_long_index%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO + +-- psql +-- Verify SELECT INTO table in pg_class.reloptions +SELECT opt FROM (SELECT unnest(reloptions) AS opt FROM pg_class WHERE relname LIKE 'very_long_select_into%' AND reloptions::text LIKE '%bbf_original_rel_name%') t WHERE opt LIKE 'bbf_original_rel_name%'; +GO + + +-- tsql +-- Verify SELECT INTO column original name preserved +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_select_into_col_test') AND name LIKE '%Very_Long%'; +GO + +-- Verify sp_tables works with long table names +EXEC sp_tables @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO + +-- Verify sp_columns works with long table names +EXEC sp_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO + +-- Verify OBJECT_ID works with long names +SELECT CASE WHEN OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END; +GO + +-- Verify OBJECT_NAME returns full original name +SELECT OBJECT_NAME(OBJECT_ID('Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing')); +GO + +-- Verify sp_stored_procedures works with long procedure name +EXEC sp_stored_procedures @sp_name = 'Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO + +-- Verify DB_NAME() returns case-preserved name +SELECT DB_NAME(); +GO + +-- sys.databases shows case-preserved database name +SELECT name FROM sys.databases WHERE name LIKE '%Long_Database%'; +GO + +USE master; +GO + +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_Testing; +GO + +CREATE DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- sys.sysdatabases shows case-preserved name +SELECT name FROM sys.sysdatabases WHERE name LIKE '%Long_DB_Name%'; +GO + +-- DB_NAME() comparison with sys.sysdatabases works (CI collation) +SELECT name FROM sys.sysdatabases WHERE name = DB_NAME() collate database_default; +GO + +-- sp_tables works in long-named database +EXEC sp_tables; +GO + +-- information_schema.tables works in long-named database +SELECT TABLE_CATALOG FROM information_schema.tables WHERE TABLE_CATALOG LIKE '%Long_DB%'; +GO + +USE master; +GO +DROP DATABASE Test_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Verify information_schema.tables returns full table name +SELECT TABLE_NAME FROM information_schema.tables WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%'; +GO + +-- Verify information_schema.columns returns full column name +SELECT COLUMN_NAME FROM information_schema.columns WHERE TABLE_NAME LIKE 'Very_Long_Table_Name%' AND COLUMN_NAME LIKE '%id%'; +GO + +-- sys.triggers shows full trigger name +SELECT name FROM sys.triggers WHERE name LIKE 'Very_Long_Trigger%'; +GO + + + +-- sp_fkeys with long table name +EXEC sp_fkeys @pktable_name = 'babel5975_fk_parent'; +GO + +-- sp_special_columns with long table name +EXEC sp_special_columns @table_name = 'Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing'; +GO + + +-- psql +-- Verify column original names in pg_attribute.attoptions +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attoptions IS NOT NULL AND attoptions::text LIKE '%Very_Long%' +ORDER BY attnum; +GO + +-- psql +-- Verify ALTER TABLE ADD column +SELECT attname, attoptions FROM pg_attribute +WHERE attrelid = (SELECT oid FROM pg_class WHERE relname LIKE 'babel5975_col_test%' LIMIT 1) + AND attname LIKE 'very_long_added%'; +GO + +-- tsql + +-- Section 7: DML Result Set Headers +-- =========================================== + +-- Long alias in SELECT +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_In_Select; +GO + +-- Long alias in UNION (first SELECT preserved) +SELECT 1 AS Very_Long_Union_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +UNION ALL +SELECT 2 +ORDER BY 1; +GO + +-- =========================================== +-- Section 8: Case Sensitivity +-- =========================================== + +-- Mixed case preserved +CREATE TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters (Id_MiXeD INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MiXeD_CaSe%'; +GO +DROP TABLE MiXeD_CaSe_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- Section 12: Edge Cases +-- =========================================== + +-- Exactly 63 bytes - no catalog entry needed +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Exactly 64 bytes - catalog entry created +CREATE TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%'; +GO +DROP TABLE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; +GO + +-- Quoted identifiers with special characters +CREATE TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!] (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE '%Quoted%'; +GO +DROP TABLE [Very Long "Quoted" Table Name That Exceeds PostgreSQL Limit Of Sixty Three Characters!]; +GO + +-- =========================================== +-- Section 9: PG Endpoint Isolation +-- =========================================== + +-- psql +-- Verify truncated names visible in pg_class +SELECT relname FROM pg_class WHERE relname LIKE 'very_long_table_name%' LIMIT 1; +GO + +-- Verify modification of bbf_original_rel_name is blocked +ALTER TABLE master_dbo.very_long_table_name_that_exceed05596e9412ba2b6bc9c227f800f8ca5a SET (bbf_original_rel_name='hacked'); +GO + +-- Verify modification of bbf_original_name (column) is blocked +ALTER TABLE master_dbo.babel5975_col_test ALTER COLUMN very_long_column_name_that_excee78cb009a0e5eb4aba1c0243be4884f78 SET (bbf_original_name='hacked'); +GO + +-- tsql + +-- =========================================== +-- Section 6.5: Constraint-backed indexes +-- =========================================== + +CREATE TABLE babel5975_idx_constraint_test (id INT, val INT, + CONSTRAINT PK_Very_Long_Primary_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT UQ_Very_Long_Unique_Key_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters UNIQUE (val)); +GO +SELECT name, type_desc FROM sys.indexes WHERE object_id = OBJECT_ID('babel5975_idx_constraint_test') ORDER BY type; +GO +DROP TABLE babel5975_idx_constraint_test; +-- Section 7: Additional DML headers +-- =========================================== + +-- CTE with long alias +;WITH Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE AS (SELECT 1 AS val) +SELECT val FROM Very_Long_CTE_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_CTE; +GO + +-- Subquery alias preserved in result +SELECT * FROM (SELECT 1 AS Very_Long_SubQuery_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters) sub; +GO +-- =========================================== +-- Section 10: Catalog cleanup - rapid CREATE/DROP +-- =========================================== + +-- Rapid create/drop should not leave orphan entries +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +CREATE TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters (id INT); +GO +DROP TABLE babel5975_rapid_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters; +GO +-- Verify no orphan entries +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE truncated_identifier_name LIKE '%rapid_very_long%'; +GO + +-- =========================================== +-- ORDER BY with long alias +-- =========================================== +SELECT 1 AS Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing ORDER BY Very_Long_Alias_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_For_Testing; +GO + +-- =========================================== +-- CREATE INDEX on SELECT INTO column with long name +-- =========================================== +CREATE INDEX babel5975_idx_select_into ON babel5975_select_into_col_test(Very_Long_Added_Column_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters); +GO +DROP INDEX babel5975_idx_select_into ON babel5975_select_into_col_test; +GO + + + + +-- =========================================== +-- DROP cleanup verification +-- =========================================== + +-- Verify catalog entries are removed after DROP TABLE +CREATE TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters INT, CONSTRAINT ck_very_long_constraint_name_that_exceeds_postgresql_limit_of_sixty_three CHECK (col_very_long_name_that_exceeds_postgresql_limit_of_sixty_three_characters > 0)); +GO +-- Verify entries exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO +DROP TABLE babel5975_drop_test_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three; +GO +-- Verify entries removed +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE nspname LIKE '%dbo%' AND parent_name LIKE '%drop_test%'; +GO + +-- Verify catalog entries removed after DROP DATABASE +USE master; +GO +CREATE DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +USE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +CREATE TABLE babel5975_db_drop_test_table_very_long_name_that_exceeds_postgresql_limit_chars (id INT); +GO +USE master; +GO +DROP DATABASE Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- RENAME TESTS: Verify mapping is updated on sp_rename +-- =========================================== + +-- Test sequence rename +CREATE SEQUENCE Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +EXEC sp_rename 'Very_Long_Rename_Test_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars', 'Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'OBJECT'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Sequence%'; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Sequence%'; +GO +DROP SEQUENCE Very_Long_Renamed_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- Test type rename +CREATE TYPE Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +EXEC sp_rename 'Very_Long_Rename_Test_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters', 'Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New', 'USERDATATYPE'; +GO +-- Old entry should be gone, new entry should exist +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Rename_Test_Type%'; +GO +SELECT COUNT(*) FROM sys.babelfish_identifier_mapping WHERE original_identifier_name LIKE 'Very_Long_Renamed_Type%'; +GO +DROP TYPE Very_Long_Renamed_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_New; +GO + +-- =========================================== +-- CASE SENSITIVITY TESTS: Verify original casing is preserved +-- =========================================== + +-- Mixed case table name +CREATE TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC (id INT); +GO +SELECT name FROM sys.tables WHERE name LIKE 'MixedCase_Very_Long%'; +GO +SELECT name FROM sys.all_objects WHERE name LIKE 'MixedCase_Very_Long%'; +GO +-- Case-insensitive lookup should work +SELECT name FROM sys.tables WHERE name = 'mixedcase_very_long_table_name_that_exceeds_postgresql_limit_of_sixty_three_characters_abc'; +GO +DROP TABLE MixedCase_Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters_ABC; +GO + +-- Mixed case constraint +CREATE TABLE babel5975_case_test (id INT NOT NULL, + CONSTRAINT MixedCase_PK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters PRIMARY KEY (id), + CONSTRAINT MixedCase_Check_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'MixedCase_PK%'; +GO +SELECT name FROM sys.check_constraints WHERE name LIKE 'MixedCase_Check%'; +GO + +-- Foreign key with mixed case +CREATE TABLE babel5975_fk_case_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_case_child (id INT, + CONSTRAINT MixedCase_FK_Constraint_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FOREIGN KEY (id) REFERENCES babel5975_fk_case_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'MixedCase_FK%'; +GO +DROP TABLE babel5975_fk_case_child; +GO +DROP TABLE babel5975_fk_case_parent; +GO +DROP TABLE babel5975_case_test; +GO + +-- Mixed case sequence +CREATE SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE 'MixedCase_Very_Long_Seq%'; +GO +DROP SEQUENCE MixedCase_Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Mixed case type +CREATE TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'MixedCase_Very_Long_Type%'; +GO +DROP TYPE MixedCase_Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO + +-- =========================================== +-- MULTIBYTE CHARACTER TESTS: Unicode identifiers +-- =========================================== + +-- Japanese characters in table name (each char = 3 bytes, so 22+ chars exceed 63 bytes) +CREATE TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト (id INT, val NVARCHAR(50)); +GO +SELECT name FROM sys.tables WHERE name LIKE 'テスト用%'; +GO +DROP TABLE テスト用の非常に長いテーブル名前がPostgreSQLの制限を超える場合のテスト; +GO + +-- Emoji and special characters in constraint name +CREATE TABLE babel5975_emoji_test (id INT NOT NULL, + CONSTRAINT PK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥😮 PRIMARY KEY (id), + CONSTRAINT CHK_Emoji_😀😁😂🤣😃😄😅😆😉😊😋😎🙂🤗🤩🤔🤨😐😑😶🙄😏😣😥 CHECK (id > 0)); +GO +SELECT name FROM sys.key_constraints WHERE name LIKE 'PK_Emoji%'; +GO +SELECT name FROM sys.check_constraints WHERE name LIKE 'CHK_Emoji%'; +GO + +-- Foreign key with multibyte +CREATE TABLE babel5975_fk_mb_parent (id INT PRIMARY KEY); +GO +CREATE TABLE babel5975_fk_mb_child (id INT, + CONSTRAINT FK_外部キー_制約名_非常に長い名前_PostgreSQLの制限を超える場合のテスト FOREIGN KEY (id) REFERENCES babel5975_fk_mb_parent(id)); +GO +SELECT name FROM sys.foreign_keys WHERE name LIKE 'FK_外部キー%'; +GO +DROP TABLE babel5975_fk_mb_child; +GO +DROP TABLE babel5975_fk_mb_parent; +GO +DROP TABLE babel5975_emoji_test; +GO + +-- Chinese characters in sequence name +CREATE SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式 AS INT START WITH 1; +GO +SELECT name FROM sys.objects WHERE name LIKE '这是一个%'; +GO +DROP SEQUENCE 这是一个非常长的序列名称用来测试PostgreSQL对超过六十三个字符的标识符的处理方式; +GO + +-- Korean characters in column name +CREATE TABLE babel5975_korean_test ( + [아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼] INT +); +GO +SELECT name FROM sys.columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO +SELECT name FROM sys.all_columns WHERE object_id = OBJECT_ID('babel5975_korean_test') AND name LIKE '아주%'; +GO + +-- Multibyte index name +CREATE INDEX [インデックス_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子切り捨て] ON babel5975_korean_test([아주_긴_열_이름_PostgreSQL_제한을_초과하는_경우_테스트_식별자_잘림_처리_확인용_컬럼]); +GO +SELECT name FROM sys.indexes WHERE name LIKE 'インデックス%'; +GO +DROP TABLE babel5975_korean_test; +GO + +-- Mixed multibyte + ASCII in type name +CREATE TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added FROM INT; +GO +SELECT name FROM sys.types WHERE name LIKE 'タイプ_Mixed%'; +GO +DROP TYPE タイプ_Mixed_Type_Name_That_Exceeds_PostgreSQL_Limit_With_日本語_Characters_Added; +GO + +-- =========================================== +-- DATABASE SYSTEM OBJECT TESTS +-- =========================================== + +-- Mixed case long database name +CREATE DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +SELECT name FROM sys.databases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +SELECT name FROM sys.sysdatabases WHERE name LIKE 'MixedCase_Very_Long_Database%'; +GO +-- Case-insensitive lookup +SELECT name FROM sys.databases WHERE name = 'mixedcase_very_long_database_name_that_exceeds_postgresql_limit_of_sixty_three_chars'; +GO +-- Verify DB_NAME() returns original name +USE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +SELECT DB_NAME(); +GO +-- Verify sp_helpdb can find database with long name (dbid is non-deterministic, just check it works) +SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END FROM sys.babelfish_helpdb() WHERE name = 'MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars'; +GO +USE master; +GO +DROP DATABASE MixedCase_Very_Long_Database_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte database name +CREATE DATABASE データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +SELECT name FROM sys.databases WHERE name LIKE 'データベース%'; +GO +SELECT name FROM sys.sysdatabases WHERE name LIKE 'データベース%'; +GO +-- Verify user operations in multibyte-named database +USE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO +SELECT DB_NAME(); +GO +USE master; +GO +DROP DATABASE [データベース_Long_DB_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters]; +GO + +-- =========================================== +-- PROCEDURES AND TRIGGERS TESTS +-- =========================================== + +-- Mixed case procedure name +CREATE PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'MixedCase_Very_Long_Proc%'; +GO +DROP PROCEDURE MixedCase_Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO + +-- Multibyte procedure name +CREATE PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト AS SELECT 1; +GO +SELECT name FROM sys.procedures WHERE name LIKE 'プロシージャ%'; +GO +DROP PROCEDURE プロシージャ_非常に長い名前_PostgreSQLの制限を超える場合のテスト; +GO + +-- Mixed case trigger name +CREATE TABLE babel5975_trig_case_test (id INT); +GO +CREATE TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters +ON babel5975_trig_case_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'MixedCase_Very_Long_Trig%'; +GO +DROP TRIGGER MixedCase_Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Characters; +GO +DROP TABLE babel5975_trig_case_test; +GO + +-- Multibyte trigger name +CREATE TABLE babel5975_trig_mb_test (id INT); +GO +CREATE TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理 +ON babel5975_trig_mb_test FOR INSERT AS BEGIN SELECT 1 END; +GO +SELECT name FROM sys.triggers WHERE name LIKE 'トリガー%'; +GO +DROP TRIGGER トリガー_非常に長い名前_PostgreSQLの制限を超える場合のテスト_識別子処理; +GO +DROP TABLE babel5975_trig_mb_test; +GO + +-- =========================================== +-- CLEANUP +-- =========================================== +DROP TRIGGER Very_Long_Trigger_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP VIEW Very_Long_CreateOrAlter_View_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP FUNCTION Very_Long_Function_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP FUNCTION babel5975_multi_param_func; +GO +DROP PROCEDURE Very_Long_Procedure_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP INDEX Very_Long_Index_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing ON Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE Very_Long_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_col_test; +GO +DROP TABLE babel5975_pk_test; +GO +DROP TABLE babel5975_uq_test; +GO +DROP TABLE babel5975_ck_test; +GO +DROP TABLE Very_Long_Select_Into_Table_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars; +GO +DROP TABLE IF EXISTS babel5975_select_into_col_test; +GO +DROP SEQUENCE Very_Long_Sequence_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TYPE Very_Long_Type_Name_That_Exceeds_PostgreSQL_Limit_Of_Sixty_Three_Chars_For_Testing; +GO +DROP TABLE babel5975_fk_child; +GO +DROP TABLE babel5975_fk_parent; +GO +DROP TABLE babel5975_df_test; +GO diff --git a/test/JDBC/input/ownership/BABEL-login-db-long-identifiers-vu-verify.mix b/test/JDBC/input/ownership/BABEL-login-db-long-identifiers-vu-verify.mix index fb383d4e789..c3868ff666b 100644 --- a/test/JDBC/input/ownership/BABEL-login-db-long-identifiers-vu-verify.mix +++ b/test/JDBC/input/ownership/BABEL-login-db-long-identifiers-vu-verify.mix @@ -82,6 +82,8 @@ go -- terminate-tsql-conn user=jdbc_user password=12345678 database=long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst -- tsql +USE master; +GO DROP DATABASE long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst; GO @@ -125,6 +127,8 @@ go -- terminate-tsql-conn user=jdbc_user password=12345678 database=Dätàbäsé_Tëst_àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóô -- tsql +USE master; +GO DROP DATABASE Dätàbäsé_Tëst_àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿàáâãäåæçèéêëìíîïðñòóô; GO @@ -146,6 +150,8 @@ go -- terminate-tsql-conn user=long_identifier_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqr password=1234 database=long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst -- tsql +USE master; +GO DROP DATABASE long_identifier_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrst; GO @@ -195,6 +201,9 @@ go -- terminate-tsql-conn user=long_bracket_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstu password=1234 database=long_bracket_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw -- tsql +USE master; +GO + DROP DATABASE [long_bracket_database_test_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw]; GO @@ -215,5 +224,7 @@ go -- terminate-tsql-conn user=Bracketed_Mixed_Case_Login_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsT password=1234 database=Bracketed_Mixed_Case_Database_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoP -- tsql +USE master; +GO DROP DATABASE [Bracketed_Mixed_Case_Database_XyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoPqRsTuVwXyZaBcDeFgHiJkLmNoP]; GO diff --git a/test/JDBC/input/sys-sp_statistics-before-18_5-vu-cleanup.sql b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-cleanup.sql new file mode 100644 index 00000000000..75771a657f3 --- /dev/null +++ b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-cleanup.sql @@ -0,0 +1,24 @@ +use sys_sp_statistics_vu_prepare_db1 +go +drop index sys_sp_statistics_vu_prepare_i1 on sys_sp_statistics_vu_prepare_t1 +go +drop index sys_sp_statistics_vu_prepare_i2 on sys_sp_statistics_vu_prepare_t2 +go +drop index sys_sp_statistics_vu_prepare_i3 on sys_sp_statistics_vu_prepare_t3 +go +drop index sys_sp_statistics_vu_prepare_i4 on sys_sp_statistics_vu_prepare_t4 +go +drop table sys_sp_statistics_vu_prepare_t1 +go +drop table sys_sp_statistics_vu_prepare_t2 +go +drop table sys_sp_statistics_vu_prepare_t3 +go +drop table sys_sp_statistics_vu_prepare_t4 +go +drop table sys_sp_statistics_vu_prepare_t5 +go +use master +go +drop database sys_sp_statistics_vu_prepare_db1 +go \ No newline at end of file diff --git a/test/JDBC/input/sys-sp_statistics-before-18_5-vu-prepare.sql b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-prepare.sql new file mode 100644 index 00000000000..59d4177197e --- /dev/null +++ b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-prepare.sql @@ -0,0 +1,27 @@ +create database sys_sp_statistics_vu_prepare_db1 +go +use sys_sp_statistics_vu_prepare_db1 +go +create table sys_sp_statistics_vu_prepare_t1(a int) +go +create index sys_sp_statistics_vu_prepare_i1 on sys_sp_statistics_vu_prepare_t1(a) +go +create table sys_sp_statistics_vu_prepare_t2(a int, b int) +go +create index sys_sp_statistics_vu_prepare_i2 on sys_sp_statistics_vu_prepare_t2(a,b) +go +create table sys_sp_statistics_vu_prepare_t3(a int, b int, c int) +go +create index sys_sp_statistics_vu_prepare_i3 on sys_sp_statistics_vu_prepare_t3(c,a) +go +CREATE TABLE sys_sp_statistics_vu_prepare_t4( + c1 INT PRIMARY KEY + , c2 CHAR(10) NOT NULL UNIQUE + , c3 VARCHAR(20) NULL +) +create index sys_sp_statistics_vu_prepare_i4 on sys_sp_statistics_vu_prepare_t4(c2) +go + +create table sys_sp_statistics_vu_prepare_t5(a int) + +go \ No newline at end of file diff --git a/test/JDBC/input/sys-sp_statistics-before-18_5-vu-verify.sql b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-verify.sql new file mode 100644 index 00000000000..2371805ef5b --- /dev/null +++ b/test/JDBC/input/sys-sp_statistics-before-18_5-vu-verify.sql @@ -0,0 +1,39 @@ +use sys_sp_statistics_vu_prepare_db1 +go + +-- syntax error: @table_name is required +exec sp_statistics +go + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t1' +go + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t2', @table_qualifier = 'sys_sp_statistics_vu_prepare_db1' +go + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t3', @table_owner = 'dbo' +go + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t4' +go + +exec sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t4', @is_unique = 'Y' +go + +exec [sys].sp_statistics @table_name = 'sys_sp_statistics_vu_prepare_t5' +go + +-- unnamed invocation +exec sp_statistics 'sys_sp_statistics_vu_prepare_t1', 'dbo', 'sys_sp_statistics_vu_prepare_db1' +go + +-- case-insensative invocation +EXEC sp_statistics @TABLE_NAME = 'sys_sp_statistics_vu_prepare_t2', @TABLE_OWNER = 'dbo', @TABLE_QUALIFIER = 'sys_sp_statistics_vu_prepare_db1' +GO + +exec sp_statistics N'sys_sp_statistics_vu_prepare_t1',N'dbo',NULL,N'%',N'Y',N'Q' +go + +-- sp_statistics_100 is implemented as same as sp_statistics +exec sp_statistics_100 @table_name = 'sys_sp_statistics_vu_prepare_t3' +go \ No newline at end of file diff --git a/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-cleanup.sql b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-cleanup.sql new file mode 100644 index 00000000000..e35ae7f1770 --- /dev/null +++ b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-cleanup.sql @@ -0,0 +1,11 @@ +DROP DATABASE sys_sysdatabases_vu_prepare_db +GO + +DROP VIEW sys_sysdatabases_vu_prepare_view +GO + +DROP PROC sys_sysdatabases_vu_prepare_proc +GO + +DROP FUNCTION sys_sysdatabases_vu_prepare_func +GO diff --git a/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-prepare.sql b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-prepare.sql new file mode 100644 index 00000000000..2945d86fdc7 --- /dev/null +++ b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-prepare.sql @@ -0,0 +1,26 @@ +CREATE DATABASE sys_sysdatabases_vu_prepare_db +GO + +CREATE VIEW sys_sysdatabases_vu_prepare_view +AS +SELECT name, cmptlevel +FROM sys.sysdatabases +WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%' +ORDER BY name +GO + +CREATE PROC sys_sysdatabases_vu_prepare_proc +AS +SELECT name, cmptlevel +FROM sys.sysdatabases +WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%' +ORDER BY name +GO + +CREATE FUNCTION sys_sysdatabases_vu_prepare_func() +RETURNS INT +AS +BEGIN +RETURN (SELECT COUNT(*) FROM sys.sysdatabases WHERE name LIKE 'sys_sysdatabases_vu_prepare_db%') +END +GO diff --git a/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-verify.sql b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-verify.sql new file mode 100644 index 00000000000..10254191d98 --- /dev/null +++ b/test/JDBC/input/views/sys-sysdatabases-before-18_5-vu-verify.sql @@ -0,0 +1,24 @@ +SELECT * FROM sys_sysdatabases_vu_prepare_view +GO + +EXEC sys_sysdatabases_vu_prepare_proc +GO + +SELECT sys_sysdatabases_vu_prepare_func() +GO + +-- BABEL-3441: Ensure that sys.databases.compatibilty_level and sysdatabases.cmptlevel is equal +SELECT compatibility_level FROM sys.databases WHERE name = 'master' +GO + +SELECT cmptlevel FROM sys.sysdatabases WHERE name = 'master' +GO + +SELECT cmptlevel FROM master.dbo.sysdatabases WHERE name = 'master' +GO + +SELECT cmptlevel FROM msdb.dbo.sysdatabases WHERE name = 'master' +GO + +SELECT cmptlevel FROM tempdb.dbo.sysdatabases WHERE name = 'master' +GO diff --git a/test/JDBC/jdbc_schedule b/test/JDBC/jdbc_schedule index 9029e35b1ec..962df0706fc 100644 --- a/test/JDBC/jdbc_schedule +++ b/test/JDBC/jdbc_schedule @@ -784,3 +784,20 @@ ignore#!#xml_query-before-17_11-or-18_5-vu-cleanup ignore#!#babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4-vu-prepare ignore#!#babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4-vu-verify ignore#!#babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4-vu-cleanup +ignore#!#BABEL-621-before-18_5-vu-prepare +ignore#!#BABEL-621-before-18_5-vu-verify +ignore#!#BABEL-621-before-18_5-vu-cleanup +ignore#!#BABEL-5119-before-18_5-vu-prepare +ignore#!#BABEL-5119-before-18_5-vu-verify +ignore#!#BABEL-5119-before-18_5-vu-cleanup +ignore#!#alter_authorization_change_db_owner-before-18_5-vu-verify +ignore#!#BABEL-ROLE-MEMBER-before-18_5-vu-prepare +ignore#!#BABEL-ROLE-MEMBER-before-18_5-vu-verify +ignore#!#BABEL-ROLE-MEMBER-before-18_5-vu-cleanup +ignore#!#Test-sp_rename-before-18_5-vu-verify +ignore#!#sys-sysdatabases-before-18_5-vu-prepare +ignore#!#sys-sysdatabases-before-18_5-vu-verify +ignore#!#sys-sysdatabases-before-18_5-vu-cleanup +ignore#!#sys-sp_statistics-before-18_5-vu-prepare +ignore#!#sys-sp_statistics-before-18_5-vu-verify +ignore#!#sys-sp_statistics-before-18_5-vu-cleanup diff --git a/test/JDBC/sql_expected/BABEL-3640-vu-cleanup.out b/test/JDBC/sql_expected/BABEL-3640-vu-cleanup.out index 8539a995ee9..b180915ee67 100644 --- a/test/JDBC/sql_expected/BABEL-3640-vu-cleanup.out +++ b/test/JDBC/sql_expected/BABEL-3640-vu-cleanup.out @@ -21,7 +21,7 @@ go drop view t_sptables5 go -drop table MyTable1 +drop table mytable1 go use master diff --git a/test/JDBC/sql_expected/BABEL-3640-vu-prepare.out b/test/JDBC/sql_expected/BABEL-3640-vu-prepare.out index 9b31b03f79a..80915fab191 100644 --- a/test/JDBC/sql_expected/BABEL-3640-vu-prepare.out +++ b/test/JDBC/sql_expected/BABEL-3640-vu-prepare.out @@ -4,11 +4,11 @@ go use babel_3640_db; go -create table MyTable1 (a int, b int, c int) +create table mytable1 (a int, b int, c int) go create view t_sptables5 as -select a from MyTable1 +select a from mytable1 go create table trans2(id int identity(1,1) primary key, source int, target int, amount int); diff --git a/test/JDBC/upgrade/13_4/schedule b/test/JDBC/upgrade/13_4/schedule index ca678de2499..6aba3cd6704 100644 --- a/test/JDBC/upgrade/13_4/schedule +++ b/test/JDBC/upgrade/13_4/schedule @@ -154,14 +154,14 @@ sys-schemas-dep sys_server_principals_dep_for_13_x sys-sp_databases sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_tables_view sys-sp_tables_view-dep sys-suser_sid sys-suser_sname sys-syscharsets sys-syscolumns -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysobjects diff --git a/test/JDBC/upgrade/13_5/schedule b/test/JDBC/upgrade/13_5/schedule index 967e61cee20..405ed1dbaf1 100644 --- a/test/JDBC/upgrade/13_5/schedule +++ b/test/JDBC/upgrade/13_5/schedule @@ -194,7 +194,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -203,7 +203,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/13_6/schedule b/test/JDBC/upgrade/13_6/schedule index 18de54e0bf6..6d82644f9d6 100644 --- a/test/JDBC/upgrade/13_6/schedule +++ b/test/JDBC/upgrade/13_6/schedule @@ -244,7 +244,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -256,7 +256,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/13_7/schedule b/test/JDBC/upgrade/13_7/schedule index 5465804188a..e4b92247622 100644 --- a/test/JDBC/upgrade/13_7/schedule +++ b/test/JDBC/upgrade/13_7/schedule @@ -238,7 +238,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -250,7 +250,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/13_8/schedule b/test/JDBC/upgrade/13_8/schedule index 5465804188a..e4b92247622 100644 --- a/test/JDBC/upgrade/13_8/schedule +++ b/test/JDBC/upgrade/13_8/schedule @@ -238,7 +238,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -250,7 +250,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/13_9/schedule b/test/JDBC/upgrade/13_9/schedule index c28687a28d9..c46795a49db 100644 --- a/test/JDBC/upgrade/13_9/schedule +++ b/test/JDBC/upgrade/13_9/schedule @@ -240,7 +240,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -252,7 +252,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_10/schedule b/test/JDBC/upgrade/14_10/schedule index 306add7318c..1606272c8cc 100644 --- a/test/JDBC/upgrade/14_10/schedule +++ b/test/JDBC/upgrade/14_10/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -203,7 +203,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -248,7 +248,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_11/schedule b/test/JDBC/upgrade/14_11/schedule index cebc3af670a..28323bfd857 100644 --- a/test/JDBC/upgrade/14_11/schedule +++ b/test/JDBC/upgrade/14_11/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -204,7 +204,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -249,7 +249,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_12/schedule b/test/JDBC/upgrade/14_12/schedule index e13befd2c85..ac19a86270e 100644 --- a/test/JDBC/upgrade/14_12/schedule +++ b/test/JDBC/upgrade/14_12/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_13/schedule b/test/JDBC/upgrade/14_13/schedule index 2372fc13d83..b874734b4b3 100644 --- a/test/JDBC/upgrade/14_13/schedule +++ b/test/JDBC/upgrade/14_13/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_15/schedule b/test/JDBC/upgrade/14_15/schedule index 570be2978dc..b83d5d73508 100644 --- a/test/JDBC/upgrade/14_15/schedule +++ b/test/JDBC/upgrade/14_15/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_17/schedule b/test/JDBC/upgrade/14_17/schedule index 9d6537b8037..72149a6d51e 100644 --- a/test/JDBC/upgrade/14_17/schedule +++ b/test/JDBC/upgrade/14_17/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_18/schedule b/test/JDBC/upgrade/14_18/schedule index ddbc6bed495..666ab1b0121 100644 --- a/test/JDBC/upgrade/14_18/schedule +++ b/test/JDBC/upgrade/14_18/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_19/schedule b/test/JDBC/upgrade/14_19/schedule index ecb620f16d5..54d55f4f2e0 100644 --- a/test/JDBC/upgrade/14_19/schedule +++ b/test/JDBC/upgrade/14_19/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_20/schedule b/test/JDBC/upgrade/14_20/schedule index ecb620f16d5..54d55f4f2e0 100644 --- a/test/JDBC/upgrade/14_20/schedule +++ b/test/JDBC/upgrade/14_20/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_22/schedule b/test/JDBC/upgrade/14_22/schedule index d7953333ba2..70a65712fc4 100644 --- a/test/JDBC/upgrade/14_22/schedule +++ b/test/JDBC/upgrade/14_22/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_23/schedule b/test/JDBC/upgrade/14_23/schedule index d7953333ba2..70a65712fc4 100644 --- a/test/JDBC/upgrade/14_23/schedule +++ b/test/JDBC/upgrade/14_23/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -202,7 +202,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -247,7 +247,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_24/schedule b/test/JDBC/upgrade/14_24/schedule index c42cbf50e43..c1a68a8149e 100644 --- a/test/JDBC/upgrade/14_24/schedule +++ b/test/JDBC/upgrade/14_24/schedule @@ -81,7 +81,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -204,7 +204,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -249,7 +249,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/14_3/schedule b/test/JDBC/upgrade/14_3/schedule index 02d1b6ce61d..da5fe392ce8 100644 --- a/test/JDBC/upgrade/14_3/schedule +++ b/test/JDBC/upgrade/14_3/schedule @@ -122,7 +122,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -256,7 +256,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -269,7 +269,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_5/schedule b/test/JDBC/upgrade/14_5/schedule index 50ad8cf9bab..62f1129f5f9 100644 --- a/test/JDBC/upgrade/14_5/schedule +++ b/test/JDBC/upgrade/14_5/schedule @@ -121,7 +121,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SP_COLUMNS_MANAGED-dep BABEL-SP_FKEYS @@ -269,7 +269,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -282,7 +282,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_6/schedule b/test/JDBC/upgrade/14_6/schedule index e41589161b6..cb49448bde3 100644 --- a/test/JDBC/upgrade/14_6/schedule +++ b/test/JDBC/upgrade/14_6/schedule @@ -136,7 +136,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -303,7 +303,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -315,7 +315,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_7/schedule b/test/JDBC/upgrade/14_7/schedule index 43b56f30f5f..f322d4b0b52 100644 --- a/test/JDBC/upgrade/14_7/schedule +++ b/test/JDBC/upgrade/14_7/schedule @@ -149,7 +149,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -322,7 +322,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -334,7 +334,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_8/schedule b/test/JDBC/upgrade/14_8/schedule index c4dba34f96c..8676c43629d 100644 --- a/test/JDBC/upgrade/14_8/schedule +++ b/test/JDBC/upgrade/14_8/schedule @@ -147,7 +147,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -320,7 +320,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -332,7 +332,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/14_9/schedule b/test/JDBC/upgrade/14_9/schedule index ee8fd0cfed2..c7421401ad3 100644 --- a/test/JDBC/upgrade/14_9/schedule +++ b/test/JDBC/upgrade/14_9/schedule @@ -80,7 +80,7 @@ sys-original_login sys-schema-name sys-objects sys-procedures -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysobjects sys-trigger_nestlevel schema_resolution_proc @@ -203,7 +203,7 @@ BABEL-3369 BABEL-3370 BABEL-RAND BABEL-741 -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 tdscollation BABEL-EXTENDEDPROPERTY-before-15_4 BABEL-EXECUTE_AS_CALLER @@ -248,7 +248,7 @@ sys-system_sql_modules-dep sys-triggers-dep sys-proc_param_helper-dep sys-sp_pkeys -sys-sp_statistics +sys-sp_statistics-before-18_5 BABEL-APPLOCK BABEL-1438 BABEL-SP_DATATYPE_INFO diff --git a/test/JDBC/upgrade/15_1/schedule b/test/JDBC/upgrade/15_1/schedule index 3bab06534fc..de3e8fed03a 100644 --- a/test/JDBC/upgrade/15_1/schedule +++ b/test/JDBC/upgrade/15_1/schedule @@ -135,7 +135,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -301,7 +301,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -313,7 +313,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_10/schedule b/test/JDBC/upgrade/15_10/schedule index 126806f7100..67e7553d143 100644 --- a/test/JDBC/upgrade/15_10/schedule +++ b/test/JDBC/upgrade/15_10/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_12/schedule b/test/JDBC/upgrade/15_12/schedule index fe2b1fb0188..702c0d790a5 100644 --- a/test/JDBC/upgrade/15_12/schedule +++ b/test/JDBC/upgrade/15_12/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_13/schedule b/test/JDBC/upgrade/15_13/schedule index d784a5012f6..7e9b5012036 100644 --- a/test/JDBC/upgrade/15_13/schedule +++ b/test/JDBC/upgrade/15_13/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_14/schedule b/test/JDBC/upgrade/15_14/schedule index 8d73e48c25e..ffb82588be3 100644 --- a/test/JDBC/upgrade/15_14/schedule +++ b/test/JDBC/upgrade/15_14/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_15/schedule b/test/JDBC/upgrade/15_15/schedule index 48bb1ef6a06..1210493dfb4 100644 --- a/test/JDBC/upgrade/15_15/schedule +++ b/test/JDBC/upgrade/15_15/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_17/schedule b/test/JDBC/upgrade/15_17/schedule index 9d3feb7244d..05e7d72fe58 100644 --- a/test/JDBC/upgrade/15_17/schedule +++ b/test/JDBC/upgrade/15_17/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_18/schedule b/test/JDBC/upgrade/15_18/schedule index 9d3feb7244d..05e7d72fe58 100644 --- a/test/JDBC/upgrade/15_18/schedule +++ b/test/JDBC/upgrade/15_18/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_19/schedule b/test/JDBC/upgrade/15_19/schedule index b9f4c83e80a..6232979926d 100644 --- a/test/JDBC/upgrade/15_19/schedule +++ b/test/JDBC/upgrade/15_19/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -363,7 +363,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -375,7 +375,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_2/schedule b/test/JDBC/upgrade/15_2/schedule index e22e062fa18..ea28633ecda 100644 --- a/test/JDBC/upgrade/15_2/schedule +++ b/test/JDBC/upgrade/15_2/schedule @@ -148,7 +148,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -326,7 +326,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -338,7 +338,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_3/schedule b/test/JDBC/upgrade/15_3/schedule index 30d922bc22c..8efb19792e6 100644 --- a/test/JDBC/upgrade/15_3/schedule +++ b/test/JDBC/upgrade/15_3/schedule @@ -158,7 +158,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -340,7 +340,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -353,7 +353,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_4/schedule b/test/JDBC/upgrade/15_4/schedule index f7397b0e4f8..b3669e63c37 100644 --- a/test/JDBC/upgrade/15_4/schedule +++ b/test/JDBC/upgrade/15_4/schedule @@ -160,7 +160,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -347,7 +347,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -360,7 +360,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_5/schedule b/test/JDBC/upgrade/15_5/schedule index 2853d8edd0d..0f0fe8561eb 100644 --- a/test/JDBC/upgrade/15_5/schedule +++ b/test/JDBC/upgrade/15_5/schedule @@ -165,7 +165,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -357,7 +357,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -370,7 +370,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_6/schedule b/test/JDBC/upgrade/15_6/schedule index df5200f9de8..e03ab549610 100644 --- a/test/JDBC/upgrade/15_6/schedule +++ b/test/JDBC/upgrade/15_6/schedule @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -362,7 +362,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -375,7 +375,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_7/schedule b/test/JDBC/upgrade/15_7/schedule index 14b914d272a..e2c14e40675 100644 --- a/test/JDBC/upgrade/15_7/schedule +++ b/test/JDBC/upgrade/15_7/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -168,7 +168,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -363,7 +363,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -376,7 +376,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/15_8/schedule b/test/JDBC/upgrade/15_8/schedule index 3d4d8709e6d..e8dd07c0dda 100644 --- a/test/JDBC/upgrade/15_8/schedule +++ b/test/JDBC/upgrade/15_8/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -373,7 +373,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/16_1/schedule b/test/JDBC/upgrade/16_1/schedule index c985163ed3b..c41e49201d0 100644 --- a/test/JDBC/upgrade/16_1/schedule +++ b/test/JDBC/upgrade/16_1/schedule @@ -166,7 +166,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -361,7 +361,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -374,7 +374,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/16_10/schedule b/test/JDBC/upgrade/16_10/schedule index b3b8e119276..e44b2e85a3a 100644 --- a/test/JDBC/upgrade/16_10/schedule +++ b/test/JDBC/upgrade/16_10/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -578,7 +578,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex diff --git a/test/JDBC/upgrade/16_11/schedule b/test/JDBC/upgrade/16_11/schedule index 6f3077ecef5..9628e2a684c 100644 --- a/test/JDBC/upgrade/16_11/schedule +++ b/test/JDBC/upgrade/16_11/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -578,7 +578,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex @@ -651,3 +651,4 @@ forxml-path-elements-before-17_10-or-18_4 forxml-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/16_13/schedule b/test/JDBC/upgrade/16_13/schedule index 109c6173be8..6e2e47767fa 100644 --- a/test/JDBC/upgrade/16_13/schedule +++ b/test/JDBC/upgrade/16_13/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -578,7 +578,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex @@ -655,3 +655,4 @@ forxml-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/16_14/schedule b/test/JDBC/upgrade/16_14/schedule index 084a80bc793..e075af31be6 100644 --- a/test/JDBC/upgrade/16_14/schedule +++ b/test/JDBC/upgrade/16_14/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -578,7 +578,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex @@ -655,3 +655,4 @@ forxml-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 babel_sqlvariant_coerce_type BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/16_15/schedule b/test/JDBC/upgrade/16_15/schedule index d67cf66bc04..8108b8029dd 100644 --- a/test/JDBC/upgrade/16_15/schedule +++ b/test/JDBC/upgrade/16_15/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -368,7 +368,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -381,7 +381,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -580,7 +580,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex @@ -655,3 +655,4 @@ sys-fn-varbintohexsubstring forxml-path-elements-before-17_10-or-18_4 babel_sqlvariant_coerce_type BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/16_2/schedule b/test/JDBC/upgrade/16_2/schedule index 010e74f22ab..dcb1e13db62 100644 --- a/test/JDBC/upgrade/16_2/schedule +++ b/test/JDBC/upgrade/16_2/schedule @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -364,7 +364,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -377,7 +377,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/16_3/schedule b/test/JDBC/upgrade/16_3/schedule index f9a25bc4c4c..6a38d00ccf6 100644 --- a/test/JDBC/upgrade/16_3/schedule +++ b/test/JDBC/upgrade/16_3/schedule @@ -124,7 +124,7 @@ BABEL-4516 babel_417 BABEL-493 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -365,7 +365,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -378,7 +378,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/16_4/schedule b/test/JDBC/upgrade/16_4/schedule index 3c8feeac8c3..911d67f50ff 100644 --- a/test/JDBC/upgrade/16_4/schedule +++ b/test/JDBC/upgrade/16_4/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -168,7 +168,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes diff --git a/test/JDBC/upgrade/16_6/schedule b/test/JDBC/upgrade/16_6/schedule index ad445fd3f5c..b9cf374a6e5 100644 --- a/test/JDBC/upgrade/16_6/schedule +++ b/test/JDBC/upgrade/16_6/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -168,7 +168,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -367,7 +367,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -380,7 +380,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -573,7 +573,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR-before-16_6 charindex_replace_patindex diff --git a/test/JDBC/upgrade/16_8/schedule b/test/JDBC/upgrade/16_8/schedule index 85e10e968c3..816ae94c5d7 100644 --- a/test/JDBC/upgrade/16_8/schedule +++ b/test/JDBC/upgrade/16_8/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -366,7 +366,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -379,7 +379,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -577,7 +577,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex diff --git a/test/JDBC/upgrade/16_9/schedule b/test/JDBC/upgrade/16_9/schedule index 45e49305a57..881a9ddeaaa 100644 --- a/test/JDBC/upgrade/16_9/schedule +++ b/test/JDBC/upgrade/16_9/schedule @@ -125,7 +125,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL_SCHEMATA BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep @@ -367,7 +367,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -380,7 +380,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -579,7 +579,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 BABEL-5129 BABEL-CASE_EXPR charindex_replace_patindex diff --git a/test/JDBC/upgrade/17_10/schedule b/test/JDBC/upgrade/17_10/schedule index ffa27b9fbc9..6bf763c4b45 100644 --- a/test/JDBC/upgrade/17_10/schedule +++ b/test/JDBC/upgrade/17_10/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -371,7 +371,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -384,7 +384,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -590,7 +590,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -685,3 +685,4 @@ xml_query-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 babel_sqlvariant_coerce_type BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/17_11/schedule b/test/JDBC/upgrade/17_11/schedule index 33771544f15..e8830d9a268 100644 --- a/test/JDBC/upgrade/17_11/schedule +++ b/test/JDBC/upgrade/17_11/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -371,7 +371,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -384,7 +384,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -591,7 +591,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -685,3 +685,4 @@ xml_query babel_sqlvariant_coerce_type forxml-auto BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/17_4/schedule b/test/JDBC/upgrade/17_4/schedule index f2cd8741a85..b40dce06ac3 100644 --- a/test/JDBC/upgrade/17_4/schedule +++ b/test/JDBC/upgrade/17_4/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -364,7 +364,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -377,7 +377,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -580,7 +580,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin diff --git a/test/JDBC/upgrade/17_5/schedule b/test/JDBC/upgrade/17_5/schedule index 9d43d6c6be8..be00333a7d8 100644 --- a/test/JDBC/upgrade/17_5/schedule +++ b/test/JDBC/upgrade/17_5/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -367,7 +367,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -380,7 +380,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -585,7 +585,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin diff --git a/test/JDBC/upgrade/17_6/schedule b/test/JDBC/upgrade/17_6/schedule index 82a05b7ce78..e72c496c7c1 100644 --- a/test/JDBC/upgrade/17_6/schedule +++ b/test/JDBC/upgrade/17_6/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -370,7 +370,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -383,7 +383,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -589,7 +589,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin diff --git a/test/JDBC/upgrade/17_7/schedule b/test/JDBC/upgrade/17_7/schedule index e21bad46d91..a6f382c133b 100644 --- a/test/JDBC/upgrade/17_7/schedule +++ b/test/JDBC/upgrade/17_7/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -370,7 +370,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -383,7 +383,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -589,7 +589,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -675,3 +675,4 @@ xml_query-before-17_11-or-18_5 forxml-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/17_9/schedule b/test/JDBC/upgrade/17_9/schedule index ab134c767d8..2c0520ea14b 100644 --- a/test/JDBC/upgrade/17_9/schedule +++ b/test/JDBC/upgrade/17_9/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -370,7 +370,7 @@ sys-sp_databases sys-sp_databases-dep sys-sp_pkeys sys-sp_pkeys-dep -sys-sp_statistics +sys-sp_statistics-before-18_5 sys-sp_statistics-dep sys-sp_tables_view sys-sp_tables_view-dep @@ -383,7 +383,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -589,7 +589,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -683,3 +683,4 @@ forxml-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/18_3/schedule b/test/JDBC/upgrade/18_3/schedule index 00ba2fcefff..d105054d9d2 100644 --- a/test/JDBC/upgrade/18_3/schedule +++ b/test/JDBC/upgrade/18_3/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 #BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -383,7 +383,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -589,7 +589,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -683,3 +683,4 @@ babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4 forxml-auto-before-17_11-or-18_5 forxml-before-17_11-or-18_5 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/18_4/schedule b/test/JDBC/upgrade/18_4/schedule index 8b3740816e4..455f3a8db01 100644 --- a/test/JDBC/upgrade/18_4/schedule +++ b/test/JDBC/upgrade/18_4/schedule @@ -124,7 +124,7 @@ babel_417 BABEL-493 BABEL-4888 #BABEL_539 -BABEL-621 +BABEL-621-before-18_5 BABEL-728 BABEL-733 BABEL-741 @@ -167,7 +167,7 @@ BABEL-PG-SYSTEM-FUNCTIONS BABEL-PROCID BABEL-RAND BABEL-ROLE -BABEL-ROLE-MEMBER +BABEL-ROLE-MEMBER-before-18_5 BABEL-SPCOLUMNS BABEL-SPCOLUMNS-dep BABEL-SP_COLUMNS_MANAGED-dep @@ -384,7 +384,7 @@ sys-synonyms sys-syscharsets sys-syscolumns sys-syscolumns-dep -sys-sysdatabases +sys-sysdatabases-before-18_5 sys-sysforeignkeys sys-sysforeignkeys-dep sys-sysindexes @@ -591,7 +591,7 @@ BABEL-5059 cast-varchar-to-time xml_exist test_db_collation -BABEL-5119 +BABEL-5119-before-18_5 dbcreator_role BABEL-5129 db_accessadmin @@ -687,3 +687,4 @@ babel_sqlvariant_coerce_type forxml-auto-before-17_11-or-18_5 forxml-before-17_11-or-18_5 BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/JDBC/upgrade/latest/schedule b/test/JDBC/upgrade/latest/schedule index 7bef5dfe801..87cd3f96953 100644 --- a/test/JDBC/upgrade/latest/schedule +++ b/test/JDBC/upgrade/latest/schedule @@ -691,3 +691,4 @@ BABEL-5264 BABEL-6037 babel_sqlvariant_coerce_type BABEL-login-db-long-identifiers +long-identifiers diff --git a/test/dotnet/ExpectedOutput/ddl_UDDT_UDTT.out b/test/dotnet/ExpectedOutput/ddl_UDDT_UDTT.out index 1223eb3b4b6..f1860627fc4 100644 --- a/test/dotnet/ExpectedOutput/ddl_UDDT_UDTT.out +++ b/test/dotnet/ExpectedOutput/ddl_UDDT_UDTT.out @@ -73,23 +73,23 @@ GO CREATE TYPE [shc_test].[test3] FROM [int] NOT NULL GO CREATE TYPE [dbo].[inventoryitem] AS TABLE( - [name] [nvarchar](50) NOT NULL, - [supplierid] [bigint] NOT NULL, - [price] [decimal](18, 4) NULL, + [Name] [nvarchar](50) NOT NULL, + [SupplierId] [bigint] NOT NULL, + [Price] [decimal](18, 4) NULL, PRIMARY KEY NONCLUSTERED ( - [name] ASC + [Name] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO CREATE TYPE [dbo].[locationtabletype] AS TABLE( - [locationname] [varchar](50) NULL, - [costrate] [int] NULL + [LocationName] [varchar](50) NULL, + [CostRate] [int] NULL ) GO CREATE TYPE [shc_test].[locationtabletype] AS TABLE( - [locationname] [varchar](50) NULL, - [costrate] [int] NULL + [LocationName] [varchar](50) NULL, + [CostRate] [int] NULL ) GO #Q#DROP TYPE IF EXISTS test1 diff --git a/test/dotnet/ExpectedOutput/ddl_all_objects.out b/test/dotnet/ExpectedOutput/ddl_all_objects.out index 4d195ff1821..89d96f995de 100644 --- a/test/dotnet/ExpectedOutput/ddl_all_objects.out +++ b/test/dotnet/ExpectedOutput/ddl_all_objects.out @@ -94,19 +94,19 @@ GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[babel_1654_vu_prepare_t]( - [id] [int] IDENTITY(1,1) NOT NULL, + [ID] [int] IDENTITY(1,1) NOT NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[babel_1654_vu_prepare_t] ADD CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO SET ANSI_NULLS ON diff --git a/test/dotnet/ExpectedOutput/ddl_tables_index.out b/test/dotnet/ExpectedOutput/ddl_tables_index.out index 415eca7e000..33d85f044be 100644 --- a/test/dotnet/ExpectedOutput/ddl_tables_index.out +++ b/test/dotnet/ExpectedOutput/ddl_tables_index.out @@ -289,9 +289,9 @@ GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[table_check]( - [id] [int] NOT NULL, - [name] [varchar](10) NOT NULL, - [age] [int] NOT NULL + [ID] [int] NOT NULL, + [NAME] [varchar](10) NOT NULL, + [AGE] [int] NOT NULL ) ON [PRIMARY] GO diff --git a/test/dotnet/ExpectedOutput/ddl_triggers.out b/test/dotnet/ExpectedOutput/ddl_triggers.out index 63f894141a4..3324a896ae3 100644 --- a/test/dotnet/ExpectedOutput/ddl_triggers.out +++ b/test/dotnet/ExpectedOutput/ddl_triggers.out @@ -41,11 +41,11 @@ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -CREATE TABLE [dbo].[babel_1654_vu_prepare_employeedata]( - [id] [int] IDENTITY(1,1) NOT NULL, - [emp_first_name] [varchar](50) NULL, - [emp_last_name] [varchar](50) NULL, - [emp_salary] [int] NULL, +CREATE TABLE [dbo].[babel_1654_vu_prepare_employeeData]( + [ID] [int] IDENTITY(1,1) NOT NULL, + [Emp_First_name] [varchar](50) NULL, + [Emp_Last_name] [varchar](50) NULL, + [Emp_Salary] [int] NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, [c] [varchar](50) NULL, @@ -54,14 +54,14 @@ CREATE TABLE [dbo].[babel_1654_vu_prepare_employeedata]( [f] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO -ALTER TABLE [dbo].[babel_1654_vu_prepare_employeedata] ADD CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED +ALTER TABLE [dbo].[babel_1654_vu_prepare_employeeData] ADD CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO SET ANSI_NULLS ON @@ -69,32 +69,32 @@ GO SET QUOTED_IDENTIFIER ON GO -CREATE TRIGGER [dbo].[babel_1654_vu_prepare_updemployeedatas] ON [dbo].[babel_1654_vu_prepare_employeedata] AFTER UPDATE,INSERT AS +CREATE TRIGGER babel_1654_vu_prepare_updEmployeeDatas ON babel_1654_vu_prepare_employeeData AFTER UPDATE,INSERT AS select COLUMNS_UPDATED(); update babel_1654_vu_prepare_t set a = 'sss' , b = 'sss' where id = 1; select COLUMNS_UPDATED(); GO -ALTER TABLE [dbo].[babel_1654_vu_prepare_employeedata] ENABLE TRIGGER [babel_1654_vu_prepare_updemployeedatas] +ALTER TABLE [dbo].[babel_1654_vu_prepare_employeeData] ENABLE TRIGGER [babel_1654_vu_prepare_updEmployeeDatas] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[babel_1654_vu_prepare_t]( - [id] [int] IDENTITY(1,1) NOT NULL, + [ID] [int] IDENTITY(1,1) NOT NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[babel_1654_vu_prepare_t] ADD CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO SET ANSI_NULLS ON diff --git a/test/python/expected/pyodbc/ddl_UDDT_UDTT.out b/test/python/expected/pyodbc/ddl_UDDT_UDTT.out index 2e03b47c6ed..ecde68abe4a 100644 --- a/test/python/expected/pyodbc/ddl_UDDT_UDTT.out +++ b/test/python/expected/pyodbc/ddl_UDDT_UDTT.out @@ -19,25 +19,25 @@ CREATE TYPE [shc_test].[test3] FROM [int] NOT NULL GO CREATE TYPE [dbo].[inventoryitem] AS TABLE( - [name] [nvarchar](50) NOT NULL, - [supplierid] [bigint] NOT NULL, - [price] [decimal](18, 4) NULL, + [Name] [nvarchar](50) NOT NULL, + [SupplierId] [bigint] NOT NULL, + [Price] [decimal](18, 4) NULL, PRIMARY KEY NONCLUSTERED ( - [name] ASC + [Name] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO CREATE TYPE [dbo].[locationtabletype] AS TABLE( - [locationname] [varchar](50) NULL, - [costrate] [int] NULL + [LocationName] [varchar](50) NULL, + [CostRate] [int] NULL ) GO CREATE TYPE [shc_test].[locationtabletype] AS TABLE( - [locationname] [varchar](50) NULL, - [costrate] [int] NULL + [LocationName] [varchar](50) NULL, + [CostRate] [int] NULL ) GO diff --git a/test/python/expected/pyodbc/ddl_all_objects.out b/test/python/expected/pyodbc/ddl_all_objects.out index 2037513cca4..18fbb3ca23c 100644 --- a/test/python/expected/pyodbc/ddl_all_objects.out +++ b/test/python/expected/pyodbc/ddl_all_objects.out @@ -1,12 +1,12 @@ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[babel_1654_vu_prepare_t]( - [id] [int] IDENTITY(1,1) NOT NULL, + [ID] [int] IDENTITY(1,1) NOT NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] @@ -150,7 +150,7 @@ GO ALTER TABLE [dbo].[babel_1654_vu_prepare_t] ADD CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO diff --git a/test/python/expected/pyodbc/ddl_partitions.out b/test/python/expected/pyodbc/ddl_partitions.out index c67bc6dacd5..83113a02c69 100644 --- a/test/python/expected/pyodbc/ddl_partitions.out +++ b/test/python/expected/pyodbc/ddl_partitions.out @@ -152,76 +152,76 @@ GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_bigint_table]( - [id] [bigint] NULL, - [value] [varchar](50) NULL -) ON [BigIntPartitionScheme]([id]) + [Id] [bigint] NULL, + [Value] [varchar](50) NULL +) ON [BigIntPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_binary_table]( - [id] [binary](4) NULL, - [value] [varchar](50) NULL -) ON [BinaryPartitionScheme]([id]) + [Id] [binary](4) NULL, + [Value] [varchar](50) NULL +) ON [BinaryPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_char_table]( - [id] [char](5) NULL, - [value] [varchar](50) NULL -) ON [CharPartitionScheme]([id]) + [Id] [char](5) NULL, + [Value] [varchar](50) NULL +) ON [CharPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_date_table]( - [id] [date] NULL, - [value] [varchar](50) NULL -) ON [DatePartitionScheme]([id]) + [Id] [date] NULL, + [Value] [varchar](50) NULL +) ON [DatePartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_datetime_table]( - [id] [datetime] NULL, - [value] [varchar](50) NULL -) ON [DateTimePartitionScheme]([id]) + [Id] [datetime] NULL, + [Value] [varchar](50) NULL +) ON [DateTimePartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_datetime2_table]( - [id] [datetime2](3) NULL, - [value] [varchar](50) NULL -) ON [DateTime2PartitionScheme]([id]) + [Id] [datetime2](3) NULL, + [Value] [varchar](50) NULL +) ON [DateTime2PartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_decimal_table]( - [id] [decimal](10, 5) NULL, - [value] [varchar](50) NULL -) ON [DecimalPartitionScheme]([id]) + [Id] [decimal](10, 5) NULL, + [Value] [varchar](50) NULL +) ON [DecimalPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_int_table]( - [id] [int] NULL, - [value] [varchar](50) NULL, + [Id] [int] NULL, + [Value] [varchar](50) NULL, CONSTRAINT [partition_vu_prepare_int_table_id_key] UNIQUE NONCLUSTERED ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([id]) -) ON [IntPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([Id]) +) ON [IntPartitionScheme]([Id]) ALTER TABLE [dbo].[partition_vu_prepare_int_table] WITH CHECK ADD CONSTRAINT [check_value_not_null] CHECK (((value IS NOT NULL))) ALTER TABLE [dbo].[partition_vu_prepare_int_table] CHECK CONSTRAINT [check_value_not_null] @@ -230,259 +230,246 @@ GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_money_table]( - [id] [money] NULL, - [value] [varchar](50) NULL -) ON [MoneyPartitionScheme]([id]) + [Id] [money] NULL, + [Value] [varchar](50) NULL +) ON [MoneyPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_nchar_table]( - [id] [nchar](5) NULL, - [value] [varchar](50) NULL -) ON [NCharPartitionScheme]([id]) + [Id] [nchar](5) NULL, + [Value] [varchar](50) NULL +) ON [NCharPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_numeric_table]( - [id] [numeric](5, 2) NULL, - [value] [varchar](50) NULL -) ON [NumericPartitionScheme]([id]) + [Id] [numeric](5, 2) NULL, + [Value] [varchar](50) NULL +) ON [NumericPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_nvarchar_table]( - [id] [nvarchar](10) NULL, - [value] [varchar](50) NULL -) ON [NVarCharPartitionScheme]([id]) + [Id] [nvarchar](10) NULL, + [Value] [varchar](50) NULL +) ON [NVarCharPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_smalldatetime_table]( - [id] [smalldatetime] NULL, - [value] [varchar](50) NULL -) ON [SmallDateTimePartitionScheme]([id]) + [Id] [smalldatetime] NULL, + [Value] [varchar](50) NULL +) ON [SmallDateTimePartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_smallint_table]( - [id] [smallint] NULL, - [value] [varchar](50) NULL -) ON [SmallIntPartitionScheme]([id]) + [Id] [smallint] NULL, + [Value] [varchar](50) NULL +) ON [SmallIntPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_smallmoney_table]( - [id] [smallmoney] NULL, - [value] [varchar](50) NULL -) ON [SmallMoneyPartitionScheme]([id]) + [Id] [smallmoney] NULL, + [Value] [varchar](50) NULL +) ON [SmallMoneyPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_tinyint_table]( - [id] [tinyint] NULL, - [value] [varchar](50) NULL -) ON [TinyIntPartitionScheme]([id]) + [Id] [tinyint] NULL, + [Value] [varchar](50) NULL +) ON [TinyIntPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_uniqueidentifier_table]( - [id] [uniqueidentifier] NULL, - [value] [varchar](50) NULL -) ON [UniqueIdentifierPartitionScheme]([id]) + [Id] [uniqueidentifier] NULL, + [Value] [varchar](50) NULL +) ON [UniqueIdentifierPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_varbinary_table]( - [id] [varbinary](8) NULL, - [value] [varchar](50) NULL -) ON [VarBinaryPartitionScheme]([id]) + [Id] [varbinary](8) NULL, + [Value] [varchar](50) NULL +) ON [VarBinaryPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[partition_vu_prepare_varchar_table]( - [id] [varchar](10) NULL, - [value] [varchar](50) NULL -) ON [VarCharPartitionScheme]([id]) + [Id] [varchar](10) NULL, + [Value] [varchar](50) NULL +) ON [VarCharPartitionScheme]([Id]) GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [dbo].[partitiontablenamegreaterthan64d92cad082de128dbac3bc1a7d749bf53]( - [id] [int] NULL, - [value] [varchar](50) NULL -) ON [IntPartitionScheme]([id]) +CREATE TABLE [dbo].[PartitionTableNameGreaterThan64AndLessThan128abcdefghijklmnopqrstuvwxyz]( + [Id] [int] NULL, + [Value] [varchar](50) NULL +) ON [IntPartitionScheme]([Id]) GO -SET ANSI_NULLS ON -SET QUOTED_IDENTIFIER ON -CREATE TABLE [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[partitiontablenamegreaterthan6402ce6bebcadddb6e6a931674c4836f80]( - [partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a] [bigint] NULL, - [value] [varchar](50) NULL -) ON [PartitionSchemeNameGreaterThan64AndLessThan128HavingEmoji😎$123🌍rder]([partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a]) - GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[partitiontablenamelessthan128ab6e1b50aeff8d243f9ee4c7ee01907bdf]( - [partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a] [bigint] NULL, - [value] [varchar](50) NULL -) ON [PartitionSchemeNameGreaterThan64AndLessThan128abcdefghijklmnopqrstuvwxyz]([partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a]) +CREATE TABLE [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[PartitionTableNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopq]( + [PartitionColumnNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopqr] [bigint] NULL, + [Value] [varchar](50) NULL +) ON [PartitionSchemeNameGreaterThan64AndLessThan128abcdefghijklmnopqrstuvwxyz]([PartitionColumnNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopqr]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_bigint_index] ON [dbo].[partition_vu_prepare_bigint_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [BigIntPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [BigIntPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_binary_index] ON [dbo].[partition_vu_prepare_binary_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [BinaryPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [BinaryPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_char_index] ON [dbo].[partition_vu_prepare_char_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [CharPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [CharPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_date_index] ON [dbo].[partition_vu_prepare_date_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DatePartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DatePartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_datetime_index] ON [dbo].[partition_vu_prepare_datetime_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DateTimePartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DateTimePartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_datetime2_index] ON [dbo].[partition_vu_prepare_datetime2_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DateTime2PartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DateTime2PartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_decimal_index] ON [dbo].[partition_vu_prepare_decimal_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DecimalPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [DecimalPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_int_index] ON [dbo].[partition_vu_prepare_int_table] ( - [value] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([id]) + [Value] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([Id]) GO ALTER TABLE [dbo].[partition_vu_prepare_int_table] ADD CONSTRAINT [partition_vu_prepare_int_table_id_key] UNIQUE NONCLUSTERED ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [IntPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_money_index] ON [dbo].[partition_vu_prepare_money_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MoneyPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [MoneyPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_nchar_index] ON [dbo].[partition_vu_prepare_nchar_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NCharPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NCharPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_numeric_index] ON [dbo].[partition_vu_prepare_numeric_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NumericPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NumericPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_nvarchar_index] ON [dbo].[partition_vu_prepare_nvarchar_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NVarCharPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [NVarCharPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_smalldatetime_index] ON [dbo].[partition_vu_prepare_smalldatetime_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallDateTimePartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallDateTimePartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_smallint_index] ON [dbo].[partition_vu_prepare_smallint_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallIntPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallIntPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_smallmoney_index] ON [dbo].[partition_vu_prepare_smallmoney_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallMoneyPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [SmallMoneyPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_tinyint_index] ON [dbo].[partition_vu_prepare_tinyint_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TinyIntPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [TinyIntPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_uniqueidentifier_index] ON [dbo].[partition_vu_prepare_uniqueidentifier_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [UniqueIdentifierPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [UniqueIdentifierPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_varbinary_index] ON [dbo].[partition_vu_prepare_varbinary_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [VarBinaryPartitionScheme]([id]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [VarBinaryPartitionScheme]([Id]) GO CREATE NONCLUSTERED INDEX [partition_vu_prepare_varchar_index] ON [dbo].[partition_vu_prepare_varchar_table] ( - [id] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [VarCharPartitionScheme]([id]) -GO - -CREATE NONCLUSTERED INDEX [partitionindexnamelessthan128ab93d59dee3c39fb6416680e0982b0ea32] ON [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[partitiontablenamegreaterthan6402ce6bebcadddb6e6a931674c4836f80] -( - [value] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartitionSchemeNameGreaterThan64AndLessThan128HavingEmoji😎$123🌍rder]([partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a]) + [Id] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [VarCharPartitionScheme]([Id]) GO -CREATE NONCLUSTERED INDEX [partitionindexnamelessthan128ab93d59dee3c39fb6416680e0982b0ea32] ON [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[partitiontablenamelessthan128ab6e1b50aeff8d243f9ee4c7ee01907bdf] +CREATE NONCLUSTERED INDEX [PartitionIndexNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopq] ON [PartitionSchemaNameGreaterThan64abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz].[PartitionTableNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopq] ( - [value] ASC -)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartitionSchemeNameGreaterThan64AndLessThan128abcdefghijklmnopqrstuvwxyz]([partitioncolumnnamelessthan128aa68c06f20de507e395cc43043306431a]) + [Value] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PartitionSchemeNameGreaterThan64AndLessThan128abcdefghijklmnopqrstuvwxyz]([PartitionColumnNameLessThan128abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyabcdefghijklmnopqr]) GO GO diff --git a/test/python/expected/pyodbc/ddl_tables_index.out b/test/python/expected/pyodbc/ddl_tables_index.out index c6a9e575afe..dbf46427b45 100644 --- a/test/python/expected/pyodbc/ddl_tables_index.out +++ b/test/python/expected/pyodbc/ddl_tables_index.out @@ -100,9 +100,9 @@ GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[table_check]( - [id] [int] NOT NULL, - [name] [varchar](10) NOT NULL, - [age] [int] NOT NULL + [ID] [int] NOT NULL, + [NAME] [varchar](10) NOT NULL, + [AGE] [int] NOT NULL ) ON [PRIMARY] ALTER TABLE [dbo].[table_check] WITH CHECK ADD CONSTRAINT [table_check_age_check] CHECK (((age >= 18))) diff --git a/test/python/expected/pyodbc/ddl_triggers.out b/test/python/expected/pyodbc/ddl_triggers.out index 4b1ec1de818..a2a625baf98 100644 --- a/test/python/expected/pyodbc/ddl_triggers.out +++ b/test/python/expected/pyodbc/ddl_triggers.out @@ -1,10 +1,10 @@ SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TABLE [dbo].[babel_1654_vu_prepare_employeedata]( - [id] [int] IDENTITY(1,1) NOT NULL, - [emp_first_name] [varchar](50) NULL, - [emp_last_name] [varchar](50) NULL, - [emp_salary] [int] NULL, +CREATE TABLE [dbo].[babel_1654_vu_prepare_employeeData]( + [ID] [int] IDENTITY(1,1) NOT NULL, + [Emp_First_name] [varchar](50) NULL, + [Emp_Last_name] [varchar](50) NULL, + [Emp_Salary] [int] NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, [c] [varchar](50) NULL, @@ -13,7 +13,7 @@ CREATE TABLE [dbo].[babel_1654_vu_prepare_employeedata]( [f] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] @@ -22,12 +22,12 @@ GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON CREATE TABLE [dbo].[babel_1654_vu_prepare_t]( - [id] [int] IDENTITY(1,1) NOT NULL, + [ID] [int] IDENTITY(1,1) NOT NULL, [a] [varchar](50) NULL, [b] [varchar](50) NULL, CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] @@ -43,26 +43,26 @@ CREATE TABLE [dbo].[sys_computed_columns_vu_prepare_t1]( GO -ALTER TABLE [dbo].[babel_1654_vu_prepare_employeedata] ADD CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED +ALTER TABLE [dbo].[babel_1654_vu_prepare_employeeData] ADD CONSTRAINT [babel_1654_vu_prepare_employeedata_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO ALTER TABLE [dbo].[babel_1654_vu_prepare_t] ADD CONSTRAINT [babel_1654_vu_prepare_t_pkey] PRIMARY KEY NONCLUSTERED ( - [id] ASC + [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] GO SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON -CREATE TRIGGER [dbo].[babel_1654_vu_prepare_updemployeedatas] ON [dbo].[babel_1654_vu_prepare_employeedata] AFTER UPDATE,INSERT AS +CREATE TRIGGER babel_1654_vu_prepare_updEmployeeDatas ON babel_1654_vu_prepare_employeeData AFTER UPDATE,INSERT AS select COLUMNS_UPDATED(); update babel_1654_vu_prepare_t set a = 'sss' , b = 'sss' where id = 1; select COLUMNS_UPDATED(); -ALTER TABLE [dbo].[babel_1654_vu_prepare_employeedata] ENABLE TRIGGER [babel_1654_vu_prepare_updemployeedatas] +ALTER TABLE [dbo].[babel_1654_vu_prepare_employeeData] ENABLE TRIGGER [babel_1654_vu_prepare_updEmployeeDatas] GO SET ANSI_NULLS ON diff --git a/test/python/expected/sql_validation_framework/expected_create.out b/test/python/expected/sql_validation_framework/expected_create.out index 649d4d6200c..2e26c970184 100644 --- a/test/python/expected/sql_validation_framework/expected_create.out +++ b/test/python/expected/sql_validation_framework/expected_create.out @@ -15,6 +15,7 @@ Could not find tests for function sys.babelfish_try_cast_floor_smallint Could not find tests for function sys.babelfish_try_cast_to_any Could not find tests for function sys.babelfish_try_cast_to_varbinary Could not find tests for function sys.babelfish_try_cast_to_varchar +Could not find tests for function sys.bbf_cur_db Could not find tests for function sys.bbf_is_role_member Could not find tests for function sys.bbf_pivot Could not find tests for function sys.bbf_xmlexist @@ -46,7 +47,6 @@ Could not find tests for function sys.role_id Could not find tests for function sys.sp_column_privileges_internal Could not find tests for function sys.sp_columns_managed_internal Could not find tests for function sys.sp_datatype_info_helper -Could not find tests for function sys.sp_describe_first_result_set_internal Could not find tests for function sys.sp_describe_undeclared_parameters_internal Could not find tests for function sys.sp_getapplock_function Could not find tests for function sys.sp_releaseapplock_function @@ -124,6 +124,7 @@ Could not find upgrade tests for function sys.babelfish_try_cast_floor_smallint Could not find upgrade tests for function sys.babelfish_try_cast_to_any Could not find upgrade tests for function sys.babelfish_try_cast_to_varbinary Could not find upgrade tests for function sys.babelfish_try_cast_to_varchar +Could not find upgrade tests for function sys.bbf_cur_db Could not find upgrade tests for function sys.bbf_is_role_member Could not find upgrade tests for function sys.bbf_pivot Could not find upgrade tests for function sys.bbf_xmlexist @@ -210,6 +211,7 @@ Could not find upgrade tests for procedure sys.sp_unprepare Could not find upgrade tests for procedure sys.sp_updatestats Could not find upgrade tests for table sys.babelfish_configurations Could not find upgrade tests for table sys.babelfish_helpcollation +Could not find upgrade tests for table sys.babelfish_identifier_mapping Could not find upgrade tests for table sys.babelfish_partition_function Could not find upgrade tests for table sys.babelfish_partition_scheme Could not find upgrade tests for table sys.babelfish_syslanguages diff --git a/test/python/expected/upgrade_validation/expected_dependency.out b/test/python/expected/upgrade_validation/expected_dependency.out index 62784f5582b..8e5b79a678a 100644 --- a/test/python/expected/upgrade_validation/expected_dependency.out +++ b/test/python/expected/upgrade_validation/expected_dependency.out @@ -214,9 +214,11 @@ Function sys.bbf_binary(sys.geography,integer,boolean) Function sys.bbf_binary(sys.geometry,integer,boolean) Function sys.bbf_binary_cmp(sys.bbf_binary,sys.bbf_binary) Function sys.bbf_binary_varbinary_cmp(sys.bbf_binary,sys.bbf_varbinary) +Function sys.bbf_cur_db() Function sys.bbf_get_context_info() Function sys.bbf_get_current_physical_schema_name(text) Function sys.bbf_get_immediate_base_type_of_udt(oid) +Function sys.bbf_get_view_column_name(oid,smallint) Function sys.bbf_is_member_of_role_nosuper(oid,oid) Function sys.bbf_is_role_member(name,name) Function sys.bbf_is_shared_schema(text)