diff --git a/contrib/babelfishpg_tsql/runtime/functions.c b/contrib/babelfishpg_tsql/runtime/functions.c index 61fb3e0019d..e5a7ac487c9 100644 --- a/contrib/babelfishpg_tsql/runtime/functions.c +++ b/contrib/babelfishpg_tsql/runtime/functions.c @@ -51,8 +51,14 @@ #include "utils/float.h" #include "utils/xid8.h" #include "utils/xml.h" +#include "catalog/pg_class_d.h" #include +extern const char *ATTOPTION_BBF_ORIGINAL_TABLE_NAME; +extern char *get_value_by_name_from_array(ArrayType *array, const char *name); + +static char *get_orig_temp_table_name(Oid relid); + #include "../src/babelfish_version.h" #include "../src/datatype_info.h" #include "../src/pltsql.h" @@ -1319,7 +1325,19 @@ get_enr_list(PG_FUNCTION_ARGS) MemSet(nulls, 0, sizeof(nulls)); values[0] = ((EphemeralNamedRelationMetadata) lfirst(lc))->reliddesc; - values[1] = CStringGetTextDatum(((EphemeralNamedRelationMetadata) lfirst(lc))->name); + { + EphemeralNamedRelationMetadata md = (EphemeralNamedRelationMetadata) lfirst(lc); + const char *name = md->name; + + /* Use original untruncated name from reloptions if available */ + if (md->enrtype == ENR_TSQL_TEMP) + { + char *orig = get_orig_temp_table_name(md->reliddesc); + if (orig) + name = orig; + } + values[1] = CStringGetTextDatum(name); + } tuplestore_putvalues(tupstore, tupdesc, values, nulls); } @@ -2798,6 +2816,33 @@ object_id(PG_FUNCTION_ARGS) * if there is no such object in specified database, if database id is not provided it will lookup in current database * if user don't have right permission */ +/* + * get_orig_temp_table_name - Get original untruncated name from reloptions. + * Returns palloc'd string or NULL if not found. + */ +static char * +get_orig_temp_table_name(Oid relid) +{ + HeapTuple tuple = SearchSysCache1(RELOID, ObjectIdGetDatum(relid)); + char *orig = NULL; + + if (HeapTupleIsValid(tuple)) + { + Datum datum; + bool isnull; + + datum = SysCacheGetAttr(RELOID, tuple, Anum_pg_class_reloptions, &isnull); + if (!isnull) + { + ArrayType *reloptions = DatumGetArrayTypeP(datum); + orig = get_value_by_name_from_array(reloptions, ATTOPTION_BBF_ORIGINAL_TABLE_NAME); + } + ReleaseSysCache(tuple); + } + /* orig remains valid after ReleaseSysCache - get_value_by_name_from_array palloc's a copy */ + return orig; +} + Datum object_name(PG_FUNCTION_ARGS) { @@ -2844,7 +2889,12 @@ object_name(PG_FUNCTION_ARGS) enr = GetENRTempTableWithOid(object_id, false); if (enr != NULL && enr->md.enrtype == ENR_TSQL_TEMP) { - PG_RETURN_VARCHAR_P((VarChar *) cstring_to_text(enr->md.name)); + const char *name = enr->md.name; + char *orig = get_orig_temp_table_name(object_id); + + if (orig) + name = orig; + PG_RETURN_VARCHAR_P((VarChar *) cstring_to_text(name)); } /* search in pg_class by object_id */ @@ -2855,7 +2905,17 @@ 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 + + if (pg_class->relpersistence == RELPERSISTENCE_TEMP && + NameStr(pg_class->relname)[0] == '#') + { + char *orig = get_orig_temp_table_name(object_id); + if (orig) + result_text = cstring_to_text(orig); + } + + if (!result_text) + result_text = cstring_to_text(NameStr(pg_class->relname)); schema_id = pg_class->relnamespace; } ReleaseSysCache(tuple); 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 1f670d9d1fc..3da137413c3 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y +++ b/contrib/babelfishpg_tsql/src/backend_parser/gram-tsql-rule.y @@ -3557,6 +3557,11 @@ tsql_IndexStmt: n->transformed = false; n->if_not_exists = false; + if (n->idxname) + n->options = lappend(n->options, + makeDefElem("name_location", + (Node *) makeInteger(@7), @7)); + tsql_index_nulls_order(n->indexParams, n->accessMethod); $$ = (Node *)n; } diff --git a/contrib/babelfishpg_tsql/src/backend_parser/scan-tsql-rule.l b/contrib/babelfishpg_tsql/src/backend_parser/scan-tsql-rule.l index d65baf25584..7cbc4a11893 100644 --- a/contrib/babelfishpg_tsql/src/backend_parser/scan-tsql-rule.l +++ b/contrib/babelfishpg_tsql/src/backend_parser/scan-tsql-rule.l @@ -155,6 +155,8 @@ SET_YYLLOC(); CHECK_LOCAL_TEMP_TABLE_LENGTH(yytext); yylval->str = pstrdup(yytext); + if (yyleng >= NAMEDATALEN) + truncate_identifier(yylval->str, yyleng, true); return IDENT; } diff --git a/contrib/babelfishpg_tsql/src/hooks.c b/contrib/babelfishpg_tsql/src/hooks.c index 25e02be339d..c1d6bd63990 100644 --- a/contrib/babelfishpg_tsql/src/hooks.c +++ b/contrib/babelfishpg_tsql/src/hooks.c @@ -2497,20 +2497,18 @@ pltsql_post_transform_table_definition(ParseState *pstate, RangeVar *relation, c stmt->objtype = OBJECT_TABLE; /* - * Only store original_name if there's a difference, and if the difference - * is only in capitalization + * Store original_name in reloptions when: + * 1. There is a case-only difference between relname and original_name, OR + * 2. The identifier is a temp table name that was truncated (>= NAMEDATALEN) */ - if (strncmp(relname, original_name, strlen(relname)) != 0 && strncasecmp(relname, original_name, strlen(relname)) == 0) + if ((strncmp(relname, original_name, strlen(relname)) != 0 && strncasecmp(relname, original_name, strlen(relname)) == 0) || + (relation->relpersistence == RELPERSISTENCE_TEMP && original_name[0] == '#' && strlen(original_name) >= NAMEDATALEN)) { /* * add "ALTER TABLE SET (bbf_original_table_name=)" to * alist so that original_name will be stored in pg_class.reloptions */ - cmd_orig_name = makeNode(AlterTableCmd); - cmd_orig_name->subtype = AT_SetRelOptions; - cmd_orig_name->def = (Node *) list_make1(makeDefElem(pstrdup(ATTOPTION_BBF_ORIGINAL_TABLE_NAME), (Node *) makeString(pstrdup(original_name)), -1)); - cmd_orig_name->behavior = DROP_RESTRICT; - cmd_orig_name->missing_ok = false; + cmd_orig_name = make_original_rel_name_cmd(original_name); stmt->cmds = lappend(stmt->cmds, cmd_orig_name); } diff --git a/contrib/babelfishpg_tsql/src/pl_handler.c b/contrib/babelfishpg_tsql/src/pl_handler.c index 5475d0d49ca..39a4034b971 100644 --- a/contrib/babelfishpg_tsql/src/pl_handler.c +++ b/contrib/babelfishpg_tsql/src/pl_handler.c @@ -175,7 +175,7 @@ extern PLtsql_function *find_cached_batch(int handle); extern void apply_post_compile_actions(PLtsql_function *func, InlineCodeBlockArgs *args); Datum sp_prepare(PG_FUNCTION_ARGS); Datum sp_unprepare(PG_FUNCTION_ARGS); -static List *transformSelectIntoStmt(CreateTableAsStmt *stmt); +static List *transformSelectIntoStmt(CreateTableAsStmt *stmt, const char *queryString); static char *get_oid_type_string(int type_oid); static int64 get_identity_into_args(Node *node); extern char *construct_unique_index_name(char *index_name, char *relation_name); @@ -239,6 +239,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; @@ -5386,6 +5387,34 @@ bbf_ProcessUtility(PlannedStmt *pstmt, List *partition_schemes = stmt->excludeOpNames; stmt->excludeOpNames = NIL; + + /* + * For indexes on temp tables, extract the full original + * name from the query string using name_location stored + * by the parser. Remove name_location from options as + * it is for internal use only. + */ + { + ListCell *lc; + foreach(lc, stmt->options) + { + DefElem *opt = (DefElem *) lfirst(lc); + if (strcmp(opt->defname, "name_location") == 0) + { + if (stmt->relation->relpersistence == RELPERSISTENCE_TEMP && + stmt->relation->relname[0] == '#' && original_name) + { + int loc = intVal(opt->arg); + char *full_name = extract_identifier(queryString + loc, NULL); + if (full_name) + original_name = full_name; + } + stmt->options = foreach_delete_current(stmt->options, lc); + break; + } + } + } + if (stmt->idxname && !stmt->isconstraint) stmt->idxname = construct_unique_index_name(stmt->idxname, stmt->relation->relname); /* @@ -8017,7 +8046,8 @@ get_identity_into_args(Node *node) } static List * -transformSelectIntoStmt(CreateTableAsStmt *stmt) +transformSelectIntoStmt +(CreateTableAsStmt *stmt, const char *queryString) { List *result; ListCell *elements; @@ -8258,6 +8288,31 @@ transformSelectIntoStmt(CreateTableAsStmt *stmt) } result = lappend(result, stmt); + + /* Store original name in reloption for SELECT INTO #temp with long names */ + if (into && into->rel && + into->rel->relpersistence == RELPERSISTENCE_TEMP && + into->rel->relname[0] == '#' && + into->rel->location >= 0 && queryString != NULL) + { + char *original_name = extract_identifier(queryString + into->rel->location, NULL); + + if (original_name && strlen(original_name) >= NAMEDATALEN) + { + if (!altstmt) + { + altstmt = makeNode(AlterTableStmt); + altstmt->relation = into->rel; + altstmt->objtype = OBJECT_TABLE; + altstmt->cmds = NIL; + } + altstmt->cmds = lappend(altstmt->cmds, make_original_rel_name_cmd(original_name)); + pfree(original_name); + } + else if (original_name) + pfree(original_name); + } + if (altstmt && list_length(altstmt->cmds) > 0) result = lappend(result, altstmt); @@ -8270,7 +8325,7 @@ void pltsql_bbfSelectIntoUtility(ParseState *pstate, PlannedStmt *pstmt, const c Node *parsetree = pstmt->utilityStmt; List *stmts; - stmts = transformSelectIntoStmt((CreateTableAsStmt *)parsetree); + stmts = transformSelectIntoStmt((CreateTableAsStmt *)parsetree, queryString); while (stmts != NIL) { Node *stmt = (Node *)linitial(stmts); diff --git a/contrib/babelfishpg_tsql/src/pltsql.h b/contrib/babelfishpg_tsql/src/pltsql.h index 728da7d42b6..f633c909f22 100644 --- a/contrib/babelfishpg_tsql/src/pltsql.h +++ b/contrib/babelfishpg_tsql/src/pltsql.h @@ -2331,6 +2331,7 @@ extern List *get_columns(char *index_stmt); extern char *replace_special_chars_fts_impl(char *input_str); extern bool is_unique_index(Oid relid, const char *index_name); extern void exec_grantschema_subcmds(const char *schema, const char *rolname, bool is_grant, bool with_grant_option, AclMode privilege); +extern AlterTableCmd *make_original_rel_name_cmd(const char *original_name); extern void exec_add_original_index_name(char *idxname, char *schemaname, char *original_name); extern int TsqlUTF8LengthInUTF16(const void *vin, int len); extern void TsqlCheckUTF16Length_bpchar(const char *s, int32 len, int32 maxlen, int charlen, bool isExplicit); diff --git a/contrib/babelfishpg_tsql/src/pltsql_utils.c b/contrib/babelfishpg_tsql/src/pltsql_utils.c index 585929c6f7f..c2fbe2f1a6b 100644 --- a/contrib/babelfishpg_tsql/src/pltsql_utils.c +++ b/contrib/babelfishpg_tsql/src/pltsql_utils.c @@ -1891,6 +1891,23 @@ exec_utility_cmd_helper(char *query_str) } extern const char *ATTOPTION_BBF_ORIGINAL_TABLE_NAME; +/* + * make_original_rel_name_cmd - Create an AlterTableCmd that stores the + * original untruncated name in bbf_original_rel_name reloption. + */ +AlterTableCmd * +make_original_rel_name_cmd(const char *original_name) +{ + 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; + return cmd; +} + void exec_add_original_index_name(char *idxname, char *schemaname, char *original_name) { 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..a00852e5d5a 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 @@ -255,6 +255,8 @@ long_bracket_login_test_user_abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxy -- 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 diff --git a/test/JDBC/expected/TestErrorsWithLongIdentifiers.out b/test/JDBC/expected/TestErrorsWithLongIdentifiers.out index 16e10e84aaa..63f8c3920d8 100644 --- a/test/JDBC/expected/TestErrorsWithLongIdentifiers.out +++ b/test/JDBC/expected/TestErrorsWithLongIdentifiers.out @@ -565,13 +565,9 @@ GO ~~ERROR (Message: The identifier that starts with 'babel6434_ううううううううううううううううううううううううううううううううううううううう' is too long. Maximum length is 128.)~~ --- Temp table with multibyte name (116 chars - should pass, to be fixed with BABEL-6433 ) +-- Temp table with multibyte name (116 chars - should pass) CREATE TABLE #babel6434_さささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささ (a int); GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: relation "#babel6434_さささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささ" does not exist)~~ - DROP TABLE IF EXISTS #babel6434_さささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささ; GO diff --git a/test/JDBC/expected/db_collation/temp_table_long_name_enr.out b/test/JDBC/expected/db_collation/temp_table_long_name_enr.out new file mode 100644 index 00000000000..09445ab3011 --- /dev/null +++ b/test/JDBC/expected/db_collation/temp_table_long_name_enr.out @@ -0,0 +1,942 @@ + +-- Tests for temp tables with long identifiers (>= NAMEDATALEN / 64 chars) +-- Validates OBJECT_ID, ALTER TABLE, DML, and DDL operations +-- ============================================================================= +-- Test 1: Basic OBJECT_ID lookup (direct and tempdb-prefixed) +-- ============================================================================= +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_direct +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Both should return the same OID +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') = OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test1_oid_match +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 2: OBJECT_ID with type argument +-- ============================================================================= +CREATE TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'U') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_U +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Type 'V' (view) should ideally return NULL for a table, but OBJECT_ID type filtering +-- for temp tables is a known pre-existing limitation (returns non-NULL regardless of type) +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'V') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_V_null +GO +~~START~~ +varchar +FAIL +~~END~~ + + +DROP TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x +GO + +-- ============================================================================= +-- Test 3: ALTER TABLE ADD COLUMN +-- ============================================================================= +CREATE TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a INT) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD b VARCHAR(50) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD c INT DEFAULT 0 +GO + +INSERT INTO #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a, b) VALUES (1, 'hello') +GO +~~ROW COUNT: 1~~ + + +SELECT a, b, c FROM #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO +~~START~~ +int#!#varchar#!#int +1#!#hello#!#0 +~~END~~ + + +DROP TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO + +-- ============================================================================= +-- Test 4: ALTER TABLE DROP COLUMN +-- ============================================================================= +CREATE TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit (a INT, b INT, c INT) +GO + +ALTER TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit DROP COLUMN c +GO + +INSERT INTO #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 5: ALTER TABLE ADD CONSTRAINT +-- ============================================================================= +CREATE TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen (id INT, val INT) +GO + +ALTER TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen ADD CONSTRAINT chk_val CHECK (val > 0) +GO + +-- Should succeed (val > 0) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (1, 10) +GO +~~ROW COUNT: 1~~ + + +-- Should fail (val = 0 violates constraint) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (2, 0) +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "#constraint_test_long_temp_table_name_that_exceeds_namedatalen" violates check constraint "chk_val")~~ + + +SELECT * FROM #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO +~~START~~ +int#!#int +1#!#10 +~~END~~ + + +DROP TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 6: CREATE INDEX on long-name temp table +-- ============================================================================= +CREATE TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (id INT, name VARCHAR(100)) +GO + +CREATE INDEX idx_name ON #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (name) +GO + +INSERT INTO #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen VALUES (1, 'alice'), (2, 'bob') +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen WHERE name = 'alice' +GO +~~START~~ +int#!#varchar +1#!#alice +~~END~~ + + +DROP TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 7: INSERT, UPDATE, DELETE on long-name temp table +-- ============================================================================= +CREATE TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx (id INT, val VARCHAR(20)) +GO + +INSERT INTO #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx VALUES (1, 'one'), (2, 'two'), (3, 'three') +GO +~~ROW COUNT: 3~~ + + +UPDATE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx SET val = 'TWO' WHERE id = 2 +GO +~~ROW COUNT: 1~~ + + +DELETE FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx WHERE id = 3 +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx ORDER BY id +GO +~~START~~ +int#!#varchar +1#!#one +2#!#TWO +~~END~~ + + +DROP TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 8: IF OBJECT_ID pattern (common guard pattern) +-- ============================================================================= +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +CREATE TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit (x INT) +GO + +-- Second time: should find it and drop +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- Should be gone now +SELECT CASE WHEN OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test8_dropped +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- ============================================================================= +-- Test 9: Multiple long-name temp tables in same session +-- ============================================================================= +CREATE TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx (a INT) +GO +CREATE TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit (b INT) +GO + +INSERT INTO #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx VALUES (1) +GO +~~ROW COUNT: 1~~ + +INSERT INTO #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit VALUES (2) +GO +~~ROW COUNT: 1~~ + + +SELECT a FROM #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +~~START~~ +int +1 +~~END~~ + +SELECT b FROM #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO +~~START~~ +int +2 +~~END~~ + + +-- Verify OBJECT_IDs are different +SELECT CASE WHEN OBJECT_ID('#multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx') != OBJECT_ID('#multi_second_long_temp_table_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test9_different_oids +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +DROP TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 10: TRUNCATE TABLE on long-name temp table +-- ============================================================================= +CREATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit (id INT) +GO + +INSERT INTO #truncate_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1), (2), (3) +GO +~~ROW COUNT: 3~~ + + +TRUNCATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +SELECT COUNT(*) AS cnt FROM #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int +0 +~~END~~ + + +DROP TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 11: Short temp table regression (ensure no breakage) +-- ============================================================================= +CREATE TABLE #short (a INT) +GO + +ALTER TABLE #short ADD b INT +GO + +SELECT CASE WHEN OBJECT_ID('#short') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test11_short +GO +~~START~~ +varchar +PASS +~~END~~ + + +INSERT INTO #short VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #short +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #short +GO + +-- ============================================================================= +-- Test 12: Temp table name at exact NAMEDATALEN boundary (63 chars) +-- ============================================================================= +CREATE TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA (x INT) +GO + +ALTER TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA ADD y INT +GO + +SELECT CASE WHEN OBJECT_ID('#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test12_boundary +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA +GO + +-- ============================================================================= +-- Test 13: Bracket-delimited long temp table name - OBJECT_ID +-- ============================================================================= +CREATE TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_objid +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] +GO + +-- ============================================================================= +-- Test 14: Bracket-delimited long temp table name - ALTER TABLE +-- ============================================================================= +CREATE TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] (a INT) +GO + +ALTER TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] ADD b VARCHAR(50) +GO + +INSERT INTO [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] VALUES (1, 'bracketed') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO +~~START~~ +int#!#varchar +1#!#bracketed +~~END~~ + + +DROP TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO + +-- ============================================================================= +-- Test 15: Bracket-delimited with mixed case (case preserved in brackets) +-- ============================================================================= +CREATE TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test15_mixed_case +GO +~~START~~ +varchar +PASS +~~END~~ + + +ALTER TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] ADD val INT +GO + +INSERT INTO [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] VALUES (1, 100) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO +~~START~~ +int#!#int +1#!#100 +~~END~~ + + +DROP TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO + +-- ============================================================================= +-- Test 16: OBJECT_NAME with bracket-created long temp table +-- ============================================================================= +CREATE TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] (a INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit')) AS test16_object_name_bracket +GO +~~START~~ +varchar +#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] +GO + +-- ============================================================================= +-- Test 17: Multibyte character temp table name exceeding NAMEDATALEN +-- ============================================================================= +CREATE TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test17_multibyte_long +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト')) AS test17_object_name +GO +~~START~~ +varchar +#??????????????????????NAMEDATALEN???????????? +~~END~~ + + +INSERT INTO #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト VALUES (42) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO +~~START~~ +int +42 +~~END~~ + + +DROP TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO + +-- ============================================================================= +-- Test 18: Bracket-delimited multibyte long temp table name +-- ============================================================================= +CREATE TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] (val INT) +GO + +SELECT CASE WHEN OBJECT_ID('#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test18_bracket_multibyte +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] +GO + +-- ============================================================================= +-- Test 19: Non-ENR temp table (has UDT dependency) - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TYPE dbo.my_udt FROM VARCHAR(100) +GO + +CREATE TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit (id INT, val dbo.my_udt) +GO + +INSERT INTO #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit VALUES (1, 'udt_test') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO +~~START~~ +int#!#varchar +1#!#udt_test +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit')) AS test19_object_name +GO +~~START~~ +varchar +#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt +GO + +-- ============================================================================= +-- Test 20: ENR long temp table - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim')) AS test20_object_name +GO +~~START~~ +varchar +#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +~~END~~ + + +DROP TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +GO + +-- ============================================================================= +-- Test 21: sp_tablecollations_100 with long temp table name +-- ============================================================================= +CREATE TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test (id INT, name VARCHAR(50)) +GO + +EXEC sp_tablecollations_100 '#sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test' +GO +~~START~~ +int#!#varchar#!#binary#!#nvarchar +1#!#id#!##!# +2#!#name#!#0904F00036#!#bbf_unicode_cp1_ci_ai +~~END~~ + + +DROP TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test +GO + +-- ============================================================================= +-- Test 22: Short temp table with mixed case - OBJECT_NAME preserves case +-- ============================================================================= +CREATE TABLE #ShortMixedCase (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#ShortMixedCase')) AS test22_case_preserved +GO +~~START~~ +varchar +#ShortMixedCase +~~END~~ + + +DROP TABLE #ShortMixedCase +GO + +-- ============================================================================= +-- Test 23: Short bracket-delimited temp table with mixed case +-- ============================================================================= +CREATE TABLE [#BracketShort_MixedCase] (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#BracketShort_MixedCase')) AS test23_bracket_case +GO +~~START~~ +varchar +#BracketShort_MixedCase +~~END~~ + + +DROP TABLE [#BracketShort_MixedCase] +GO + +-- ============================================================================= +-- Test 24: Non-ENR temp table - OBJECT_NAME shows full name (second UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt4 FROM INT +GO + +CREATE TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit (id INT, val dbo.my_udt4) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit')) AS test24_object_name +GO +~~START~~ +varchar +#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt4 +GO + +-- ============================================================================= +-- Test 25: Non-ENR temp table - OBJECT_NAME shows full name (third UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt3 FROM VARCHAR(50) +GO + +CREATE TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx (id INT, val dbo.my_udt3) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx')) AS test25_object_name +GO +~~START~~ +varchar +#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +~~END~~ + + +DROP TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +GO + +DROP TYPE dbo.my_udt3 +GO + +-- ============================================================================= +-- Test 26: Long index name on temp table - babelfish_get_enr_list shows full name +-- ============================================================================= +CREATE TABLE #idx_test_tmp (a INT, b VARCHAR(50)) +GO + +CREATE INDEX #very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx ON #idx_test_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index%' +GO +~~START~~ +text +#very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #idx_test_tmp +GO + +-- ============================================================================= +-- Test 27: Multiple long index names on temp table +-- ============================================================================= +CREATE TABLE #idx_multi_tmp (a INT, b INT, c INT) +GO + +CREATE INDEX #long_idx_first_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(a) +GO + +CREATE INDEX #long_idx_second_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(b) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#long_idx_%' +GO +~~START~~ +text +#long_idx_first_column_name_exceeding_the_namedatalen_limit_test +#long_idx_second_column_name_exceeding_the_namedatalen_limit_test +~~END~~ + + +DROP TABLE #idx_multi_tmp +GO + +-- ============================================================================= +-- Test 28: Mixed case long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_case_tmp (a INT) +GO + +CREATE INDEX MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim ON #idx_case_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'MixedCase[_]Long[_]Index%' +GO +~~START~~ +text +MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim +~~END~~ + + +DROP TABLE #idx_case_tmp +GO + +-- ============================================================================= +-- Test 29: Multibyte long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_mb_tmp (a INT) +GO + +CREATE INDEX インデックス名前が非常に長いテスト用のインデックスでNAMEDATALEN制限を超える ON #idx_mb_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'インデックス名前%' +GO +~~START~~ +text +??????????????????????????NAMEDATALEN?????? +~~END~~ + + +DROP TABLE #idx_mb_tmp +GO + +-- ============================================================================= +-- Test 30: Long index name on non-ENR temp table (UDT dependency) +-- ============================================================================= +CREATE TYPE dbo.my_udt_idx FROM INT +GO + +CREATE TABLE #non_enr_idx_test (a INT, b dbo.my_udt_idx) +GO + +CREATE INDEX long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit ON #non_enr_idx_test(a) +GO + +INSERT INTO #non_enr_idx_test VALUES (1, 100), (2, 200) +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #non_enr_idx_test WHERE a = 2 +GO +~~START~~ +int#!#int +2#!#200 +~~END~~ + + +-- Verify original name stored in reloptions +SELECT CASE WHEN (SELECT array_to_string(reloptions, ',') FROM pg_class WHERE relname LIKE 'long_index_name_on_non_enr%') LIKE '%bbf_original_rel_name=long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit%' THEN 'PASS' ELSE 'FAIL' END AS test30_reloption +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #non_enr_idx_test +GO + +DROP TYPE dbo.my_udt_idx +GO + +-- ============================================================================= +-- Test 31: SELECT INTO with long temp table name +-- ============================================================================= +SELECT 1 AS id, 'hello' AS val INTO #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +SELECT * FROM #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO +~~START~~ +int#!#varchar +1#!#hello +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx')) AS test31_select_into +GO +~~START~~ +varchar +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#select_into_long%' +GO +~~START~~ +text +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 32: Cached plan - long index name on temp table via stored procedure +-- Verifies that the full original name is stored correctly across executions +-- ============================================================================= +CREATE PROCEDURE sp_long_idx_cached_plan AS +BEGIN + CREATE TABLE #cached_plan_tmp (a INT, b INT) + CREATE INDEX #very_long_index_name_cached_plan_test_exceeding_namedatalen_lim ON #cached_plan_tmp(a) + SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index_name_cached%' + DROP TABLE #cached_plan_tmp +END +GO + +-- First execution +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Second execution (cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Third execution (definitely cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +DROP PROCEDURE sp_long_idx_cached_plan +GO + +-- ============================================================================= +-- Test 33: sp_prepare/sp_execute - guarantees cached plan reuse for long index +-- ============================================================================= +DECLARE @handle INT +EXEC sp_prepare @handle OUTPUT, NULL, N'CREATE TABLE #sp_prep_tmp (a INT); CREATE INDEX #very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit ON #sp_prep_tmp(a); SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE ''#very_long_index_name_sp_prepare%''; DROP TABLE #sp_prep_tmp' +EXEC sp_execute @handle +EXEC sp_execute @handle +EXEC sp_unprepare @handle +GO +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + + +-- ============================================================================= +-- Test 34: Same long index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx (a INT, b INT) +GO + +CREATE TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx (x INT, y INT) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx(a) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#same_long_index%' ORDER BY relname +GO +~~START~~ +text +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +~~END~~ + + +DROP TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +DROP TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +-- ============================================================================= +-- Test 35: Same short index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit (a INT) +GO + +CREATE TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit (x INT) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit(a) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#short_idx_tbl%' ORDER BY relname +GO +~~START~~ +text +#short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +#short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +GO + +DROP TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +GO diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/temp_table_long_name_enr.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/temp_table_long_name_enr.out new file mode 100644 index 00000000000..2d22c7b5e8b --- /dev/null +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/temp_table_long_name_enr.out @@ -0,0 +1,942 @@ + +-- Tests for temp tables with long identifiers (>= NAMEDATALEN / 64 chars) +-- Validates OBJECT_ID, ALTER TABLE, DML, and DDL operations +-- ============================================================================= +-- Test 1: Basic OBJECT_ID lookup (direct and tempdb-prefixed) +-- ============================================================================= +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_direct +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Both should return the same OID +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') = OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test1_oid_match +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 2: OBJECT_ID with type argument +-- ============================================================================= +CREATE TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'U') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_U +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Type 'V' (view) should ideally return NULL for a table, but OBJECT_ID type filtering +-- for temp tables is a known pre-existing limitation (returns non-NULL regardless of type) +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'V') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_V_null +GO +~~START~~ +varchar +FAIL +~~END~~ + + +DROP TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x +GO + +-- ============================================================================= +-- Test 3: ALTER TABLE ADD COLUMN +-- ============================================================================= +CREATE TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a INT) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD b VARCHAR(50) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD c INT DEFAULT 0 +GO + +INSERT INTO #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a, b) VALUES (1, 'hello') +GO +~~ROW COUNT: 1~~ + + +SELECT a, b, c FROM #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO +~~START~~ +int#!#varchar#!#int +1#!#hello#!#0 +~~END~~ + + +DROP TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO + +-- ============================================================================= +-- Test 4: ALTER TABLE DROP COLUMN +-- ============================================================================= +CREATE TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit (a INT, b INT, c INT) +GO + +ALTER TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit DROP COLUMN c +GO + +INSERT INTO #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 5: ALTER TABLE ADD CONSTRAINT +-- ============================================================================= +CREATE TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen (id INT, val INT) +GO + +ALTER TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen ADD CONSTRAINT chk_val CHECK (val > 0) +GO + +-- Should succeed (val > 0) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (1, 10) +GO +~~ROW COUNT: 1~~ + + +-- Should fail (val = 0 violates constraint) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (2, 0) +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "#constraint_test_long_temp_table_name_that_exceeds_namedatalen" violates check constraint "chk_val")~~ + + +SELECT * FROM #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO +~~START~~ +int#!#int +1#!#10 +~~END~~ + + +DROP TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 6: CREATE INDEX on long-name temp table +-- ============================================================================= +CREATE TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (id INT, name VARCHAR(100)) +GO + +CREATE INDEX idx_name ON #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (name) +GO + +INSERT INTO #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen VALUES (1, 'alice'), (2, 'bob') +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen WHERE name = 'alice' +GO +~~START~~ +int#!#varchar +1#!#alice +~~END~~ + + +DROP TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 7: INSERT, UPDATE, DELETE on long-name temp table +-- ============================================================================= +CREATE TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx (id INT, val VARCHAR(20)) +GO + +INSERT INTO #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx VALUES (1, 'one'), (2, 'two'), (3, 'three') +GO +~~ROW COUNT: 3~~ + + +UPDATE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx SET val = 'TWO' WHERE id = 2 +GO +~~ROW COUNT: 1~~ + + +DELETE FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx WHERE id = 3 +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx ORDER BY id +GO +~~START~~ +int#!#varchar +1#!#one +2#!#TWO +~~END~~ + + +DROP TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 8: IF OBJECT_ID pattern (common guard pattern) +-- ============================================================================= +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +CREATE TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit (x INT) +GO + +-- Second time: should find it and drop +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- Should be gone now +SELECT CASE WHEN OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test8_dropped +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- ============================================================================= +-- Test 9: Multiple long-name temp tables in same session +-- ============================================================================= +CREATE TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx (a INT) +GO +CREATE TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit (b INT) +GO + +INSERT INTO #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx VALUES (1) +GO +~~ROW COUNT: 1~~ + +INSERT INTO #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit VALUES (2) +GO +~~ROW COUNT: 1~~ + + +SELECT a FROM #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +~~START~~ +int +1 +~~END~~ + +SELECT b FROM #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO +~~START~~ +int +2 +~~END~~ + + +-- Verify OBJECT_IDs are different +SELECT CASE WHEN OBJECT_ID('#multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx') != OBJECT_ID('#multi_second_long_temp_table_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test9_different_oids +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +DROP TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 10: TRUNCATE TABLE on long-name temp table +-- ============================================================================= +CREATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit (id INT) +GO + +INSERT INTO #truncate_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1), (2), (3) +GO +~~ROW COUNT: 3~~ + + +TRUNCATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +SELECT COUNT(*) AS cnt FROM #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int +0 +~~END~~ + + +DROP TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 11: Short temp table regression (ensure no breakage) +-- ============================================================================= +CREATE TABLE #short (a INT) +GO + +ALTER TABLE #short ADD b INT +GO + +SELECT CASE WHEN OBJECT_ID('#short') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test11_short +GO +~~START~~ +varchar +PASS +~~END~~ + + +INSERT INTO #short VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #short +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #short +GO + +-- ============================================================================= +-- Test 12: Temp table name at exact NAMEDATALEN boundary (63 chars) +-- ============================================================================= +CREATE TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA (x INT) +GO + +ALTER TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA ADD y INT +GO + +SELECT CASE WHEN OBJECT_ID('#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test12_boundary +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA +GO + +-- ============================================================================= +-- Test 13: Bracket-delimited long temp table name - OBJECT_ID +-- ============================================================================= +CREATE TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_objid +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] +GO + +-- ============================================================================= +-- Test 14: Bracket-delimited long temp table name - ALTER TABLE +-- ============================================================================= +CREATE TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] (a INT) +GO + +ALTER TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] ADD b VARCHAR(50) +GO + +INSERT INTO [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] VALUES (1, 'bracketed') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO +~~START~~ +int#!#varchar +1#!#bracketed +~~END~~ + + +DROP TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO + +-- ============================================================================= +-- Test 15: Bracket-delimited with mixed case (case preserved in brackets) +-- ============================================================================= +CREATE TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test15_mixed_case +GO +~~START~~ +varchar +PASS +~~END~~ + + +ALTER TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] ADD val INT +GO + +INSERT INTO [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] VALUES (1, 100) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO +~~START~~ +int#!#int +1#!#100 +~~END~~ + + +DROP TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO + +-- ============================================================================= +-- Test 16: OBJECT_NAME with bracket-created long temp table +-- ============================================================================= +CREATE TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] (a INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit')) AS test16_object_name_bracket +GO +~~START~~ +varchar +#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] +GO + +-- ============================================================================= +-- Test 17: Multibyte character temp table name exceeding NAMEDATALEN +-- ============================================================================= +CREATE TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test17_multibyte_long +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト')) AS test17_object_name +GO +~~START~~ +varchar +#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +~~END~~ + + +INSERT INTO #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト VALUES (42) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO +~~START~~ +int +42 +~~END~~ + + +DROP TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO + +-- ============================================================================= +-- Test 18: Bracket-delimited multibyte long temp table name +-- ============================================================================= +CREATE TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] (val INT) +GO + +SELECT CASE WHEN OBJECT_ID('#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test18_bracket_multibyte +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] +GO + +-- ============================================================================= +-- Test 19: Non-ENR temp table (has UDT dependency) - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TYPE dbo.my_udt FROM VARCHAR(100) +GO + +CREATE TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit (id INT, val dbo.my_udt) +GO + +INSERT INTO #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit VALUES (1, 'udt_test') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO +~~START~~ +int#!#varchar +1#!#udt_test +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit')) AS test19_object_name +GO +~~START~~ +varchar +#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt +GO + +-- ============================================================================= +-- Test 20: ENR long temp table - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim')) AS test20_object_name +GO +~~START~~ +varchar +#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +~~END~~ + + +DROP TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +GO + +-- ============================================================================= +-- Test 21: sp_tablecollations_100 with long temp table name +-- ============================================================================= +CREATE TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test (id INT, name VARCHAR(50)) +GO + +EXEC sp_tablecollations_100 '#sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test' +GO +~~START~~ +int#!#varchar#!#binary#!#nvarchar +1#!#id#!##!# +2#!#name#!#0408D00000#!#chinese_prc_ci_as +~~END~~ + + +DROP TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test +GO + +-- ============================================================================= +-- Test 22: Short temp table with mixed case - OBJECT_NAME preserves case +-- ============================================================================= +CREATE TABLE #ShortMixedCase (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#ShortMixedCase')) AS test22_case_preserved +GO +~~START~~ +varchar +#ShortMixedCase +~~END~~ + + +DROP TABLE #ShortMixedCase +GO + +-- ============================================================================= +-- Test 23: Short bracket-delimited temp table with mixed case +-- ============================================================================= +CREATE TABLE [#BracketShort_MixedCase] (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#BracketShort_MixedCase')) AS test23_bracket_case +GO +~~START~~ +varchar +#BracketShort_MixedCase +~~END~~ + + +DROP TABLE [#BracketShort_MixedCase] +GO + +-- ============================================================================= +-- Test 24: Non-ENR temp table - OBJECT_NAME shows full name (second UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt4 FROM INT +GO + +CREATE TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit (id INT, val dbo.my_udt4) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit')) AS test24_object_name +GO +~~START~~ +varchar +#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt4 +GO + +-- ============================================================================= +-- Test 25: Non-ENR temp table - OBJECT_NAME shows full name (third UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt3 FROM VARCHAR(50) +GO + +CREATE TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx (id INT, val dbo.my_udt3) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx')) AS test25_object_name +GO +~~START~~ +varchar +#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +~~END~~ + + +DROP TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +GO + +DROP TYPE dbo.my_udt3 +GO + +-- ============================================================================= +-- Test 26: Long index name on temp table - babelfish_get_enr_list shows full name +-- ============================================================================= +CREATE TABLE #idx_test_tmp (a INT, b VARCHAR(50)) +GO + +CREATE INDEX #very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx ON #idx_test_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index%' +GO +~~START~~ +text +#very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #idx_test_tmp +GO + +-- ============================================================================= +-- Test 27: Multiple long index names on temp table +-- ============================================================================= +CREATE TABLE #idx_multi_tmp (a INT, b INT, c INT) +GO + +CREATE INDEX #long_idx_first_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(a) +GO + +CREATE INDEX #long_idx_second_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(b) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#long_idx_%' +GO +~~START~~ +text +#long_idx_first_column_name_exceeding_the_namedatalen_limit_test +#long_idx_second_column_name_exceeding_the_namedatalen_limit_test +~~END~~ + + +DROP TABLE #idx_multi_tmp +GO + +-- ============================================================================= +-- Test 28: Mixed case long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_case_tmp (a INT) +GO + +CREATE INDEX MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim ON #idx_case_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'MixedCase[_]Long[_]Index%' +GO +~~START~~ +text +MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim +~~END~~ + + +DROP TABLE #idx_case_tmp +GO + +-- ============================================================================= +-- Test 29: Multibyte long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_mb_tmp (a INT) +GO + +CREATE INDEX インデックス名前が非常に長いテスト用のインデックスでNAMEDATALEN制限を超える ON #idx_mb_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'インデックス名前%' +GO +~~START~~ +text +インデックス名前が非常に長いテスト用のインデックスでNAMEDATALEN制限を超える +~~END~~ + + +DROP TABLE #idx_mb_tmp +GO + +-- ============================================================================= +-- Test 30: Long index name on non-ENR temp table (UDT dependency) +-- ============================================================================= +CREATE TYPE dbo.my_udt_idx FROM INT +GO + +CREATE TABLE #non_enr_idx_test (a INT, b dbo.my_udt_idx) +GO + +CREATE INDEX long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit ON #non_enr_idx_test(a) +GO + +INSERT INTO #non_enr_idx_test VALUES (1, 100), (2, 200) +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #non_enr_idx_test WHERE a = 2 +GO +~~START~~ +int#!#int +2#!#200 +~~END~~ + + +-- Verify original name stored in reloptions +SELECT CASE WHEN (SELECT array_to_string(reloptions, ',') FROM pg_class WHERE relname LIKE 'long_index_name_on_non_enr%') LIKE '%bbf_original_rel_name=long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit%' THEN 'PASS' ELSE 'FAIL' END AS test30_reloption +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #non_enr_idx_test +GO + +DROP TYPE dbo.my_udt_idx +GO + +-- ============================================================================= +-- Test 31: SELECT INTO with long temp table name +-- ============================================================================= +SELECT 1 AS id, 'hello' AS val INTO #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +SELECT * FROM #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO +~~START~~ +int#!#varchar +1#!#hello +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx')) AS test31_select_into +GO +~~START~~ +varchar +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#select_into_long%' +GO +~~START~~ +text +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 32: Cached plan - long index name on temp table via stored procedure +-- Verifies that the full original name is stored correctly across executions +-- ============================================================================= +CREATE PROCEDURE sp_long_idx_cached_plan AS +BEGIN + CREATE TABLE #cached_plan_tmp (a INT, b INT) + CREATE INDEX #very_long_index_name_cached_plan_test_exceeding_namedatalen_lim ON #cached_plan_tmp(a) + SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index_name_cached%' + DROP TABLE #cached_plan_tmp +END +GO + +-- First execution +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Second execution (cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Third execution (definitely cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +DROP PROCEDURE sp_long_idx_cached_plan +GO + +-- ============================================================================= +-- Test 33: sp_prepare/sp_execute - guarantees cached plan reuse for long index +-- ============================================================================= +DECLARE @handle INT +EXEC sp_prepare @handle OUTPUT, NULL, N'CREATE TABLE #sp_prep_tmp (a INT); CREATE INDEX #very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit ON #sp_prep_tmp(a); SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE ''#very_long_index_name_sp_prepare%''; DROP TABLE #sp_prep_tmp' +EXEC sp_execute @handle +EXEC sp_execute @handle +EXEC sp_unprepare @handle +GO +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + + +-- ============================================================================= +-- Test 34: Same long index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx (a INT, b INT) +GO + +CREATE TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx (x INT, y INT) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx(a) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#same_long_index%' ORDER BY relname +GO +~~START~~ +text +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +~~END~~ + + +DROP TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +DROP TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +-- ============================================================================= +-- Test 35: Same short index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit (a INT) +GO + +CREATE TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit (x INT) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit(a) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#short_idx_tbl%' ORDER BY relname +GO +~~START~~ +text +#short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +#short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +GO + +DROP TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +GO diff --git a/test/JDBC/expected/temp_table_long_name_enr-vu-cleanup.out b/test/JDBC/expected/temp_table_long_name_enr-vu-cleanup.out new file mode 100644 index 00000000000..f088760ff75 --- /dev/null +++ b/test/JDBC/expected/temp_table_long_name_enr-vu-cleanup.out @@ -0,0 +1,29 @@ +DROP PROCEDURE temp_long_name_enr_basic_proc +GO + +DROP PROCEDURE temp_long_name_enr_alter_proc +GO + +DROP PROCEDURE temp_long_name_enr_join_proc +GO + +DROP PROCEDURE temp_long_name_enr_subquery_proc +GO + +DROP PROCEDURE temp_long_name_enr_insert_select_proc +GO + +DROP PROCEDURE temp_long_name_enr_boundary_proc +GO + +DROP PROCEDURE temp_long_name_enr_coexist_proc +GO + +DROP PROCEDURE temp_long_name_enr_index_proc +GO + +DROP PROCEDURE temp_long_name_enr_reuse_proc +GO + +DROP PROCEDURE temp_long_name_enr_long_index_name_proc +GO diff --git a/test/JDBC/expected/temp_table_long_name_enr-vu-prepare.out b/test/JDBC/expected/temp_table_long_name_enr-vu-prepare.out new file mode 100644 index 00000000000..d7dafd66db6 --- /dev/null +++ b/test/JDBC/expected/temp_table_long_name_enr-vu-prepare.out @@ -0,0 +1,132 @@ + +-- Procedures to test #temp tables with names exceeding NAMEDATALEN (63 bytes). +-- The ENR must store the full untruncated name so subsequent lookups match. +CREATE PROCEDURE temp_long_name_enr_basic_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT, b VARCHAR(50)) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit VALUES (1, 'hello') + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds%' + SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END AS object_id_check + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit + SELECT COUNT(*) AS enr_count_after_drop FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit%' +END +GO + +CREATE PROCEDURE temp_long_name_enr_alter_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter (a INT) + ALTER TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter ADD b VARCHAR(20) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter VALUES (1, 'added') + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter + ALTER TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter DROP COLUMN b + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter +END +GO + +CREATE PROCEDURE temp_long_name_enr_join_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins (id INT, val VARCHAR(10)) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins VALUES (1, 'aaa'), (2, 'bbb') + SELECT t1.id, t2.val FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins t1 JOIN #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins t2 ON t1.id = t2.id WHERE t1.id = 1 + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins +END +GO + +CREATE PROCEDURE temp_long_name_enr_subquery_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry (x INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry VALUES (10), (20), (30) + SELECT * FROM (SELECT x FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry WHERE x > 10) sub ORDER BY x + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry +END +GO + +CREATE PROCEDURE temp_long_name_enr_insert_select_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source (n INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source VALUES (1), (2), (3) + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target (n INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target SELECT n FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source WHERE n > 1 + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target ORDER BY n + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target +END +GO + + +CREATE PROCEDURE temp_long_name_enr_boundary_proc +AS +BEGIN + -- Name exactly 63 bytes (fits in NAMEDATALEN) + CREATE TABLE #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes (x INT) + INSERT INTO #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes VALUES (99) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_exactly%' + SELECT * FROM #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes + DROP TABLE #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes + -- Name exactly 64 bytes (exceeds NAMEDATALEN by 1) + CREATE TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess (y INT) + INSERT INTO #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess VALUES (100) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_just_over%' + SELECT * FROM #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess + DROP TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +END +GO + +CREATE PROCEDURE temp_long_name_enr_coexist_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_coexist_first_table_in_session (a INT) + CREATE TABLE #temp_table_with_a_very_long_name_coexist_second_table_in_session (b INT) + SELECT relname FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_coexist%' ORDER BY relname + INSERT INTO #temp_table_with_a_very_long_name_coexist_first_table_in_session VALUES (1) + INSERT INTO #temp_table_with_a_very_long_name_coexist_second_table_in_session VALUES (2) + SELECT a, b FROM #temp_table_with_a_very_long_name_coexist_first_table_in_session, #temp_table_with_a_very_long_name_coexist_second_table_in_session + DROP TABLE #temp_table_with_a_very_long_name_coexist_first_table_in_session + DROP TABLE #temp_table_with_a_very_long_name_coexist_second_table_in_session +END +GO + +CREATE PROCEDURE temp_long_name_enr_index_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index (id INT, val INT) + CREATE INDEX idx_long_temp ON #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index (id) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index VALUES (1, 100), (2, 200) + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index WHERE id = 2 + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index +END +GO + +CREATE PROCEDURE temp_long_name_enr_long_index_name_proc +AS +BEGIN + CREATE TABLE #tmp_idx (a INT, b INT) + CREATE INDEX long_index_name_on_temp_table_exceeding_namedatalen_limit_in_proc ON #tmp_idx(a) + SELECT relname FROM sys.babelfish_get_enr_list() WHERE relname LIKE 'long_index_name_on_temp%' + SELECT OBJECT_NAME(reloid) FROM sys.babelfish_get_enr_list() WHERE relname LIKE '%long_index%' + DROP TABLE #tmp_idx +END +GO + +CREATE PROCEDURE temp_long_name_enr_reuse_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse (v INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse VALUES (1) + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + -- Recreate with same name + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse (v INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse VALUES (2) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse%' + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse +END +GO diff --git a/test/JDBC/expected/temp_table_long_name_enr-vu-verify.out b/test/JDBC/expected/temp_table_long_name_enr-vu-verify.out new file mode 100644 index 00000000000..5a424395c82 --- /dev/null +++ b/test/JDBC/expected/temp_table_long_name_enr-vu-verify.out @@ -0,0 +1,249 @@ + +-- Direct creation tests (session-level, not inside a procedure) +-- Scenario 1: Basic direct CREATE, INSERT, SELECT with ENR validation +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT, b VARCHAR(50)) +GO + +SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds%' +GO +~~START~~ +text#!#int +#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit#!#64 +~~END~~ + + +INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit VALUES (1, 'hello') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO +~~START~~ +int#!#varchar +1#!#hello +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END AS object_id_check +GO +~~START~~ +varchar +FOUND +~~END~~ + + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +SELECT COUNT(*) AS enr_count_after_drop FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit%' +GO +~~START~~ +int +0 +~~END~~ + + +-- Scenario 2: Direct boundary test (64 bytes) +CREATE TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess (y INT) +GO + +INSERT INTO #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess VALUES (100) +GO +~~ROW COUNT: 1~~ + + +SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_just_over%' +GO +~~START~~ +text#!#int +#temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess#!#64 +~~END~~ + + +SELECT * FROM #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +GO +~~START~~ +int +100 +~~END~~ + + +DROP TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +GO + + +-- Procedure-based tests (validates behavior inside stored procedures) +-- Scenario 3: Basic CREATE, INSERT, SELECT, DROP with ENR validation +EXEC temp_long_name_enr_basic_proc +GO +~~ROW COUNT: 1~~ + +~~START~~ +int#!#varchar +1#!#hello +~~END~~ + +~~START~~ +text#!#int +#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit#!#64 +~~END~~ + +~~START~~ +varchar +FOUND +~~END~~ + +~~START~~ +int +0 +~~END~~ + + +-- Scenario 4: ALTER TABLE on long-name temp table +EXEC temp_long_name_enr_alter_proc +GO +~~ROW COUNT: 1~~ + +~~START~~ +int#!#varchar +1#!#added +~~END~~ + +~~START~~ +int +1 +~~END~~ + + +-- Scenario 5: Multiple references in one batch (self-join) +EXEC temp_long_name_enr_join_proc +GO +~~ROW COUNT: 2~~ + +~~START~~ +int#!#varchar +1#!#aaa +~~END~~ + + +-- Scenario 6: Subquery referencing long-name temp table +EXEC temp_long_name_enr_subquery_proc +GO +~~ROW COUNT: 3~~ + +~~START~~ +int +20 +30 +~~END~~ + + +-- Scenario 7: INSERT...SELECT between two long-name temp tables +EXEC temp_long_name_enr_insert_select_proc +GO +~~ROW COUNT: 3~~ + +~~ROW COUNT: 2~~ + +~~START~~ +int +2 +3 +~~END~~ + + +-- Scenario 8 & 9: Boundary tests (63 bytes and 64 bytes) +EXEC temp_long_name_enr_boundary_proc +GO +~~ROW COUNT: 1~~ + +~~START~~ +text#!#int +#temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes#!#63 +~~END~~ + +~~START~~ +int +99 +~~END~~ + +~~ROW COUNT: 1~~ + +~~START~~ +text#!#int +#temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess#!#64 +~~END~~ + +~~START~~ +int +100 +~~END~~ + + +-- Scenario 10: Two long-name temp tables coexisting +EXEC temp_long_name_enr_coexist_proc +GO +~~START~~ +text +#temp_table_with_a_very_long_name_coexist_first_table_in_session +#temp_table_with_a_very_long_name_coexist_second_table_in_session +~~END~~ + +~~ROW COUNT: 1~~ + +~~ROW COUNT: 1~~ + +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +-- Scenario 11: CREATE INDEX on long-name temp table +EXEC temp_long_name_enr_index_proc +GO +~~ROW COUNT: 2~~ + +~~START~~ +int#!#int +2#!#200 +~~END~~ + + +-- Scenario 12: Recreate same long-name temp table after drop +EXEC temp_long_name_enr_reuse_proc +GO +~~ROW COUNT: 1~~ + +~~START~~ +int +1 +~~END~~ + +~~ROW COUNT: 1~~ + +~~START~~ +text#!#int +#temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse#!#64 +~~END~~ + +~~START~~ +int +2 +~~END~~ + + +-- Scenario 13: Long index name shows full name in get_enr_list and OBJECT_NAME +EXEC temp_long_name_enr_long_index_name_proc +GO +~~START~~ +text +long_index_name_on_temp_table_exceeding_namedatalen_limit_in_proc +~~END~~ + +~~START~~ +varchar +long_index_name_on_temp_table_exceeding_namedatalen_limit_in_proc +~~END~~ + diff --git a/test/JDBC/expected/temp_table_long_name_enr.out b/test/JDBC/expected/temp_table_long_name_enr.out new file mode 100644 index 00000000000..8d129e1cc73 --- /dev/null +++ b/test/JDBC/expected/temp_table_long_name_enr.out @@ -0,0 +1,942 @@ + +-- Tests for temp tables with long identifiers (>= NAMEDATALEN / 64 chars) +-- Validates OBJECT_ID, ALTER TABLE, DML, and DDL operations +-- ============================================================================= +-- Test 1: Basic OBJECT_ID lookup (direct and tempdb-prefixed) +-- ============================================================================= +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_direct +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Both should return the same OID +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') = OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test1_oid_match +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 2: OBJECT_ID with type argument +-- ============================================================================= +CREATE TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'U') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_U +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- Type 'V' (view) should ideally return NULL for a table, but OBJECT_ID type filtering +-- for temp tables is a known pre-existing limitation (returns non-NULL regardless of type) +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'V') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_V_null +GO +~~START~~ +varchar +FAIL +~~END~~ + + +DROP TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x +GO + +-- ============================================================================= +-- Test 3: ALTER TABLE ADD COLUMN +-- ============================================================================= +CREATE TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a INT) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD b VARCHAR(50) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD c INT DEFAULT 0 +GO + +INSERT INTO #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a, b) VALUES (1, 'hello') +GO +~~ROW COUNT: 1~~ + + +SELECT a, b, c FROM #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO +~~START~~ +int#!#varchar#!#int +1#!#hello#!#0 +~~END~~ + + +DROP TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO + +-- ============================================================================= +-- Test 4: ALTER TABLE DROP COLUMN +-- ============================================================================= +CREATE TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit (a INT, b INT, c INT) +GO + +ALTER TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit DROP COLUMN c +GO + +INSERT INTO #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 5: ALTER TABLE ADD CONSTRAINT +-- ============================================================================= +CREATE TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen (id INT, val INT) +GO + +ALTER TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen ADD CONSTRAINT chk_val CHECK (val > 0) +GO + +-- Should succeed (val > 0) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (1, 10) +GO +~~ROW COUNT: 1~~ + + +-- Should fail (val = 0 violates constraint) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (2, 0) +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "#constraint_test_long_temp_table_name_that_exceeds_namedatalen" violates check constraint "chk_val")~~ + + +SELECT * FROM #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO +~~START~~ +int#!#int +1#!#10 +~~END~~ + + +DROP TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 6: CREATE INDEX on long-name temp table +-- ============================================================================= +CREATE TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (id INT, name VARCHAR(100)) +GO + +CREATE INDEX idx_name ON #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (name) +GO + +INSERT INTO #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen VALUES (1, 'alice'), (2, 'bob') +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen WHERE name = 'alice' +GO +~~START~~ +int#!#varchar +1#!#alice +~~END~~ + + +DROP TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 7: INSERT, UPDATE, DELETE on long-name temp table +-- ============================================================================= +CREATE TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx (id INT, val VARCHAR(20)) +GO + +INSERT INTO #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx VALUES (1, 'one'), (2, 'two'), (3, 'three') +GO +~~ROW COUNT: 3~~ + + +UPDATE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx SET val = 'TWO' WHERE id = 2 +GO +~~ROW COUNT: 1~~ + + +DELETE FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx WHERE id = 3 +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx ORDER BY id +GO +~~START~~ +int#!#varchar +1#!#one +2#!#TWO +~~END~~ + + +DROP TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 8: IF OBJECT_ID pattern (common guard pattern) +-- ============================================================================= +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +CREATE TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit (x INT) +GO + +-- Second time: should find it and drop +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- Should be gone now +SELECT CASE WHEN OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test8_dropped +GO +~~START~~ +varchar +PASS +~~END~~ + + +-- ============================================================================= +-- Test 9: Multiple long-name temp tables in same session +-- ============================================================================= +CREATE TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx (a INT) +GO +CREATE TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit (b INT) +GO + +INSERT INTO #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx VALUES (1) +GO +~~ROW COUNT: 1~~ + +INSERT INTO #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit VALUES (2) +GO +~~ROW COUNT: 1~~ + + +SELECT a FROM #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +~~START~~ +int +1 +~~END~~ + +SELECT b FROM #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO +~~START~~ +int +2 +~~END~~ + + +-- Verify OBJECT_IDs are different +SELECT CASE WHEN OBJECT_ID('#multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx') != OBJECT_ID('#multi_second_long_temp_table_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test9_different_oids +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +DROP TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 10: TRUNCATE TABLE on long-name temp table +-- ============================================================================= +CREATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit (id INT) +GO + +INSERT INTO #truncate_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1), (2), (3) +GO +~~ROW COUNT: 3~~ + + +TRUNCATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +SELECT COUNT(*) AS cnt FROM #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO +~~START~~ +int +0 +~~END~~ + + +DROP TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 11: Short temp table regression (ensure no breakage) +-- ============================================================================= +CREATE TABLE #short (a INT) +GO + +ALTER TABLE #short ADD b INT +GO + +SELECT CASE WHEN OBJECT_ID('#short') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test11_short +GO +~~START~~ +varchar +PASS +~~END~~ + + +INSERT INTO #short VALUES (1, 2) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #short +GO +~~START~~ +int#!#int +1#!#2 +~~END~~ + + +DROP TABLE #short +GO + +-- ============================================================================= +-- Test 12: Temp table name at exact NAMEDATALEN boundary (63 chars) +-- ============================================================================= +CREATE TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA (x INT) +GO + +ALTER TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA ADD y INT +GO + +SELECT CASE WHEN OBJECT_ID('#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test12_boundary +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA +GO + +-- ============================================================================= +-- Test 13: Bracket-delimited long temp table name - OBJECT_ID +-- ============================================================================= +CREATE TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_objid +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT CASE WHEN OBJECT_ID('tempdb..#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_tempdb +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] +GO + +-- ============================================================================= +-- Test 14: Bracket-delimited long temp table name - ALTER TABLE +-- ============================================================================= +CREATE TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] (a INT) +GO + +ALTER TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] ADD b VARCHAR(50) +GO + +INSERT INTO [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] VALUES (1, 'bracketed') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO +~~START~~ +int#!#varchar +1#!#bracketed +~~END~~ + + +DROP TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO + +-- ============================================================================= +-- Test 15: Bracket-delimited with mixed case (case preserved in brackets) +-- ============================================================================= +CREATE TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test15_mixed_case +GO +~~START~~ +varchar +PASS +~~END~~ + + +ALTER TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] ADD val INT +GO + +INSERT INTO [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] VALUES (1, 100) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO +~~START~~ +int#!#int +1#!#100 +~~END~~ + + +DROP TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO + +-- ============================================================================= +-- Test 16: OBJECT_NAME with bracket-created long temp table +-- ============================================================================= +CREATE TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] (a INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit')) AS test16_object_name_bracket +GO +~~START~~ +varchar +#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] +GO + +-- ============================================================================= +-- Test 17: Multibyte character temp table name exceeding NAMEDATALEN +-- ============================================================================= +CREATE TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test17_multibyte_long +GO +~~START~~ +varchar +PASS +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト')) AS test17_object_name +GO +~~START~~ +varchar +#??????????????????????NAMEDATALEN???????????? +~~END~~ + + +INSERT INTO #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト VALUES (42) +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO +~~START~~ +int +42 +~~END~~ + + +DROP TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO + +-- ============================================================================= +-- Test 18: Bracket-delimited multibyte long temp table name +-- ============================================================================= +CREATE TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] (val INT) +GO + +SELECT CASE WHEN OBJECT_ID('#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test18_bracket_multibyte +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] +GO + +-- ============================================================================= +-- Test 19: Non-ENR temp table (has UDT dependency) - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TYPE dbo.my_udt FROM VARCHAR(100) +GO + +CREATE TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit (id INT, val dbo.my_udt) +GO + +INSERT INTO #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit VALUES (1, 'udt_test') +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO +~~START~~ +int#!#varchar +1#!#udt_test +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit')) AS test19_object_name +GO +~~START~~ +varchar +#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt +GO + +-- ============================================================================= +-- Test 20: ENR long temp table - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim')) AS test20_object_name +GO +~~START~~ +varchar +#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +~~END~~ + + +DROP TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +GO + +-- ============================================================================= +-- Test 21: sp_tablecollations_100 with long temp table name +-- ============================================================================= +CREATE TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test (id INT, name VARCHAR(50)) +GO + +EXEC sp_tablecollations_100 '#sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test' +GO +~~START~~ +int#!#varchar#!#binary#!#nvarchar +1#!#id#!##!# +2#!#name#!#0904D00034#!#bbf_unicode_cp1_ci_as +~~END~~ + + +DROP TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test +GO + +-- ============================================================================= +-- Test 22: Short temp table with mixed case - OBJECT_NAME preserves case +-- ============================================================================= +CREATE TABLE #ShortMixedCase (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#ShortMixedCase')) AS test22_case_preserved +GO +~~START~~ +varchar +#ShortMixedCase +~~END~~ + + +DROP TABLE #ShortMixedCase +GO + +-- ============================================================================= +-- Test 23: Short bracket-delimited temp table with mixed case +-- ============================================================================= +CREATE TABLE [#BracketShort_MixedCase] (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#BracketShort_MixedCase')) AS test23_bracket_case +GO +~~START~~ +varchar +#BracketShort_MixedCase +~~END~~ + + +DROP TABLE [#BracketShort_MixedCase] +GO + +-- ============================================================================= +-- Test 24: Non-ENR temp table - OBJECT_NAME shows full name (second UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt4 FROM INT +GO + +CREATE TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit (id INT, val dbo.my_udt4) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit')) AS test24_object_name +GO +~~START~~ +varchar +#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt4 +GO + +-- ============================================================================= +-- Test 25: Non-ENR temp table - OBJECT_NAME shows full name (third UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt3 FROM VARCHAR(50) +GO + +CREATE TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx (id INT, val dbo.my_udt3) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx')) AS test25_object_name +GO +~~START~~ +varchar +#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +~~END~~ + + +DROP TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +GO + +DROP TYPE dbo.my_udt3 +GO + +-- ============================================================================= +-- Test 26: Long index name on temp table - babelfish_get_enr_list shows full name +-- ============================================================================= +CREATE TABLE #idx_test_tmp (a INT, b VARCHAR(50)) +GO + +CREATE INDEX #very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx ON #idx_test_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index%' +GO +~~START~~ +text +#very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #idx_test_tmp +GO + +-- ============================================================================= +-- Test 27: Multiple long index names on temp table +-- ============================================================================= +CREATE TABLE #idx_multi_tmp (a INT, b INT, c INT) +GO + +CREATE INDEX #long_idx_first_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(a) +GO + +CREATE INDEX #long_idx_second_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(b) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#long_idx_%' +GO +~~START~~ +text +#long_idx_first_column_name_exceeding_the_namedatalen_limit_test +#long_idx_second_column_name_exceeding_the_namedatalen_limit_test +~~END~~ + + +DROP TABLE #idx_multi_tmp +GO + +-- ============================================================================= +-- Test 28: Mixed case long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_case_tmp (a INT) +GO + +CREATE INDEX MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim ON #idx_case_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'MixedCase[_]Long[_]Index%' +GO +~~START~~ +text +MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim +~~END~~ + + +DROP TABLE #idx_case_tmp +GO + +-- ============================================================================= +-- Test 29: Multibyte long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_mb_tmp (a INT) +GO + +CREATE INDEX インデックス名前が非常に長いテスト用のインデックスでNAMEDATALEN制限を超える ON #idx_mb_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'インデックス名前%' +GO +~~START~~ +text +??????????????????????????NAMEDATALEN?????? +~~END~~ + + +DROP TABLE #idx_mb_tmp +GO + +-- ============================================================================= +-- Test 30: Long index name on non-ENR temp table (UDT dependency) +-- ============================================================================= +CREATE TYPE dbo.my_udt_idx FROM INT +GO + +CREATE TABLE #non_enr_idx_test (a INT, b dbo.my_udt_idx) +GO + +CREATE INDEX long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit ON #non_enr_idx_test(a) +GO + +INSERT INTO #non_enr_idx_test VALUES (1, 100), (2, 200) +GO +~~ROW COUNT: 2~~ + + +SELECT * FROM #non_enr_idx_test WHERE a = 2 +GO +~~START~~ +int#!#int +2#!#200 +~~END~~ + + +-- Verify original name stored in reloptions +SELECT CASE WHEN (SELECT array_to_string(reloptions, ',') FROM pg_class WHERE relname LIKE 'long_index_name_on_non_enr%') LIKE '%bbf_original_rel_name=long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit%' THEN 'PASS' ELSE 'FAIL' END AS test30_reloption +GO +~~START~~ +varchar +PASS +~~END~~ + + +DROP TABLE #non_enr_idx_test +GO + +DROP TYPE dbo.my_udt_idx +GO + +-- ============================================================================= +-- Test 31: SELECT INTO with long temp table name +-- ============================================================================= +SELECT 1 AS id, 'hello' AS val INTO #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +SELECT * FROM #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO +~~START~~ +int#!#varchar +1#!#hello +~~END~~ + + +SELECT OBJECT_NAME(OBJECT_ID('#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx')) AS test31_select_into +GO +~~START~~ +varchar +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#select_into_long%' +GO +~~START~~ +text +#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +~~END~~ + + +DROP TABLE #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 32: Cached plan - long index name on temp table via stored procedure +-- Verifies that the full original name is stored correctly across executions +-- ============================================================================= +CREATE PROCEDURE sp_long_idx_cached_plan AS +BEGIN + CREATE TABLE #cached_plan_tmp (a INT, b INT) + CREATE INDEX #very_long_index_name_cached_plan_test_exceeding_namedatalen_lim ON #cached_plan_tmp(a) + SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index_name_cached%' + DROP TABLE #cached_plan_tmp +END +GO + +-- First execution +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Second execution (cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +-- Third execution (definitely cached plan) +EXEC sp_long_idx_cached_plan +GO +~~START~~ +text +#very_long_index_name_cached_plan_test_exceeding_namedatalen_lim +~~END~~ + + +DROP PROCEDURE sp_long_idx_cached_plan +GO + +-- ============================================================================= +-- Test 33: sp_prepare/sp_execute - guarantees cached plan reuse for long index +-- ============================================================================= +DECLARE @handle INT +EXEC sp_prepare @handle OUTPUT, NULL, N'CREATE TABLE #sp_prep_tmp (a INT); CREATE INDEX #very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit ON #sp_prep_tmp(a); SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE ''#very_long_index_name_sp_prepare%''; DROP TABLE #sp_prep_tmp' +EXEC sp_execute @handle +EXEC sp_execute @handle +EXEC sp_unprepare @handle +GO +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + +~~START~~ +text +#very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit +~~END~~ + + +-- ============================================================================= +-- Test 34: Same long index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx (a INT, b INT) +GO + +CREATE TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx (x INT, y INT) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx(a) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#same_long_index%' ORDER BY relname +GO +~~START~~ +text +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +#same_long_index_name_on_different_temp_tables_exceeding_limit_x +~~END~~ + + +DROP TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +DROP TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +-- ============================================================================= +-- Test 35: Same short index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit (a INT) +GO + +CREATE TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit (x INT) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit(a) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#short_idx_tbl%' ORDER BY relname +GO +~~START~~ +text +#short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +#short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +~~END~~ + + +DROP TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +GO + +DROP TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +GO diff --git a/test/JDBC/expected/temp_table_rollback-vu-verify.out b/test/JDBC/expected/temp_table_rollback-vu-verify.out index b7e23bfb49c..257812c94ad 100644 --- a/test/JDBC/expected/temp_table_rollback-vu-verify.out +++ b/test/JDBC/expected/temp_table_rollback-vu-verify.out @@ -1463,8 +1463,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t_intermediac7f5304388db1261e76ff73fd7a648c9 -#idx2_intermediate#t_intermedia4737c0efb12593904c8c76e1baf5043f +#idx1_intermediate +#idx2_intermediate #t #t1 #t2 @@ -1509,9 +1509,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx2_intermediate#t1_intermedi2cf527ed557fefcaa607af16f2a5138d -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx2_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -1714,8 +1714,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -1750,9 +1750,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -1771,8 +1771,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -1794,9 +1794,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -1815,8 +1815,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -1839,8 +1839,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -1882,8 +1882,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -1964,7 +1964,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2004,7 +2004,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2027,7 +2027,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2066,7 +2066,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2086,7 +2086,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2108,7 +2108,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2128,7 +2128,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2151,7 +2151,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2190,7 +2190,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2236,7 +2236,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2344,7 +2344,7 @@ COMMIT GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2355,8 +2355,8 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f -#idx_subtxn_b#t_idx_subtxn64977253700b3c53e4f63f345b297733 +#idx_subtxn_a +#idx_subtxn_b #t #t1 #t2 @@ -2365,7 +2365,7 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2389,7 +2389,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2436,9 +2436,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f2#t_func_idx451c5d6f49c20554c8a50bc360e82cdb -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f2 +#idx_f3 #t #t1 #t2 @@ -2485,8 +2485,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f3 #t #t1 #t2 @@ -2594,8 +2594,8 @@ EXEC test_temp_table_drop_intermediate_idx; GO ~~START~~ text -#idx1#t_procedure411a39ff59713316af44ae7ea8681f2f -#idx2#t_procedurea5ba3973e494f7551d8312ae8010d9e0 +#idx1 +#idx2 #t #t1 #t2 @@ -3011,8 +3011,8 @@ text #t1 #t2 #t_alter_idx -idx_alter1#t_alter_idxef1284eda20f7217c292b0b1f74479d7 -idx_alter2#t_alter_idx817c13ab631b36df3820eff2777e31cf +idx_alter1 +idx_alter2 ~~END~~ @@ -3158,9 +3158,9 @@ text #t1 #t2 #t_multi_alter -idx_ma1#t_multi_alterc20f6dce64e4acc115c92bc1ec2f4ca7 -idx_ma2#t_multi_alter85222b3f0a11abb9273a384d9d6c51d4 -idx_ma3#t_multi_alter9bdc2dda2f46d1d53c60b1872aae1a7e +idx_ma1 +idx_ma2 +idx_ma3 ~~END~~ @@ -3310,7 +3310,7 @@ text #t1 #t2 #t_nested_alter -idx_nested1#t_nested_alter873dd07a348b565a0d59a1a57fcec8f3 +idx_nested1 ~~END~~ @@ -3401,9 +3401,9 @@ text #t1 #t2 #t_cycle -idx_cyc1#t_cycle290b8ccea1c823954eaee37ad6b681e9 -idx_cyc2#t_cycledab3f944fb2bfdf7309126c68154d3f8 -idx_cyc3#t_cycle4d802eedc445503c089ae400e7140408 +idx_cyc1 +idx_cyc2 +idx_cyc3 ~~END~~ 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..2c76bb1c0c4 100644 --- a/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out +++ b/test/JDBC/expected/temp_table_rollback_isolation_read_uncommitted.out @@ -2049,8 +2049,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t_intermediac7f5304388db1261e76ff73fd7a648c9 -#idx2_intermediate#t_intermedia4737c0efb12593904c8c76e1baf5043f +#idx1_intermediate +#idx2_intermediate #t #t1 #t2 @@ -2095,9 +2095,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx2_intermediate#t1_intermedi2cf527ed557fefcaa607af16f2a5138d -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx2_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2300,8 +2300,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2336,9 +2336,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2357,8 +2357,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2380,9 +2380,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2401,8 +2401,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2425,8 +2425,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2468,8 +2468,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2550,7 +2550,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2590,7 +2590,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2613,7 +2613,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2652,7 +2652,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2672,7 +2672,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2694,7 +2694,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2714,7 +2714,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2737,7 +2737,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2776,7 +2776,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2822,7 +2822,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2930,7 +2930,7 @@ COMMIT GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2941,8 +2941,8 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f -#idx_subtxn_b#t_idx_subtxn64977253700b3c53e4f63f345b297733 +#idx_subtxn_a +#idx_subtxn_b #t #t1 #t2 @@ -2951,7 +2951,7 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2975,7 +2975,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -3022,9 +3022,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f2#t_func_idx451c5d6f49c20554c8a50bc360e82cdb -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f2 +#idx_f3 #t #t1 #t2 @@ -3071,8 +3071,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f3 #t #t1 #t2 @@ -3180,8 +3180,8 @@ EXEC test_temp_table_drop_intermediate_idx; GO ~~START~~ text -#idx1#t_procedure411a39ff59713316af44ae7ea8681f2f -#idx2#t_procedurea5ba3973e494f7551d8312ae8010d9e0 +#idx1 +#idx2 #t #t1 #t2 @@ -3597,8 +3597,8 @@ text #t1 #t2 #t_alter_idx -idx_alter1#t_alter_idxef1284eda20f7217c292b0b1f74479d7 -idx_alter2#t_alter_idx817c13ab631b36df3820eff2777e31cf +idx_alter1 +idx_alter2 ~~END~~ @@ -3744,9 +3744,9 @@ text #t1 #t2 #t_multi_alter -idx_ma1#t_multi_alterc20f6dce64e4acc115c92bc1ec2f4ca7 -idx_ma2#t_multi_alter85222b3f0a11abb9273a384d9d6c51d4 -idx_ma3#t_multi_alter9bdc2dda2f46d1d53c60b1872aae1a7e +idx_ma1 +idx_ma2 +idx_ma3 ~~END~~ @@ -3896,7 +3896,7 @@ text #t1 #t2 #t_nested_alter -idx_nested1#t_nested_alter873dd07a348b565a0d59a1a57fcec8f3 +idx_nested1 ~~END~~ @@ -3987,9 +3987,9 @@ text #t1 #t2 #t_cycle -idx_cyc1#t_cycle290b8ccea1c823954eaee37ad6b681e9 -idx_cyc2#t_cycledab3f944fb2bfdf7309126c68154d3f8 -idx_cyc3#t_cycle4d802eedc445503c089ae400e7140408 +idx_cyc1 +idx_cyc2 +idx_cyc3 ~~END~~ diff --git a/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out b/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out index 7c4926cf21a..f56f7c78c3c 100644 --- a/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out +++ b/test/JDBC/expected/temp_table_rollback_isolation_snapshot.out @@ -2049,8 +2049,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t_intermediac7f5304388db1261e76ff73fd7a648c9 -#idx2_intermediate#t_intermedia4737c0efb12593904c8c76e1baf5043f +#idx1_intermediate +#idx2_intermediate #t #t1 #t2 @@ -2095,9 +2095,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx2_intermediate#t1_intermedi2cf527ed557fefcaa607af16f2a5138d -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx2_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2300,8 +2300,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2336,9 +2336,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2357,8 +2357,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2380,9 +2380,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2401,8 +2401,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2425,8 +2425,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2468,8 +2468,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2550,7 +2550,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2590,7 +2590,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2613,7 +2613,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2652,7 +2652,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2672,7 +2672,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2694,7 +2694,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2714,7 +2714,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2737,7 +2737,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2776,7 +2776,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2822,7 +2822,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2930,7 +2930,7 @@ COMMIT GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2941,8 +2941,8 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f -#idx_subtxn_b#t_idx_subtxn64977253700b3c53e4f63f345b297733 +#idx_subtxn_a +#idx_subtxn_b #t #t1 #t2 @@ -2951,7 +2951,7 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2975,7 +2975,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -3022,9 +3022,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f2#t_func_idx451c5d6f49c20554c8a50bc360e82cdb -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f2 +#idx_f3 #t #t1 #t2 @@ -3071,8 +3071,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f3 #t #t1 #t2 @@ -3180,8 +3180,8 @@ EXEC test_temp_table_drop_intermediate_idx; GO ~~START~~ text -#idx1#t_procedure411a39ff59713316af44ae7ea8681f2f -#idx2#t_procedurea5ba3973e494f7551d8312ae8010d9e0 +#idx1 +#idx2 #t #t1 #t2 @@ -3597,8 +3597,8 @@ text #t1 #t2 #t_alter_idx -idx_alter1#t_alter_idxef1284eda20f7217c292b0b1f74479d7 -idx_alter2#t_alter_idx817c13ab631b36df3820eff2777e31cf +idx_alter1 +idx_alter2 ~~END~~ @@ -3744,9 +3744,9 @@ text #t1 #t2 #t_multi_alter -idx_ma1#t_multi_alterc20f6dce64e4acc115c92bc1ec2f4ca7 -idx_ma2#t_multi_alter85222b3f0a11abb9273a384d9d6c51d4 -idx_ma3#t_multi_alter9bdc2dda2f46d1d53c60b1872aae1a7e +idx_ma1 +idx_ma2 +idx_ma3 ~~END~~ @@ -3896,7 +3896,7 @@ text #t1 #t2 #t_nested_alter -idx_nested1#t_nested_alter873dd07a348b565a0d59a1a57fcec8f3 +idx_nested1 ~~END~~ @@ -3987,9 +3987,9 @@ text #t1 #t2 #t_cycle -idx_cyc1#t_cycle290b8ccea1c823954eaee37ad6b681e9 -idx_cyc2#t_cycledab3f944fb2bfdf7309126c68154d3f8 -idx_cyc3#t_cycle4d802eedc445503c089ae400e7140408 +idx_cyc1 +idx_cyc2 +idx_cyc3 ~~END~~ 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..a7057c97dfb 100644 --- a/test/JDBC/expected/temp_table_rollback_xact_abort_on.out +++ b/test/JDBC/expected/temp_table_rollback_xact_abort_on.out @@ -2050,8 +2050,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t_intermediac7f5304388db1261e76ff73fd7a648c9 -#idx2_intermediate#t_intermedia4737c0efb12593904c8c76e1baf5043f +#idx1_intermediate +#idx2_intermediate #t #t1 #t2 @@ -2096,9 +2096,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx2_intermediate#t1_intermedi2cf527ed557fefcaa607af16f2a5138d -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx2_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2301,8 +2301,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; go ~~START~~ text -#idx1_intermediate#t1_intermedi3f930a87ab72166e910f7ddcf924df30 -#idx3_intermediate#t1_intermedi2a0ee21d2d154e1dfcb71a94a8970097 +#idx1_intermediate +#idx3_intermediate #t #t1 #t1_intermediate @@ -2337,9 +2337,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2358,8 +2358,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2381,9 +2381,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_a#t_drop_idx_txnda644fa620ab90bd561714e2e99ce2c6 -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_a +#idx_b +#idx_c #t #t1 #t2 @@ -2402,8 +2402,8 @@ GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2426,8 +2426,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2469,8 +2469,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_b#t_drop_idx_txn0f8363570e9de8ec902e0ced60eaf64e -#idx_c#t_drop_idx_txn26e61d92e1f02e7f721f184f0f4207c4 +#idx_b +#idx_c #t #t1 #t2 @@ -2551,7 +2551,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2591,7 +2591,7 @@ GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2614,7 +2614,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_create_a#t_create_idx_txna9f36699e06dfdc2e84a4a66febe3712 +#idx_create_a #t #t1 #t2 @@ -2653,7 +2653,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2673,7 +2673,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2695,7 +2695,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_b#t_idx_comboa3187008f5b4c7656ad5c6712d601a1d +#idx_combo_b #t #t1 #t2 @@ -2715,7 +2715,7 @@ GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2738,7 +2738,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_combo_c#t_idx_combo2d9a538a5e214b5ac1479e25b370ea9b +#idx_combo_c #t #t1 #t2 @@ -2777,7 +2777,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2823,7 +2823,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_dml_a#t_idx_dml44625b82b2534f5ea590f32a08fbcee5 +#idx_dml_a #t #t1 #t2 @@ -2931,7 +2931,7 @@ COMMIT GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2942,8 +2942,8 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f -#idx_subtxn_b#t_idx_subtxn64977253700b3c53e4f63f345b297733 +#idx_subtxn_a +#idx_subtxn_b #t #t1 #t2 @@ -2952,7 +2952,7 @@ text ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -2976,7 +2976,7 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_subtxn_a#t_idx_subtxn5407cedfc62bb5d13b7b98608e325b5f +#idx_subtxn_a #t #t1 #t2 @@ -3023,9 +3023,9 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f2#t_func_idx451c5d6f49c20554c8a50bc360e82cdb -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f2 +#idx_f3 #t #t1 #t2 @@ -3072,8 +3072,8 @@ SELECT relname FROM sys.babelfish_get_enr_list() ORDER BY relname; GO ~~START~~ text -#idx_f1#t_func_idx0bbd575c999a1ddc80e7e43987214950 -#idx_f3#t_func_idxa50aaca8b110081369b6577bbf87260f +#idx_f1 +#idx_f3 #t #t1 #t2 @@ -3181,8 +3181,8 @@ EXEC test_temp_table_drop_intermediate_idx; GO ~~START~~ text -#idx1#t_procedure411a39ff59713316af44ae7ea8681f2f -#idx2#t_procedurea5ba3973e494f7551d8312ae8010d9e0 +#idx1 +#idx2 #t #t1 #t2 @@ -3598,8 +3598,8 @@ text #t1 #t2 #t_alter_idx -idx_alter1#t_alter_idxef1284eda20f7217c292b0b1f74479d7 -idx_alter2#t_alter_idx817c13ab631b36df3820eff2777e31cf +idx_alter1 +idx_alter2 ~~END~~ @@ -3745,9 +3745,9 @@ text #t1 #t2 #t_multi_alter -idx_ma1#t_multi_alterc20f6dce64e4acc115c92bc1ec2f4ca7 -idx_ma2#t_multi_alter85222b3f0a11abb9273a384d9d6c51d4 -idx_ma3#t_multi_alter9bdc2dda2f46d1d53c60b1872aae1a7e +idx_ma1 +idx_ma2 +idx_ma3 ~~END~~ @@ -3897,7 +3897,7 @@ text #t1 #t2 #t_nested_alter -idx_nested1#t_nested_alter873dd07a348b565a0d59a1a57fcec8f3 +idx_nested1 ~~END~~ @@ -3988,9 +3988,9 @@ text #t1 #t2 #t_cycle -idx_cyc1#t_cycle290b8ccea1c823954eaee37ad6b681e9 -idx_cyc2#t_cycledab3f944fb2bfdf7309126c68154d3f8 -idx_cyc3#t_cycle4d802eedc445503c089ae400e7140408 +idx_cyc1 +idx_cyc2 +idx_cyc3 ~~END~~ diff --git a/test/JDBC/expected/temp_table_visibility-vu-verify.out b/test/JDBC/expected/temp_table_visibility-vu-verify.out index dbd34c60379..d4624a0cda7 100644 --- a/test/JDBC/expected/temp_table_visibility-vu-verify.out +++ b/test/JDBC/expected/temp_table_visibility-vu-verify.out @@ -128,7 +128,7 @@ GO text #t4122 #temptable5605 -idx#temptable56057f9bec28bc8902d45d905788d7aa59a1 +idx ~~END~~ @@ -168,7 +168,7 @@ text #sys_comprehensive_pkey #t4122 #temptable5605 -idx#temptable56057f9bec28bc8902d45d905788d7aa59a1 +idx ~~END~~ @@ -350,7 +350,7 @@ text #pg_toast_#oid_masked#_index #t4122 #temptable5605 -idx#temptable56057f9bec28bc8902d45d905788d7aa59a1 +idx ~~END~~ @@ -536,12 +536,12 @@ text #pg_toast_#oid_masked#_index #t4122 #temptable5605 -idx#temptable56057f9bec28bc8902d45d905788d7aa59a1 -ix_composite#indexed_dml607dc45075f81468865d4be46b38df3e -ix_date#indexed_dmle2166a864eb6380802f1dd642a3fde15 -ix_int#indexed_dml035dab3da66aea81011a3eae459c604c -ix_money#indexed_dmlf15b16dc03c5e414c280565f841360cc -ix_text#indexed_dml331193019682437d7418b66eb4c0d94e +IX_composite +IX_date +IX_int +IX_money +IX_text +idx ~~END~~ diff --git a/test/JDBC/input/errorHandling/TestErrorsWithLongIdentifiers.sql b/test/JDBC/input/errorHandling/TestErrorsWithLongIdentifiers.sql index c29334f6bde..04c4534493c 100644 --- a/test/JDBC/input/errorHandling/TestErrorsWithLongIdentifiers.sql +++ b/test/JDBC/input/errorHandling/TestErrorsWithLongIdentifiers.sql @@ -345,7 +345,7 @@ GO CREATE FUNCTION babel6434_ううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううううう() RETURNS INT AS BEGIN RETURN 1 END; GO --- Temp table with multibyte name (116 chars - should pass, to be fixed with BABEL-6433 ) +-- Temp table with multibyte name (116 chars - should pass) CREATE TABLE #babel6434_さささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささ (a int); GO DROP TABLE IF EXISTS #babel6434_さささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささささ; 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..5dd1afb2078 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 @@ -195,6 +195,8 @@ 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 diff --git a/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-cleanup.sql b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-cleanup.sql new file mode 100644 index 00000000000..f088760ff75 --- /dev/null +++ b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-cleanup.sql @@ -0,0 +1,29 @@ +DROP PROCEDURE temp_long_name_enr_basic_proc +GO + +DROP PROCEDURE temp_long_name_enr_alter_proc +GO + +DROP PROCEDURE temp_long_name_enr_join_proc +GO + +DROP PROCEDURE temp_long_name_enr_subquery_proc +GO + +DROP PROCEDURE temp_long_name_enr_insert_select_proc +GO + +DROP PROCEDURE temp_long_name_enr_boundary_proc +GO + +DROP PROCEDURE temp_long_name_enr_coexist_proc +GO + +DROP PROCEDURE temp_long_name_enr_index_proc +GO + +DROP PROCEDURE temp_long_name_enr_reuse_proc +GO + +DROP PROCEDURE temp_long_name_enr_long_index_name_proc +GO diff --git a/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-prepare.sql b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-prepare.sql new file mode 100644 index 00000000000..aa5c346eb56 --- /dev/null +++ b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-prepare.sql @@ -0,0 +1,132 @@ +-- Procedures to test #temp tables with names exceeding NAMEDATALEN (63 bytes). +-- The ENR must store the full untruncated name so subsequent lookups match. + +CREATE PROCEDURE temp_long_name_enr_basic_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT, b VARCHAR(50)) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit VALUES (1, 'hello') + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds%' + SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END AS object_id_check + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit + SELECT COUNT(*) AS enr_count_after_drop FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit%' +END +GO + +CREATE PROCEDURE temp_long_name_enr_alter_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter (a INT) + ALTER TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter ADD b VARCHAR(20) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter VALUES (1, 'added') + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter + ALTER TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter DROP COLUMN b + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_alter +END +GO + +CREATE PROCEDURE temp_long_name_enr_join_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins (id INT, val VARCHAR(10)) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins VALUES (1, 'aaa'), (2, 'bbb') + SELECT t1.id, t2.val FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins t1 JOIN #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins t2 ON t1.id = t2.id WHERE t1.id = 1 + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_joins +END +GO + +CREATE PROCEDURE temp_long_name_enr_subquery_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry (x INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry VALUES (10), (20), (30) + SELECT * FROM (SELECT x FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry WHERE x > 10) sub ORDER BY x + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_subqry +END +GO + +CREATE PROCEDURE temp_long_name_enr_insert_select_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source (n INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source VALUES (1), (2), (3) + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target (n INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target SELECT n FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source WHERE n > 1 + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target ORDER BY n + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_source + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_target +END +GO + +CREATE PROCEDURE temp_long_name_enr_boundary_proc +AS +BEGIN + -- Name exactly 63 bytes (fits in NAMEDATALEN) + CREATE TABLE #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes (x INT) + INSERT INTO #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes VALUES (99) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_exactly%' + SELECT * FROM #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes + DROP TABLE #temp_table_name_exactly_at_the_namedatalen_boundary_of_63bytes + + -- Name exactly 64 bytes (exceeds NAMEDATALEN by 1) + CREATE TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess (y INT) + INSERT INTO #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess VALUES (100) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_just_over%' + SELECT * FROM #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess + DROP TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +END +GO + +CREATE PROCEDURE temp_long_name_enr_coexist_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_coexist_first_table_in_session (a INT) + CREATE TABLE #temp_table_with_a_very_long_name_coexist_second_table_in_session (b INT) + SELECT relname FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_coexist%' ORDER BY relname + INSERT INTO #temp_table_with_a_very_long_name_coexist_first_table_in_session VALUES (1) + INSERT INTO #temp_table_with_a_very_long_name_coexist_second_table_in_session VALUES (2) + SELECT a, b FROM #temp_table_with_a_very_long_name_coexist_first_table_in_session, #temp_table_with_a_very_long_name_coexist_second_table_in_session + DROP TABLE #temp_table_with_a_very_long_name_coexist_first_table_in_session + DROP TABLE #temp_table_with_a_very_long_name_coexist_second_table_in_session +END +GO + +CREATE PROCEDURE temp_long_name_enr_index_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index (id INT, val INT) + CREATE INDEX idx_long_temp ON #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index (id) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index VALUES (1, 100), (2, 200) + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index WHERE id = 2 + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_index +END +GO + +CREATE PROCEDURE temp_long_name_enr_long_index_name_proc +AS +BEGIN + CREATE TABLE #tmp_idx (a INT, b INT) + CREATE INDEX long_index_name_on_temp_table_exceeding_namedatalen_limit_in_proc ON #tmp_idx(a) + SELECT relname FROM sys.babelfish_get_enr_list() WHERE relname LIKE 'long_index_name_on_temp%' + SELECT OBJECT_NAME(reloid) FROM sys.babelfish_get_enr_list() WHERE relname LIKE '%long_index%' + DROP TABLE #tmp_idx +END +GO + +CREATE PROCEDURE temp_long_name_enr_reuse_proc +AS +BEGIN + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse (v INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse VALUES (1) + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + -- Recreate with same name + CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse (v INT) + INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse VALUES (2) + SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse%' + SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse + DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_reuse +END +GO diff --git a/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-verify.sql b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-verify.sql new file mode 100644 index 00000000000..c51810ff1f2 --- /dev/null +++ b/test/JDBC/input/temp_tables/temp_table_long_name_enr-vu-verify.sql @@ -0,0 +1,81 @@ +-- Direct creation tests (session-level, not inside a procedure) + +-- Scenario 1: Basic direct CREATE, INSERT, SELECT with ENR validation +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT, b VARCHAR(50)) +GO + +SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds%' +GO + +INSERT INTO #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit VALUES (1, 'hello') +GO + +SELECT * FROM #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'FOUND' ELSE 'NOT FOUND' END AS object_id_check +GO + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +SELECT COUNT(*) AS enr_count_after_drop FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit%' +GO + +-- Scenario 2: Direct boundary test (64 bytes) +CREATE TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess (y INT) +GO + +INSERT INTO #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess VALUES (100) +GO + +SELECT relname, LEN(relname) AS name_len FROM sys.babelfish_get_enr_list() WHERE relname LIKE '#temp_table_name_just_over%' +GO + +SELECT * FROM #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +GO + +DROP TABLE #temp_table_name_just_over_the_namedatalen_boundary_of_64_bytess +GO + +-- Procedure-based tests (validates behavior inside stored procedures) + +-- Scenario 3: Basic CREATE, INSERT, SELECT, DROP with ENR validation +EXEC temp_long_name_enr_basic_proc +GO + +-- Scenario 4: ALTER TABLE on long-name temp table +EXEC temp_long_name_enr_alter_proc +GO + +-- Scenario 5: Multiple references in one batch (self-join) +EXEC temp_long_name_enr_join_proc +GO + +-- Scenario 6: Subquery referencing long-name temp table +EXEC temp_long_name_enr_subquery_proc +GO + +-- Scenario 7: INSERT...SELECT between two long-name temp tables +EXEC temp_long_name_enr_insert_select_proc +GO + +-- Scenario 8 & 9: Boundary tests (63 bytes and 64 bytes) +EXEC temp_long_name_enr_boundary_proc +GO + +-- Scenario 10: Two long-name temp tables coexisting +EXEC temp_long_name_enr_coexist_proc +GO + +-- Scenario 11: CREATE INDEX on long-name temp table +EXEC temp_long_name_enr_index_proc +GO + +-- Scenario 12: Recreate same long-name temp table after drop +EXEC temp_long_name_enr_reuse_proc +GO + +-- Scenario 13: Long index name shows full name in get_enr_list and OBJECT_NAME +EXEC temp_long_name_enr_long_index_name_proc +GO diff --git a/test/JDBC/input/temp_tables/temp_table_long_name_enr.sql b/test/JDBC/input/temp_tables/temp_table_long_name_enr.sql new file mode 100644 index 00000000000..1a23633ae47 --- /dev/null +++ b/test/JDBC/input/temp_tables/temp_table_long_name_enr.sql @@ -0,0 +1,641 @@ +-- Tests for temp tables with long identifiers (>= NAMEDATALEN / 64 chars) +-- Validates OBJECT_ID, ALTER TABLE, DML, and DDL operations + +-- ============================================================================= +-- Test 1: Basic OBJECT_ID lookup (direct and tempdb-prefixed) +-- ============================================================================= +CREATE TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_direct +GO + +SELECT CASE WHEN OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test1_object_id_tempdb +GO + +-- Both should return the same OID +SELECT CASE WHEN OBJECT_ID('#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') = OBJECT_ID('tempdb..#temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test1_oid_match +GO + +DROP TABLE #temp_table_with_a_very_long_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 2: OBJECT_ID with type argument +-- ============================================================================= +CREATE TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'U') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_U +GO + +-- Type 'V' (view) should ideally return NULL for a table, but OBJECT_ID type filtering +-- for temp tables is a known pre-existing limitation (returns non-NULL regardless of type) +SELECT CASE WHEN OBJECT_ID('#long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x', 'V') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test2_type_V_null +GO + +DROP TABLE #long_temp_for_typed_object_id_test_exceeding_namedatalen_limit_x +GO + +-- ============================================================================= +-- Test 3: ALTER TABLE ADD COLUMN +-- ============================================================================= +CREATE TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a INT) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD b VARCHAR(50) +GO + +ALTER TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars ADD c INT DEFAULT 0 +GO + +INSERT INTO #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars (a, b) VALUES (1, 'hello') +GO + +SELECT a, b, c FROM #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO + +DROP TABLE #alter_test_temp_table_with_long_name_exceeding_sixty_four_chars +GO + +-- ============================================================================= +-- Test 4: ALTER TABLE DROP COLUMN +-- ============================================================================= +CREATE TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit (a INT, b INT, c INT) +GO + +ALTER TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit DROP COLUMN c +GO + +INSERT INTO #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1, 2) +GO + +SELECT * FROM #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +DROP TABLE #drop_col_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 5: ALTER TABLE ADD CONSTRAINT +-- ============================================================================= +CREATE TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen (id INT, val INT) +GO + +ALTER TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen ADD CONSTRAINT chk_val CHECK (val > 0) +GO + +-- Should succeed (val > 0) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (1, 10) +GO + +-- Should fail (val = 0 violates constraint) +INSERT INTO #constraint_test_long_temp_table_name_that_exceeds_namedatalen VALUES (2, 0) +GO + +SELECT * FROM #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO + +DROP TABLE #constraint_test_long_temp_table_name_that_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 6: CREATE INDEX on long-name temp table +-- ============================================================================= +CREATE TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (id INT, name VARCHAR(100)) +GO + +CREATE INDEX idx_name ON #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen (name) +GO + +INSERT INTO #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen VALUES (1, 'alice'), (2, 'bob') +GO + +SELECT * FROM #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen WHERE name = 'alice' +GO + +DROP TABLE #index_test_long_temp_table_name_that_definitely_exceeds_namedatalen +GO + +-- ============================================================================= +-- Test 7: INSERT, UPDATE, DELETE on long-name temp table +-- ============================================================================= +CREATE TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx (id INT, val VARCHAR(20)) +GO + +INSERT INTO #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx VALUES (1, 'one'), (2, 'two'), (3, 'three') +GO + +UPDATE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx SET val = 'TWO' WHERE id = 2 +GO + +DELETE FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx WHERE id = 3 +GO + +SELECT * FROM #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx ORDER BY id +GO + +DROP TABLE #dml_test_long_temp_table_name_that_exceeds_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 8: IF OBJECT_ID pattern (common guard pattern) +-- ============================================================================= +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +CREATE TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit (x INT) +GO + +-- Second time: should find it and drop +IF OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NOT NULL + DROP TABLE #guard_pattern_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- Should be gone now +SELECT CASE WHEN OBJECT_ID('tempdb..#guard_pattern_long_temp_table_name_exceeding_namedatalen_limit') IS NULL THEN 'PASS' ELSE 'FAIL' END AS test8_dropped +GO + +-- ============================================================================= +-- Test 9: Multiple long-name temp tables in same session +-- ============================================================================= +CREATE TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx (a INT) +GO +CREATE TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit (b INT) +GO + +INSERT INTO #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx VALUES (1) +GO +INSERT INTO #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit VALUES (2) +GO + +SELECT a FROM #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +SELECT b FROM #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO + +-- Verify OBJECT_IDs are different +SELECT CASE WHEN OBJECT_ID('#multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx') != OBJECT_ID('#multi_second_long_temp_table_name_that_exceeds_namedatalen_limit') THEN 'PASS' ELSE 'FAIL' END AS test9_different_oids +GO + +DROP TABLE #multi_first_long_temp_table_name_that_exceeds_namedatalen_limitx +GO +DROP TABLE #multi_second_long_temp_table_name_that_exceeds_namedatalen_limit +GO + +-- ============================================================================= +-- Test 10: TRUNCATE TABLE on long-name temp table +-- ============================================================================= +CREATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit (id INT) +GO + +INSERT INTO #truncate_test_long_temp_table_name_exceeding_namedatalen_limit VALUES (1), (2), (3) +GO + +TRUNCATE TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +SELECT COUNT(*) AS cnt FROM #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +DROP TABLE #truncate_test_long_temp_table_name_exceeding_namedatalen_limit +GO + +-- ============================================================================= +-- Test 11: Short temp table regression (ensure no breakage) +-- ============================================================================= +CREATE TABLE #short (a INT) +GO + +ALTER TABLE #short ADD b INT +GO + +SELECT CASE WHEN OBJECT_ID('#short') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test11_short +GO + +INSERT INTO #short VALUES (1, 2) +GO + +SELECT * FROM #short +GO + +DROP TABLE #short +GO + +-- ============================================================================= +-- Test 12: Temp table name at exact NAMEDATALEN boundary (63 chars) +-- ============================================================================= +CREATE TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA (x INT) +GO + +ALTER TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA ADD y INT +GO + +SELECT CASE WHEN OBJECT_ID('#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test12_boundary +GO + +DROP TABLE #aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaA +GO + +-- ============================================================================= +-- Test 13: Bracket-delimited long temp table name - OBJECT_ID +-- ============================================================================= +CREATE TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] (a INT) +GO + +SELECT CASE WHEN OBJECT_ID('#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_objid +GO + +SELECT CASE WHEN OBJECT_ID('tempdb..#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test13_bracket_tempdb +GO + +DROP TABLE [#bracket_long_temp_table_name_that_exceeds_namedatalen_limit_test] +GO + +-- ============================================================================= +-- Test 14: Bracket-delimited long temp table name - ALTER TABLE +-- ============================================================================= +CREATE TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] (a INT) +GO + +ALTER TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] ADD b VARCHAR(50) +GO + +INSERT INTO [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] VALUES (1, 'bracketed') +GO + +SELECT * FROM [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO + +DROP TABLE [#bracket_alter_test_long_temp_name_exceeding_namedatalen_limit_xx] +GO + +-- ============================================================================= +-- Test 15: Bracket-delimited with mixed case (case preserved in brackets) +-- ============================================================================= +CREATE TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test15_mixed_case +GO + +ALTER TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] ADD val INT +GO + +INSERT INTO [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] VALUES (1, 100) +GO + +SELECT * FROM [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO + +DROP TABLE [#BracketMixedCase_LongTempName_Exceeding_NameDataLen_Limit_TestXX] +GO + +-- ============================================================================= +-- Test 16: OBJECT_NAME with bracket-created long temp table +-- ============================================================================= +CREATE TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] (a INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit')) AS test16_object_name_bracket +GO + +DROP TABLE [#bracket_obj_name_test_long_temp_table_exceeding_namedatalen_limit] +GO + +-- ============================================================================= +-- Test 17: Multibyte character temp table name exceeding NAMEDATALEN +-- ============================================================================= +CREATE TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト (id INT) +GO + +SELECT CASE WHEN OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test17_multibyte_long +GO + +SELECT OBJECT_NAME(OBJECT_ID('#テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト')) AS test17_object_name +GO + +INSERT INTO #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト VALUES (42) +GO + +SELECT * FROM #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO + +DROP TABLE #テスト用の非常に長いテンポラリテーブル名前がNAMEDATALEN制限を超える場合のテスト +GO + +-- ============================================================================= +-- Test 18: Bracket-delimited multibyte long temp table name +-- ============================================================================= +CREATE TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] (val INT) +GO + +SELECT CASE WHEN OBJECT_ID('#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース') IS NOT NULL THEN 'PASS' ELSE 'FAIL' END AS test18_bracket_multibyte +GO + +DROP TABLE [#マルチバイト_ブラケット_長いテンポラリテーブル名前がNAMEDATALEN制限を超えるケース] +GO + +-- ============================================================================= +-- Test 19: Non-ENR temp table (has UDT dependency) - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TYPE dbo.my_udt FROM VARCHAR(100) +GO + +CREATE TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit (id INT, val dbo.my_udt) +GO + +INSERT INTO #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit VALUES (1, 'udt_test') +GO + +SELECT * FROM #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit')) AS test19_object_name +GO + +DROP TABLE #non_enr_long_temp_table_name_with_udt_dependency_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt +GO + +-- ============================================================================= +-- Test 20: ENR long temp table - OBJECT_NAME shows full name +-- ============================================================================= +CREATE TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim')) AS test20_object_name +GO + +DROP TABLE #enr_object_name_test_long_temp_table_name_exceeding_namedatalen_lim +GO + +-- ============================================================================= +-- Test 21: sp_tablecollations_100 with long temp table name +-- ============================================================================= +CREATE TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test (id INT, name VARCHAR(50)) +GO + +EXEC sp_tablecollations_100 '#sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test' +GO + +DROP TABLE #sp_tablecoll_long_temp_table_name_exceeding_namedatalen_limit_test +GO + +-- ============================================================================= +-- Test 22: Short temp table with mixed case - OBJECT_NAME preserves case +-- ============================================================================= +CREATE TABLE #ShortMixedCase (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#ShortMixedCase')) AS test22_case_preserved +GO + +DROP TABLE #ShortMixedCase +GO + +-- ============================================================================= +-- Test 23: Short bracket-delimited temp table with mixed case +-- ============================================================================= +CREATE TABLE [#BracketShort_MixedCase] (id INT) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#BracketShort_MixedCase')) AS test23_bracket_case +GO + +DROP TABLE [#BracketShort_MixedCase] +GO + +-- ============================================================================= +-- Test 24: Non-ENR temp table - OBJECT_NAME shows full name (second UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt4 FROM INT +GO + +CREATE TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit (id INT, val dbo.my_udt4) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit')) AS test24_object_name +GO + +DROP TABLE #non_enr_sys_tables_test_long_temp_name_exceeding_namedatalen_limit +GO + +DROP TYPE dbo.my_udt4 +GO + +-- ============================================================================= +-- Test 25: Non-ENR temp table - OBJECT_NAME shows full name (third UDT) +-- ============================================================================= +CREATE TYPE dbo.my_udt3 FROM VARCHAR(50) +GO + +CREATE TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx (id INT, val dbo.my_udt3) +GO + +SELECT OBJECT_NAME(OBJECT_ID('#non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx')) AS test25_object_name +GO + +DROP TABLE #non_enr_object_name_test_long_temp_table_exceeding_namedatalen_xx +GO + +DROP TYPE dbo.my_udt3 +GO + +-- ============================================================================= +-- Test 26: Long index name on temp table - babelfish_get_enr_list shows full name +-- ============================================================================= +CREATE TABLE #idx_test_tmp (a INT, b VARCHAR(50)) +GO + +CREATE INDEX #very_long_index_name_on_temp_table_exceeding_namedatalen_limit_xx ON #idx_test_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index%' +GO + +DROP TABLE #idx_test_tmp +GO + +-- ============================================================================= +-- Test 27: Multiple long index names on temp table +-- ============================================================================= +CREATE TABLE #idx_multi_tmp (a INT, b INT, c INT) +GO + +CREATE INDEX #long_idx_first_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(a) +GO + +CREATE INDEX #long_idx_second_column_name_exceeding_the_namedatalen_limit_test ON #idx_multi_tmp(b) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#long_idx_%' +GO + +DROP TABLE #idx_multi_tmp +GO + +-- ============================================================================= +-- Test 28: Mixed case long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_case_tmp (a INT) +GO + +CREATE INDEX MixedCase_Long_Index_Name_On_Temp_Table_Exceeding_NameDataLen_Lim ON #idx_case_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'MixedCase[_]Long[_]Index%' +GO + +DROP TABLE #idx_case_tmp +GO + +-- ============================================================================= +-- Test 29: Multibyte long index name on temp table +-- ============================================================================= +CREATE TABLE #idx_mb_tmp (a INT) +GO + +CREATE INDEX インデックス名前が非常に長いテスト用のインデックスでNAMEDATALEN制限を超える ON #idx_mb_tmp(a) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE 'インデックス名前%' +GO + +DROP TABLE #idx_mb_tmp +GO + +-- ============================================================================= +-- Test 30: Long index name on non-ENR temp table (UDT dependency) +-- ============================================================================= +CREATE TYPE dbo.my_udt_idx FROM INT +GO + +CREATE TABLE #non_enr_idx_test (a INT, b dbo.my_udt_idx) +GO + +CREATE INDEX long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit ON #non_enr_idx_test(a) +GO + +INSERT INTO #non_enr_idx_test VALUES (1, 100), (2, 200) +GO + +SELECT * FROM #non_enr_idx_test WHERE a = 2 +GO + +-- Verify original name stored in reloptions +SELECT CASE WHEN (SELECT array_to_string(reloptions, ',') FROM pg_class WHERE relname LIKE 'long_index_name_on_non_enr%') LIKE '%bbf_original_rel_name=long_index_name_on_non_enr_temp_table_exceeding_namedatalen_limit%' THEN 'PASS' ELSE 'FAIL' END AS test30_reloption +GO + +DROP TABLE #non_enr_idx_test +GO + +DROP TYPE dbo.my_udt_idx +GO + +-- ============================================================================= +-- Test 31: SELECT INTO with long temp table name +-- ============================================================================= +SELECT 1 AS id, 'hello' AS val INTO #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +SELECT * FROM #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +SELECT OBJECT_NAME(OBJECT_ID('#select_into_long_temp_table_name_exceeding_namedatalen_limit_xx')) AS test31_select_into +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#select_into_long%' +GO + +DROP TABLE #select_into_long_temp_table_name_exceeding_namedatalen_limit_xx +GO + +-- ============================================================================= +-- Test 32: Cached plan - long index name on temp table via stored procedure +-- Verifies that the full original name is stored correctly across executions +-- ============================================================================= +CREATE PROCEDURE sp_long_idx_cached_plan AS +BEGIN + CREATE TABLE #cached_plan_tmp (a INT, b INT) + CREATE INDEX #very_long_index_name_cached_plan_test_exceeding_namedatalen_lim ON #cached_plan_tmp(a) + SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#very_long_index_name_cached%' + DROP TABLE #cached_plan_tmp +END +GO + +-- First execution +EXEC sp_long_idx_cached_plan +GO + +-- Second execution (cached plan) +EXEC sp_long_idx_cached_plan +GO + +-- Third execution (definitely cached plan) +EXEC sp_long_idx_cached_plan +GO + +DROP PROCEDURE sp_long_idx_cached_plan +GO + +-- ============================================================================= +-- Test 33: sp_prepare/sp_execute - guarantees cached plan reuse for long index +-- ============================================================================= +DECLARE @handle INT +EXEC sp_prepare @handle OUTPUT, NULL, N'CREATE TABLE #sp_prep_tmp (a INT); CREATE INDEX #very_long_index_name_sp_prepare_test_exceeding_namedatalen_limit ON #sp_prep_tmp(a); SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE ''#very_long_index_name_sp_prepare%''; DROP TABLE #sp_prep_tmp' +EXEC sp_execute @handle +EXEC sp_execute @handle +EXEC sp_unprepare @handle +GO + +-- ============================================================================= +-- Test 34: Same long index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx (a INT, b INT) +GO + +CREATE TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx (x INT, y INT) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx(a) +GO + +CREATE INDEX #same_long_index_name_on_different_temp_tables_exceeding_limit_x ON #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#same_long_index%' ORDER BY relname +GO + +DROP TABLE #diff_tbl_one_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +DROP TABLE #diff_tbl_two_with_very_long_name_exceeding_namedatalen_limit_xxxxx +GO + +-- ============================================================================= +-- Test 35: Same short index name on different long-name temp tables +-- ============================================================================= +CREATE TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit (a INT) +GO + +CREATE TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit (x INT) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit(a) +GO + +CREATE INDEX idx_short ON #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit(x) +GO + +SELECT relname FROM babelfish_get_enr_list() WHERE relname LIKE '#short_idx_tbl%' ORDER BY relname +GO + +DROP TABLE #short_idx_tbl_one_with_very_long_name_exceeding_namedatalen_limit +GO + +DROP TABLE #short_idx_tbl_two_with_very_long_name_exceeding_namedatalen_limit +GO diff --git a/test/JDBC/upgrade/15_19/schedule b/test/JDBC/upgrade/15_19/schedule index 260ab99b8f8..901cbcbe309 100644 --- a/test/JDBC/upgrade/15_19/schedule +++ b/test/JDBC/upgrade/15_19/schedule @@ -610,4 +610,5 @@ babel_convert_with_style forxml-raw-elements-before-17_9-or-18_3 forxml-path-elements-before-17_10-or-18_4 babel_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4 +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/16_13/schedule b/test/JDBC/upgrade/16_13/schedule index 3b1c5168694..be1c6362217 100644 --- a/test/JDBC/upgrade/16_13/schedule +++ b/test/JDBC/upgrade/16_13/schedule @@ -653,4 +653,5 @@ 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_sqlvariant_coerce_type_before_16_14-or-17_10-or-18_4 +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/16_14/schedule b/test/JDBC/upgrade/16_14/schedule index 16cb510ebd7..91984e0dd54 100644 --- a/test/JDBC/upgrade/16_14/schedule +++ b/test/JDBC/upgrade/16_14/schedule @@ -653,4 +653,5 @@ 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_sqlvariant_coerce_type +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/16_15/schedule b/test/JDBC/upgrade/16_15/schedule index 770b0d614cf..679fd758473 100644 --- a/test/JDBC/upgrade/16_15/schedule +++ b/test/JDBC/upgrade/16_15/schedule @@ -653,4 +653,5 @@ forxml-raw-elements-before-17_9-or-18_3 sys-fn-varbintohexsubstring forxml-path-elements-before-17_10-or-18_4 babel_sqlvariant_coerce_type +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/17_10/schedule b/test/JDBC/upgrade/17_10/schedule index 3ceb3fbeffa..aad06b3d107 100644 --- a/test/JDBC/upgrade/17_10/schedule +++ b/test/JDBC/upgrade/17_10/schedule @@ -683,4 +683,5 @@ forxml-path-elements xml_query-before-17_11-or-18_5 forxml-auto-before-17_11-or-18_5 babel_sqlvariant_coerce_type +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/17_11/schedule b/test/JDBC/upgrade/17_11/schedule index 24baec7dbaf..dbd8812f09d 100644 --- a/test/JDBC/upgrade/17_11/schedule +++ b/test/JDBC/upgrade/17_11/schedule @@ -682,4 +682,5 @@ forxml-path-elements xml_query babel_sqlvariant_coerce_type forxml-auto +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/18_3/schedule b/test/JDBC/upgrade/18_3/schedule index c225d8cfc66..463e9b3a2ec 100644 --- a/test/JDBC/upgrade/18_3/schedule +++ b/test/JDBC/upgrade/18_3/schedule @@ -681,4 +681,5 @@ xml_query-before-17_11-or-18_5 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 +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/18_4/schedule b/test/JDBC/upgrade/18_4/schedule index 83c734e3482..706cf5ffdd2 100644 --- a/test/JDBC/upgrade/18_4/schedule +++ b/test/JDBC/upgrade/18_4/schedule @@ -685,4 +685,5 @@ xml_query-before-17_11-or-18_5 babel_sqlvariant_coerce_type forxml-auto-before-17_11-or-18_5 forxml-before-17_11-or-18_5 +temp_table_long_name_enr BABEL-login-db-long-identifiers diff --git a/test/JDBC/upgrade/latest/schedule b/test/JDBC/upgrade/latest/schedule index 2468e5c9d2c..6ac8375d6bc 100644 --- a/test/JDBC/upgrade/latest/schedule +++ b/test/JDBC/upgrade/latest/schedule @@ -687,4 +687,5 @@ forxml-auto BABEL-5264 BABEL-6037 babel_sqlvariant_coerce_type +temp_table_long_name_enr BABEL-login-db-long-identifiers