diff --git a/contrib/babelfishpg_common/sql/string_operators.sql b/contrib/babelfishpg_common/sql/string_operators.sql index 811a84a020e..3f129574757 100644 --- a/contrib/babelfishpg_common/sql/string_operators.sql +++ b/contrib/babelfishpg_common/sql/string_operators.sql @@ -97,13 +97,16 @@ CREATE OPERATOR sys.+ ( FUNCTION = sys.babelfish_concat_wrapper ); -create or replace function sys.CHAR(x in int)returns char +create or replace function sys.cht_(x in int) returns sys.varchar AS $body$ BEGIN /*************************************************************** EXTENSION PACK function CHAR(x) ***************************************************************/ + if x = 0 then + return ('\x00'::bytea)::sys.varbinary; + end if; if x between 1 and 255 then return chr(x); else @@ -111,14 +114,17 @@ EXTENSION PACK function CHAR(x) end if; END; $body$ -language plpgsql STABLE; +LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; -CREATE OR REPLACE FUNCTION sys.nchar(IN x INTEGER) RETURNS sys.nvarchar +CREATE OR REPLACE FUNCTION sys.ncht_(x in int) RETURNS sys.nvarchar AS $body$ BEGIN - --- 1114111 is 0x10FFFF - max value permitted as specified by documentation - if x between 1 and 1114111 then + if x = 0 then + return ('\x00'::bytea)::sys.varbinary; + end if; + --- 65535 is 0x0000FFFF - max value permitted as specified by documentation without SC collation + if x between 1 and 65535 then return(select chr(x))::sys.nvarchar; else return null; @@ -127,16 +133,3 @@ END; $body$ LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; -CREATE OR REPLACE FUNCTION sys.nchar(IN x varbinary) RETURNS sys.nvarchar -AS -$body$ -BEGIN - --- 1114111 is 0x10FFFF - max value permitted as specified by documentation - if x::integer between 1 and 1114111 then - return(select chr(x::integer))::sys.nvarchar; - else - return null; - end if; -END; -$body$ -LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; diff --git a/contrib/babelfishpg_common/sql/upgrades/babelfish_common_helper--5.2.0--5.3.0.sql b/contrib/babelfishpg_common/sql/upgrades/babelfish_common_helper--5.2.0--5.3.0.sql index b73b9a662e8..4789518829e 100644 --- a/contrib/babelfishpg_common/sql/upgrades/babelfish_common_helper--5.2.0--5.3.0.sql +++ b/contrib/babelfishpg_common/sql/upgrades/babelfish_common_helper--5.2.0--5.3.0.sql @@ -7,6 +7,36 @@ SELECT set_config('search_path', 'sys, '||current_setting('search_path'), false); +-- Drops an object if it does not have any dependent objects. +-- Is a temporary procedure for use by the upgrade script. Will be dropped at the end of the upgrade. +-- Please have this be one of the first statements executed in this upgrade script. +CREATE OR REPLACE PROCEDURE babelfish_drop_deprecated_object(object_type varchar, schema_name varchar, object_name varchar) AS +$$ +DECLARE + error_msg text; + query1 text; + query2 text; +BEGIN + + query1 := pg_catalog.format('alter extension babelfishpg_common drop %s %s.%s', object_type, schema_name, object_name); + query2 := pg_catalog.format('drop %s %s.%s', object_type, schema_name, object_name); + + execute query1; + execute query2; +EXCEPTION + when object_not_in_prerequisite_state then --if 'alter extension' statement fails + GET STACKED DIAGNOSTICS error_msg = MESSAGE_TEXT; + raise warning '%', error_msg; + when dependent_objects_still_exist then --if 'drop view' statement fails + GET STACKED DIAGNOSTICS error_msg = MESSAGE_TEXT; + raise warning '%', error_msg; + when undefined_function then --if 'Deprecated function does not exist' + GET STACKED DIAGNOSTICS error_msg = MESSAGE_TEXT; + raise warning '%', error_msg; +end +$$ +LANGUAGE plpgsql; + -- casting from bytea to binary CREATE OR REPLACE FUNCTION sys.byteabinary(pg_catalog.BYTEA, integer, boolean) RETURNS sys.BBF_BINARY @@ -145,6 +175,87 @@ BEGIN END IF; END $$; +DO $$ +DECLARE + exception_message text; +BEGIN + ALTER FUNCTION sys.char(x in int) RENAME TO chr_deprecated_5_3_0; + +EXCEPTION WHEN OTHERS THEN + GET STACKED DIAGNOSTICS + exception_message = MESSAGE_TEXT; + RAISE WARNING '%', exception_message; +END; +$$; + +CALL sys.babelfish_drop_deprecated_object('function', 'sys', 'chr_deprecated_5_3_0'); + +DO $$ +DECLARE + exception_message text; +BEGIN + ALTER FUNCTION sys.nchar(In x INTEGER) RENAME TO nchar_int_deprecated_5_3_0; + +EXCEPTION WHEN OTHERS THEN + GET STACKED DIAGNOSTICS + exception_message = MESSAGE_TEXT; + RAISE WARNING '%', exception_message; +END; +$$; + +CALL sys.babelfish_drop_deprecated_object('function', 'sys', 'nchar_int_deprecated_5_3_0'); + +DO $$ +DECLARE + exception_message text; +BEGIN + ALTER FUNCTION sys.nchar(In x varbinary) RENAME TO nchar_varbinary_deprecated_5_3_0; + +EXCEPTION WHEN OTHERS THEN + GET STACKED DIAGNOSTICS + exception_message = MESSAGE_TEXT; + RAISE WARNING '%', exception_message; +END; +$$; + +CALL sys.babelfish_drop_deprecated_object('function', 'sys', 'nchar_varbinary_deprecated_5_3_0'); + +create or replace function sys.cht_(x in int) returns sys.varchar +AS +$body$ +BEGIN +/*************************************************************** +EXTENSION PACK function CHAR(x) +***************************************************************/ + if x = 0 then + return ('\x00'::bytea)::sys.varbinary; + end if; + if x between 1 and 255 then + return chr(x); + else + return null; + end if; +END; +$body$ +LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; + +CREATE OR REPLACE FUNCTION sys.ncht_(x in int) RETURNS sys.nvarchar +AS +$body$ +BEGIN + if x = 0 then + return ('\x00'::bytea)::sys.varbinary; + end if; + --- 65535 is 0x0000FFFF - max value permitted as specified by documentation without SC collation + if x between 1 and 65535 then + return(select chr(x))::sys.nvarchar; + else + return null; + end if; +END; +$body$ +LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; + -- arithmetic functions where one of the -- operand is smallmoney @@ -669,5 +780,9 @@ BEGIN END IF; END $$; +-- Drops the temporary procedure used by the upgrade script. +-- Please have this be one of the last statements executed in this upgrade script. +DROP PROCEDURE sys.babelfish_drop_deprecated_object(varchar, varchar, varchar); + -- Reset search_path to not affect any subsequent scripts SELECT set_config('search_path', trim(leading 'sys, ' from current_setting('search_path')), false); \ No newline at end of file diff --git a/contrib/babelfishpg_tsql/src/tsqlIface.cpp b/contrib/babelfishpg_tsql/src/tsqlIface.cpp index 395cf62ac9c..84d06bb007e 100644 --- a/contrib/babelfishpg_tsql/src/tsqlIface.cpp +++ b/contrib/babelfishpg_tsql/src/tsqlIface.cpp @@ -3004,6 +3004,33 @@ class tsqlMutator : public TSqlParserBaseListener { } +private: + void handleCharNcharTypeRename(const std::string &procNameStr, TSqlParser::IdContext *proc, + TSqlParser::IdContext *schema) + { + + int startIndex = proc->start->getStartIndex(); + std::string alias; + std::string formattedName; + + if (pg_strcasecmp(procNameStr.c_str(), "char") == 0) + alias = "cht_"; + else if (pg_strcasecmp(procNameStr.c_str(), "nchar") == 0) + alias = "ncht_"; + + if(schema && pg_strcasecmp(stripQuoteFromId(schema).c_str(), "sys") != 0) + return; + + if (proc->DOUBLE_QUOTE_ID()) + formattedName = "\"" + alias + "\""; + else if (proc->SQUARE_BRACKET_ID()) + formattedName = "[" + alias + "]"; + else + formattedName = alias; + + stream.setText(startIndex, formattedName.c_str()); + } + public: void enterFunc_proc_name_schema(TSqlParser::Func_proc_name_schemaContext *ctx) override { @@ -3014,6 +3041,7 @@ class tsqlMutator : public TSqlParserBaseListener // "char" is a data type name in PostgreSQL TSqlParser::IdContext *proc = ctx->procedure; + TSqlParser::IdContext *schema = ctx->schema; // According to the grammar, an id can be any of the following: // @@ -3032,17 +3060,11 @@ class tsqlMutator : public TSqlParserBaseListener if (proc->keyword() || proc->colon_colon()) return; - // FIXME: handle the schema here too std::string procNameStr = getIDName(proc->DOUBLE_QUOTE_ID(), proc->SQUARE_BRACKET_ID(), proc->ID()); - if (pg_strcasecmp(procNameStr.c_str(), "char") == 0) + if (pg_strcasecmp(procNameStr.c_str(), "char") == 0 || pg_strcasecmp(procNameStr.c_str(), "nchar") == 0) { - if (proc->DOUBLE_QUOTE_ID()) - stream.setText(ctx->start->getStartIndex(), "\"chr\" "); - else if (proc->SQUARE_BRACKET_ID()) - stream.setText(ctx->start->getStartIndex(), "[chr] "); - else - stream.setText(ctx->start->getStartIndex(), " chr"); + handleCharNcharTypeRename(procNameStr, proc, schema); } } @@ -3140,6 +3162,7 @@ class tsqlMutator : public TSqlParserBaseListener // "char" is a data type name in PostgreSQL TSqlParser::IdContext *proc = ctx->procedure; + TSqlParser::IdContext *schema = ctx->schema; #ifdef ENABLE_SPATIAL_TYPES if(!ctx->id().empty() && ctx->id()[0]->id().size() == 2) @@ -3176,17 +3199,11 @@ class tsqlMutator : public TSqlParserBaseListener if (proc->keyword() || proc->colon_colon()) return; - // FIXME: handle the schema here too std::string procNameStr = getIDName(proc->DOUBLE_QUOTE_ID(), proc->SQUARE_BRACKET_ID(), proc->ID()); - if (pg_strcasecmp(procNameStr.c_str(), "char") == 0) + if (pg_strcasecmp(procNameStr.c_str(), "char") == 0 || pg_strcasecmp(procNameStr.c_str(), "nchar") == 0) { - if (proc->DOUBLE_QUOTE_ID()) - stream.setText(ctx->start->getStartIndex(), "\"chr\" "); - else if (proc->SQUARE_BRACKET_ID()) - stream.setText(ctx->start->getStartIndex(), "[chr] "); - else - stream.setText(ctx->start->getStartIndex(), " chr"); + handleCharNcharTypeRename(procNameStr, proc, schema); } } diff --git a/test/JDBC/expected/ascii.out b/test/JDBC/expected/ascii.out index df9736c1f07..3308866f877 100644 --- a/test/JDBC/expected/ascii.out +++ b/test/JDBC/expected/ascii.out @@ -127,9 +127,10 @@ int#!#int#!#int#!#int -- following throws error in babelfish SELECT ASCII(CHAR(0)) AS NullChar GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int +0 +~~END~~ -- 4. Tests with Different Data Types @@ -238,7 +239,7 @@ SELECT GO ~~START~~ int#!#int -256#!#12121 +#!# ~~END~~ @@ -262,7 +263,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#int#!#varchar +int#!#varchar#!#int#!#varchar 1#!##!#1#!#Pass 2#!##!#2#!#Pass 3#!##!#3#!#Pass @@ -712,7 +713,7 @@ EXEC ascii_sp_analyzestring 'Test String'; EXEC ascii_sp_validateascii 'A', 65; GO ~~START~~ -varchar#!#int#!#text#!#varchar +varchar#!#int#!#varchar#!#varchar Test String#!#84#!#T#!#Uppercase ~~END~~ diff --git a/test/JDBC/expected/babel_726-before-14_12-or-15_7-or-16_3-vu-verify.out b/test/JDBC/expected/babel_726-before-14_12-or-15_7-or-16_3-vu-verify.out index 201f9e64ea7..1686ecb4290 100644 --- a/test/JDBC/expected/babel_726-before-14_12-or-15_7-or-16_3-vu-verify.out +++ b/test/JDBC/expected/babel_726-before-14_12-or-15_7-or-16_3-vu-verify.out @@ -34,7 +34,7 @@ int select coalesce(NULL, CHAR(9)) go ~~START~~ -text +varchar ~~END~~ diff --git a/test/JDBC/expected/babel_726-vu-verify.out b/test/JDBC/expected/babel_726-vu-verify.out index 3c8225d0de8..c1d03929531 100644 --- a/test/JDBC/expected/babel_726-vu-verify.out +++ b/test/JDBC/expected/babel_726-vu-verify.out @@ -34,7 +34,7 @@ int select coalesce(NULL, CHAR(9)) go ~~START~~ -text +varchar ~~END~~ diff --git a/test/JDBC/expected/babel_726.out b/test/JDBC/expected/babel_726.out index 18fa5a90896..d3e09aa5810 100644 --- a/test/JDBC/expected/babel_726.out +++ b/test/JDBC/expected/babel_726.out @@ -34,7 +34,7 @@ int select coalesce(NULL, CHAR(9)) go ~~START~~ -text +varchar ~~END~~ diff --git a/test/JDBC/expected/babel_char-vu-verify.out b/test/JDBC/expected/babel_char-vu-verify.out index dd1e91425f7..2a3a0c26740 100644 --- a/test/JDBC/expected/babel_char-vu-verify.out +++ b/test/JDBC/expected/babel_char-vu-verify.out @@ -37,12 +37,12 @@ select nchar(0x10FFFF); GO ~~START~~ nvarchar -􏿿 + ~~END~~ ~~START~~ nvarchar -􏿿 + ~~END~~ @@ -61,6 +61,25 @@ nvarchar ~~END~~ +~~START~~ +nvarchar + +~~END~~ + +~~START~~ +nvarchar + +~~END~~ + +select sys.nchar(65535) +select sys.nchar(65536) +select sys.nchar(-1) +GO +~~START~~ +nvarchar +￿ +~~END~~ + ~~START~~ nvarchar diff --git a/test/JDBC/expected/babel_char.out b/test/JDBC/expected/babel_char.out index dd1e91425f7..8e7f0d55eaf 100644 --- a/test/JDBC/expected/babel_char.out +++ b/test/JDBC/expected/babel_char.out @@ -37,12 +37,12 @@ select nchar(0x10FFFF); GO ~~START~~ nvarchar -􏿿 + ~~END~~ ~~START~~ nvarchar -􏿿 + ~~END~~ @@ -63,7 +63,7 @@ nvarchar ~~START~~ nvarchar - + ~~END~~ ~~START~~ diff --git a/test/JDBC/expected/char-function.out b/test/JDBC/expected/char-function.out index 1e96d2725f8..3af56e5ad9e 100644 --- a/test/JDBC/expected/char-function.out +++ b/test/JDBC/expected/char-function.out @@ -48,7 +48,7 @@ SELECT CHAR(ASCII(' ')) AS Space; GO ~~START~~ -text#!#text#!#text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar A#!#Z#!#a#!#z#!#0#!#9#!# ~~END~~ @@ -61,16 +61,17 @@ SELECT CHAR(ASCII(CHAR(27))) AS EscapeChar; GO ~~START~~ -text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar #!##!##!# ~~END~~ SELECT CHAR(ASCII(CHAR(0))) AS NullChar GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 3. Special Characters Tests @@ -82,7 +83,7 @@ SELECT CHAR(ASCII('%')) AS PercentSign; GO ~~START~~ -text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar !#!#"#!###!#$#!#% ~~END~~ @@ -94,7 +95,7 @@ SELECT CHAR(255) AS MaxRange; GO ~~START~~ -text#!#text#!#text +varchar#!#varchar#!#varchar #!#~#!#ÿ ~~END~~ @@ -119,16 +120,17 @@ SELECT CHAR(255) AS MaxValidCode; GO ~~START~~ -text#!#text +varchar#!#varchar #!#ÿ ~~END~~ SELECT CHAR(0) AS ZeroCode GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 7. Error Cases @@ -141,9 +143,10 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: character number must be positive)~~ +~~START~~ +varchar + +~~END~~ BEGIN TRY @@ -156,8 +159,8 @@ BEGIN CATCH END CATCH; GO ~~START~~ -text -? +varchar + ~~END~~ @@ -170,7 +173,7 @@ SELECT FROM char_t1; GO ~~START~~ -int#!#text#!#char#!#varchar +int#!#varchar#!#char#!#varchar 65#!#A#!#A#!#Pass 97#!#a#!#a#!#Pass 32#!# #!# #!#Pass @@ -197,7 +200,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 32#!# #!#Special 33#!#!#!#Special 34#!#"#!#Special @@ -343,7 +346,7 @@ GO SELECT * FROM char_v1; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 9#!# #!#Control 32#!# #!#Printable @@ -353,7 +356,7 @@ int#!#text#!#varchar SELECT * FROM char_v2; GO ~~START~~ -int#!#text#!#text +int#!#varchar#!#varchar 65#!#A#!#a 66#!#B#!#b 67#!#C#!#c @@ -499,7 +502,7 @@ EXEC char_sp_generate @StartValue = 65, @Count = 5; EXEC char_sp_compare @Value1 = 65, @Value2 = 97; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 66#!#B#!#Printable 67#!#C#!#Printable @@ -508,7 +511,7 @@ int#!#text#!#varchar ~~END~~ ~~START~~ -int#!#int#!#text#!#text#!#varchar +int#!#int#!#varchar#!#varchar#!#varchar 65#!#97#!#A#!#a#!#Equal ~~END~~ @@ -546,12 +549,12 @@ GO SELECT * FROM char_t3; GO ~~START~~ -int#!#int#!#text#!#int#!#varchar +int#!#int#!#varchar#!#int#!#varchar 1#!#65#!#A#!#0#!#Uppercase 2#!#97#!#a#!#0#!#Lowercase 3#!#48#!#0#!#0#!#Digit 4#!#32#!# #!#1#!#Other -5#!#9#!# #!#0#!#Other +5#!#9#!# #!#1#!#Other ~~END~~ @@ -582,10 +585,7 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~START~~ -varchar#!#nvarchar -Control character insert#!#new row for relation "char_t4" violates check constraint "char_chk_printable" -~~END~~ +~~ROW COUNT: 1~~ @@ -618,3 +618,136 @@ GO DROP TYPE char_type_output; DROP TYPE char_type_varchar; GO + +select sys.char(255) +select sys.char(256) +select sys.char(105) +select sys.char(-1) +select sys.char(0) +select char(256) +select .sys.char(256) +select .sys.char(0) +select .sys.char(-1) +select .sys.char(255) +GO +~~START~~ +varchar +ÿ +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +i +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +ÿ +~~END~~ + +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.char(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.char(255); +GO +~~START~~ +int +1 +~~END~~ + +select char(255); +GO +~~START~~ +varchar +ÿ +~~END~~ + +select sys.char(0); +GO +~~START~~ +varchar + +~~END~~ + +drop function test_schema.char; +GO +drop schema test_schema; +go +select char(200) +go +~~START~~ +varchar +È +~~END~~ + +select [char](252) +go +~~START~~ +varchar +ü +~~END~~ + +select [sys].[char](243) +go +~~START~~ +varchar +ó +~~END~~ + +select Char(255); +go +~~START~~ +varchar +ÿ +~~END~~ + +select ChAr(255) +go +~~START~~ +varchar +ÿ +~~END~~ + + + diff --git a/test/JDBC/expected/datalength.out b/test/JDBC/expected/datalength.out index 089e04c5fe6..0f1194a227b 100644 --- a/test/JDBC/expected/datalength.out +++ b/test/JDBC/expected/datalength.out @@ -467,9 +467,10 @@ int#!#int#!#int SELECT DATALENGTH(CHAR(0)) AS NullChar_Length GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int +0 +~~END~~ -- 13. Collation Impact diff --git a/test/JDBC/expected/date_time_empty_input_tests-vu-verify.out b/test/JDBC/expected/date_time_empty_input_tests-vu-verify.out index 48f1cc872b2..549adbfb279 100644 --- a/test/JDBC/expected/date_time_empty_input_tests-vu-verify.out +++ b/test/JDBC/expected/date_time_empty_input_tests-vu-verify.out @@ -246,41 +246,39 @@ SELECT CAST(CHAR(9) AS date) AS tab_string_date; GO ~~START~~ date -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type date: " ")~~ +1900-01-01 +~~END~~ SELECT CAST(CHAR(9) AS time) AS tab_string_time; GO ~~START~~ time -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type time: " ")~~ +00:00:00.0000000 +~~END~~ DECLARE @d3 date; SET @d3 = CHAR(9); -- Tab SELECT @d3 AS tab; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type date: " ")~~ +~~START~~ +date +1900-01-01 +~~END~~ INSERT INTO test_empty_strings VALUES (3, CHAR(9), CHAR(9)); GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: column "dt" is of type date but expression is of type text)~~ +~~ROW COUNT: 1~~ SELECT * FROM test_empty_strings WHERE id = 3; GO ~~START~~ int#!#date#!#time +3#!#1900-01-01#!#00:00:00.0000000 ~~END~~ @@ -350,9 +348,8 @@ SELECT * FROM tab_space_dates_view; GO ~~START~~ date#!#time -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: invalid input syntax for type date: " ")~~ +1900-01-01#!#00:00:00.0000000 +~~END~~ -- support for char/nchar casts to date/time diff --git a/test/JDBC/expected/len-vu-verify.out b/test/JDBC/expected/len-vu-verify.out index 197c94827cc..42b465aca0b 100644 --- a/test/JDBC/expected/len-vu-verify.out +++ b/test/JDBC/expected/len-vu-verify.out @@ -327,9 +327,10 @@ int 0 ~~END~~ -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int +0 +~~END~~ -- 6. Numeric Value Tests diff --git a/test/JDBC/expected/nchar-function.out b/test/JDBC/expected/nchar-function.out index db5385a541e..ea1f35c3943 100644 --- a/test/JDBC/expected/nchar-function.out +++ b/test/JDBC/expected/nchar-function.out @@ -87,9 +87,10 @@ nvarchar#!#nvarchar#!#nvarchar#!#nvarchar SELECT NCHAR(ASCII(CHAR(0))) AS NullChar GO -~~ERROR (Code: 33557097)~~ +~~START~~ +nvarchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 4. Special Characters Tests @@ -127,15 +128,16 @@ SELECT GO ~~START~~ nvarchar#!#nvarchar -#!#￿ +#!#￿ ~~END~~ SELECT NCHAR(NULL) AS ZeroCode GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: The string size for the given CHAR/NCHAR data is not defined. Please use an explicit CAST or CONVERT to CHAR(n)/NCHAR(n))~~ +~~START~~ +nvarchar + +~~END~~ -- 7. Error Cases @@ -165,7 +167,7 @@ END CATCH; GO ~~START~~ nvarchar -𐀀 + ~~END~~ @@ -386,9 +388,41 @@ SELECT NCHAR(generate_series) AS CyrillicChar FROM GENERATE_SERIES(0x0410, 0x042F) WHERE generate_series BETWEEN 0x0410 AND 0x042F; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: The string size for the given CHAR/NCHAR data is not defined. Please use an explicit CAST or CONVERT to CHAR(n)/NCHAR(n))~~ +~~START~~ +nvarchar +А +Б +В +Г +Д +Е +Ж +З +И +Й +К +Л +М +Н +О +П +Р +С +Т +У +Ф +Х +Ц +Ч +Ш +Щ +Ъ +Ы +Ь +Э +Ю +Я +~~END~~ -- 9. String Building with NCHAR @@ -495,9 +529,41 @@ int#!#nvarchar#!#varchar SELECT * FROM nchar_v2; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: The string size for the given CHAR/NCHAR data is not defined. Please use an explicit CAST or CONVERT to CHAR(n)/NCHAR(n))~~ +~~START~~ +bigint#!#nvarchar#!#int +1040#!#А#!#1040 +1041#!#Б#!#1041 +1042#!#В#!#1042 +1043#!#Г#!#1043 +1044#!#Д#!#1044 +1045#!#Е#!#1045 +1046#!#Ж#!#1046 +1047#!#З#!#1047 +1048#!#И#!#1048 +1049#!#Й#!#1049 +1050#!#К#!#1050 +1051#!#Л#!#1051 +1052#!#М#!#1052 +1053#!#Н#!#1053 +1054#!#О#!#1054 +1055#!#П#!#1055 +1056#!#Р#!#1056 +1057#!#С#!#1057 +1058#!#Т#!#1058 +1059#!#У#!#1059 +1060#!#Ф#!#1060 +1061#!#Х#!#1061 +1062#!#Ц#!#1062 +1063#!#Ч#!#1063 +1064#!#Ш#!#1064 +1065#!#Щ#!#1065 +1066#!#Ъ#!#1066 +1067#!#Ы#!#1067 +1068#!#Ь#!#1068 +1069#!#Э#!#1069 +1070#!#Ю#!#1070 +1071#!#Я#!#1071 +~~END~~ @@ -739,3 +805,110 @@ GO DROP TYPE nchar_type_output; DROP TYPE nchar_type_nvarchar; GO + +select nchar(cast(45 as binary)) +go +~~START~~ +nvarchar +- +~~END~~ + +select nchar(cast(45 as varbinary)) +go +~~START~~ +nvarchar +- +~~END~~ + +select nchar(0) +go +~~START~~ +nvarchar + +~~END~~ + +select nchar(63535) +go +~~START~~ +nvarchar + +~~END~~ + +select nchar(65536) +go +~~START~~ +nvarchar + +~~END~~ + +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.nchar(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.nchar(255); +GO +~~START~~ +int +1 +~~END~~ + +drop function test_schema.nchar; +GO +drop schema test_schema; +go +select Nchar(63535) +go +~~START~~ +nvarchar + +~~END~~ + +select NcHaR(63535) +go +~~START~~ +nvarchar + +~~END~~ + +create type user_UDT_int from int +go +select nchar(cast(63535 as user_UDT_int)) +go +~~START~~ +nvarchar + +~~END~~ + +drop type user_UDT_int +go +SET QUOTED_IDENTIFIER ON +go +select "char"(256) +go +~~START~~ +varchar + +~~END~~ + +select "nchar"(63535) +go +~~START~~ +nvarchar + +~~END~~ + +set QUOTED_IDENTIFIER OFF +go +select nchar(0); +go +~~START~~ +nvarchar + +~~END~~ + + diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/ascii.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/ascii.out index f0a5fc099f0..211cdef24cb 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/ascii.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/ascii.out @@ -127,9 +127,10 @@ int#!#int#!#int#!#int -- following throws error in babelfish SELECT ASCII(CHAR(0)) AS NullChar GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int +0 +~~END~~ -- 4. Tests with Different Data Types @@ -238,7 +239,7 @@ SELECT GO ~~START~~ int#!#int -256#!#12121 +#!# ~~END~~ @@ -262,7 +263,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#int#!#varchar +int#!#varchar#!#int#!#varchar 1#!##!#1#!#Pass 2#!##!#2#!#Pass 3#!##!#3#!#Pass @@ -712,7 +713,7 @@ EXEC ascii_sp_analyzestring 'Test String'; EXEC ascii_sp_validateascii 'A', 65; GO ~~START~~ -varchar#!#int#!#text#!#varchar +varchar#!#int#!#varchar#!#varchar Test String#!#84#!#T#!#Uppercase ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/char-function.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/char-function.out index 19cefc5f595..5dcc420653f 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/char-function.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/char-function.out @@ -48,7 +48,7 @@ SELECT CHAR(ASCII(' ')) AS Space; GO ~~START~~ -text#!#text#!#text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar A#!#Z#!#a#!#z#!#0#!#9#!# ~~END~~ @@ -61,16 +61,17 @@ SELECT CHAR(ASCII(CHAR(27))) AS EscapeChar; GO ~~START~~ -text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar #!##!##!# ~~END~~ SELECT CHAR(ASCII(CHAR(0))) AS NullChar GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 3. Special Characters Tests @@ -82,7 +83,7 @@ SELECT CHAR(ASCII('%')) AS PercentSign; GO ~~START~~ -text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar !#!#"#!###!#$#!#% ~~END~~ @@ -94,7 +95,7 @@ SELECT CHAR(255) AS MaxRange; GO ~~START~~ -text#!#text#!#text +varchar#!#varchar#!#varchar #!#~#!#? ~~END~~ @@ -119,16 +120,17 @@ SELECT CHAR(255) AS MaxValidCode; GO ~~START~~ -text#!#text +varchar#!#varchar #!#? ~~END~~ SELECT CHAR(0) AS ZeroCode GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 7. Error Cases @@ -141,9 +143,10 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: character number must be positive)~~ +~~START~~ +varchar + +~~END~~ BEGIN TRY @@ -156,8 +159,8 @@ BEGIN CATCH END CATCH; GO ~~START~~ -text -? +varchar + ~~END~~ @@ -170,7 +173,7 @@ SELECT FROM char_t1; GO ~~START~~ -int#!#text#!#char#!#varchar +int#!#varchar#!#char#!#varchar 65#!#A#!#A#!#Pass 97#!#a#!#a#!#Pass 32#!# #!# #!#Pass @@ -197,7 +200,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 32#!# #!#Special 33#!#!#!#Special 34#!#"#!#Special @@ -343,7 +346,7 @@ GO SELECT * FROM char_v1; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 9#!# #!#Control 32#!# #!#Printable @@ -353,7 +356,7 @@ int#!#text#!#varchar SELECT * FROM char_v2; GO ~~START~~ -int#!#text#!#text +int#!#varchar#!#varchar 65#!#A#!#a 66#!#B#!#b 67#!#C#!#c @@ -499,7 +502,7 @@ EXEC char_sp_generate @StartValue = 65, @Count = 5; EXEC char_sp_compare @Value1 = 65, @Value2 = 97; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 66#!#B#!#Printable 67#!#C#!#Printable @@ -508,7 +511,7 @@ int#!#text#!#varchar ~~END~~ ~~START~~ -int#!#int#!#text#!#text#!#varchar +int#!#int#!#varchar#!#varchar#!#varchar 65#!#97#!#A#!#a#!#Equal ~~END~~ @@ -546,12 +549,12 @@ GO SELECT * FROM char_t3; GO ~~START~~ -int#!#int#!#text#!#int#!#varchar +int#!#int#!#varchar#!#int#!#varchar 1#!#65#!#A#!#0#!#Uppercase 2#!#97#!#a#!#0#!#Lowercase 3#!#48#!#0#!#0#!#Digit 4#!#32#!# #!#1#!#Other -5#!#9#!# #!#0#!#Other +5#!#9#!# #!#1#!#Other ~~END~~ @@ -582,10 +585,7 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~START~~ -varchar#!#nvarchar -Control character insert#!#new row for relation "char_t4" violates check constraint "char_chk_printable" -~~END~~ +~~ROW COUNT: 1~~ @@ -618,3 +618,136 @@ GO DROP TYPE char_type_output; DROP TYPE char_type_varchar; GO + +select sys.char(255) +select sys.char(256) +select sys.char(105) +select sys.char(-1) +select sys.char(0) +select char(256) +select .sys.char(256) +select .sys.char(0) +select .sys.char(-1) +select .sys.char(255) +GO +~~START~~ +varchar +? +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +i +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +? +~~END~~ + +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.char(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.char(255); +GO +~~START~~ +int +1 +~~END~~ + +select char(255); +GO +~~START~~ +varchar +? +~~END~~ + +select sys.char(0); +GO +~~START~~ +varchar + +~~END~~ + +drop function test_schema.char; +GO +drop schema test_schema; +go +select char(200) +go +~~START~~ +varchar +? +~~END~~ + +select [char](252) +go +~~START~~ +varchar +ü +~~END~~ + +select [sys].[char](243) +go +~~START~~ +varchar +ó +~~END~~ + +select Char(255); +go +~~START~~ +varchar +? +~~END~~ + +select ChAr(255) +go +~~START~~ +varchar +? +~~END~~ + + + diff --git a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/unicode.out b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/unicode.out index 7757ea99f2e..f72433db334 100644 --- a/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/unicode.out +++ b/test/JDBC/expected/non_default_server_collation/chinese_prc_ci_as/unicode.out @@ -210,7 +210,7 @@ SELECT GO ~~START~~ int#!#int#!#int#!#int#!#int -#!#9#!#10#!#13#!#27 +0#!#9#!#10#!#13#!#27 ~~END~~ @@ -309,7 +309,7 @@ SELECT * FROM BlockCharacters; GO ~~START~~ nvarchar#!#int#!#nvarchar#!#int -Basic Latin#!#0#!##!# +Basic Latin#!#0#!##!#0 Latin-1 Supplement#!#128#!#€#!#128 Latin Extended-A#!#256#!#Ā#!#256 Latin Extended-B#!#384#!#ƀ#!#384 @@ -412,7 +412,6 @@ int#!#nchar#!#nvarchar#!#int#!#int#!#varchar#!#nvarchar#!#nvarchar ~~START~~ int#!#nvarchar#!#int#!#int#!#int#!#nvarchar#!#varchar -8#!##!#0#!#0#!#0#!##!#Fail ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/ascii.out b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/ascii.out index 0b4655ae837..1aeab2f1fe7 100644 --- a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/ascii.out +++ b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/ascii.out @@ -127,9 +127,10 @@ int#!#int#!#int#!#int -- following throws error in babelfish SELECT ASCII(CHAR(0)) AS NullChar GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int +0 +~~END~~ -- 4. Tests with Different Data Types @@ -238,7 +239,7 @@ SELECT GO ~~START~~ int#!#int -256#!#12121 +#!# ~~END~~ @@ -262,7 +263,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#int#!#varchar +int#!#varchar#!#int#!#varchar 1#!##!#1#!#Pass 2#!##!#2#!#Pass 3#!##!#3#!#Pass @@ -712,7 +713,7 @@ EXEC ascii_sp_analyzestring 'Test String'; EXEC ascii_sp_validateascii 'A', 65; GO ~~START~~ -varchar#!#int#!#text#!#varchar +varchar#!#int#!#varchar#!#varchar Test String#!#84#!#T#!#Uppercase ~~END~~ diff --git a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/char-function.out b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/char-function.out index 19cefc5f595..5dcc420653f 100644 --- a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/char-function.out +++ b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/char-function.out @@ -48,7 +48,7 @@ SELECT CHAR(ASCII(' ')) AS Space; GO ~~START~~ -text#!#text#!#text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar A#!#Z#!#a#!#z#!#0#!#9#!# ~~END~~ @@ -61,16 +61,17 @@ SELECT CHAR(ASCII(CHAR(27))) AS EscapeChar; GO ~~START~~ -text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar #!##!##!# ~~END~~ SELECT CHAR(ASCII(CHAR(0))) AS NullChar GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 3. Special Characters Tests @@ -82,7 +83,7 @@ SELECT CHAR(ASCII('%')) AS PercentSign; GO ~~START~~ -text#!#text#!#text#!#text#!#text +varchar#!#varchar#!#varchar#!#varchar#!#varchar !#!#"#!###!#$#!#% ~~END~~ @@ -94,7 +95,7 @@ SELECT CHAR(255) AS MaxRange; GO ~~START~~ -text#!#text#!#text +varchar#!#varchar#!#varchar #!#~#!#? ~~END~~ @@ -119,16 +120,17 @@ SELECT CHAR(255) AS MaxValidCode; GO ~~START~~ -text#!#text +varchar#!#varchar #!#? ~~END~~ SELECT CHAR(0) AS ZeroCode GO -~~ERROR (Code: 33557097)~~ +~~START~~ +varchar -~~ERROR (Message: null character not permitted)~~ +~~END~~ -- 7. Error Cases @@ -141,9 +143,10 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: character number must be positive)~~ +~~START~~ +varchar + +~~END~~ BEGIN TRY @@ -156,8 +159,8 @@ BEGIN CATCH END CATCH; GO ~~START~~ -text -? +varchar + ~~END~~ @@ -170,7 +173,7 @@ SELECT FROM char_t1; GO ~~START~~ -int#!#text#!#char#!#varchar +int#!#varchar#!#char#!#varchar 65#!#A#!#A#!#Pass 97#!#a#!#a#!#Pass 32#!# #!# #!#Pass @@ -197,7 +200,7 @@ SELECT FROM Numbers; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 32#!# #!#Special 33#!#!#!#Special 34#!#"#!#Special @@ -343,7 +346,7 @@ GO SELECT * FROM char_v1; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 9#!# #!#Control 32#!# #!#Printable @@ -353,7 +356,7 @@ int#!#text#!#varchar SELECT * FROM char_v2; GO ~~START~~ -int#!#text#!#text +int#!#varchar#!#varchar 65#!#A#!#a 66#!#B#!#b 67#!#C#!#c @@ -499,7 +502,7 @@ EXEC char_sp_generate @StartValue = 65, @Count = 5; EXEC char_sp_compare @Value1 = 65, @Value2 = 97; GO ~~START~~ -int#!#text#!#varchar +int#!#varchar#!#varchar 65#!#A#!#Printable 66#!#B#!#Printable 67#!#C#!#Printable @@ -508,7 +511,7 @@ int#!#text#!#varchar ~~END~~ ~~START~~ -int#!#int#!#text#!#text#!#varchar +int#!#int#!#varchar#!#varchar#!#varchar 65#!#97#!#A#!#a#!#Equal ~~END~~ @@ -546,12 +549,12 @@ GO SELECT * FROM char_t3; GO ~~START~~ -int#!#int#!#text#!#int#!#varchar +int#!#int#!#varchar#!#int#!#varchar 1#!#65#!#A#!#0#!#Uppercase 2#!#97#!#a#!#0#!#Lowercase 3#!#48#!#0#!#0#!#Digit 4#!#32#!# #!#1#!#Other -5#!#9#!# #!#0#!#Other +5#!#9#!# #!#1#!#Other ~~END~~ @@ -582,10 +585,7 @@ BEGIN CATCH ERROR_MESSAGE() AS ErrorMessage; END CATCH; GO -~~START~~ -varchar#!#nvarchar -Control character insert#!#new row for relation "char_t4" violates check constraint "char_chk_printable" -~~END~~ +~~ROW COUNT: 1~~ @@ -618,3 +618,136 @@ GO DROP TYPE char_type_output; DROP TYPE char_type_varchar; GO + +select sys.char(255) +select sys.char(256) +select sys.char(105) +select sys.char(-1) +select sys.char(0) +select char(256) +select .sys.char(256) +select .sys.char(0) +select .sys.char(-1) +select .sys.char(255) +GO +~~START~~ +varchar +? +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +i +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar + +~~END~~ + +~~START~~ +varchar +? +~~END~~ + +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.char(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.char(255); +GO +~~START~~ +int +1 +~~END~~ + +select char(255); +GO +~~START~~ +varchar +? +~~END~~ + +select sys.char(0); +GO +~~START~~ +varchar + +~~END~~ + +drop function test_schema.char; +GO +drop schema test_schema; +go +select char(200) +go +~~START~~ +varchar +? +~~END~~ + +select [char](252) +go +~~START~~ +varchar +ü +~~END~~ + +select [sys].[char](243) +go +~~START~~ +varchar +ó +~~END~~ + +select Char(255); +go +~~START~~ +varchar +? +~~END~~ + +select ChAr(255) +go +~~START~~ +varchar +? +~~END~~ + + + diff --git a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/unicode.out b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/unicode.out index 7757ea99f2e..f72433db334 100644 --- a/test/JDBC/expected/non_default_server_collation/japanese_ci_as/unicode.out +++ b/test/JDBC/expected/non_default_server_collation/japanese_ci_as/unicode.out @@ -210,7 +210,7 @@ SELECT GO ~~START~~ int#!#int#!#int#!#int#!#int -#!#9#!#10#!#13#!#27 +0#!#9#!#10#!#13#!#27 ~~END~~ @@ -309,7 +309,7 @@ SELECT * FROM BlockCharacters; GO ~~START~~ nvarchar#!#int#!#nvarchar#!#int -Basic Latin#!#0#!##!# +Basic Latin#!#0#!##!#0 Latin-1 Supplement#!#128#!#€#!#128 Latin Extended-A#!#256#!#Ā#!#256 Latin Extended-B#!#384#!#ƀ#!#384 @@ -412,7 +412,6 @@ int#!#nchar#!#nvarchar#!#int#!#int#!#varchar#!#nvarchar#!#nvarchar ~~START~~ int#!#nvarchar#!#int#!#int#!#int#!#nvarchar#!#varchar -8#!##!#0#!#0#!#0#!##!#Fail ~~END~~ diff --git a/test/JDBC/expected/table_variable_xact_basic.out b/test/JDBC/expected/table_variable_xact_basic.out index 2e0f1d526f1..82af066eebc 100644 --- a/test/JDBC/expected/table_variable_xact_basic.out +++ b/test/JDBC/expected/table_variable_xact_basic.out @@ -792,9 +792,10 @@ DECLARE @PseudoMatrix TABLE(location int identity primary key, c2 int) SELECT number, SUBSTRING(@FirstString,number,1) AS ch FROM numbers WHERE number <= LEN(@FirstString) union all Select 0, Char(0) GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int#!#nvarchar +0#!# +~~END~~ DROP TABLE numbers diff --git a/test/JDBC/expected/table_variable_xact_basic_isolation_snapshot.out b/test/JDBC/expected/table_variable_xact_basic_isolation_snapshot.out index 015aabf263b..7267cef7147 100644 --- a/test/JDBC/expected/table_variable_xact_basic_isolation_snapshot.out +++ b/test/JDBC/expected/table_variable_xact_basic_isolation_snapshot.out @@ -794,9 +794,10 @@ DECLARE @PseudoMatrix TABLE(location int identity primary key, c2 int) SELECT number, SUBSTRING(@FirstString,number,1) AS ch FROM numbers WHERE number <= LEN(@FirstString) union all Select 0, Char(0) GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int#!#nvarchar +0#!# +~~END~~ DROP TABLE numbers diff --git a/test/JDBC/expected/table_variable_xact_basic_xact_abort_on.out b/test/JDBC/expected/table_variable_xact_basic_xact_abort_on.out index 24899d241ba..5ef1b5051b3 100644 --- a/test/JDBC/expected/table_variable_xact_basic_xact_abort_on.out +++ b/test/JDBC/expected/table_variable_xact_basic_xact_abort_on.out @@ -764,9 +764,10 @@ DECLARE @PseudoMatrix TABLE(location int identity primary key, c2 int) SELECT number, SUBSTRING(@FirstString,number,1) AS ch FROM numbers WHERE number <= LEN(@FirstString) union all Select 0, Char(0) GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int#!#nvarchar +0#!# +~~END~~ DROP TABLE numbers diff --git a/test/JDBC/expected/table_variable_xact_with_identity.out b/test/JDBC/expected/table_variable_xact_with_identity.out index 60e7c1ced38..320991d6198 100644 --- a/test/JDBC/expected/table_variable_xact_with_identity.out +++ b/test/JDBC/expected/table_variable_xact_with_identity.out @@ -36,9 +36,10 @@ DECLARE @PseudoMatrix TABLE(location int identity primary key, c2 int) SELECT number, SUBSTRING(@FirstString,number,1) AS ch FROM numbers WHERE number <= LEN(@FirstString) union all Select 0, Char(0) GO -~~ERROR (Code: 33557097)~~ - -~~ERROR (Message: null character not permitted)~~ +~~START~~ +int#!#nvarchar +0#!# +~~END~~ DROP TABLE numbers diff --git a/test/JDBC/expected/unicode.out b/test/JDBC/expected/unicode.out index e89bc8dda08..048d11d9c76 100644 --- a/test/JDBC/expected/unicode.out +++ b/test/JDBC/expected/unicode.out @@ -210,7 +210,7 @@ SELECT GO ~~START~~ int#!#int#!#int#!#int#!#int -#!#9#!#10#!#13#!#27 +0#!#9#!#10#!#13#!#27 ~~END~~ @@ -309,7 +309,7 @@ SELECT * FROM BlockCharacters; GO ~~START~~ nvarchar#!#int#!#nvarchar#!#int -Basic Latin#!#0#!##!# +Basic Latin#!#0#!##!#0 Latin-1 Supplement#!#128#!#€#!#128 Latin Extended-A#!#256#!#Ā#!#256 Latin Extended-B#!#384#!#ƀ#!#384 @@ -412,7 +412,6 @@ int#!#nchar#!#nvarchar#!#int#!#int#!#varchar#!#nvarchar#!#nvarchar ~~START~~ int#!#nvarchar#!#int#!#int#!#int#!#nvarchar#!#varchar -8#!##!#0#!#0#!#0#!##!#Fail ~~END~~ diff --git a/test/JDBC/input/babel_char-vu-verify.sql b/test/JDBC/input/babel_char-vu-verify.sql index 589e631d200..af7f41bc573 100644 --- a/test/JDBC/input/babel_char-vu-verify.sql +++ b/test/JDBC/input/babel_char-vu-verify.sql @@ -15,4 +15,8 @@ select nchar(1114112); select nchar(0x110000); select nchar(0); select nchar(-1); +GO +select sys.nchar(65535) +select sys.nchar(65536) +select sys.nchar(-1) GO \ No newline at end of file diff --git a/test/JDBC/input/functions/string_functions/char-function.sql b/test/JDBC/input/functions/string_functions/char-function.sql index 2980e23a5e2..30e7efb6cf9 100644 --- a/test/JDBC/input/functions/string_functions/char-function.sql +++ b/test/JDBC/input/functions/string_functions/char-function.sql @@ -368,3 +368,46 @@ GO DROP TYPE char_type_output; DROP TYPE char_type_varchar; GO + +select sys.char(255) +select sys.char(256) +select sys.char(105) +select sys.char(-1) +select sys.char(0) +select char(256) +select .sys.char(256) +select .sys.char(0) +select .sys.char(-1) +select .sys.char(255) +GO +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.char(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.char(255); +GO +select char(255); +GO +select sys.char(0); +GO +drop function test_schema.char; +GO +drop schema test_schema; +go +select char(200) +go +select [char](252) +go +select [sys].[char](243) +go +select Char(255); +go +select ChAr(255) +go + + diff --git a/test/JDBC/input/functions/string_functions/nchar-function.sql b/test/JDBC/input/functions/string_functions/nchar-function.sql index cf048e0cea0..bf53b9ab2a0 100644 --- a/test/JDBC/input/functions/string_functions/nchar-function.sql +++ b/test/JDBC/input/functions/string_functions/nchar-function.sql @@ -413,3 +413,50 @@ GO DROP TYPE nchar_type_output; DROP TYPE nchar_type_nvarchar; GO + +select nchar(cast(45 as binary)) +go +select nchar(cast(45 as varbinary)) +go +select nchar(0) +go +select nchar(63535) +go +select nchar(65536) +go +-- Test with UDF named char in a schema other than sys +CREATE SCHEMA test_schema; +GO +create function test_schema.nchar(@x int) +returns integer as +BEGIN + return 1; +END; +GO +select test_schema.nchar(255); +GO +drop function test_schema.nchar; +GO +drop schema test_schema; +go +select Nchar(63535) +go +select NcHaR(63535) +go +create type user_UDT_int from int +go +select nchar(cast(63535 as user_UDT_int)) +go +drop type user_UDT_int +go +SET QUOTED_IDENTIFIER ON +go +select "char"(256) +go +select "nchar"(63535) +go +set QUOTED_IDENTIFIER OFF +go +select nchar(0); +go + diff --git a/test/python/expected/sql_validation_framework/expected_drop.out b/test/python/expected/sql_validation_framework/expected_drop.out index 844ad8cde61..6cf0dd4b3eb 100644 --- a/test/python/expected/sql_validation_framework/expected_drop.out +++ b/test/python/expected/sql_validation_framework/expected_drop.out @@ -72,6 +72,7 @@ Unexpected drop found for procedure sys.babelfish_drop_deprecated_function in fi Unexpected drop found for procedure sys.babelfish_drop_deprecated_function in file babelfishpg_tsql--2.1.0--2.2.0.sql Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfish_common_helper--4.0.0--4.1.0.sql Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfish_common_helper--4.3.0--4.4.0.sql +Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfish_common_helper--5.2.0--5.3.0.sql Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfishpg_tsql--2.0.0--2.1.0.sql Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfishpg_tsql--2.2.0--2.3.0.sql Unexpected drop found for procedure sys.babelfish_drop_deprecated_object in file babelfishpg_tsql--2.3.0--2.4.0.sql diff --git a/test/python/expected/upgrade_validation/expected_dependency.out b/test/python/expected/upgrade_validation/expected_dependency.out index cf3e05e5524..28f637946ef 100644 --- a/test/python/expected/upgrade_validation/expected_dependency.out +++ b/test/python/expected/upgrade_validation/expected_dependency.out @@ -62,7 +62,6 @@ Collation sys.ukrainian_cs_as Collation sys.vietnamese_ci_ai Collation sys.vietnamese_ci_as Function information_schema_tsql.table_constraints_internal() -Function sys."char"(integer) Function sys."decimal"(sys."nchar",integer,boolean) Function sys."isnull"(bigint,bigint) Function sys."isnull"(boolean,boolean) @@ -75,9 +74,7 @@ Function sys."isnull"(smallint,smallint) Function sys."isnull"(text,text) Function sys."isnull"(timestamp with time zone,timestamp with time zone) Function sys."isnull"(timestamp without time zone,timestamp without time zone) -Function sys."nchar"(integer) Function sys."nchar"(sys."nchar",integer,boolean) -Function sys."nchar"(sys.varbinary) Function sys."session_user"() Function sys."system_user"() Function sys."varchar"(sys.geography) @@ -543,6 +540,7 @@ Function sys.month(anyelement) Function sys.nchar_larger(sys."nchar",sys."nchar") Function sys.nchar_smaller(sys."nchar",sys."nchar") Function sys.nchar_sqlvariant(sys."nchar") +Function sys.ncht_(integer) Function sys.nestlevel() Function sys.newid() Function sys.newsequentialid()