From ab982bc541e03524245f4636d8ed1d2a5fa64228 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Wed, 5 Feb 2025 13:57:08 +0000 Subject: [PATCH 1/8] Enhance testing coverage for [var]binary data types --- test/JDBC/expected/TestBinary.out | 837 +++++++++++++++++- test/JDBC/input/datatypes/BasicTestBinary.txt | 28 + test/JDBC/input/datatypes/TestBinary.sql | 492 ++++++++++ test/JDBC/input/datatypes/TestBinary.txt | 29 - 4 files changed, 1330 insertions(+), 56 deletions(-) create mode 100644 test/JDBC/input/datatypes/BasicTestBinary.txt create mode 100644 test/JDBC/input/datatypes/TestBinary.sql delete mode 100644 test/JDBC/input/datatypes/TestBinary.txt diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index 562c8b0ceac..a6f89afff0e 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -1,69 +1,852 @@ -CREATE TABLE BINARY_dt(a BINARY(8), b VARBINARY(10)); -#inserting random values -INSERT INTO BINARY_dt(a, b) values (1234, 12345); +-- varbinary(max) +CREATE TABLE BINARY_dt(a VARBINARY(max)); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (123456); +GO ~~ROW COUNT: 1~~ -INSERT INTO BINARY_dt(a, b) values (NULL, NULL); +INSERT INTO BINARY_dt(a) values (0x); +GO ~~ROW COUNT: 1~~ -#INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x3132333435); -SELECT * FROM BINARY_dt +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot coerce string literal to varbinary datatype)~~ + +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM BINARY_dt order by a; +GO ~~START~~ -binary#!#varbinary -00000000000004D2#!#00003039 -#!# +varbinary + + +0001E240 +414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141 ~~END~~ -#prepst#!# INSERT INTO BINARY_dt(a, b) values(@a, @b) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 -DROP TABLE BINARY_dt +UPDATE BINARY_dt set a = 0x where a = NULL; +GO -CREATE TABLE BINARY_dt(a VARBINARY(max)); -INSERT INTO BINARY_dt(a) values (NULL); -~~ROW COUNT: 1~~ +SELECT * FROM BINARY_dt order by a; +GO +~~START~~ +varbinary + -SELECT * FROM BINARY_dt; +0001E240 +414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141 +~~END~~ + + +UPDATE BINARY_dt set a = 0x where a IS NOT NULL; +GO +~~ROW COUNT: 3~~ + + +SELECT * FROM BINARY_dt order by a; +GO ~~START~~ varbinary + + + ~~END~~ + DROP TABLE BINARY_dt; +GO +-- simple varbinary(max) testing along with other columns create table BINARY_dt (a VARBINARY(max), b int, c int, d int, e int ,f int, g int, h int, i int); +GO + insert into BINARY_dt (a,b,c,d,e,f,g,h,i) values (NULL,1,2,3,4,5,6,7,8); +GO ~~ROW COUNT: 1~~ + + +DELETE FROM BINARY_dt WHERE a = NULL; select * from BINARY_dt; +GO ~~START~~ varbinary#!#int#!#int#!#int#!#int#!#int#!#int#!#int#!#int #!#1#!#2#!#3#!#4#!#5#!#6#!#7#!#8 ~~END~~ + drop table BINARY_dt; +GO + +-- FK-PK testing +CREATE TABLE BINARY_dt_pkey(a VARBINARY(400) primary key); +GO + +INSERT INTO BINARY_dt_pkey(a) values (NULL); +GO +~~ERROR (Code: 515)~~ + +~~ERROR (Message: null value in column "a" of relation "binary_dt_pkey" violates not-null constraint)~~ + +INSERT INTO BINARY_dt_pkey(a) values (123456); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_pkey(a) values (0x); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_pkey(a) values (0x3132333435); +GO +~~ROW COUNT: 1~~ + + -CREATE TABLE BINARY_dt(a BINARY(8), b VARBINARY(10)); -INSERT INTO BINARY_dt(a, b) values (1234, 12345); +CREATE TABLE BINARY_dt_fkey + ( + a varbinary(400), + FOREIGN KEY (a) REFERENCES BINARY_dt_pkey(a) + ); +INSERT INTO BINARY_dt_fkey(a) values (NULL); +GO ~~ROW COUNT: 1~~ -prepst#!# INSERT INTO BINARY_dt(a, b) values(?, ?) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 +INSERT INTO BINARY_dt_fkey(a) values (123456); +GO ~~ROW COUNT: 1~~ -prepst#!#exec#!#binary|-|a|-|12345678#!#varbinary|-|b|-|12345 +INSERT INTO BINARY_dt_fkey(a) values (0x); +GO ~~ROW COUNT: 1~~ -prepst#!#exec#!#binary|-|a|-|1234#!#varbinary|-|b|-|123456789 +INSERT INTO BINARY_dt_fkey(a) values (0x3132333435); +GO ~~ROW COUNT: 1~~ -SELECT * FROM BINARY_dt; + +select * from BINARY_dt_fkey order by a; +GO ~~START~~ -binary#!#varbinary -00000000000004D2#!#00003039 -3132333400000000#!#3132333435 -3132333435363738#!#3132333435 -3132333400000000#!#313233343536373839 +varbinary + + +0001E240 +3132333435 +~~END~~ + + +select t1.a, t2.a from BINARY_dt_pkey t1 join BINARY_dt_fkey t2 on t1.a = t2.a order by t1.a; +GO +~~START~~ +varbinary#!#varbinary +#!# +0001E240#!#0001E240 +3132333435#!#3132333435 +~~END~~ + + +-- delete pkey which is referenced by fkey +DELETE from BINARY_dt_pkey where a = 123456; +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: update or delete on table "binary_dt_pkey" violates foreign key constraint "binary_dt_fkey_a_fkey" on table "binary_dt_fkey")~~ + + +DELETE from BINARY_dt_fkey where a = 0x3132333435; +GO +~~ROW COUNT: 1~~ + + +select * from BINARY_dt_fkey order by a; +GO +~~START~~ +varbinary + + +0001E240 +~~END~~ + + +DROP TABLE BINARY_dt_fkey; +DROP TABLE BINARY_dt_pkey; +GO + +-- partitioned table testing on varbinary +CREATE PARTITION FUNCTION BINARY_dt_partition_func (VARBINARY(400)) + AS RANGE RIGHT FOR VALUES( + 0x2550, + 0x4749, + 0xFFD8, + 0x8950 + ); +GO + +CREATE PARTITION SCHEME BINARY_dt_partition_scheme + AS PARTITION BINARY_dt_partition_func ALL + TO ([PRIMARY]); +GO + +CREATE TABLE BINARY_dt_partition( + a VARBINARY(400), + type VARCHAR(10)) +ON BINARY_dt_partition_scheme(a); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E350D0A, 'PDF'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E360D0A, 'PDF'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +~~ROW COUNT: 1~~ + + +-- Query to show files in each partition +SELECT a, type, $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber + FROM BINARY_dt_partition ORDER BY PartitionNumber; +GO +~~START~~ +varbinary#!#varchar#!#int +255044462D312E350D0A#!#PDF#!#2 +255044462D312E360D0A#!#PDF#!#2 +474946383961#!#GIF#!#3 +474946383961#!#GIF#!#3 +89504E470D0A1A0A#!#PNG#!#4 +89504E470D0A1A0A#!#PNG#!#4 +FFD8FFE000104A4649460001#!#JPEG#!#5 +FFD8FFE000104A4649460001#!#JPEG#!#5 +~~END~~ + + +-- Query to show count of files by partition +SELECT $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber, type, COUNT(*) AS FileCount + FROM BINARY_dt_partition + GROUP BY $PARTITION.BINARY_dt_partition_func(a), type + ORDER BY PartitionNumber; +GO +~~START~~ +int#!#varchar#!#int +2#!#PDF#!#2 +3#!#GIF#!#2 +4#!#PNG#!#2 +5#!#JPEG#!#2 +~~END~~ + + +DROP TABLE BINARY_dt_partition; +DROP PARTITION SCHEME BINARY_dt_partition_scheme; +DROP PARTITION FUNCTION BINARY_dt_partition_func; +GO + +-- partitioning support testing with binary data type +CREATE PARTITION FUNCTION BINARY_dt_partition_func (BINARY(20)) + AS RANGE RIGHT FOR VALUES( + 0x2550, + 0x4749, + 0xFFD8, + 0x8950 + ); +GO + +CREATE PARTITION SCHEME BINARY_dt_partition_scheme + AS PARTITION BINARY_dt_partition_func ALL + TO ([PRIMARY]); +GO + +CREATE TABLE BINARY_dt_partition( + a BINARY(20), + type VARCHAR(10)) +ON BINARY_dt_partition_scheme(a); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E350D0A, 'PDF'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E360D0A, 'PDF'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +~~ROW COUNT: 1~~ + + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +~~ROW COUNT: 1~~ + + +-- Query to show files in each partition +SELECT a, type, $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber + FROM BINARY_dt_partition ORDER BY PartitionNumber; +GO +~~START~~ +binary#!#varchar#!#int +255044462D312E350D0A00000000000000000000#!#PDF#!#2 +255044462D312E360D0A00000000000000000000#!#PDF#!#2 +4749463839610000000000000000000000000000#!#GIF#!#3 +4749463839610000000000000000000000000000#!#GIF#!#3 +89504E470D0A1A0A000000000000000000000000#!#PNG#!#4 +89504E470D0A1A0A000000000000000000000000#!#PNG#!#4 +FFD8FFE000104A46494600010000000000000000#!#JPEG#!#5 +FFD8FFE000104A46494600010000000000000000#!#JPEG#!#5 +~~END~~ + + +-- Query to show count of files by partition +SELECT $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber, type, COUNT(*) AS FileCount + FROM BINARY_dt_partition + GROUP BY $PARTITION.BINARY_dt_partition_func(a), type + ORDER BY PartitionNumber; +GO +~~START~~ +int#!#varchar#!#int +2#!#PDF#!#2 +3#!#GIF#!#2 +4#!#PNG#!#2 +5#!#JPEG#!#2 +~~END~~ + + +DROP TABLE BINARY_dt_partition; +DROP PARTITION SCHEME BINARY_dt_partition_scheme; +DROP PARTITION FUNCTION BINARY_dt_partition_func; +GO + +-- function returns VARBINARY(MAX) +CREATE FUNCTION GenerateRandomVarbinaryMax +( + @length INT +) +RETURNS VARBINARY(MAX) +AS +BEGIN + DECLARE @result VARBINARY(MAX) = cast(replicate('a', @length) as varbinary(max)); + return @result; +END; +GO + +select dbo.GenerateRandomVarbinaryMax(10), DATALENGTH(GenerateRandomVarbinaryMax(10)); +GO +~~START~~ +varbinary#!#int +61616161616161616161#!#10 +~~END~~ + + +select dbo.GenerateRandomVarbinaryMax(8020), DATALENGTH(GenerateRandomVarbinaryMax(8020)); +GO +~~START~~ +varbinary#!#int +61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161#!#8020 +~~END~~ + + +select probin from pg_proc where proname = lower('GenerateRandomVarbinaryMax') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["-1", "-1"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION GenerateRandomVarbinaryMax; +GO + +-- function returns VARBINARY(n) +CREATE FUNCTION dbo.GenerateRandomVarbinary +( + @length INT +) +RETURNS VARBINARY(400) +AS +BEGIN + DECLARE @result VARBINARY(400) = cast(replicate('a', @length) as varbinary(max)); + return @result; +END; +GO + +select dbo.GenerateRandomVarbinary(10), DATALENGTH(GenerateRandomVarbinary(10)); +GO +~~START~~ +varbinary#!#int +61616161616161616161#!#10 +~~END~~ + + +select dbo.GenerateRandomVarbinary(8004), DATALENGTH(GenerateRandomVarbinary(8004)); +GO +~~START~~ +varbinary#!#int +61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161#!#400 +~~END~~ + + +select probin from pg_proc where proname = lower('GenerateRandomVarbinary') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["-1", "400"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION GenerateRandomVarbinary +GO + +-- function that returns binary(400) +CREATE FUNCTION dbo.GenerateRandomBinary +( + @length INT +) +RETURNS BINARY(400) +AS +BEGIN + return 0x616161616161 +END; +GO + +select dbo.GenerateRandomBinary(10), DATALENGTH(GenerateRandomBinary(10)); +GO +~~START~~ +binary#!#int +61#!#400 +~~END~~ + + +select dbo.GenerateRandomBinary(8004), DATALENGTH(GenerateRandomBinary(8004)); +GO +~~START~~ +binary#!#int +61#!#400 +~~END~~ + + +select probin from pg_proc where proname = lower('GenerateRandomBinary') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["-1", "400"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION dbo.GenerateRandomBinary +GO + +-- function that takes varbinary(max) input +CREATE FUNCTION dbo.GetVarbinaryMaxLength +( + @bin varbinary(max) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO + +select dbo.GetVarbinaryMaxLength(0x616161616161) +GO +~~START~~ +int +6 +~~END~~ + + +select dbo.GetVarbinaryMaxLength(0x) +GO +~~START~~ +int +0 +~~END~~ + + +select dbo.GetVarbinaryMaxLength(cast(replicate('a', 8020) as varbinary(max))) +GO +~~START~~ +int +8020 +~~END~~ + + +select probin from pg_proc where proname = lower('GetVarbinaryMaxLength') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["-1", "-1"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION dbo.GetVarbinaryMaxLength +GO + +-- function that takes varbinary(n) input +CREATE FUNCTION dbo.GetVarbinaryLength +( + @bin varbinary(400) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO + +select dbo.GetVarbinaryLength(0x616161616161) +GO +~~START~~ +int +6 +~~END~~ + + +select dbo.GetVarbinaryLength(0x) +GO +~~START~~ +int +0 +~~END~~ + + +select dbo.GetVarbinaryLength(cast(replicate('a', 8020) as varbinary(max))) +GO +~~START~~ +int +400 ~~END~~ -DROP TABLE BINARY_dt; +select probin from pg_proc where proname = lower('GetVarbinaryLength') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["400", "-1"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION dbo.GetVarbinaryLength +GO + +-- function that takes binary(n) input +CREATE FUNCTION dbo.GetBinaryLength +( + @bin binary(400) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO +select dbo.GetBinaryLength(0x616161616161) +GO +~~START~~ +int +400 +~~END~~ + + +select dbo.GetBinaryLength(0x) +GO +~~START~~ +int +400 +~~END~~ + + +select dbo.GetBinaryLength(cast(replicate('a', 8020) as varbinary(max))) +GO +~~START~~ +int +400 +~~END~~ + + +select probin from pg_proc where proname = lower('GetBinaryLength') +GO +~~START~~ +text +{"version_num": "1", "typmod_array": ["400", "-1"], "original_probin": ""} +~~END~~ + + +DROP FUNCTION dbo.GetBinaryLength +GO + +-- [var]binary as default, check constraints +CREATE TABLE BINARY_dt(a VARBINARY(10) default 0x61, b VARBINARY(10), c int, check (b > 0x61)); +GO + +insert into BINARY_dt (b,c) values (0x62, 1); +GO +~~ROW COUNT: 1~~ + +insert into BINARY_dt (b,c) values (0x60, 2); +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "binary_dt" violates check constraint "binary_dt_b_check")~~ + + +select * from BINARY_dt; +GO +~~START~~ +varbinary#!#varbinary#!#int +61#!#62#!#1 +~~END~~ + + +DROP TABLE BINARY_dt +GO + +CREATE TABLE BINARY_dt(a BINARY(10) default 0x61, b BINARY(10), c int, check (b > 0x61)); +GO + +insert into BINARY_dt (b,c) values (0x62, 1); +GO +~~ROW COUNT: 1~~ + +insert into BINARY_dt (b,c) values (0x60, 2); +GO +~~ERROR (Code: 547)~~ + +~~ERROR (Message: new row for relation "binary_dt" violates check constraint "binary_dt_b_check")~~ + + +select * from BINARY_dt; +GO +~~START~~ +binary#!#binary#!#int +61000000000000000000#!#62000000000000000000#!#1 +~~END~~ + + +DROP TABLE BINARY_dt +GO + +-- typmod should be in range [1, 8000] +CREATE TABLE BINARY_dt(a varbinary, b binary); +GO + +select atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attname in ('a', 'b') +GO +~~START~~ +int +5 +5 +~~END~~ + + +DROP TABLE BINARY_dt +GO + +CREATE TABLE BINARY_dt(a varbinary(-1), b binary); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: syntax error near '-' at line 1 and character position 35)~~ + + +CREATE TABLE BINARY_dt(a varbinary, b binary(-1)); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: syntax error near '-' at line 1 and character position 45)~~ + + +CREATE TABLE BINARY_dt(a varbinary(0), b binary); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: length for type varbinary must be at least 1)~~ + + +CREATE TABLE BINARY_dt(a varbinary, b binary(0)); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: length for type varbinary must be at least 1)~~ + + +CREATE TABLE BINARY_dt(a varbinary(8800), b binary); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The size '8800' exceeds the maximum allowed (8000) for 'varbinary' datatype.)~~ + + +CREATE TABLE BINARY_dt(a varbinary, b binary(8800)); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: The size '8800' exceeds the maximum allowed (8000) for 'binary' datatype.)~~ + + +CREATE TABLE BINARY_dt(a varbinary(8000), b binary(8000)); +GO + +DROP TABLE BINARY_dt +GO + +-- check the typmod with cast +select datalength(cast(replicate('a', 30) as varbinary)) +GO +~~START~~ +int +30 +~~END~~ + + +select datalength(cast(replicate('a', 30) as binary)) +GO +~~START~~ +int +30 +~~END~~ + + +-- ability to use varbinary / binary as part of table variable +DECLARE @BINARY_dt TABLE ( + a BINARY(4), + b VARBINARY(10), + c varbinary(max) +); +insert into @BINARY_dt values (0x, 0x, 0x), (NULL, NULL, NULL), (0x41, 0x41, 0x41), (0x41, 0x41, cast(replicate('a', 8020) as varbinary(max))); +select * from @BINARY_dt +GO +~~ROW COUNT: 4~~ + +~~START~~ +binary#!#varbinary#!#varbinary +00000000#!##!# +#!##!# +41000000#!#41#!#41 +41000000#!#41#!#61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161 +~~END~~ + + +-- select into testing +create table BINARY_dt (a varbinary, b varbinary(20), c varbinary(max), d binary, e binary(20)) +GO + +INSERT INTO BINARY_dt (a, b, c, d, e) +VALUES +(NULL, NULL, NULL, NULL, NULL), +(0x, 0x, 0x, 0x, 0x), +(NULL, 0x, NULL, 0x, NULL), +(0x, NULL, 0x, NULL, 0x), +(0x50, 0x504B030400, 0x504B030400000000, 0x89, 0x89504E470D0A), +(0x0A, 0x0A0B0C0D0E, 0x0A0B0C0D0E0F1011, 0x0A, 0x0A0B0C0D0E), +(0x48, 0x48656C6C6F, 0x48656C6C6F776F726C64, 0x41, 0x48656C6C6F), +(0xC0, 0xC0A801010A, 0xC0A801010A0B0C0D, 0xC0, 0xC0A8010101), +(0x00, 0x0000000000, 0x0000000000000000, 0x00, 0x0000000000), +(0xFF, 0xFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFF, 0xFFFFFFFFFF), +(0xAA, 0xAA55AA55AA, 0xAA55AA55AA55AA55, 0xAA, 0xAA55AA55AA), +(0x12, 0x1234ABCDEF, 0x1234ABCDEF567890, 0x12, 0x1234ABCDEF), +(0x0F, 0x0F0F0F0F0F, 0x0F0F0F0F0F0F0F0F, 0x0F, 0x0F0F0F0F0F), +(0xA1, 0xA1B2C3D4E5, 0xA1B2C3D4E5F6F7F8, 0xA1, 0xA1B2C3D4E5) +GO +~~ROW COUNT: 14~~ + + +select * into BINARY_dt_derived from BINARY_dt; +GO + +select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 +GO +~~START~~ +varchar#!#int#!#int +a#!#5#!#17325 +b#!#24#!#17325 +c#!#-1#!#17325 +d#!#5#!#17399 +e#!#24#!#17399 +~~END~~ + + +select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 +GO +~~START~~ +varchar#!#int#!#int +a#!#5#!#17325 +b#!#24#!#17325 +c#!#-1#!#17325 +d#!#5#!#17399 +e#!#24#!#17399 +~~END~~ + + +create index idx_binary_dt_a on BINARY_dt(a); +GO + +create index idx_binary_dt_bc on BINARY_dt(b, c); +GO + +create index idx_binary_dt_d on BINARY_dt(d) include (e); +GO + +DROP TABLE BINARY_dt_derived +GO + +DROP TABLE BINARY_dt +GO diff --git a/test/JDBC/input/datatypes/BasicTestBinary.txt b/test/JDBC/input/datatypes/BasicTestBinary.txt new file mode 100644 index 00000000000..88e66ed9670 --- /dev/null +++ b/test/JDBC/input/datatypes/BasicTestBinary.txt @@ -0,0 +1,28 @@ +CREATE TABLE BINARY_dt(a BINARY(5), b VARBINARY(10)); +#inserting random values +INSERT INTO BINARY_dt(a, b) values (1234, 12345); +INSERT INTO BINARY_dt(a, b) values (NULL, NULL); +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x3132333435); +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x00); +INSERT INTO BINARY_dt(a, b) values (0x00, 0x3132333435); +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x); +INSERT INTO BINARY_dt(a, b) values (0x, 0x3132333435); + +#boundary conditions +INSERT INTO BINARY_dt(a, b) values (0x3132333435, 0x31323334353637383940); +INSERT INTO BINARY_dt(a, b) values (0x313233343536, 0x31323334353637383940); +INSERT INTO BINARY_dt(a, b) values (0x3132333435, 0x3132333435363738394041); + +#string to binary insert / test left padding +INSERT INTO BINARY_dt(a, b) values ('abc ', ' abc '); + +SELECT * FROM BINARY_dt order by a; + +prepst#!# INSERT INTO BINARY_dt(a, b) values(@a, @b) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 +prepst#!#exec#!#binary|-|a|-|12345678#!#varbinary|-|b|-|12345 +prepst#!#exec#!#binary|-|a|-|12345#!#varbinary|-|b|-|12345678999 +prepst#!#exec#!#binary|-|a|-|#!#varbinary|-|b|-| + +SELECT * FROM BINARY_dt order by a; +DROP TABLE BINARY_dt; + diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql new file mode 100644 index 00000000000..65ece7840ee --- /dev/null +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -0,0 +1,492 @@ +-- varbinary(max) +CREATE TABLE BINARY_dt(a VARBINARY(max)); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +INSERT INTO BINARY_dt(a) values (123456); +GO +INSERT INTO BINARY_dt(a) values (0x); +GO +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO + +SELECT * FROM BINARY_dt order by a; +GO + +UPDATE BINARY_dt set a = 0x where a = NULL; +GO + +SELECT * FROM BINARY_dt order by a; +GO + +UPDATE BINARY_dt set a = 0x where a IS NOT NULL; +GO + +SELECT * FROM BINARY_dt order by a; +GO + +DROP TABLE BINARY_dt; +GO + +-- simple varbinary(max) testing along with other columns +create table BINARY_dt (a VARBINARY(max), b int, c int, d int, e int ,f int, g int, h int, i int); +GO + +insert into BINARY_dt (a,b,c,d,e,f,g,h,i) values (NULL,1,2,3,4,5,6,7,8); +GO + +DELETE FROM BINARY_dt WHERE a = NULL; + +select * from BINARY_dt; +GO + +drop table BINARY_dt; +GO + +-- FK-PK testing +CREATE TABLE BINARY_dt_pkey(a VARBINARY(400) primary key); +GO + +INSERT INTO BINARY_dt_pkey(a) values (NULL); +GO +INSERT INTO BINARY_dt_pkey(a) values (123456); +GO +INSERT INTO BINARY_dt_pkey(a) values (0x); +GO +INSERT INTO BINARY_dt_pkey(a) values (0x3132333435); +GO + +CREATE TABLE BINARY_dt_fkey + ( + a varbinary(400), + FOREIGN KEY (a) REFERENCES BINARY_dt_pkey(a) + ); + +INSERT INTO BINARY_dt_fkey(a) values (NULL); +GO +INSERT INTO BINARY_dt_fkey(a) values (123456); +GO +INSERT INTO BINARY_dt_fkey(a) values (0x); +GO +INSERT INTO BINARY_dt_fkey(a) values (0x3132333435); +GO + +select * from BINARY_dt_fkey order by a; +GO + +select t1.a, t2.a from BINARY_dt_pkey t1 join BINARY_dt_fkey t2 on t1.a = t2.a order by t1.a; +GO + +-- delete pkey which is referenced by fkey +DELETE from BINARY_dt_pkey where a = 123456; +GO + +DELETE from BINARY_dt_fkey where a = 0x3132333435; +GO + +select * from BINARY_dt_fkey order by a; +GO + +DROP TABLE BINARY_dt_fkey; +DROP TABLE BINARY_dt_pkey; +GO + +-- partitioned table testing on varbinary +CREATE PARTITION FUNCTION BINARY_dt_partition_func (VARBINARY(400)) + AS RANGE RIGHT FOR VALUES( + 0x2550, + 0x4749, + 0xFFD8, + 0x8950 + ); +GO + +CREATE PARTITION SCHEME BINARY_dt_partition_scheme + AS PARTITION BINARY_dt_partition_func ALL + TO ([PRIMARY]); +GO + +CREATE TABLE BINARY_dt_partition( + a VARBINARY(400), + type VARCHAR(10)) +ON BINARY_dt_partition_scheme(a); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E350D0A, 'PDF'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E360D0A, 'PDF'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO + +-- Query to show files in each partition +SELECT a, type, $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber + FROM BINARY_dt_partition ORDER BY PartitionNumber; +GO + +-- Query to show count of files by partition +SELECT $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber, type, COUNT(*) AS FileCount + FROM BINARY_dt_partition + GROUP BY $PARTITION.BINARY_dt_partition_func(a), type + ORDER BY PartitionNumber; +GO + +DROP TABLE BINARY_dt_partition; +DROP PARTITION SCHEME BINARY_dt_partition_scheme; +DROP PARTITION FUNCTION BINARY_dt_partition_func; +GO + +-- partitioning support testing with binary data type +CREATE PARTITION FUNCTION BINARY_dt_partition_func (BINARY(20)) + AS RANGE RIGHT FOR VALUES( + 0x2550, + 0x4749, + 0xFFD8, + 0x8950 + ); +GO + +CREATE PARTITION SCHEME BINARY_dt_partition_scheme + AS PARTITION BINARY_dt_partition_func ALL + TO ([PRIMARY]); +GO + +CREATE TABLE BINARY_dt_partition( + a BINARY(20), + type VARCHAR(10)) +ON BINARY_dt_partition_scheme(a); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E350D0A, 'PDF'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x255044462D312E360D0A, 'PDF'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x474946383961, 'GIF'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0xFFD8FFE000104A4649460001, 'JPEG'); +GO + +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO +INSERT INTO BINARY_dt_partition (a, type) VALUES (0x89504E470D0A1A0A, 'PNG'); +GO + +-- Query to show files in each partition +SELECT a, type, $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber + FROM BINARY_dt_partition ORDER BY PartitionNumber; +GO + +-- Query to show count of files by partition +SELECT $PARTITION.BINARY_dt_partition_func(a) AS PartitionNumber, type, COUNT(*) AS FileCount + FROM BINARY_dt_partition + GROUP BY $PARTITION.BINARY_dt_partition_func(a), type + ORDER BY PartitionNumber; +GO + +DROP TABLE BINARY_dt_partition; +DROP PARTITION SCHEME BINARY_dt_partition_scheme; +DROP PARTITION FUNCTION BINARY_dt_partition_func; +GO + +-- function returns VARBINARY(MAX) +CREATE FUNCTION GenerateRandomVarbinaryMax +( + @length INT +) +RETURNS VARBINARY(MAX) +AS +BEGIN + DECLARE @result VARBINARY(MAX) = cast(replicate('a', @length) as varbinary(max)); + return @result; +END; +GO + +select dbo.GenerateRandomVarbinaryMax(10), DATALENGTH(GenerateRandomVarbinaryMax(10)); +GO + +select dbo.GenerateRandomVarbinaryMax(8020), DATALENGTH(GenerateRandomVarbinaryMax(8020)); +GO + +select probin from pg_proc where proname = lower('GenerateRandomVarbinaryMax') +GO + +DROP FUNCTION GenerateRandomVarbinaryMax; +GO + +-- function returns VARBINARY(n) +CREATE FUNCTION dbo.GenerateRandomVarbinary +( + @length INT +) +RETURNS VARBINARY(400) +AS +BEGIN + DECLARE @result VARBINARY(400) = cast(replicate('a', @length) as varbinary(max)); + return @result; +END; +GO + +select dbo.GenerateRandomVarbinary(10), DATALENGTH(GenerateRandomVarbinary(10)); +GO + +select dbo.GenerateRandomVarbinary(8004), DATALENGTH(GenerateRandomVarbinary(8004)); +GO + +select probin from pg_proc where proname = lower('GenerateRandomVarbinary') +GO + +DROP FUNCTION GenerateRandomVarbinary +GO + +-- function that returns binary(400) +CREATE FUNCTION dbo.GenerateRandomBinary +( + @length INT +) +RETURNS BINARY(400) +AS +BEGIN + return 0x616161616161 +END; +GO + +select dbo.GenerateRandomBinary(10), DATALENGTH(GenerateRandomBinary(10)); +GO + +select dbo.GenerateRandomBinary(8004), DATALENGTH(GenerateRandomBinary(8004)); +GO + +select probin from pg_proc where proname = lower('GenerateRandomBinary') +GO + +DROP FUNCTION dbo.GenerateRandomBinary +GO + +-- function that takes varbinary(max) input +CREATE FUNCTION dbo.GetVarbinaryMaxLength +( + @bin varbinary(max) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO + +select dbo.GetVarbinaryMaxLength(0x616161616161) +GO + +select dbo.GetVarbinaryMaxLength(0x) +GO + +select dbo.GetVarbinaryMaxLength(cast(replicate('a', 8020) as varbinary(max))) +GO + +select probin from pg_proc where proname = lower('GetVarbinaryMaxLength') +GO + +DROP FUNCTION dbo.GetVarbinaryMaxLength +GO + +-- function that takes varbinary(n) input +CREATE FUNCTION dbo.GetVarbinaryLength +( + @bin varbinary(400) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO + +select dbo.GetVarbinaryLength(0x616161616161) +GO + +select dbo.GetVarbinaryLength(0x) +GO + +select dbo.GetVarbinaryLength(cast(replicate('a', 8020) as varbinary(max))) +GO + +select probin from pg_proc where proname = lower('GetVarbinaryLength') +GO + +DROP FUNCTION dbo.GetVarbinaryLength +GO + +-- function that takes binary(n) input +CREATE FUNCTION dbo.GetBinaryLength +( + @bin binary(400) +) +RETURNS int +AS +BEGIN + return DATALENGTH(@bin) +END; +GO + +select dbo.GetBinaryLength(0x616161616161) +GO + +select dbo.GetBinaryLength(0x) +GO + +select dbo.GetBinaryLength(cast(replicate('a', 8020) as varbinary(max))) +GO + +select probin from pg_proc where proname = lower('GetBinaryLength') +GO + +DROP FUNCTION dbo.GetBinaryLength +GO + +-- [var]binary as default, check constraints +CREATE TABLE BINARY_dt(a VARBINARY(10) default 0x61, b VARBINARY(10), c int, check (b > 0x61)); +GO + +insert into BINARY_dt (b,c) values (0x62, 1); +GO +insert into BINARY_dt (b,c) values (0x60, 2); +GO + +select * from BINARY_dt; +GO + +DROP TABLE BINARY_dt +GO + +CREATE TABLE BINARY_dt(a BINARY(10) default 0x61, b BINARY(10), c int, check (b > 0x61)); +GO + +insert into BINARY_dt (b,c) values (0x62, 1); +GO +insert into BINARY_dt (b,c) values (0x60, 2); +GO + +select * from BINARY_dt; +GO + +DROP TABLE BINARY_dt +GO + +-- typmod should be in range [1, 8000] +CREATE TABLE BINARY_dt(a varbinary, b binary); +GO + +select atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attname in ('a', 'b') +GO + +DROP TABLE BINARY_dt +GO + +CREATE TABLE BINARY_dt(a varbinary(-1), b binary); +GO + +CREATE TABLE BINARY_dt(a varbinary, b binary(-1)); +GO + +CREATE TABLE BINARY_dt(a varbinary(0), b binary); +GO + +CREATE TABLE BINARY_dt(a varbinary, b binary(0)); +GO + +CREATE TABLE BINARY_dt(a varbinary(8800), b binary); +GO + +CREATE TABLE BINARY_dt(a varbinary, b binary(8800)); +GO + +CREATE TABLE BINARY_dt(a varbinary(8000), b binary(8000)); +GO + +DROP TABLE BINARY_dt +GO + +-- check the typmod with cast +select datalength(cast(replicate('a', 30) as varbinary)) +GO + +select datalength(cast(replicate('a', 30) as binary)) +GO + +-- ability to use varbinary / binary as part of table variable +DECLARE @BINARY_dt TABLE ( + a BINARY(4), + b VARBINARY(10), + c varbinary(max) +); +insert into @BINARY_dt values (0x, 0x, 0x), (NULL, NULL, NULL), (0x41, 0x41, 0x41), (0x41, 0x41, cast(replicate('a', 8020) as varbinary(max))); +select * from @BINARY_dt +GO + +-- select into testing +create table BINARY_dt (a varbinary, b varbinary(20), c varbinary(max), d binary, e binary(20)) +GO + +INSERT INTO BINARY_dt (a, b, c, d, e) +VALUES +(NULL, NULL, NULL, NULL, NULL), +(0x, 0x, 0x, 0x, 0x), +(NULL, 0x, NULL, 0x, NULL), +(0x, NULL, 0x, NULL, 0x), +(0x50, 0x504B030400, 0x504B030400000000, 0x89, 0x89504E470D0A), +(0x0A, 0x0A0B0C0D0E, 0x0A0B0C0D0E0F1011, 0x0A, 0x0A0B0C0D0E), +(0x48, 0x48656C6C6F, 0x48656C6C6F776F726C64, 0x41, 0x48656C6C6F), +(0xC0, 0xC0A801010A, 0xC0A801010A0B0C0D, 0xC0, 0xC0A8010101), +(0x00, 0x0000000000, 0x0000000000000000, 0x00, 0x0000000000), +(0xFF, 0xFFFFFFFFFF, 0xFFFFFFFFFFFFFFFF, 0xFF, 0xFFFFFFFFFF), +(0xAA, 0xAA55AA55AA, 0xAA55AA55AA55AA55, 0xAA, 0xAA55AA55AA), +(0x12, 0x1234ABCDEF, 0x1234ABCDEF567890, 0x12, 0x1234ABCDEF), +(0x0F, 0x0F0F0F0F0F, 0x0F0F0F0F0F0F0F0F, 0x0F, 0x0F0F0F0F0F), +(0xA1, 0xA1B2C3D4E5, 0xA1B2C3D4E5F6F7F8, 0xA1, 0xA1B2C3D4E5) +GO + +select * into BINARY_dt_derived from BINARY_dt; +GO + +select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 +GO + +select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 +GO + +create index idx_binary_dt_a on BINARY_dt(a); +GO + +create index idx_binary_dt_bc on BINARY_dt(b, c); +GO + +create index idx_binary_dt_d on BINARY_dt(d) include (e); +GO + +DROP TABLE BINARY_dt_derived +GO + +DROP TABLE BINARY_dt +GO diff --git a/test/JDBC/input/datatypes/TestBinary.txt b/test/JDBC/input/datatypes/TestBinary.txt deleted file mode 100644 index e4f4c5a5396..00000000000 --- a/test/JDBC/input/datatypes/TestBinary.txt +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE BINARY_dt(a BINARY(8), b VARBINARY(10)); -#inserting random values -INSERT INTO BINARY_dt(a, b) values (1234, 12345); -INSERT INTO BINARY_dt(a, b) values (NULL, NULL); -#INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x3132333435); -SELECT * FROM BINARY_dt -#prepst#!# INSERT INTO BINARY_dt(a, b) values(@a, @b) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 -DROP TABLE BINARY_dt - - -CREATE TABLE BINARY_dt(a VARBINARY(max)); -INSERT INTO BINARY_dt(a) values (NULL); -SELECT * FROM BINARY_dt; -DROP TABLE BINARY_dt; - -create table BINARY_dt (a VARBINARY(max), b int, c int, d int, e int ,f int, g int, h int, i int); -insert into BINARY_dt (a,b,c,d,e,f,g,h,i) values (NULL,1,2,3,4,5,6,7,8); -select * from BINARY_dt; -drop table BINARY_dt; - -CREATE TABLE BINARY_dt(a BINARY(8), b VARBINARY(10)); -INSERT INTO BINARY_dt(a, b) values (1234, 12345); -prepst#!# INSERT INTO BINARY_dt(a, b) values(@a, @b) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 -prepst#!#exec#!#binary|-|a|-|12345678#!#varbinary|-|b|-|12345 -prepst#!#exec#!#binary|-|a|-|1234#!#varbinary|-|b|-|123456789 -SELECT * FROM BINARY_dt; -DROP TABLE BINARY_dt; - - From 8182a6fe2f448902b6e604aba631fa871ca8d16e Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Wed, 5 Feb 2025 15:53:51 +0000 Subject: [PATCH 2/8] Fixed Binary type expected file --- test/JDBC/expected/BasicTestBinary.out | 98 ++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 test/JDBC/expected/BasicTestBinary.out diff --git a/test/JDBC/expected/BasicTestBinary.out b/test/JDBC/expected/BasicTestBinary.out new file mode 100644 index 00000000000..250b392edf5 --- /dev/null +++ b/test/JDBC/expected/BasicTestBinary.out @@ -0,0 +1,98 @@ +CREATE TABLE BINARY_dt(a BINARY(5), b VARBINARY(10)); +#inserting random values +INSERT INTO BINARY_dt(a, b) values (1234, 12345); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (NULL, NULL); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x3132333435); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x00); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x00, 0x3132333435); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x31323334, 0x); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x, 0x3132333435); +~~ROW COUNT: 1~~ + + +#boundary conditions +INSERT INTO BINARY_dt(a, b) values (0x3132333435, 0x31323334353637383940); +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a, b) values (0x313233343536, 0x31323334353637383940); +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + +INSERT INTO BINARY_dt(a, b) values (0x3132333435, 0x3132333435363738394041); +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + + +#string to binary insert / test left padding +INSERT INTO BINARY_dt(a, b) values ('abc ', ' abc '); +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot coerce string literal to binary datatype)~~ + + +SELECT * FROM BINARY_dt order by a; +~~START~~ +binary#!#varbinary +#!# +0000000000#!#3132333435 +0000000000#!#3132333435 +00000004D2#!#00003039 +3132333400#!#00 +3132333400#!# +3132333400#!#3132333435 +3132333435#!#31323334353637383940 +~~END~~ + + +prepst#!# INSERT INTO BINARY_dt(a, b) values(?, ?) #!#binary|-|a|-|1234#!#varbinary|-|b|-|12345 +~~ROW COUNT: 1~~ + +prepst#!#exec#!#binary|-|a|-|12345678#!#varbinary|-|b|-|12345 +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + +prepst#!#exec#!#binary|-|a|-|12345#!#varbinary|-|b|-|12345678999 +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + +prepst#!#exec#!#binary|-|a|-|#!#varbinary|-|b|-| +~~ROW COUNT: 1~~ + + +SELECT * FROM BINARY_dt order by a; +~~START~~ +binary#!#varbinary +#!# +#!# +0000000000#!#3132333435 +0000000000#!#3132333435 +00000004D2#!#00003039 +3132333400#!# +3132333400#!#00 +3132333400#!#3132333435 +3132333400#!#3132333435 +3132333435#!#31323334353637383940 +~~END~~ + +DROP TABLE BINARY_dt; + From 8999f230da217e3ddc920987654cdaf0f66e5fb9 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 7 Feb 2025 05:52:43 +0000 Subject: [PATCH 3/8] Fixed output file --- test/JDBC/expected/TestBinary.out | 28 ++++++++++++------------ test/JDBC/input/datatypes/TestBinary.sql | 4 ++-- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index a6f89afff0e..907d2cc493c 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -812,27 +812,27 @@ GO select * into BINARY_dt_derived from BINARY_dt; GO -select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 +select attname, atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 GO ~~START~~ -varchar#!#int#!#int -a#!#5#!#17325 -b#!#24#!#17325 -c#!#-1#!#17325 -d#!#5#!#17399 -e#!#24#!#17399 +varchar#!#int +a#!#5 +b#!#24 +c#!#-1 +d#!#5 +e#!#24 ~~END~~ -select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 +select attname, atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 GO ~~START~~ -varchar#!#int#!#int -a#!#5#!#17325 -b#!#24#!#17325 -c#!#-1#!#17325 -d#!#5#!#17399 -e#!#24#!#17399 +varchar#!#int +a#!#5 +b#!#24 +c#!#-1 +d#!#5 +e#!#24 ~~END~~ diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index 65ece7840ee..4832d23aa9d 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -470,10 +470,10 @@ GO select * into BINARY_dt_derived from BINARY_dt; GO -select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 +select attname, atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt_derived') and attnum > 0 GO -select attname, atttypmod, atttypid from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 +select attname, atttypmod from pg_attribute where attrelid = (select oid from pg_class where relname = 'binary_dt') and attnum > 0 GO create index idx_binary_dt_a on BINARY_dt(a); From 72f869d984a6b51d3be5a24e3fcbc926582608e8 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 7 Feb 2025 06:22:17 +0000 Subject: [PATCH 4/8] Fixed output file --- test/JDBC/expected/TestBinary.out | 166 +++++++++++++++++++++++ test/JDBC/input/datatypes/TestBinary.sql | 87 ++++++++++++ 2 files changed, 253 insertions(+) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index 907d2cc493c..56304aa6e7f 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -850,3 +850,169 @@ GO DROP TABLE BINARY_dt GO + +-- UDF based on varbinary(max) +CREATE TYPE udfvarbinarymax FROM varbinary(max); +GO + +CREATE TABLE BINARY_dt(a udfvarbinarymax); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (123456); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (0x); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot coerce string literal to varbinary datatype)~~ + +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO +~~ROW COUNT: 1~~ + + +SELECT * FROM BINARY_dt order by a; +GO +~~START~~ +varbinary + + +0001E240 +414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141 +~~END~~ + + + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinarymax'; +DROP TABLE BINARY_dt +GO +~~START~~ +int#!#varchar +-1#!#varbinary +~~END~~ + + +DROP TYPE udfvarbinarymax +GO + +-- UDF based on varbinary(n) +CREATE TYPE udfvarbinary10 FROM varbinary(10); +GO + +CREATE TABLE BINARY_dt(a udfvarbinary10); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (123456); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (0x); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot coerce string literal to varbinary datatype)~~ + +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + + +SELECT * FROM BINARY_dt order by a; +GO +~~START~~ +varbinary + + +0001E240 +~~END~~ + + + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinary10'; +DROP TABLE BINARY_dt +GO +~~START~~ +int#!#varchar +14#!#varbinary +~~END~~ + + +DROP TYPE udfvarbinary10 +GO + +-- UDF based on binary(n) +CREATE TYPE udfbinary10 FROM binary(10); +GO + +CREATE TABLE BINARY_dt(a udfbinary10); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (123456); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (0x); +GO +~~ROW COUNT: 1~~ + +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot coerce string literal to binary datatype)~~ + +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: String or binary data would be truncated. +The statement has been terminated.)~~ + + +SELECT * FROM BINARY_dt order by a; +GO +~~START~~ +binary + +00000000000000000000 +0000000000000001E240 +~~END~~ + + + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfbinary10'; +DROP TABLE BINARY_dt +GO +~~START~~ +int#!#varchar +14#!#binary +~~END~~ + + +DROP TYPE udfbinary10 +GO diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index 4832d23aa9d..2eec7df0867 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -490,3 +490,90 @@ GO DROP TABLE BINARY_dt GO + +-- UDF based on varbinary(max) +CREATE TYPE udfvarbinarymax FROM varbinary(max); +GO + +CREATE TABLE BINARY_dt(a udfvarbinarymax); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +INSERT INTO BINARY_dt(a) values (123456); +GO +INSERT INTO BINARY_dt(a) values (0x); +GO +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO + +SELECT * FROM BINARY_dt order by a; +GO + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinarymax'; + +DROP TABLE BINARY_dt +GO + +DROP TYPE udfvarbinarymax +GO + +-- UDF based on varbinary(n) +CREATE TYPE udfvarbinary10 FROM varbinary(10); +GO + +CREATE TABLE BINARY_dt(a udfvarbinary10); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +INSERT INTO BINARY_dt(a) values (123456); +GO +INSERT INTO BINARY_dt(a) values (0x); +GO +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO + +SELECT * FROM BINARY_dt order by a; +GO + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinary10'; + +DROP TABLE BINARY_dt +GO + +DROP TYPE udfvarbinary10 +GO + +-- UDF based on binary(n) +CREATE TYPE udfbinary10 FROM binary(10); +GO + +CREATE TABLE BINARY_dt(a udfbinary10); +GO + +INSERT INTO BINARY_dt(a) values (NULL); +GO +INSERT INTO BINARY_dt(a) values (123456); +GO +INSERT INTO BINARY_dt(a) values (0x); +GO +INSERT INTO BINARY_dt(a) values (' Abc '); +GO +INSERT INTO BINARY_dt(a) values (cast(replicate(0x41, 8010) as varbinary(max))); +GO + +SELECT * FROM BINARY_dt order by a; +GO + +select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfbinary10'; + +DROP TABLE BINARY_dt +GO + +DROP TYPE udfbinary10 +GO \ No newline at end of file From 30fb7ca825241b66c4bfd879e9f4927c4dd10f10 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Wed, 19 Feb 2025 06:31:22 +0000 Subject: [PATCH 5/8] new test cases --- test/JDBC/expected/TestBinary.out | 626 ++++++++++++++++++++++- test/JDBC/input/datatypes/TestBinary.sql | 513 +++++++++++++++++++ 2 files changed, 1133 insertions(+), 6 deletions(-) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index 56304aa6e7f..1af2caee35d 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -892,9 +892,7 @@ varbinary ~~END~~ - select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinarymax'; -DROP TABLE BINARY_dt GO ~~START~~ int#!#varchar @@ -902,6 +900,9 @@ int#!#varchar ~~END~~ +DROP TABLE BINARY_dt +GO + DROP TYPE udfvarbinarymax GO @@ -948,9 +949,7 @@ varbinary ~~END~~ - select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinary10'; -DROP TABLE BINARY_dt GO ~~START~~ int#!#varchar @@ -958,6 +957,9 @@ int#!#varchar ~~END~~ +DROP TABLE BINARY_dt +GO + DROP TYPE udfvarbinary10 GO @@ -1004,9 +1006,7 @@ binary ~~END~~ - select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfbinary10'; -DROP TABLE BINARY_dt GO ~~START~~ int#!#varchar @@ -1014,5 +1014,619 @@ int#!#varchar ~~END~~ +DROP TABLE BINARY_dt +GO + DROP TYPE udfbinary10 GO + +-- Create a test table +CREATE TABLE BinaryCastingDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(10) +); +GO + +-- CHAR and VARCHAR to Binary +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Empty string', 'VARCHAR', CAST('' AS VARBINARY(MAX)), CAST('' AS BINARY(10)), CAST('' AS VARBINARY(10))), + ('NULL value', 'VARCHAR', CAST(NULL AS VARBINARY(MAX)), CAST(NULL AS BINARY(10)), CAST(NULL AS VARBINARY(10))), + ('Simple text', 'VARCHAR', CAST('Hello' AS VARBINARY(MAX)), CAST('Hello' AS BINARY(10)), CAST('Hello' AS VARBINARY(10))), + ('Long text', 'VARCHAR', CAST('ThisIsALongText' AS VARBINARY(MAX)), CAST('ThisIsALong' AS BINARY(10)), CAST('ThisIsALong' AS VARBINARY(10))); +GO +~~ROW COUNT: 4~~ + + +-- NCHAR and NVARCHAR to Binary +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Unicode text', 'NVARCHAR', CAST(N'Helloæ–‡' AS VARBINARY(MAX)), CAST(N'Helloæ–‡' AS BINARY(10)), CAST(N'Helloæ–‡' AS VARBINARY(10))), + ('Unicode null', 'NVARCHAR', CAST(NULL AS VARBINARY(MAX)), CAST(NULL AS BINARY(10)), CAST(NULL AS VARBINARY(10))); +GO +~~ROW COUNT: 2~~ + + +-- Direct Binary Input +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Hex input', 'image', cast(0x48656C6C6F as image), cast(0x48656C6C6F as image), cast(0x48656C6C6F as image)), + ('Empty binary', 'image', cast(0x as image), cast(0x as image), cast(0x as image)); +GO +~~ROW COUNT: 2~~ + + +-- Query results +SELECT + ID, + Description, + SourceType, + BinaryValue, + BinaryFixed, + BinarySmall, + DATALENGTH(BinaryValue) AS BinaryValueLength, + DATALENGTH(BinaryFixed) AS BinaryFixedLength, + DATALENGTH(BinarySmall) AS BinarySmallLength +FROM BinaryCastingDemo; +GO +~~START~~ +int#!#varchar#!#varchar#!#varbinary#!#binary#!#varbinary#!#int#!#int#!#int +1#!#Empty string#!#VARCHAR#!##!#00000000000000000000#!##!#0#!#0#!#0 +2#!#NULL value#!#VARCHAR#!##!##!##!##!##!# +3#!#Simple text#!#VARCHAR#!#48656C6C6F#!#48656C6C6F0000000000#!#48656C6C6F#!#5#!#10#!#5 +4#!#Long text#!#VARCHAR#!#546869734973414C6F6E6754657874#!#546869734973414C6F6E#!#546869734973414C6F6E#!#15#!#10#!#10 +5#!#Unicode text#!#NVARCHAR#!#480065006C006C006F008765#!#480065006C006C006F00#!#480065006C006C006F00#!#12#!#10#!#10 +6#!#Unicode null#!#NVARCHAR#!##!##!##!##!##!# +7#!#Hex input#!#image#!#48656C6C6F#!#48656C6C6F0000000000#!#48656C6C6F#!#5#!#10#!#5 +8#!#Empty binary#!#image#!##!#00000000000000000000#!##!#0#!#10#!#0 +~~END~~ + + +-- Cleanup +DROP TABLE BinaryCastingDemo; +GO + +-- Create test table +CREATE TABLE DateTimeToBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(50) +); +GO + + + + +-- DATETIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTime Regular', 'DATETIME', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + ('DateTime NULL', 'DATETIME', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'), + ('DateTime Min', 'DATETIME', + CAST('1753-01-01 00:00:00' AS VARBINARY(MAX)), + CAST('1753-01-01 00:00:00' AS BINARY(10)), + CAST('1753-01-01 00:00:00' AS VARBINARY(8)), + '1753-01-01 00:00:00'), + ('DateTime Max', 'DATETIME', + CAST('9999-12-31 23:59:59.997' AS VARBINARY(MAX)), + CAST('9999-12-31 23:59:59.997' AS BINARY(10)), + CAST('9999-12-31 23:59:59.997' AS VARBINARY(8)), + '9999-12-31 23:59:59.997'); +GO +~~ROW COUNT: 4~~ + + + +-- SMALLDATETIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('SmallDateTime Regular', 'SMALLDATETIME', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + ('SmallDateTime Min', 'SMALLDATETIME', + CAST('1900-01-01 00:00:00' AS VARBINARY(MAX)), + CAST('1900-01-01 00:00:00' AS BINARY(10)), + CAST('1900-01-01 00:00:00' AS VARBINARY(8)), + '1900-01-01 00:00:00'); +GO +~~ROW COUNT: 2~~ + + + +-- DATE conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Date Regular', 'DATE', + CAST('2024-01-15' AS VARBINARY(MAX)), + CAST('2024-01-15' AS BINARY(10)), + CAST('2024-01-15' AS VARBINARY(8)), + '2024-01-15'), + ('Date Min', 'DATE', + CAST('0001-01-01' AS VARBINARY(MAX)), + CAST('0001-01-01' AS BINARY(10)), + CAST('0001-01-01' AS VARBINARY(8)), + '0001-01-01'); +GO +~~ROW COUNT: 2~~ + + + +-- TIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Time Regular', 'TIME', + CAST('14:30:00' AS VARBINARY(MAX)), + CAST('14:30:00' AS BINARY(10)), + CAST('14:30:00' AS VARBINARY(8)), + '14:30:00'), + ('Time With Milliseconds', 'TIME', + CAST('14:30:00.1234567' AS VARBINARY(MAX)), + CAST('14:30:00.1234567' AS BINARY(10)), + CAST('14:30:00.1234567' AS VARBINARY(8)), + '14:30:00.1234567'); +GO +~~ROW COUNT: 2~~ + + + +-- DATETIMEOFFSET conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTimeOffset Regular', 'DATETIMEOFFSET', + CAST('2024-01-15 14:30:00 +00:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00 +00:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00 +00:00' AS VARBINARY(8)), + '2024-01-15 14:30:00 +00:00'), + ('DateTimeOffset With TZ', 'DATETIMEOFFSET', + CAST('2024-01-15 14:30:00 -08:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00 -08:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00 -08:00' AS VARBINARY(8)), + '2024-01-15 14:30:00 -08:00'); +GO +~~ROW COUNT: 2~~ + + + +-- DATETIME2 conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTime2 Regular', 'DATETIME2', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + ('DateTime2 With Precision', 'DATETIME2', + CAST('2024-01-15 14:30:00.1234567' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00.1234567' AS BINARY(10)), + CAST('2024-01-15 14:30:00.1234567' AS VARBINARY(8)), + '2024-01-15 14:30:00.1234567'); +GO +~~ROW COUNT: 2~~ + + +-- Query results +SELECT + ID, + Description, + SourceType, + BinaryValue, + CONVERT(VARCHAR(100), BinaryValue, 1) AS BinaryValueHex, + BinaryFixed, + CONVERT(VARCHAR(100), BinaryFixed, 1) AS BinaryFixedHex, + BinarySmall, + CONVERT(VARCHAR(100), BinarySmall, 1) AS BinarySmallHex, + OriginalValue, + DATALENGTH(BinaryValue) AS BinaryValueLength, + DATALENGTH(BinaryFixed) AS BinaryFixedLength, + DATALENGTH(BinarySmall) AS BinarySmallLength +FROM DateTimeToBinaryDemo +ORDER BY ID; +GO +~~START~~ +int#!#varchar#!#varchar#!#varbinary#!#varchar#!#binary#!#varchar#!#varbinary#!#varchar#!#varchar#!#int#!#int#!#int +1#!#DateTime Regular#!#DATETIME#!#323032342D30312D31352031343A33303A3030#!#2024-01-15 14:30:00#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00#!#19#!#10#!#8 +2#!#DateTime NULL#!#DATETIME#!##!##!##!##!##!##!#NULL#!##!##!# +3#!#DateTime Min#!#DATETIME#!#313735332D30312D30312030303A30303A3030#!#1753-01-01 00:00:00#!#313735332D30312D3031#!#1753-01-01#!#313735332D30312D#!#1753-01-#!#1753-01-01 00:00:00#!#19#!#10#!#8 +4#!#DateTime Max#!#DATETIME#!#393939392D31322D33312032333A35393A35392E393937#!#9999-12-31 23:59:59.997#!#393939392D31322D3331#!#9999-12-31#!#393939392D31322D#!#9999-12-#!#9999-12-31 23:59:59.997#!#23#!#10#!#8 +5#!#SmallDateTime Regular#!#SMALLDATETIME#!#323032342D30312D31352031343A33303A3030#!#2024-01-15 14:30:00#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00#!#19#!#10#!#8 +6#!#SmallDateTime Min#!#SMALLDATETIME#!#313930302D30312D30312030303A30303A3030#!#1900-01-01 00:00:00#!#313930302D30312D3031#!#1900-01-01#!#313930302D30312D#!#1900-01-#!#1900-01-01 00:00:00#!#19#!#10#!#8 +7#!#Date Regular#!#DATE#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15#!#10#!#10#!#8 +8#!#Date Min#!#DATE#!#303030312D30312D3031#!#0001-01-01#!#303030312D30312D3031#!#0001-01-01#!#303030312D30312D#!#0001-01-#!#0001-01-01#!#10#!#10#!#8 +9#!#Time Regular#!#TIME#!#31343A33303A3030#!#14:30:00#!#31343A33303A30300000#!#14:30:00#!#31343A33303A3030#!#14:30:00#!#14:30:00#!#8#!#10#!#8 +10#!#Time With Milliseconds#!#TIME#!#31343A33303A30302E31323334353637#!#14:30:00.1234567#!#31343A33303A30302E31#!#14:30:00.1#!#31343A33303A3030#!#14:30:00#!#14:30:00.1234567#!#16#!#10#!#8 +11#!#DateTimeOffset Regular#!#DATETIMEOFFSET#!#323032342D30312D31352031343A33303A3030202B30303A3030#!#2024-01-15 14:30:00 +00:00#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00 +00:00#!#26#!#10#!#8 +12#!#DateTimeOffset With TZ#!#DATETIMEOFFSET#!#323032342D30312D31352031343A33303A3030202D30383A3030#!#2024-01-15 14:30:00 -08:00#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00 -08:00#!#26#!#10#!#8 +13#!#DateTime2 Regular#!#DATETIME2#!#323032342D30312D31352031343A33303A3030#!#2024-01-15 14:30:00#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00#!#19#!#10#!#8 +14#!#DateTime2 With Precision#!#DATETIME2#!#323032342D30312D31352031343A33303A30302E31323334353637#!#2024-01-15 14:30:00.1234567#!#323032342D30312D3135#!#2024-01-15#!#323032342D30312D#!#2024-01-#!#2024-01-15 14:30:00.1234567#!#27#!#10#!#8 +~~END~~ + + +-- Cleanup +DROP TABLE DateTimeToBinaryDemo; +GO + +-- Create test table +CREATE TABLE NumericToBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(50) +); +GO + + + + + + + + +-- DECIMAL/NUMERIC conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Decimal Regular', 'DECIMAL(18,2)', + CAST(123456.78 AS VARBINARY(MAX)), + CAST(123456.78 AS BINARY(10)), + CAST(123456.78 AS VARBINARY(8)), + cast('123456.78' as DECIMAL(18,2))), + ('Decimal Zero', 'DECIMAL(18,2)', + CAST(0.00 AS VARBINARY(MAX)), + CAST(0.00 AS BINARY(10)), + CAST(0.00 AS VARBINARY(8)), + cast('0.00' as DECIMAL(18,2))), + ('Decimal NULL', 'DECIMAL(18,2)', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + cast('NULL' as DECIMAL(18,2))), + ('Decimal Large', 'DECIMAL(18,2)', + CAST(999999999999.99 AS VARBINARY(MAX)), + CAST(999999999999.99 AS BINARY(10)), + CAST(999999999999.99 AS VARBINARY(8)), + cast('999999999999.99' as DECIMAL(18,2))); + ('Decimal Regular', 'NUMERIC(18,2)', + CAST(123456.78 AS VARBINARY(MAX)), + CAST(123456.78 AS BINARY(10)), + CAST(123456.78 AS VARBINARY(8)), + cast('123456.78' as NUMERIC(18,2))), + ('Decimal Zero', 'NUMERIC(18,2)', + CAST(0.00 AS VARBINARY(MAX)), + CAST(0.00 AS BINARY(10)), + CAST(0.00 AS VARBINARY(8)), + cast('0.00' as NUMERIC(18,2))), + ('Decimal NULL', 'NUMERIC(18,2)', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + cast('NULL' as NUMERIC(18,2))), + ('Decimal Large', 'NUMERIC(18,2)', + CAST(999999999999.99 AS VARBINARY(MAX)), + CAST(999999999999.99 AS BINARY(10)), + CAST(999999999999.99 AS VARBINARY(8)), + cast('999999999999.99' as NUMERIC(18,2))); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: syntax error near ''Decimal Regular'' at line 24 and character position 5)~~ + + + + +-- FLOAT/REAL conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Float Regular', 'FLOAT', + CAST(CAST(123.456 AS FLOAT) AS VARBINARY(MAX)), + CAST(CAST(123.456 AS FLOAT) AS BINARY(10)), + CAST(CAST(123.456 AS FLOAT) AS VARBINARY(8)), + '123.456'), + ('Real Regular', 'REAL', + CAST(CAST(123.456 AS REAL) AS VARBINARY(MAX)), + CAST(CAST(123.456 AS REAL) AS BINARY(10)), + CAST(CAST(123.456 AS REAL) AS VARBINARY(8)), + '123.456'), + ('Float Scientific', 'FLOAT', + CAST(CAST(1.23456E+10 AS FLOAT) AS VARBINARY(MAX)), + CAST(CAST(1.23456E+10 AS FLOAT) AS BINARY(10)), + CAST(CAST(1.23456E+10 AS FLOAT) AS VARBINARY(8)), + '1.23456E+10'); +GO +~~ROW COUNT: 3~~ + + + + + + + +-- Integer types conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('BigInt Max', 'BIGINT', + CAST(9223372036854775807 AS VARBINARY(MAX)), + CAST(9223372036854775807 AS BINARY(10)), + CAST(9223372036854775807 AS VARBINARY(8)), + '9223372036854775807'), + ('Int Regular', 'INT', + CAST(2147483647 AS VARBINARY(MAX)), + CAST(2147483647 AS BINARY(10)), + CAST(2147483647 AS VARBINARY(8)), + '2147483647'), + ('SmallInt Regular', 'SMALLINT', + CAST(32767 AS VARBINARY(MAX)), + CAST(32767 AS BINARY(10)), + CAST(32767 AS VARBINARY(8)), + '32767'), + ('TinyInt Regular', 'TINYINT', + CAST(255 AS VARBINARY(MAX)), + CAST(255 AS BINARY(10)), + CAST(255 AS VARBINARY(8)), + '255'), + ('Integer Zero', 'INT', + CAST(0 AS VARBINARY(MAX)), + CAST(0 AS BINARY(10)), + CAST(0 AS VARBINARY(8)), + '0'), + ('Integer Negative', 'INT', + CAST(-12345 AS VARBINARY(MAX)), + CAST(-12345 AS BINARY(10)), + CAST(-12345 AS VARBINARY(8)), + '-12345'); +GO +~~ROW COUNT: 6~~ + + + + + + + +-- MONEY/SMALLMONEY conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Money Regular', 'MONEY', + CAST(CAST(123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST(123456.78 AS MONEY) AS VARBINARY(8)), + '$123456.78'), + ('Money Regular', 'MONEY', + CAST(CAST($123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST($123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST($123456.78 AS MONEY) AS VARBINARY(8)), + '$123456.78'), + ('SmallMoney Regular', 'SMALLMONEY', + CAST(CAST(123456.78 AS SMALLMONEY) AS VARBINARY(MAX)), + CAST(CAST(123456.78 AS SMALLMONEY) AS BINARY(10)), + CAST(CAST(123456.78 AS SMALLMONEY) AS VARBINARY(8)), + '$123456.78'), + ('SmallMoney Regular', 'SMALLMONEY', + CAST(CAST($123456.78 AS SMALLMONEY) AS VARBINARY(MAX)), + CAST(CAST($123456.78 AS SMALLMONEY) AS BINARY(10)), + CAST(CAST($123456.78 AS SMALLMONEY) AS VARBINARY(8)), + '$123456.78'), + ('Money Zero', 'MONEY', + CAST(CAST(0.00 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(0.00 AS MONEY) AS BINARY(10)), + CAST(CAST(0.00 AS MONEY) AS VARBINARY(8)), + '$0.00'), + ('Money Negative', 'MONEY', + CAST(CAST(-123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(-123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST(-123456.78 AS MONEY) AS VARBINARY(8)), + '-$123456.78'); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type money to varbinary)~~ + + +-- Query results +SELECT * +FROM NumericToBinaryDemo +ORDER BY ID; +GO +~~START~~ +int#!#varchar#!#varchar#!#varbinary#!#binary#!#varbinary#!#varchar +1#!#Float Regular#!#FLOAT#!#405EDD2F1A9FBE77#!#0000405EDD2F1A9FBE77#!#405EDD2F1A9FBE77#!#123.456 +2#!#Real Regular#!#REAL#!#42F6E979#!#00000000000042F6E979#!#42F6E979#!#123.456 +3#!#Float Scientific#!#FLOAT#!#4206FED740000000#!#00004206FED740000000#!#4206FED740000000#!#1.23456E+10 +4#!#BigInt Max#!#BIGINT#!#7FFFFFFFFFFFFFFF#!#00007FFFFFFFFFFFFFFF#!#7FFFFFFFFFFFFFFF#!#9223372036854775807 +5#!#Int Regular#!#INT#!#7FFFFFFF#!#0000000000007FFFFFFF#!#7FFFFFFF#!#2147483647 +6#!#SmallInt Regular#!#SMALLINT#!#00007FFF#!#00000000000000007FFF#!#00007FFF#!#32767 +7#!#TinyInt Regular#!#TINYINT#!#000000FF#!#000000000000000000FF#!#000000FF#!#255 +8#!#Integer Zero#!#INT#!#00000000#!#00000000000000000000#!#00000000#!#0 +9#!#Integer Negative#!#INT#!#FFFFCFC7#!#000000000000FFFFCFC7#!#FFFFCFC7#!#-12345 +~~END~~ + + +-- Cleanup +DROP TABLE NumericToBinaryDemo; +GO + +-- Create test table +CREATE TABLE SpecialTypesBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(MAX) +); +GO + + + +-- BIT conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Bit True', 'BIT', + CAST(1 AS VARBINARY(MAX)), + CAST(1 AS BINARY(10)), + CAST(1 AS VARBINARY(8)), + '1'), + ('Bit False', 'BIT', + CAST(0 AS VARBINARY(MAX)), + CAST(0 AS BINARY(10)), + CAST(0 AS VARBINARY(8)), + '0'), + ('Bit NULL', 'BIT', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'); +GO +~~ROW COUNT: 3~~ + + + + +-- UNIQUEIDENTIFIER conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('GUID Regular', 'UNIQUEIDENTIFIER', + CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(MAX)), + CAST('12345678-1234-1234-1234-123456789012' AS BINARY(10)), + CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(8)), + '12345678-1234-1234-1234-123456789012'), + ('GUID NULL', 'UNIQUEIDENTIFIER', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'), + ('GUID Zero', 'UNIQUEIDENTIFIER', + CAST('00000000-0000-0000-0000-000000000000' AS VARBINARY(MAX)), + CAST('00000000-0000-0000-0000-000000000000' AS BINARY(10)), + CAST('00000000-0000-0000-0000-000000000000' AS VARBINARY(8)), + '00000000-0000-0000-0000-000000000000'); +GO +~~ROW COUNT: 3~~ + + + + +-- SQL_VARIANT conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('SQL_VARIANT with INT', 'SQL_VARIANT', + CAST(CAST(12345 AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST(12345 AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST(12345 AS SQL_VARIANT) AS VARBINARY(8)), + '12345'), + ('SQL_VARIANT with VARCHAR', 'SQL_VARIANT', + CAST(CAST('Test String' AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST('Test String' AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST('Test String' AS SQL_VARIANT) AS VARBINARY(8)), + 'Test String'), + ('SQL_VARIANT NULL', 'SQL_VARIANT', + CAST(CAST(NULL AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST(NULL AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST(NULL AS SQL_VARIANT) AS VARBINARY(8)), + 'NULL'); +GO +~~ROW COUNT: 3~~ + + + + + +-- XML conversions +DECLARE @xml XML = 'Test XML Data'; +DECLARE @xmlLarge XML = '' + REPLICATE('Large XML Data', 10) + ''; +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('XML Simple', 'XML', + CAST(@xml AS VARBINARY(MAX)), + CAST(@xml AS BINARY(10)), + CAST(@xml AS VARBINARY(8)), + CAST(@xml AS NVARCHAR(MAX))), + ('XML Large', 'XML', + CAST(@xmlLarge AS VARBINARY(MAX)), + CAST(@xmlLarge AS BINARY(10)), + CAST(@xmlLarge AS VARBINARY(8)), + CAST(@xmlLarge AS NVARCHAR(MAX))), + ('XML NULL', 'XML', + CAST(CAST(NULL AS XML) AS VARBINARY(MAX)), + CAST(CAST(NULL AS XML) AS BINARY(10)), + CAST(CAST(NULL AS XML) AS VARBINARY(8)), + 'NULL'); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type xml to varbinary)~~ + + + + + +-- JSON conversions (note: JSON is stored as NVARCHAR) +DECLARE @json NVARCHAR(MAX) = N'{"id": 1, "name": "Test JSON"}'; +DECLARE @jsonLarge NVARCHAR(MAX) = N'{"items": [' + + REPLICATE('{"id": 1, "value": "Large JSON Data"},', 10) + + '{"id": 2, "value": "Last Item"}]}'; +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('JSON Simple', 'JSON', + CAST(@json AS VARBINARY(MAX)), + CAST(@json AS BINARY(10)), + CAST(@json AS VARBINARY(8)), + @json), + ('JSON Large', 'JSON', + CAST(@jsonLarge AS VARBINARY(MAX)), + CAST(@jsonLarge AS BINARY(10)), + CAST(@jsonLarge AS VARBINARY(8)), + @jsonLarge), + ('JSON NULL', 'JSON', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'); +GO +~~ROW COUNT: 3~~ + + + +-- Query results +SELECT * +FROM SpecialTypesBinaryDemo +ORDER BY ID; +-- Cleanup +DROP TABLE SpecialTypesBinaryDemo; +GO +~~START~~ +int#!#varchar#!#varchar#!#varbinary#!#binary#!#varbinary#!#varchar +1#!#Bit True#!#BIT#!#00000001#!#00000000000000000001#!#00000001#!#1 +2#!#Bit False#!#BIT#!#00000000#!#00000000000000000000#!#00000000#!#0 +3#!#Bit NULL#!#BIT#!##!##!##!#NULL +4#!#GUID Regular#!#UNIQUEIDENTIFIER#!#31323334353637382D313233342D313233342D313233342D313233343536373839303132#!#31323334353637382D31#!#3132333435363738#!#12345678-1234-1234-1234-123456789012 +5#!#GUID NULL#!#UNIQUEIDENTIFIER#!##!##!##!#NULL +6#!#GUID Zero#!#UNIQUEIDENTIFIER#!#30303030303030302D303030302D303030302D303030302D303030303030303030303030#!#30303030303030302D30#!#3030303030303030#!#00000000-0000-0000-0000-000000000000 +7#!#SQL_VARIANT with INT#!#SQL_VARIANT#!#00003039#!#00003039000000000000#!#00003039#!#12345 +8#!#SQL_VARIANT with VARCHAR#!#SQL_VARIANT#!#5465737420537472696E67#!#5465737420537472696E#!#5465737420537472#!#Test String +9#!#SQL_VARIANT NULL#!#SQL_VARIANT#!##!##!##!#NULL +10#!#JSON Simple#!#JSON#!#7B0022006900640022003A00200031002C00200022006E0061006D00650022003A0020002200540065007300740020004A0053004F004E0022007D00#!#7B002200690064002200#!#7B00220069006400#!#{"id": 1, "name": "Test JSON"} +11#!#JSON Large#!#JSON#!#7B0022006900740065006D00730022003A0020005B007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200032002C0020002200760061006C007500650022003A00200022004C0061007300740020004900740065006D0022007D005D007D00#!#7B002200690074006500#!#7B00220069007400#!#{"items": [{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 2, "value": "Last Item"}]} +12#!#JSON NULL#!#JSON#!##!##!##!#NULL +~~END~~ + diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index 2eec7df0867..207d6191007 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -513,6 +513,7 @@ SELECT * FROM BINARY_dt order by a; GO select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinarymax'; +GO DROP TABLE BINARY_dt GO @@ -542,6 +543,7 @@ SELECT * FROM BINARY_dt order by a; GO select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfvarbinary10'; +GO DROP TABLE BINARY_dt GO @@ -571,9 +573,520 @@ SELECT * FROM BINARY_dt order by a; GO select typtypmod, (select typname from pg_type where oid = t.typbasetype) from pg_type t where typname = 'udfbinary10'; +GO DROP TABLE BINARY_dt GO DROP TYPE udfbinary10 +GO + +-- Create a test table +CREATE TABLE BinaryCastingDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(10) +); +GO + +-- CHAR and VARCHAR to Binary +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Empty string', 'VARCHAR', CAST('' AS VARBINARY(MAX)), CAST('' AS BINARY(10)), CAST('' AS VARBINARY(10))), + ('NULL value', 'VARCHAR', CAST(NULL AS VARBINARY(MAX)), CAST(NULL AS BINARY(10)), CAST(NULL AS VARBINARY(10))), + ('Simple text', 'VARCHAR', CAST('Hello' AS VARBINARY(MAX)), CAST('Hello' AS BINARY(10)), CAST('Hello' AS VARBINARY(10))), + ('Long text', 'VARCHAR', CAST('ThisIsALongText' AS VARBINARY(MAX)), CAST('ThisIsALong' AS BINARY(10)), CAST('ThisIsALong' AS VARBINARY(10))); +GO + +-- NCHAR and NVARCHAR to Binary +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Unicode text', 'NVARCHAR', CAST(N'Helloæ–‡' AS VARBINARY(MAX)), CAST(N'Helloæ–‡' AS BINARY(10)), CAST(N'Helloæ–‡' AS VARBINARY(10))), + ('Unicode null', 'NVARCHAR', CAST(NULL AS VARBINARY(MAX)), CAST(NULL AS BINARY(10)), CAST(NULL AS VARBINARY(10))); +GO + +-- Direct Binary Input +INSERT INTO BinaryCastingDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall) +VALUES + ('Hex input', 'image', cast(0x48656C6C6F as image), cast(0x48656C6C6F as image), cast(0x48656C6C6F as image)), + ('Empty binary', 'image', cast(0x as image), cast(0x as image), cast(0x as image)); +GO + +-- Query results +SELECT + ID, + Description, + SourceType, + BinaryValue, + BinaryFixed, + BinarySmall, + DATALENGTH(BinaryValue) AS BinaryValueLength, + DATALENGTH(BinaryFixed) AS BinaryFixedLength, + DATALENGTH(BinarySmall) AS BinarySmallLength +FROM BinaryCastingDemo; +GO + +-- Cleanup +DROP TABLE BinaryCastingDemo; +GO + +-- Create test table +CREATE TABLE DateTimeToBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(50) +); +GO + +-- DATETIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTime Regular', 'DATETIME', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + + ('DateTime NULL', 'DATETIME', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'), + + ('DateTime Min', 'DATETIME', + CAST('1753-01-01 00:00:00' AS VARBINARY(MAX)), + CAST('1753-01-01 00:00:00' AS BINARY(10)), + CAST('1753-01-01 00:00:00' AS VARBINARY(8)), + '1753-01-01 00:00:00'), + + ('DateTime Max', 'DATETIME', + CAST('9999-12-31 23:59:59.997' AS VARBINARY(MAX)), + CAST('9999-12-31 23:59:59.997' AS BINARY(10)), + CAST('9999-12-31 23:59:59.997' AS VARBINARY(8)), + '9999-12-31 23:59:59.997'); +GO + +-- SMALLDATETIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('SmallDateTime Regular', 'SMALLDATETIME', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + + ('SmallDateTime Min', 'SMALLDATETIME', + CAST('1900-01-01 00:00:00' AS VARBINARY(MAX)), + CAST('1900-01-01 00:00:00' AS BINARY(10)), + CAST('1900-01-01 00:00:00' AS VARBINARY(8)), + '1900-01-01 00:00:00'); +GO + +-- DATE conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Date Regular', 'DATE', + CAST('2024-01-15' AS VARBINARY(MAX)), + CAST('2024-01-15' AS BINARY(10)), + CAST('2024-01-15' AS VARBINARY(8)), + '2024-01-15'), + + ('Date Min', 'DATE', + CAST('0001-01-01' AS VARBINARY(MAX)), + CAST('0001-01-01' AS BINARY(10)), + CAST('0001-01-01' AS VARBINARY(8)), + '0001-01-01'); +GO + +-- TIME conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Time Regular', 'TIME', + CAST('14:30:00' AS VARBINARY(MAX)), + CAST('14:30:00' AS BINARY(10)), + CAST('14:30:00' AS VARBINARY(8)), + '14:30:00'), + + ('Time With Milliseconds', 'TIME', + CAST('14:30:00.1234567' AS VARBINARY(MAX)), + CAST('14:30:00.1234567' AS BINARY(10)), + CAST('14:30:00.1234567' AS VARBINARY(8)), + '14:30:00.1234567'); +GO + +-- DATETIMEOFFSET conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTimeOffset Regular', 'DATETIMEOFFSET', + CAST('2024-01-15 14:30:00 +00:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00 +00:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00 +00:00' AS VARBINARY(8)), + '2024-01-15 14:30:00 +00:00'), + + ('DateTimeOffset With TZ', 'DATETIMEOFFSET', + CAST('2024-01-15 14:30:00 -08:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00 -08:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00 -08:00' AS VARBINARY(8)), + '2024-01-15 14:30:00 -08:00'); +GO + +-- DATETIME2 conversions +INSERT INTO DateTimeToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('DateTime2 Regular', 'DATETIME2', + CAST('2024-01-15 14:30:00' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00' AS BINARY(10)), + CAST('2024-01-15 14:30:00' AS VARBINARY(8)), + '2024-01-15 14:30:00'), + + ('DateTime2 With Precision', 'DATETIME2', + CAST('2024-01-15 14:30:00.1234567' AS VARBINARY(MAX)), + CAST('2024-01-15 14:30:00.1234567' AS BINARY(10)), + CAST('2024-01-15 14:30:00.1234567' AS VARBINARY(8)), + '2024-01-15 14:30:00.1234567'); +GO + +-- Query results +SELECT + ID, + Description, + SourceType, + BinaryValue, + CONVERT(VARCHAR(100), BinaryValue, 1) AS BinaryValueHex, + BinaryFixed, + CONVERT(VARCHAR(100), BinaryFixed, 1) AS BinaryFixedHex, + BinarySmall, + CONVERT(VARCHAR(100), BinarySmall, 1) AS BinarySmallHex, + OriginalValue, + DATALENGTH(BinaryValue) AS BinaryValueLength, + DATALENGTH(BinaryFixed) AS BinaryFixedLength, + DATALENGTH(BinarySmall) AS BinarySmallLength +FROM DateTimeToBinaryDemo +ORDER BY ID; +GO + +-- Cleanup +DROP TABLE DateTimeToBinaryDemo; +GO + +-- Create test table +CREATE TABLE NumericToBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(50) +); +GO + +-- DECIMAL/NUMERIC conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Decimal Regular', 'DECIMAL(18,2)', + CAST(123456.78 AS VARBINARY(MAX)), + CAST(123456.78 AS BINARY(10)), + CAST(123456.78 AS VARBINARY(8)), + cast('123456.78' as DECIMAL(18,2))), + + ('Decimal Zero', 'DECIMAL(18,2)', + CAST(0.00 AS VARBINARY(MAX)), + CAST(0.00 AS BINARY(10)), + CAST(0.00 AS VARBINARY(8)), + cast('0.00' as DECIMAL(18,2))), + + ('Decimal NULL', 'DECIMAL(18,2)', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + cast('NULL' as DECIMAL(18,2))), + + ('Decimal Large', 'DECIMAL(18,2)', + CAST(999999999999.99 AS VARBINARY(MAX)), + CAST(999999999999.99 AS BINARY(10)), + CAST(999999999999.99 AS VARBINARY(8)), + cast('999999999999.99' as DECIMAL(18,2))); + + ('Decimal Regular', 'NUMERIC(18,2)', + CAST(123456.78 AS VARBINARY(MAX)), + CAST(123456.78 AS BINARY(10)), + CAST(123456.78 AS VARBINARY(8)), + cast('123456.78' as NUMERIC(18,2))), + + ('Decimal Zero', 'NUMERIC(18,2)', + CAST(0.00 AS VARBINARY(MAX)), + CAST(0.00 AS BINARY(10)), + CAST(0.00 AS VARBINARY(8)), + cast('0.00' as NUMERIC(18,2))), + + ('Decimal NULL', 'NUMERIC(18,2)', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + cast('NULL' as NUMERIC(18,2))), + + ('Decimal Large', 'NUMERIC(18,2)', + CAST(999999999999.99 AS VARBINARY(MAX)), + CAST(999999999999.99 AS BINARY(10)), + CAST(999999999999.99 AS VARBINARY(8)), + cast('999999999999.99' as NUMERIC(18,2))); +GO + +-- FLOAT/REAL conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Float Regular', 'FLOAT', + CAST(CAST(123.456 AS FLOAT) AS VARBINARY(MAX)), + CAST(CAST(123.456 AS FLOAT) AS BINARY(10)), + CAST(CAST(123.456 AS FLOAT) AS VARBINARY(8)), + '123.456'), + + ('Real Regular', 'REAL', + CAST(CAST(123.456 AS REAL) AS VARBINARY(MAX)), + CAST(CAST(123.456 AS REAL) AS BINARY(10)), + CAST(CAST(123.456 AS REAL) AS VARBINARY(8)), + '123.456'), + + ('Float Scientific', 'FLOAT', + CAST(CAST(1.23456E+10 AS FLOAT) AS VARBINARY(MAX)), + CAST(CAST(1.23456E+10 AS FLOAT) AS BINARY(10)), + CAST(CAST(1.23456E+10 AS FLOAT) AS VARBINARY(8)), + '1.23456E+10'); +GO + +-- Integer types conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('BigInt Max', 'BIGINT', + CAST(9223372036854775807 AS VARBINARY(MAX)), + CAST(9223372036854775807 AS BINARY(10)), + CAST(9223372036854775807 AS VARBINARY(8)), + '9223372036854775807'), + + ('Int Regular', 'INT', + CAST(2147483647 AS VARBINARY(MAX)), + CAST(2147483647 AS BINARY(10)), + CAST(2147483647 AS VARBINARY(8)), + '2147483647'), + + ('SmallInt Regular', 'SMALLINT', + CAST(32767 AS VARBINARY(MAX)), + CAST(32767 AS BINARY(10)), + CAST(32767 AS VARBINARY(8)), + '32767'), + + ('TinyInt Regular', 'TINYINT', + CAST(255 AS VARBINARY(MAX)), + CAST(255 AS BINARY(10)), + CAST(255 AS VARBINARY(8)), + '255'), + + ('Integer Zero', 'INT', + CAST(0 AS VARBINARY(MAX)), + CAST(0 AS BINARY(10)), + CAST(0 AS VARBINARY(8)), + '0'), + + ('Integer Negative', 'INT', + CAST(-12345 AS VARBINARY(MAX)), + CAST(-12345 AS BINARY(10)), + CAST(-12345 AS VARBINARY(8)), + '-12345'); +GO + +-- MONEY/SMALLMONEY conversions +INSERT INTO NumericToBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Money Regular', 'MONEY', + CAST(CAST(123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST(123456.78 AS MONEY) AS VARBINARY(8)), + '$123456.78'), + + ('Money Regular', 'MONEY', + CAST(CAST($123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST($123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST($123456.78 AS MONEY) AS VARBINARY(8)), + '$123456.78'), + + ('SmallMoney Regular', 'SMALLMONEY', + CAST(CAST(123456.78 AS SMALLMONEY) AS VARBINARY(MAX)), + CAST(CAST(123456.78 AS SMALLMONEY) AS BINARY(10)), + CAST(CAST(123456.78 AS SMALLMONEY) AS VARBINARY(8)), + '$123456.78'), + + ('SmallMoney Regular', 'SMALLMONEY', + CAST(CAST($123456.78 AS SMALLMONEY) AS VARBINARY(MAX)), + CAST(CAST($123456.78 AS SMALLMONEY) AS BINARY(10)), + CAST(CAST($123456.78 AS SMALLMONEY) AS VARBINARY(8)), + '$123456.78'), + + ('Money Zero', 'MONEY', + CAST(CAST(0.00 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(0.00 AS MONEY) AS BINARY(10)), + CAST(CAST(0.00 AS MONEY) AS VARBINARY(8)), + '$0.00'), + + ('Money Negative', 'MONEY', + CAST(CAST(-123456.78 AS MONEY) AS VARBINARY(MAX)), + CAST(CAST(-123456.78 AS MONEY) AS BINARY(10)), + CAST(CAST(-123456.78 AS MONEY) AS VARBINARY(8)), + '-$123456.78'); +GO + +-- Query results +SELECT * +FROM NumericToBinaryDemo +ORDER BY ID; +GO + +-- Cleanup +DROP TABLE NumericToBinaryDemo; +GO + +-- Create test table +CREATE TABLE SpecialTypesBinaryDemo ( + ID INT IDENTITY(1,1), + Description VARCHAR(100), + SourceType VARCHAR(50), + BinaryValue VARBINARY(MAX), + BinaryFixed BINARY(10), + BinarySmall VARBINARY(8), + OriginalValue VARCHAR(MAX) +); +GO + +-- BIT conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('Bit True', 'BIT', + CAST(1 AS VARBINARY(MAX)), + CAST(1 AS BINARY(10)), + CAST(1 AS VARBINARY(8)), + '1'), + + ('Bit False', 'BIT', + CAST(0 AS VARBINARY(MAX)), + CAST(0 AS BINARY(10)), + CAST(0 AS VARBINARY(8)), + '0'), + + ('Bit NULL', 'BIT', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'); +GO + +-- UNIQUEIDENTIFIER conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('GUID Regular', 'UNIQUEIDENTIFIER', + CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(MAX)), + CAST('12345678-1234-1234-1234-123456789012' AS BINARY(10)), + CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(8)), + '12345678-1234-1234-1234-123456789012'), + + ('GUID NULL', 'UNIQUEIDENTIFIER', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'), + + ('GUID Zero', 'UNIQUEIDENTIFIER', + CAST('00000000-0000-0000-0000-000000000000' AS VARBINARY(MAX)), + CAST('00000000-0000-0000-0000-000000000000' AS BINARY(10)), + CAST('00000000-0000-0000-0000-000000000000' AS VARBINARY(8)), + '00000000-0000-0000-0000-000000000000'); +GO + +-- SQL_VARIANT conversions +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('SQL_VARIANT with INT', 'SQL_VARIANT', + CAST(CAST(12345 AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST(12345 AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST(12345 AS SQL_VARIANT) AS VARBINARY(8)), + '12345'), + + ('SQL_VARIANT with VARCHAR', 'SQL_VARIANT', + CAST(CAST('Test String' AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST('Test String' AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST('Test String' AS SQL_VARIANT) AS VARBINARY(8)), + 'Test String'), + + ('SQL_VARIANT NULL', 'SQL_VARIANT', + CAST(CAST(NULL AS SQL_VARIANT) AS VARBINARY(MAX)), + CAST(CAST(NULL AS SQL_VARIANT) AS BINARY(10)), + CAST(CAST(NULL AS SQL_VARIANT) AS VARBINARY(8)), + 'NULL'); +GO + +-- XML conversions +DECLARE @xml XML = 'Test XML Data'; +DECLARE @xmlLarge XML = '' + REPLICATE('Large XML Data', 10) + ''; + +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('XML Simple', 'XML', + CAST(@xml AS VARBINARY(MAX)), + CAST(@xml AS BINARY(10)), + CAST(@xml AS VARBINARY(8)), + CAST(@xml AS NVARCHAR(MAX))), + + ('XML Large', 'XML', + CAST(@xmlLarge AS VARBINARY(MAX)), + CAST(@xmlLarge AS BINARY(10)), + CAST(@xmlLarge AS VARBINARY(8)), + CAST(@xmlLarge AS NVARCHAR(MAX))), + + ('XML NULL', 'XML', + CAST(CAST(NULL AS XML) AS VARBINARY(MAX)), + CAST(CAST(NULL AS XML) AS BINARY(10)), + CAST(CAST(NULL AS XML) AS VARBINARY(8)), + 'NULL'); +GO + +-- JSON conversions (note: JSON is stored as NVARCHAR) +DECLARE @json NVARCHAR(MAX) = N'{"id": 1, "name": "Test JSON"}'; +DECLARE @jsonLarge NVARCHAR(MAX) = N'{"items": [' + + REPLICATE('{"id": 1, "value": "Large JSON Data"},', 10) + + '{"id": 2, "value": "Last Item"}]}'; + +INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) +VALUES + ('JSON Simple', 'JSON', + CAST(@json AS VARBINARY(MAX)), + CAST(@json AS BINARY(10)), + CAST(@json AS VARBINARY(8)), + @json), + + ('JSON Large', 'JSON', + CAST(@jsonLarge AS VARBINARY(MAX)), + CAST(@jsonLarge AS BINARY(10)), + CAST(@jsonLarge AS VARBINARY(8)), + @jsonLarge), + + ('JSON NULL', 'JSON', + CAST(NULL AS VARBINARY(MAX)), + CAST(NULL AS BINARY(10)), + CAST(NULL AS VARBINARY(8)), + 'NULL'); +GO + +-- Query results +SELECT * +FROM SpecialTypesBinaryDemo +ORDER BY ID; + +-- Cleanup +DROP TABLE SpecialTypesBinaryDemo; GO \ No newline at end of file From 30a5bddac27b674dc63d9934ffa295c46b43bd3d Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 21 Feb 2025 05:36:09 +0000 Subject: [PATCH 6/8] Final set of test cases --- test/JDBC/expected/TestBinary.out | 1252 +++++++++++++++++++++- test/JDBC/input/datatypes/TestBinary.sql | 996 ++++++++++++++++- 2 files changed, 2214 insertions(+), 34 deletions(-) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index 1af2caee35d..baa75c9b9e1 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -1304,7 +1304,7 @@ VALUES CAST(999999999999.99 AS VARBINARY(MAX)), CAST(999999999999.99 AS BINARY(10)), CAST(999999999999.99 AS VARBINARY(8)), - cast('999999999999.99' as DECIMAL(18,2))); + cast('999999999999.99' as DECIMAL(18,2))), ('Decimal Regular', 'NUMERIC(18,2)', CAST(123456.78 AS VARBINARY(MAX)), CAST(123456.78 AS BINARY(10)), @@ -1328,7 +1328,7 @@ VALUES GO ~~ERROR (Code: 33557097)~~ -~~ERROR (Message: syntax error near ''Decimal Regular'' at line 24 and character position 5)~~ +~~ERROR (Message: cannot cast type numeric to varbinary)~~ @@ -1482,22 +1482,24 @@ GO INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) VALUES ('Bit True', 'BIT', - CAST(1 AS VARBINARY(MAX)), - CAST(1 AS BINARY(10)), - CAST(1 AS VARBINARY(8)), + CAST(cast(1 as bit) AS VARBINARY(MAX)), + CAST(cast(1 as bit) AS BINARY(10)), + CAST(cast(1 as bit) AS VARBINARY(8)), '1'), ('Bit False', 'BIT', - CAST(0 AS VARBINARY(MAX)), - CAST(0 AS BINARY(10)), - CAST(0 AS VARBINARY(8)), + CAST(cast(0 as bit) AS VARBINARY(MAX)), + CAST(cast(0 as bit) AS BINARY(10)), + CAST(cast(0 as bit) AS VARBINARY(8)), '0'), ('Bit NULL', 'BIT', - CAST(NULL AS VARBINARY(MAX)), - CAST(NULL AS BINARY(10)), - CAST(NULL AS VARBINARY(8)), + CAST(cast(NULL as bit) AS VARBINARY(MAX)), + CAST(cast(NULL as bit) AS BINARY(10)), + CAST(cast(NULL as bit) AS VARBINARY(8)), 'NULL'); GO -~~ROW COUNT: 3~~ +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type "bit" to varbinary)~~ @@ -1616,17 +1618,1219 @@ DROP TABLE SpecialTypesBinaryDemo; GO ~~START~~ int#!#varchar#!#varchar#!#varbinary#!#binary#!#varbinary#!#varchar -1#!#Bit True#!#BIT#!#00000001#!#00000000000000000001#!#00000001#!#1 -2#!#Bit False#!#BIT#!#00000000#!#00000000000000000000#!#00000000#!#0 -3#!#Bit NULL#!#BIT#!##!##!##!#NULL -4#!#GUID Regular#!#UNIQUEIDENTIFIER#!#31323334353637382D313233342D313233342D313233342D313233343536373839303132#!#31323334353637382D31#!#3132333435363738#!#12345678-1234-1234-1234-123456789012 -5#!#GUID NULL#!#UNIQUEIDENTIFIER#!##!##!##!#NULL -6#!#GUID Zero#!#UNIQUEIDENTIFIER#!#30303030303030302D303030302D303030302D303030302D303030303030303030303030#!#30303030303030302D30#!#3030303030303030#!#00000000-0000-0000-0000-000000000000 -7#!#SQL_VARIANT with INT#!#SQL_VARIANT#!#00003039#!#00003039000000000000#!#00003039#!#12345 -8#!#SQL_VARIANT with VARCHAR#!#SQL_VARIANT#!#5465737420537472696E67#!#5465737420537472696E#!#5465737420537472#!#Test String -9#!#SQL_VARIANT NULL#!#SQL_VARIANT#!##!##!##!#NULL -10#!#JSON Simple#!#JSON#!#7B0022006900640022003A00200031002C00200022006E0061006D00650022003A0020002200540065007300740020004A0053004F004E0022007D00#!#7B002200690064002200#!#7B00220069006400#!#{"id": 1, "name": "Test JSON"} -11#!#JSON Large#!#JSON#!#7B0022006900740065006D00730022003A0020005B007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200032002C0020002200760061006C007500650022003A00200022004C0061007300740020004900740065006D0022007D005D007D00#!#7B002200690074006500#!#7B00220069007400#!#{"items": [{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 2, "value": "Last Item"}]} -12#!#JSON NULL#!#JSON#!##!##!##!#NULL +1#!#GUID Regular#!#UNIQUEIDENTIFIER#!#31323334353637382D313233342D313233342D313233342D313233343536373839303132#!#31323334353637382D31#!#3132333435363738#!#12345678-1234-1234-1234-123456789012 +2#!#GUID NULL#!#UNIQUEIDENTIFIER#!##!##!##!#NULL +3#!#GUID Zero#!#UNIQUEIDENTIFIER#!#30303030303030302D303030302D303030302D303030302D303030303030303030303030#!#30303030303030302D30#!#3030303030303030#!#00000000-0000-0000-0000-000000000000 +4#!#SQL_VARIANT with INT#!#SQL_VARIANT#!#00003039#!#00003039000000000000#!#00003039#!#12345 +5#!#SQL_VARIANT with VARCHAR#!#SQL_VARIANT#!#5465737420537472696E67#!#5465737420537472696E#!#5465737420537472#!#Test String +6#!#SQL_VARIANT NULL#!#SQL_VARIANT#!##!##!##!#NULL +7#!#JSON Simple#!#JSON#!#7B0022006900640022003A00200031002C00200022006E0061006D00650022003A0020002200540065007300740020004A0053004F004E0022007D00#!#7B002200690064002200#!#7B00220069006400#!#{"id": 1, "name": "Test JSON"} +8#!#JSON Large#!#JSON#!#7B0022006900740065006D00730022003A0020005B007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200031002C0020002200760061006C007500650022003A00200022004C00610072006700650020004A0053004F004E002000440061007400610022007D002C007B0022006900640022003A00200032002C0020002200760061006C007500650022003A00200022004C0061007300740020004900740065006D0022007D005D007D00#!#7B002200690074006500#!#7B00220069007400#!#{"items": [{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 1, "value": "Large JSON Data"},{"id": 2, "value": "Last Item"}]} +9#!#JSON NULL#!#JSON#!##!##!##!#NULL +~~END~~ + + +-- Create table to store test results +CREATE TABLE BinaryOperatorTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperand VARBINARY(100), + RightOperand VARBINARY(100), + EqualResult BIT, + NotEqualResult BIT, + GreaterThanResult BIT, + LessThanResult BIT, + GreaterEqualResult BIT, + LessEqualResult BIT +); +GO + + +-- Test Case 1: Simple binary values +DECLARE @bin1 VARBINARY(10) = 0x0A; +DECLARE @bin2 VARBINARY(10) = 0x0B; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Simple Binary Compare (0x0A vs 0x0B)', + @bin1, + @bin2, + CASE WHEN @bin1 = @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 <> @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 > @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 < @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 >= @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 <= @bin2 THEN 1 ELSE 0 END; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 2: Equal values +DECLARE @bin3 VARBINARY(10) = 0x0A; +DECLARE @bin4 VARBINARY(10) = 0x0A; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Equal Binary Values (0x0A vs 0x0A)', + @bin3, + @bin4, + CASE WHEN @bin3 = @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 <> @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 > @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 < @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 >= @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 <= @bin4 THEN 1 ELSE 0 END; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 3: Different lengths +DECLARE @bin5 VARBINARY(10) = 0x0A0B; +DECLARE @bin6 VARBINARY(10) = 0x0A; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Different Lengths (0x0A0B vs 0x0A)', + @bin5, + @bin6, + CASE WHEN @bin5 = @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 <> @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 > @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 < @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 >= @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 <= @bin6 THEN 1 ELSE 0 END; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 4: Zero and non-zero +DECLARE @bin7 VARBINARY(10) = 0x00; +DECLARE @bin8 VARBINARY(10) = 0x01; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Zero vs Non-Zero (0x00 vs 0x01)', + @bin7, + @bin8, + CASE WHEN @bin7 = @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 <> @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 > @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 < @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 >= @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 <= @bin8 THEN 1 ELSE 0 END; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 5: NULL comparison +DECLARE @bin9 VARBINARY(10) = 0x0A; +DECLARE @bin10 VARBINARY(10) = NULL; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'NULL Comparison (0x0A vs NULL)', + @bin9, + @bin10, + CASE WHEN @bin9 = @bin10 THEN 1 WHEN @bin9 <> @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 <> @bin10 THEN 1 WHEN @bin9 = @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 > @bin10 THEN 1 WHEN @bin9 <= @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 < @bin10 THEN 1 WHEN @bin9 >= @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 >= @bin10 THEN 1 WHEN @bin9 < @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 <= @bin10 THEN 1 WHEN @bin9 > @bin10 THEN 0 ELSE NULL END; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 6: Larger values +DECLARE @bin11 VARBINARY(10) = 0xFFFF; +DECLARE @bin12 VARBINARY(10) = 0x0001; +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Large Value Compare (0xFFFF vs 0x0001)', + @bin11, + @bin12, + CASE WHEN @bin11 = @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 <> @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 > @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 < @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 >= @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 <= @bin12 THEN 1 ELSE 0 END; +GO +~~ROW COUNT: 1~~ + + +-- Display results +SELECT + TestID, + TestDescription, + LeftOperand, + RightOperand, + CASE WHEN EqualResult = 1 THEN 'True' + WHEN EqualResult = 0 THEN 'False' + ELSE 'NULL' END AS Equal, + CASE WHEN NotEqualResult = 1 THEN 'True' + WHEN NotEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS NotEqual, + CASE WHEN GreaterThanResult = 1 THEN 'True' + WHEN GreaterThanResult = 0 THEN 'False' + ELSE 'NULL' END AS GreaterThan, + CASE WHEN LessThanResult = 1 THEN 'True' + WHEN LessThanResult = 0 THEN 'False' + ELSE 'NULL' END AS LessThan, + CASE WHEN GreaterEqualResult = 1 THEN 'True' + WHEN GreaterEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS GreaterEqual, + CASE WHEN LessEqualResult = 1 THEN 'True' + WHEN LessEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS LessEqual +FROM BinaryOperatorTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varbinary#!#varbinary#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar +1#!#Simple Binary Compare (0x0A vs 0x0B)#!#0A#!#0B#!#False#!#True#!#False#!#True#!#False#!#True +2#!#Equal Binary Values (0x0A vs 0x0A)#!#0A#!#0A#!#True#!#False#!#False#!#False#!#True#!#True +3#!#Different Lengths (0x0A0B vs 0x0A)#!#0A0B#!#0A#!#False#!#True#!#True#!#False#!#True#!#False +4#!#Zero vs Non-Zero (0x00 vs 0x01)#!#00#!#01#!#False#!#True#!#False#!#True#!#False#!#True +5#!#NULL Comparison (0x0A vs NULL)#!#0A#!##!#NULL#!#NULL#!#NULL#!#NULL#!#NULL#!#NULL +6#!#Large Value Compare (0xFFFF vs 0x0001)#!#FFFF#!#0001#!#False#!#True#!#True#!#False#!#True#!#False +~~END~~ + + +-- Direct comparison examples +SELECT 'Direct Comparisons' AS TestType; +GO +~~START~~ +varchar +Direct Comparisons +~~END~~ + + +SELECT 'Compare 0x0A = 0x0A' AS Test, + CASE WHEN 0x0A = 0x0A THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar#!#varchar +Compare 0x0A = 0x0A#!#True +~~END~~ + + +SELECT 'Compare 0x0A > 0x0B' AS Test, + CASE WHEN 0x0A > 0x0B THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar#!#varchar +Compare 0x0A > 0x0B#!#False ~~END~~ + +SELECT 'Compare 0x0A < 0x0B' AS Test, + CASE WHEN 0x0A < 0x0B THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar#!#varchar +Compare 0x0A < 0x0B#!#True +~~END~~ + + +SELECT 'Compare 0xFFFF > 0x0001' AS Test, + CASE WHEN 0xFFFF > 0x0001 THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar#!#varchar +Compare 0xFFFF > 0x0001#!#True +~~END~~ + + +-- Cleanup +DROP TABLE BinaryOperatorTests; +GO + +-- Create test table +CREATE TABLE BinaryMixedTypeComparisons ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + BinaryValue VARBINARY(100), + OtherValue SQL_VARIANT, + OtherValueType VARCHAR(50), + EqualResult VARCHAR(10), + NotEqualResult VARCHAR(10), + GreaterThanResult VARCHAR(10), + LessThanResult VARCHAR(10) +); +GO + +-- String comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs VARCHAR', + CAST('Test' AS VARBINARY(100)), + CAST('Test' AS VARCHAR(100)), + 'VARCHAR', + CASE WHEN CAST('Test' AS VARBINARY(100)) = CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) <> CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) > CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) < CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~ROW COUNT: 1~~ + + +-- Integer comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs INTEGER', + CAST(12345 AS VARBINARY(100)), + 12345, + 'INTEGER', + CASE WHEN CAST(12345 AS VARBINARY(100)) = CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) <> CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) > CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) < CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~ROW COUNT: 1~~ + + +-- Date comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs DATE', + CAST('2024-01-15' AS VARBINARY(100)), + CAST('2024-01-15' AS DATE), + 'DATE', + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) = CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) <> CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) > CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) < CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type date to varbinary)~~ + + +-- Direct comparison examples +SELECT 'Direct Comparisons' AS TestType; +GO +~~START~~ +varchar +Direct Comparisons +~~END~~ + + +-- Binary vs String +SELECT 'Binary = String' AS Test, +CASE WHEN CAST('Test' AS VARBINARY(100)) = CAST('Test' AS VARCHAR(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > String', +CASE WHEN CAST('Test2' AS VARBINARY(100)) > CAST('Test1' AS VARCHAR(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < String', +CASE WHEN CAST('Test1' AS VARBINARY(100)) < CAST('Test2' AS VARCHAR(100)) THEN 'True' ELSE 'False' END; +GO +~~START~~ +varchar#!#varchar +Binary = String#!#True +Binary > String#!#True +Binary < String#!#True +~~END~~ + + + +-- Binary vs Integer +SELECT 'Binary vs Integer Comparisons' AS TestType; +DECLARE @binInt VARBINARY(100) = CAST(100 AS VARBINARY(100)); +DECLARE @regularInt INT = 100; +SELECT 'Binary = Integer' AS Test, +CASE WHEN @binInt = CAST(@regularInt AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Integer', +CASE WHEN @binInt > CAST(@regularInt-1 AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Integer', +CASE WHEN @binInt < CAST(@regularInt+1 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~START~~ +varchar +Binary vs Integer Comparisons +~~END~~ + +~~START~~ +varchar#!#varchar +Binary = Integer#!#True +Binary > Integer#!#True +Binary < Integer#!#True +~~END~~ + + + +-- Binary vs DateTime +SELECT 'Binary vs DateTime Comparisons' AS TestType; +DECLARE @binDate VARBINARY(100) = CAST('2024-01-15' AS VARBINARY(100)); +DECLARE @regularDate DATETIME = '2024-01-15'; +SELECT 'Binary = DateTime' AS Test, +CASE WHEN @binDate = CAST(@regularDate AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Earlier DateTime', +CASE WHEN @binDate > CAST('2024-01-14' AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Later DateTime', +CASE WHEN @binDate < CAST('2024-01-16' AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~START~~ +varchar +Binary vs DateTime Comparisons +~~END~~ + +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type datetime to varbinary)~~ + + + +-- Binary vs Decimal +SELECT 'Binary vs Decimal Comparisons' AS TestType; +DECLARE @binDecimal VARBINARY(100) = CAST(123.45 AS VARBINARY(100)); +DECLARE @regularDecimal DECIMAL(10,2) = 123.45; +SELECT 'Binary = Decimal' AS Test, +CASE WHEN @binDecimal = CAST(@regularDecimal AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Smaller Decimal', +CASE WHEN @binDecimal > CAST(123.44 AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Larger Decimal', +CASE WHEN @binDecimal < CAST(123.46 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO +~~START~~ +varchar +Binary vs Decimal Comparisons +~~END~~ + +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type numeric to varbinary)~~ + + + +-- Binary vs UNIQUEIDENTIFIER +SELECT 'Binary vs UNIQUEIDENTIFIER Comparisons' AS TestType; +DECLARE @binGuid VARBINARY(100) = CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(100)); +DECLARE @regularGuid UNIQUEIDENTIFIER = '12345678-1234-1234-1234-123456789012'; +SELECT 'Binary = GUID' AS Test, +CASE WHEN @binGuid = CAST(@regularGuid AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar +Binary vs UNIQUEIDENTIFIER Comparisons +~~END~~ + +~~START~~ +varchar#!#varchar +Binary = GUID#!#False +~~END~~ + + + +-- Binary vs BIT +SELECT 'Binary vs BIT Comparisons' AS TestType; +DECLARE @binBit VARBINARY(100) = CAST(1 AS VARBINARY(100)); +DECLARE @regularBit BIT = 1; +SELECT 'Binary = Bit' AS Test, +CASE WHEN @binBit = CAST(@regularBit AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result; +GO +~~START~~ +varchar +Binary vs BIT Comparisons +~~END~~ + +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: cannot cast type "bit" to varbinary)~~ + + +-- Display all results +SELECT + TestID, + TestDescription, + BinaryValue, + CAST(OtherValue AS VARCHAR(100)) AS OtherValue, + OtherValueType, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult +FROM BinaryMixedTypeComparisons +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varbinary#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar#!#varchar +1#!#Binary vs VARCHAR#!#54657374#!#Test#!#VARCHAR#!#True#!#False#!#False#!#False +2#!#Binary vs INTEGER#!#00003039#!#12345#!#INTEGER#!#True#!#False#!#False#!#False +~~END~~ + + +-- Cleanup +DROP TABLE BinaryMixedTypeComparisons; +GO + + +-- Create table for bitwise operation tests +CREATE TABLE BitwiseOperationTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + Value1 VARBINARY(10), + Value2 VARBINARY(10), + BitwiseAND VARBINARY(10), + BitwiseOR VARBINARY(10), + BitwiseXOR VARBINARY(10), + BitwiseNOT VARBINARY(10) +); +GO + + +-- Test Case 1: Simple values +DECLARE @val1 VARBINARY(10) = 0x0F; -- 00001111 +DECLARE @val2 VARBINARY(10) = 0xF0; -- 11110000 +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Simple Binary Values (0x0F AND 0xF0)', + @val1, + @val2, + @val1 & @val2, -- AND + @val1 | @val2, -- OR + @val1 ^ @val2, -- XOR + ~@val1; -- NOT +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 2: All bits set vs all bits clear +DECLARE @allSet VARBINARY(10) = 0xFF; -- 11111111 +DECLARE @allClear VARBINARY(10) = 0x00; -- 00000000 +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'All Bits Set vs Clear (0xFF AND 0x00)', + @allSet, + @allClear, + @allSet & @allClear, + @allSet | @allClear, + @allSet ^ @allClear, + ~@allSet; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 3: Alternating bits +DECLARE @alternating1 VARBINARY(10) = 0xAA; -- 10101010 +DECLARE @alternating2 VARBINARY(10) = 0x55; -- 01010101 +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Alternating Bits (0xAA AND 0x55)', + @alternating1, + @alternating2, + @alternating1 & @alternating2, + @alternating1 | @alternating2, + @alternating1 ^ @alternating2, + ~@alternating1; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 4: Same values +DECLARE @sameVal VARBINARY(10) = 0x55; +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Same Values (0x55 AND 0x55)', + @sameVal, + @sameVal, + @sameVal & @sameVal, + @sameVal | @sameVal, + @sameVal ^ @sameVal, + ~@sameVal; +GO +~~ROW COUNT: 1~~ + + + +-- Test Case 5: Multiple bytes +DECLARE @multiByte1 VARBINARY(10) = 0x1234; +DECLARE @multiByte2 VARBINARY(10) = 0x5678; +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Multiple Bytes (0x1234 AND 0x5678)', + @multiByte1, + @multiByte2, + @multiByte1 & @multiByte2, + @multiByte1 | @multiByte2, + @multiByte1 ^ @multiByte2, + ~@multiByte1; +GO +~~ROW COUNT: 1~~ + + +-- Display results for regular bitwise operations +SELECT + TestID, + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +FROM BitwiseOperationTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varbinary#!#varbinary#!#varbinary#!#varbinary#!#varbinary#!#varbinary +1#!#Simple Binary Values (0x0F AND 0xF0)#!#0F#!#F0#!#0000000000000000#!#00000000000000FF#!#00000000000000FF#!#FFFFFFFFFFFFFFF0 +2#!#All Bits Set vs Clear (0xFF AND 0x00)#!#FF#!#00#!#0000000000000000#!#00000000000000FF#!#00000000000000FF#!#FFFFFFFFFFFFFF00 +3#!#Alternating Bits (0xAA AND 0x55)#!#AA#!#55#!#0000000000000000#!#00000000000000FF#!#00000000000000FF#!#FFFFFFFFFFFFFF55 +4#!#Same Values (0x55 AND 0x55)#!#55#!#55#!#0000000000000055#!#0000000000000055#!#0000000000000000#!#FFFFFFFFFFFFFFAA +5#!#Multiple Bytes (0x1234 AND 0x5678)#!#1234#!#5678#!#0000000000001230#!#000000000000567C#!#000000000000444C#!#FFFFFFFFFFFFEDCB +~~END~~ + + + + + + + + + +-- Test assignment operators +DECLARE @assignTest TABLE ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + OriginalValue VARBINARY(10), + AssignmentResult VARBINARY(10) +); +-- AND Assignment (&=) +DECLARE @andAssign VARBINARY(10) = 0xFF; +SET @andAssign &= 0x0F; +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('AND Assignment (0xFF &= 0x0F)', 0xFF, @andAssign); +-- OR Assignment (|=) +DECLARE @orAssign VARBINARY(10) = 0x0F; +SET @orAssign |= 0xF0; +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('OR Assignment (0x0F |= 0xF0)', 0x0F, @orAssign); +-- XOR Assignment (^=) +DECLARE @xorAssign VARBINARY(10) = 0xFF; +SET @xorAssign ^= 0x0F; +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('XOR Assignment (0xFF ^= 0x0F)', 0xFF, @xorAssign); +-- Display results for assignment operators +SELECT + TestID, + TestDescription, + OriginalValue, + AssignmentResult +FROM @assignTest +ORDER BY TestID; +GO +~~ROW COUNT: 1~~ + +~~ROW COUNT: 1~~ + +~~ROW COUNT: 1~~ + +~~START~~ +int#!#varchar#!#varbinary#!#varbinary +1#!#AND Assignment (0xFF &= 0x0F)#!#FF#!#000000000000000F +2#!#OR Assignment (0x0F |= 0xF0)#!#0F#!#00000000000000FF +3#!#XOR Assignment (0xFF ^= 0x0F)#!#FF#!#00000000000000F0 +~~END~~ + + +-- Cleanup +DROP TABLE BitwiseOperationTests; +GO + +-- Create table for bitwise operation tests +CREATE TABLE BitwiseTypeTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperandType VARCHAR(20), + RightOperandType VARCHAR(20), + LeftOperandValue VARBINARY(20), + RightOperandValue VARBINARY(20), + BitwiseAND VARBINARY(20), + BitwiseOR VARBINARY(20), + BitwiseXOR VARBINARY(20) +); +GO + +-- 1. BINARY with integer types +INSERT INTO BitwiseTypeTests +SELECT + 'BINARY & INT', + 'BINARY(4)', 'INT', + CAST(0x0F AS BINARY(4)), + CAST(15 AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & 15, + CAST(0x0F AS BINARY(4)) | 15, + CAST(0x0F AS BINARY(4)) ^ 15 +UNION ALL +SELECT + 'BINARY & SMALLINT', + 'BINARY(4)', 'SMALLINT', + CAST(0x0F AS BINARY(4)), + CAST(CAST(15 AS SMALLINT) AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & CAST(15 AS SMALLINT), + CAST(0x0F AS BINARY(4)) | CAST(15 AS SMALLINT), + CAST(0x0F AS BINARY(4)) ^ CAST(15 AS SMALLINT) +UNION ALL +SELECT + 'BINARY & TINYINT', + 'BINARY(4)', 'TINYINT', + CAST(0x0F AS BINARY(4)), + CAST(CAST(15 AS TINYINT) AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & CAST(15 AS TINYINT), + CAST(0x0F AS BINARY(4)) | CAST(15 AS TINYINT), + CAST(0x0F AS BINARY(4)) ^ CAST(15 AS TINYINT); +GO +~~ROW COUNT: 3~~ + + +-- 2. BIGINT with all supported types +INSERT INTO BitwiseTypeTests +SELECT + 'BIGINT & BINARY', + 'BIGINT', 'BINARY(4)', + CAST(CAST(255 AS BIGINT) AS VARBINARY(8)), + CAST(0x0F AS VARBINARY(4)), + CAST(CAST(255 AS BIGINT) & CAST(0x0F AS BINARY(4)) AS VARBINARY(8)), + CAST(CAST(255 AS BIGINT) | CAST(0x0F AS BINARY(4)) AS VARBINARY(8)), + CAST(CAST(255 AS BIGINT) ^ CAST(0x0F AS BINARY(4)) AS VARBINARY(8)); +GO +~~ROW COUNT: 1~~ + + +-- 3. INT with supported types +INSERT INTO BitwiseTypeTests +SELECT + 'INT & BINARY', + 'INT', 'BINARY(4)', + CAST(255 AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)), + CAST(255 & CAST(0x0F AS BINARY(4)) AS VARBINARY(4)), + CAST(255 | CAST(0x0F AS BINARY(4)) AS VARBINARY(4)), + CAST(255 ^ CAST(0x0F AS BINARY(4)) AS VARBINARY(4)); +GO +~~ROW COUNT: 1~~ + + +-- 4. VARBINARY with integer types +INSERT INTO BitwiseTypeTests +SELECT + 'VARBINARY & INT', + 'VARBINARY(4)', 'INT', + CAST(0x0F AS VARBINARY(4)), + CAST(15 AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)) & 15, + CAST(0x0F AS VARBINARY(4)) | 15, + CAST(0x0F AS VARBINARY(4)) ^ 15 +UNION ALL +SELECT + 'VARBINARY & SMALLINT', + 'VARBINARY(4)', 'SMALLINT', + CAST(0x0F AS VARBINARY(4)), + CAST(CAST(15 AS SMALLINT) AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)) & CAST(15 AS SMALLINT), + CAST(0x0F AS VARBINARY(4)) | CAST(15 AS SMALLINT), + CAST(0x0F AS VARBINARY(4)) ^ CAST(15 AS SMALLINT); +GO +~~ROW COUNT: 2~~ + + + +-- Test NOT operator +CREATE TABLE BitwiseNOTTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + OperandType VARCHAR(20), + OperandValue VARBINARY(20), + NOTResult VARBINARY(20) +); +INSERT INTO BitwiseNOTTests (TestDescription, OperandType, OperandValue, NOTResult) +VALUES + ('NOT BINARY', 'BINARY(4)', + CAST(0x0F AS VARBINARY(4)), + CAST(~CAST(0x0F AS BINARY(4)) AS VARBINARY(4))), + + ('NOT BIGINT', 'BIGINT', + CAST(CAST(255 AS BIGINT) AS VARBINARY(8)), + CAST(~CAST(255 AS BIGINT) AS VARBINARY(8))), + + ('NOT INT', 'INT', + CAST(255 AS VARBINARY(4)), + CAST(~255 AS VARBINARY(4))), + + ('NOT VARBINARY', 'VARBINARY(4)', + CAST(0x0F AS VARBINARY(4)), + CAST(~CAST(0x0F AS VARBINARY(4)) AS VARBINARY(4))); +GO +~~ROW COUNT: 4~~ + + +SELECT + TestID, + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperandValue, + RightOperandValue, + BitwiseAND, + BitwiseOR, + BitwiseXOR +FROM BitwiseTypeTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varchar#!#varchar#!#varbinary#!#varbinary#!#varbinary#!#varbinary#!#varbinary +1#!#BINARY & INT#!#BINARY(4)#!#INT#!#0F000000#!#0000000F#!#00000000#!#0F00000F#!#0F00000F +2#!#BINARY & SMALLINT#!#BINARY(4)#!#SMALLINT#!#0F000000#!#000F#!#00000000#!#0000000F#!#0000000F +3#!#BINARY & TINYINT#!#BINARY(4)#!#TINYINT#!#0F000000#!#000F#!#00000000#!#0000000F#!#0000000F +4#!#BIGINT & BINARY#!#BIGINT#!#BINARY(4)#!#00000000000000FF#!#0F#!#0000000000000000#!#000000000F0000FF#!#000000000F0000FF +5#!#INT & BINARY#!#INT#!#BINARY(4)#!#000000FF#!#0F#!#00000000#!#0F0000FF#!#0F0000FF +6#!#VARBINARY & INT#!#VARBINARY(4)#!#INT#!#0F#!#0000000F#!#0000000F#!#0000000F#!#00000000 +7#!#VARBINARY & SMALLINT#!#VARBINARY(4)#!#SMALLINT#!#0F#!#000F#!#0000000F#!#0000000F#!#00000000 +~~END~~ + + +SELECT + TestID, + TestDescription, + OperandType, + OperandValue, + NOTResult +FROM BitwiseNOTTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varchar#!#varbinary#!#varbinary +1#!#NOT BINARY#!#BINARY(4)#!#0F#!#F0FFFFFF +2#!#NOT BIGINT#!#BIGINT#!#00000000000000FF#!#FFFFFFFFFFFFFF00 +3#!#NOT INT#!#INT#!#000000FF#!#FFFFFF00 +4#!#NOT VARBINARY#!#VARBINARY(4)#!#0F#!#FFFFFFF0 +~~END~~ + + +-- Cleanup +DROP TABLE BitwiseTypeTests; +DROP TABLE BitwiseNOTTests; +GO + +-- Create table for concatenation tests +CREATE TABLE BinaryConcatTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperandType VARCHAR(20), + RightOperandType VARCHAR(20), + LeftOperand VARBINARY(100), + RightOperand VARBINARY(100), + ConcatResult VARBINARY(200), + ResultType VARCHAR(20), + ResultLength INT +); +GO + +-- Test Case 1: Basic concatenation with same types +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- BINARY + BINARY +( + 'BINARY(4) + BINARY(4)', + 'BINARY(4)', + 'BINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'BINARY(8)', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS BINARY(4))) +), +-- VARBINARY + VARBINARY +( + 'VARBINARY(4) + VARBINARY(4)', + 'VARBINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS VARBINARY(4)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS VARBINARY(4))) +); +GO +~~ROW COUNT: 2~~ + + +-- Test Case 2: Mixed type concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- BINARY + VARBINARY +( + 'BINARY(4) + VARBINARY(4)', + 'BINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS VARBINARY(4))) +), +-- VARBINARY + BINARY +( + 'VARBINARY(4) + BINARY(4)', + 'VARBINARY(4)', + 'BINARY(4)', + CAST(0x1234 AS VARBINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4))) +); +GO +~~ROW COUNT: 2~~ + + +-- Test Case 3: NULL value concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- NULL + BINARY +( + 'NULL + BINARY(4)', + 'NULL', + 'BINARY(4)', + NULL, + CAST(0x5678 AS BINARY(4)), + NULL + CAST(0x5678 AS BINARY(4)), + 'VARBINARY', + DATALENGTH(NULL + CAST(0x5678 AS BINARY(4))) +), +-- BINARY + NULL +( + 'BINARY(4) + NULL', + 'BINARY(4)', + 'NULL', + CAST(0x1234 AS BINARY(4)), + NULL, + CAST(0x1234 AS BINARY(4)) + NULL, + 'VARBINARY', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + NULL) +), +-- NULL + NULL +( + 'NULL + NULL', + 'NULL', + 'NULL', + NULL, + NULL, + NULL + NULL, + 'VARBINARY', + DATALENGTH(NULL + NULL) +); +GO +~~ROW COUNT: 3~~ + + +-- Test Case 4: Zero length value concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- Empty VARBINARY + BINARY +( + 'Empty VARBINARY + BINARY(4)', + 'VARBINARY(4)', + 'BINARY(4)', + CAST(0x AS VARBINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4))) +), +-- BINARY + Empty VARBINARY +( + 'BINARY(4) + Empty VARBINARY', + 'BINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x AS VARBINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x AS VARBINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x AS VARBINARY(4))) +), +-- Empty VARBINARY + Empty VARBINARY +( + 'Empty VARBINARY + Empty VARBINARY', + 'VARBINARY(4)', + 'VARBINARY(4)', + CAST(0x AS VARBINARY(4)), + CAST(0x AS VARBINARY(4)), + CAST(0x AS VARBINARY(4)) + CAST(0x AS VARBINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x AS VARBINARY(4)) + CAST(0x AS VARBINARY(4))) +); +GO +~~ROW COUNT: 3~~ + + +-- Test Case 5: Different length concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +( + 'BINARY(2) + BINARY(4)', + 'BINARY(2)', + 'BINARY(4)', + CAST(0x12 AS BINARY(2)), + CAST(0x5678 AS BINARY(4)), + CAST(0x12 AS BINARY(2)) + CAST(0x5678 AS BINARY(4)), + 'BINARY(6)', + DATALENGTH(CAST(0x12 AS BINARY(2)) + CAST(0x5678 AS BINARY(4))) +), +( + 'VARBINARY(2) + VARBINARY(4)', + 'VARBINARY(2)', + 'VARBINARY(4)', + CAST(0x12 AS VARBINARY(2)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x12 AS VARBINARY(2)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(6)', + DATALENGTH(CAST(0x12 AS VARBINARY(2)) + CAST(0x5678 AS VARBINARY(4))) +); +GO +~~ROW COUNT: 2~~ + + +-- Display results +SELECT + TestID, + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +FROM BinaryConcatTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varchar#!#varchar#!#varbinary#!#varbinary#!#varbinary#!#varchar#!#int +1#!#BINARY(4) + BINARY(4)#!#BINARY(4)#!#BINARY(4)#!#12340000#!#56780000#!#0000000068AC0000#!#BINARY(8)#!#8 +2#!#VARBINARY(4) + VARBINARY(4)#!#VARBINARY(4)#!#VARBINARY(4)#!#1234#!#5678#!#00000000000068AC#!#VARBINARY(8)#!#8 +3#!#BINARY(4) + VARBINARY(4)#!#BINARY(4)#!#VARBINARY(4)#!#12340000#!#5678#!#0000000012345678#!#VARBINARY(8)#!#8 +4#!#VARBINARY(4) + BINARY(4)#!#VARBINARY(4)#!#BINARY(4)#!#1234#!#56780000#!#0000000056781234#!#VARBINARY(8)#!#8 +5#!#NULL + BINARY(4)#!#NULL#!#BINARY(4)#!##!#56780000#!##!#VARBINARY#!# +6#!#BINARY(4) + NULL#!#BINARY(4)#!#NULL#!#12340000#!##!##!#VARBINARY#!# +7#!#NULL + NULL#!#NULL#!#NULL#!##!##!##!#VARBINARY#!# +8#!#Empty VARBINARY + BINARY(4)#!#VARBINARY(4)#!#BINARY(4)#!##!#56780000#!#0000000056780000#!#VARBINARY#!#8 +9#!#BINARY(4) + Empty VARBINARY#!#BINARY(4)#!#VARBINARY(4)#!#12340000#!##!#0000000012340000#!#VARBINARY#!#8 +10#!#Empty VARBINARY + Empty VARBINARY#!#VARBINARY(4)#!#VARBINARY(4)#!##!##!#0000000000000000#!#VARBINARY#!#8 +11#!#BINARY(2) + BINARY(4)#!#BINARY(2)#!#BINARY(4)#!#1200#!#56780000#!#0000000056781200#!#BINARY(6)#!#8 +12#!#VARBINARY(2) + VARBINARY(4)#!#VARBINARY(2)#!#VARBINARY(4)#!#12#!#5678#!#000000000000568A#!#VARBINARY(6)#!#8 +~~END~~ + + +-- Additional verification queries +SELECT 'Type Precedence Tests' AS TestType; +GO +~~START~~ +varchar +Type Precedence Tests +~~END~~ + + +-- Test BINARY + VARBINARY type precedence +SELECT + 'BINARY + VARBINARY Results in: ' + + CASE + WHEN SQL_VARIANT_PROPERTY( + CAST(0x12 AS BINARY(2)) + CAST(0x34 AS VARBINARY(2)), 'BaseType' + ) = 'varbinary' + THEN 'VARBINARY (Higher Precedence)' + ELSE 'Other' + END AS TypePrecedenceTest; +GO +~~START~~ +varchar +BINARY + VARBINARY Results in: Other +~~END~~ + + +-- Test NULL handling +SELECT 'NULL Handling Tests' AS TestType; +SELECT + CASE + WHEN (CAST(0x12 AS BINARY(2)) + NULL) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS BinaryPlusNULL, + CASE + WHEN (NULL + CAST(0x12 AS BINARY(2))) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS NULLPlusBinary, + CASE + WHEN (NULL + NULL) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS NULLPlusNULL; +GO +~~START~~ +varchar +NULL Handling Tests +~~END~~ + +~~START~~ +varchar#!#varchar#!#varchar +NULL#!#NULL#!#NULL +~~END~~ + + +-- Cleanup +DROP TABLE BinaryConcatTests; +GO diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index 207d6191007..b894617b008 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -813,7 +813,7 @@ VALUES CAST(999999999999.99 AS VARBINARY(MAX)), CAST(999999999999.99 AS BINARY(10)), CAST(999999999999.99 AS VARBINARY(8)), - cast('999999999999.99' as DECIMAL(18,2))); + cast('999999999999.99' as DECIMAL(18,2))), ('Decimal Regular', 'NUMERIC(18,2)', CAST(123456.78 AS VARBINARY(MAX)), @@ -968,21 +968,21 @@ GO INSERT INTO SpecialTypesBinaryDemo (Description, SourceType, BinaryValue, BinaryFixed, BinarySmall, OriginalValue) VALUES ('Bit True', 'BIT', - CAST(1 AS VARBINARY(MAX)), - CAST(1 AS BINARY(10)), - CAST(1 AS VARBINARY(8)), + CAST(cast(1 as bit) AS VARBINARY(MAX)), + CAST(cast(1 as bit) AS BINARY(10)), + CAST(cast(1 as bit) AS VARBINARY(8)), '1'), ('Bit False', 'BIT', - CAST(0 AS VARBINARY(MAX)), - CAST(0 AS BINARY(10)), - CAST(0 AS VARBINARY(8)), + CAST(cast(0 as bit) AS VARBINARY(MAX)), + CAST(cast(0 as bit) AS BINARY(10)), + CAST(cast(0 as bit) AS VARBINARY(8)), '0'), ('Bit NULL', 'BIT', - CAST(NULL AS VARBINARY(MAX)), - CAST(NULL AS BINARY(10)), - CAST(NULL AS VARBINARY(8)), + CAST(cast(NULL as bit) AS VARBINARY(MAX)), + CAST(cast(NULL as bit) AS BINARY(10)), + CAST(cast(NULL as bit) AS VARBINARY(8)), 'NULL'); GO @@ -1089,4 +1089,980 @@ ORDER BY ID; -- Cleanup DROP TABLE SpecialTypesBinaryDemo; +GO + +-- Create table to store test results +CREATE TABLE BinaryOperatorTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperand VARBINARY(100), + RightOperand VARBINARY(100), + EqualResult BIT, + NotEqualResult BIT, + GreaterThanResult BIT, + LessThanResult BIT, + GreaterEqualResult BIT, + LessEqualResult BIT +); +GO + +-- Test Case 1: Simple binary values +DECLARE @bin1 VARBINARY(10) = 0x0A; +DECLARE @bin2 VARBINARY(10) = 0x0B; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Simple Binary Compare (0x0A vs 0x0B)', + @bin1, + @bin2, + CASE WHEN @bin1 = @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 <> @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 > @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 < @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 >= @bin2 THEN 1 ELSE 0 END, + CASE WHEN @bin1 <= @bin2 THEN 1 ELSE 0 END; +GO + +-- Test Case 2: Equal values +DECLARE @bin3 VARBINARY(10) = 0x0A; +DECLARE @bin4 VARBINARY(10) = 0x0A; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Equal Binary Values (0x0A vs 0x0A)', + @bin3, + @bin4, + CASE WHEN @bin3 = @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 <> @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 > @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 < @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 >= @bin4 THEN 1 ELSE 0 END, + CASE WHEN @bin3 <= @bin4 THEN 1 ELSE 0 END; +GO + +-- Test Case 3: Different lengths +DECLARE @bin5 VARBINARY(10) = 0x0A0B; +DECLARE @bin6 VARBINARY(10) = 0x0A; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Different Lengths (0x0A0B vs 0x0A)', + @bin5, + @bin6, + CASE WHEN @bin5 = @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 <> @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 > @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 < @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 >= @bin6 THEN 1 ELSE 0 END, + CASE WHEN @bin5 <= @bin6 THEN 1 ELSE 0 END; +GO + +-- Test Case 4: Zero and non-zero +DECLARE @bin7 VARBINARY(10) = 0x00; +DECLARE @bin8 VARBINARY(10) = 0x01; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Zero vs Non-Zero (0x00 vs 0x01)', + @bin7, + @bin8, + CASE WHEN @bin7 = @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 <> @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 > @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 < @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 >= @bin8 THEN 1 ELSE 0 END, + CASE WHEN @bin7 <= @bin8 THEN 1 ELSE 0 END; +GO + +-- Test Case 5: NULL comparison +DECLARE @bin9 VARBINARY(10) = 0x0A; +DECLARE @bin10 VARBINARY(10) = NULL; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'NULL Comparison (0x0A vs NULL)', + @bin9, + @bin10, + CASE WHEN @bin9 = @bin10 THEN 1 WHEN @bin9 <> @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 <> @bin10 THEN 1 WHEN @bin9 = @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 > @bin10 THEN 1 WHEN @bin9 <= @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 < @bin10 THEN 1 WHEN @bin9 >= @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 >= @bin10 THEN 1 WHEN @bin9 < @bin10 THEN 0 ELSE NULL END, + CASE WHEN @bin9 <= @bin10 THEN 1 WHEN @bin9 > @bin10 THEN 0 ELSE NULL END; +GO + +-- Test Case 6: Larger values +DECLARE @bin11 VARBINARY(10) = 0xFFFF; +DECLARE @bin12 VARBINARY(10) = 0x0001; + +INSERT INTO BinaryOperatorTests ( + TestDescription, + LeftOperand, + RightOperand, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult, + GreaterEqualResult, + LessEqualResult +) +SELECT + 'Large Value Compare (0xFFFF vs 0x0001)', + @bin11, + @bin12, + CASE WHEN @bin11 = @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 <> @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 > @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 < @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 >= @bin12 THEN 1 ELSE 0 END, + CASE WHEN @bin11 <= @bin12 THEN 1 ELSE 0 END; +GO + +-- Display results +SELECT + TestID, + TestDescription, + LeftOperand, + RightOperand, + CASE WHEN EqualResult = 1 THEN 'True' + WHEN EqualResult = 0 THEN 'False' + ELSE 'NULL' END AS Equal, + CASE WHEN NotEqualResult = 1 THEN 'True' + WHEN NotEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS NotEqual, + CASE WHEN GreaterThanResult = 1 THEN 'True' + WHEN GreaterThanResult = 0 THEN 'False' + ELSE 'NULL' END AS GreaterThan, + CASE WHEN LessThanResult = 1 THEN 'True' + WHEN LessThanResult = 0 THEN 'False' + ELSE 'NULL' END AS LessThan, + CASE WHEN GreaterEqualResult = 1 THEN 'True' + WHEN GreaterEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS GreaterEqual, + CASE WHEN LessEqualResult = 1 THEN 'True' + WHEN LessEqualResult = 0 THEN 'False' + ELSE 'NULL' END AS LessEqual +FROM BinaryOperatorTests +ORDER BY TestID; +GO + +-- Direct comparison examples +SELECT 'Direct Comparisons' AS TestType; +GO + +SELECT 'Compare 0x0A = 0x0A' AS Test, + CASE WHEN 0x0A = 0x0A THEN 'True' ELSE 'False' END AS Result; +GO + +SELECT 'Compare 0x0A > 0x0B' AS Test, + CASE WHEN 0x0A > 0x0B THEN 'True' ELSE 'False' END AS Result; +GO + +SELECT 'Compare 0x0A < 0x0B' AS Test, + CASE WHEN 0x0A < 0x0B THEN 'True' ELSE 'False' END AS Result; +GO + +SELECT 'Compare 0xFFFF > 0x0001' AS Test, + CASE WHEN 0xFFFF > 0x0001 THEN 'True' ELSE 'False' END AS Result; +GO + +-- Cleanup +DROP TABLE BinaryOperatorTests; +GO + +-- Create test table +CREATE TABLE BinaryMixedTypeComparisons ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + BinaryValue VARBINARY(100), + OtherValue SQL_VARIANT, + OtherValueType VARCHAR(50), + EqualResult VARCHAR(10), + NotEqualResult VARCHAR(10), + GreaterThanResult VARCHAR(10), + LessThanResult VARCHAR(10) +); +GO + +-- String comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs VARCHAR', + CAST('Test' AS VARBINARY(100)), + CAST('Test' AS VARCHAR(100)), + 'VARCHAR', + CASE WHEN CAST('Test' AS VARBINARY(100)) = CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) <> CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) > CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('Test' AS VARBINARY(100)) < CAST('Test' AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Integer comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs INTEGER', + CAST(12345 AS VARBINARY(100)), + 12345, + 'INTEGER', + CASE WHEN CAST(12345 AS VARBINARY(100)) = CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) <> CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) > CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST(12345 AS VARBINARY(100)) < CAST(12345 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Date comparisons +INSERT INTO BinaryMixedTypeComparisons +SELECT + 'Binary vs DATE', + CAST('2024-01-15' AS VARBINARY(100)), + CAST('2024-01-15' AS DATE), + 'DATE', + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) = CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) <> CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) > CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END, + CASE WHEN CAST('2024-01-15' AS VARBINARY(100)) < CAST(CAST('2024-01-15' AS DATE) AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Direct comparison examples +SELECT 'Direct Comparisons' AS TestType; +GO + +-- Binary vs String +SELECT 'Binary = String' AS Test, +CASE WHEN CAST('Test' AS VARBINARY(100)) = CAST('Test' AS VARCHAR(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > String', +CASE WHEN CAST('Test2' AS VARBINARY(100)) > CAST('Test1' AS VARCHAR(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < String', +CASE WHEN CAST('Test1' AS VARBINARY(100)) < CAST('Test2' AS VARCHAR(100)) THEN 'True' ELSE 'False' END; +GO + +-- Binary vs Integer +SELECT 'Binary vs Integer Comparisons' AS TestType; +DECLARE @binInt VARBINARY(100) = CAST(100 AS VARBINARY(100)); +DECLARE @regularInt INT = 100; + +SELECT 'Binary = Integer' AS Test, +CASE WHEN @binInt = CAST(@regularInt AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Integer', +CASE WHEN @binInt > CAST(@regularInt-1 AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Integer', +CASE WHEN @binInt < CAST(@regularInt+1 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Binary vs DateTime +SELECT 'Binary vs DateTime Comparisons' AS TestType; +DECLARE @binDate VARBINARY(100) = CAST('2024-01-15' AS VARBINARY(100)); +DECLARE @regularDate DATETIME = '2024-01-15'; + +SELECT 'Binary = DateTime' AS Test, +CASE WHEN @binDate = CAST(@regularDate AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Earlier DateTime', +CASE WHEN @binDate > CAST('2024-01-14' AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Later DateTime', +CASE WHEN @binDate < CAST('2024-01-16' AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Binary vs Decimal +SELECT 'Binary vs Decimal Comparisons' AS TestType; +DECLARE @binDecimal VARBINARY(100) = CAST(123.45 AS VARBINARY(100)); +DECLARE @regularDecimal DECIMAL(10,2) = 123.45; + +SELECT 'Binary = Decimal' AS Test, +CASE WHEN @binDecimal = CAST(@regularDecimal AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result +UNION ALL +SELECT 'Binary > Smaller Decimal', +CASE WHEN @binDecimal > CAST(123.44 AS VARBINARY(100)) THEN 'True' ELSE 'False' END +UNION ALL +SELECT 'Binary < Larger Decimal', +CASE WHEN @binDecimal < CAST(123.46 AS VARBINARY(100)) THEN 'True' ELSE 'False' END; +GO + +-- Binary vs UNIQUEIDENTIFIER +SELECT 'Binary vs UNIQUEIDENTIFIER Comparisons' AS TestType; +DECLARE @binGuid VARBINARY(100) = CAST('12345678-1234-1234-1234-123456789012' AS VARBINARY(100)); +DECLARE @regularGuid UNIQUEIDENTIFIER = '12345678-1234-1234-1234-123456789012'; + +SELECT 'Binary = GUID' AS Test, +CASE WHEN @binGuid = CAST(@regularGuid AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result; +GO + +-- Binary vs BIT +SELECT 'Binary vs BIT Comparisons' AS TestType; +DECLARE @binBit VARBINARY(100) = CAST(1 AS VARBINARY(100)); +DECLARE @regularBit BIT = 1; + +SELECT 'Binary = Bit' AS Test, +CASE WHEN @binBit = CAST(@regularBit AS VARBINARY(100)) THEN 'True' ELSE 'False' END AS Result; +GO + +-- Display all results +SELECT + TestID, + TestDescription, + BinaryValue, + CAST(OtherValue AS VARCHAR(100)) AS OtherValue, + OtherValueType, + EqualResult, + NotEqualResult, + GreaterThanResult, + LessThanResult +FROM BinaryMixedTypeComparisons +ORDER BY TestID; +GO + +-- Cleanup +DROP TABLE BinaryMixedTypeComparisons; +GO + + +-- Create table for bitwise operation tests +CREATE TABLE BitwiseOperationTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + Value1 VARBINARY(10), + Value2 VARBINARY(10), + BitwiseAND VARBINARY(10), + BitwiseOR VARBINARY(10), + BitwiseXOR VARBINARY(10), + BitwiseNOT VARBINARY(10) +); +GO + +-- Test Case 1: Simple values +DECLARE @val1 VARBINARY(10) = 0x0F; -- 00001111 +DECLARE @val2 VARBINARY(10) = 0xF0; -- 11110000 + +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Simple Binary Values (0x0F AND 0xF0)', + @val1, + @val2, + @val1 & @val2, -- AND + @val1 | @val2, -- OR + @val1 ^ @val2, -- XOR + ~@val1; -- NOT +GO + +-- Test Case 2: All bits set vs all bits clear +DECLARE @allSet VARBINARY(10) = 0xFF; -- 11111111 +DECLARE @allClear VARBINARY(10) = 0x00; -- 00000000 + +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'All Bits Set vs Clear (0xFF AND 0x00)', + @allSet, + @allClear, + @allSet & @allClear, + @allSet | @allClear, + @allSet ^ @allClear, + ~@allSet; +GO + +-- Test Case 3: Alternating bits +DECLARE @alternating1 VARBINARY(10) = 0xAA; -- 10101010 +DECLARE @alternating2 VARBINARY(10) = 0x55; -- 01010101 + +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Alternating Bits (0xAA AND 0x55)', + @alternating1, + @alternating2, + @alternating1 & @alternating2, + @alternating1 | @alternating2, + @alternating1 ^ @alternating2, + ~@alternating1; +GO + +-- Test Case 4: Same values +DECLARE @sameVal VARBINARY(10) = 0x55; + +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Same Values (0x55 AND 0x55)', + @sameVal, + @sameVal, + @sameVal & @sameVal, + @sameVal | @sameVal, + @sameVal ^ @sameVal, + ~@sameVal; +GO + +-- Test Case 5: Multiple bytes +DECLARE @multiByte1 VARBINARY(10) = 0x1234; +DECLARE @multiByte2 VARBINARY(10) = 0x5678; + +INSERT INTO BitwiseOperationTests ( + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +) +SELECT + 'Multiple Bytes (0x1234 AND 0x5678)', + @multiByte1, + @multiByte2, + @multiByte1 & @multiByte2, + @multiByte1 | @multiByte2, + @multiByte1 ^ @multiByte2, + ~@multiByte1; +GO + +-- Display results for regular bitwise operations +SELECT + TestID, + TestDescription, + Value1, + Value2, + BitwiseAND, + BitwiseOR, + BitwiseXOR, + BitwiseNOT +FROM BitwiseOperationTests +ORDER BY TestID; +GO + +-- Test assignment operators +DECLARE @assignTest TABLE ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + OriginalValue VARBINARY(10), + AssignmentResult VARBINARY(10) +); + +-- AND Assignment (&=) +DECLARE @andAssign VARBINARY(10) = 0xFF; +SET @andAssign &= 0x0F; + +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('AND Assignment (0xFF &= 0x0F)', 0xFF, @andAssign); + +-- OR Assignment (|=) +DECLARE @orAssign VARBINARY(10) = 0x0F; +SET @orAssign |= 0xF0; + +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('OR Assignment (0x0F |= 0xF0)', 0x0F, @orAssign); + +-- XOR Assignment (^=) +DECLARE @xorAssign VARBINARY(10) = 0xFF; +SET @xorAssign ^= 0x0F; + +INSERT INTO @assignTest (TestDescription, OriginalValue, AssignmentResult) +VALUES ('XOR Assignment (0xFF ^= 0x0F)', 0xFF, @xorAssign); + +-- Display results for assignment operators +SELECT + TestID, + TestDescription, + OriginalValue, + AssignmentResult +FROM @assignTest +ORDER BY TestID; +GO + +-- Cleanup +DROP TABLE BitwiseOperationTests; +GO + +-- Create table for bitwise operation tests +CREATE TABLE BitwiseTypeTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperandType VARCHAR(20), + RightOperandType VARCHAR(20), + LeftOperandValue VARBINARY(20), + RightOperandValue VARBINARY(20), + BitwiseAND VARBINARY(20), + BitwiseOR VARBINARY(20), + BitwiseXOR VARBINARY(20) +); +GO + +-- 1. BINARY with integer types +INSERT INTO BitwiseTypeTests +SELECT + 'BINARY & INT', + 'BINARY(4)', 'INT', + CAST(0x0F AS BINARY(4)), + CAST(15 AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & 15, + CAST(0x0F AS BINARY(4)) | 15, + CAST(0x0F AS BINARY(4)) ^ 15 +UNION ALL +SELECT + 'BINARY & SMALLINT', + 'BINARY(4)', 'SMALLINT', + CAST(0x0F AS BINARY(4)), + CAST(CAST(15 AS SMALLINT) AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & CAST(15 AS SMALLINT), + CAST(0x0F AS BINARY(4)) | CAST(15 AS SMALLINT), + CAST(0x0F AS BINARY(4)) ^ CAST(15 AS SMALLINT) +UNION ALL +SELECT + 'BINARY & TINYINT', + 'BINARY(4)', 'TINYINT', + CAST(0x0F AS BINARY(4)), + CAST(CAST(15 AS TINYINT) AS VARBINARY(4)), + CAST(0x0F AS BINARY(4)) & CAST(15 AS TINYINT), + CAST(0x0F AS BINARY(4)) | CAST(15 AS TINYINT), + CAST(0x0F AS BINARY(4)) ^ CAST(15 AS TINYINT); +GO + +-- 2. BIGINT with all supported types +INSERT INTO BitwiseTypeTests +SELECT + 'BIGINT & BINARY', + 'BIGINT', 'BINARY(4)', + CAST(CAST(255 AS BIGINT) AS VARBINARY(8)), + CAST(0x0F AS VARBINARY(4)), + CAST(CAST(255 AS BIGINT) & CAST(0x0F AS BINARY(4)) AS VARBINARY(8)), + CAST(CAST(255 AS BIGINT) | CAST(0x0F AS BINARY(4)) AS VARBINARY(8)), + CAST(CAST(255 AS BIGINT) ^ CAST(0x0F AS BINARY(4)) AS VARBINARY(8)); +GO + +-- 3. INT with supported types +INSERT INTO BitwiseTypeTests +SELECT + 'INT & BINARY', + 'INT', 'BINARY(4)', + CAST(255 AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)), + CAST(255 & CAST(0x0F AS BINARY(4)) AS VARBINARY(4)), + CAST(255 | CAST(0x0F AS BINARY(4)) AS VARBINARY(4)), + CAST(255 ^ CAST(0x0F AS BINARY(4)) AS VARBINARY(4)); +GO + +-- 4. VARBINARY with integer types +INSERT INTO BitwiseTypeTests +SELECT + 'VARBINARY & INT', + 'VARBINARY(4)', 'INT', + CAST(0x0F AS VARBINARY(4)), + CAST(15 AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)) & 15, + CAST(0x0F AS VARBINARY(4)) | 15, + CAST(0x0F AS VARBINARY(4)) ^ 15 +UNION ALL +SELECT + 'VARBINARY & SMALLINT', + 'VARBINARY(4)', 'SMALLINT', + CAST(0x0F AS VARBINARY(4)), + CAST(CAST(15 AS SMALLINT) AS VARBINARY(4)), + CAST(0x0F AS VARBINARY(4)) & CAST(15 AS SMALLINT), + CAST(0x0F AS VARBINARY(4)) | CAST(15 AS SMALLINT), + CAST(0x0F AS VARBINARY(4)) ^ CAST(15 AS SMALLINT); +GO + +-- Test NOT operator +CREATE TABLE BitwiseNOTTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + OperandType VARCHAR(20), + OperandValue VARBINARY(20), + NOTResult VARBINARY(20) +); + +INSERT INTO BitwiseNOTTests (TestDescription, OperandType, OperandValue, NOTResult) +VALUES + ('NOT BINARY', 'BINARY(4)', + CAST(0x0F AS VARBINARY(4)), + CAST(~CAST(0x0F AS BINARY(4)) AS VARBINARY(4))), + + ('NOT BIGINT', 'BIGINT', + CAST(CAST(255 AS BIGINT) AS VARBINARY(8)), + CAST(~CAST(255 AS BIGINT) AS VARBINARY(8))), + + ('NOT INT', 'INT', + CAST(255 AS VARBINARY(4)), + CAST(~255 AS VARBINARY(4))), + + ('NOT VARBINARY', 'VARBINARY(4)', + CAST(0x0F AS VARBINARY(4)), + CAST(~CAST(0x0F AS VARBINARY(4)) AS VARBINARY(4))); +GO + +SELECT + TestID, + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperandValue, + RightOperandValue, + BitwiseAND, + BitwiseOR, + BitwiseXOR +FROM BitwiseTypeTests +ORDER BY TestID; +GO + +SELECT + TestID, + TestDescription, + OperandType, + OperandValue, + NOTResult +FROM BitwiseNOTTests +ORDER BY TestID; +GO + +-- Cleanup +DROP TABLE BitwiseTypeTests; +DROP TABLE BitwiseNOTTests; +GO + +-- Create table for concatenation tests +CREATE TABLE BinaryConcatTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + LeftOperandType VARCHAR(20), + RightOperandType VARCHAR(20), + LeftOperand VARBINARY(100), + RightOperand VARBINARY(100), + ConcatResult VARBINARY(200), + ResultType VARCHAR(20), + ResultLength INT +); +GO + +-- Test Case 1: Basic concatenation with same types +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- BINARY + BINARY +( + 'BINARY(4) + BINARY(4)', + 'BINARY(4)', + 'BINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'BINARY(8)', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS BINARY(4))) +), +-- VARBINARY + VARBINARY +( + 'VARBINARY(4) + VARBINARY(4)', + 'VARBINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS VARBINARY(4)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS VARBINARY(4))) +); +GO + +-- Test Case 2: Mixed type concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- BINARY + VARBINARY +( + 'BINARY(4) + VARBINARY(4)', + 'BINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x5678 AS VARBINARY(4))) +), +-- VARBINARY + BINARY +( + 'VARBINARY(4) + BINARY(4)', + 'VARBINARY(4)', + 'BINARY(4)', + CAST(0x1234 AS VARBINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'VARBINARY(8)', + DATALENGTH(CAST(0x1234 AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4))) +); +GO + +-- Test Case 3: NULL value concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- NULL + BINARY +( + 'NULL + BINARY(4)', + 'NULL', + 'BINARY(4)', + NULL, + CAST(0x5678 AS BINARY(4)), + NULL + CAST(0x5678 AS BINARY(4)), + 'VARBINARY', + DATALENGTH(NULL + CAST(0x5678 AS BINARY(4))) +), +-- BINARY + NULL +( + 'BINARY(4) + NULL', + 'BINARY(4)', + 'NULL', + CAST(0x1234 AS BINARY(4)), + NULL, + CAST(0x1234 AS BINARY(4)) + NULL, + 'VARBINARY', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + NULL) +), +-- NULL + NULL +( + 'NULL + NULL', + 'NULL', + 'NULL', + NULL, + NULL, + NULL + NULL, + 'VARBINARY', + DATALENGTH(NULL + NULL) +); +GO + +-- Test Case 4: Zero length value concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +-- Empty VARBINARY + BINARY +( + 'Empty VARBINARY + BINARY(4)', + 'VARBINARY(4)', + 'BINARY(4)', + CAST(0x AS VARBINARY(4)), + CAST(0x5678 AS BINARY(4)), + CAST(0x AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x AS VARBINARY(4)) + CAST(0x5678 AS BINARY(4))) +), +-- BINARY + Empty VARBINARY +( + 'BINARY(4) + Empty VARBINARY', + 'BINARY(4)', + 'VARBINARY(4)', + CAST(0x1234 AS BINARY(4)), + CAST(0x AS VARBINARY(4)), + CAST(0x1234 AS BINARY(4)) + CAST(0x AS VARBINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x1234 AS BINARY(4)) + CAST(0x AS VARBINARY(4))) +), +-- Empty VARBINARY + Empty VARBINARY +( + 'Empty VARBINARY + Empty VARBINARY', + 'VARBINARY(4)', + 'VARBINARY(4)', + CAST(0x AS VARBINARY(4)), + CAST(0x AS VARBINARY(4)), + CAST(0x AS VARBINARY(4)) + CAST(0x AS VARBINARY(4)), + 'VARBINARY', + DATALENGTH(CAST(0x AS VARBINARY(4)) + CAST(0x AS VARBINARY(4))) +); +GO + +-- Test Case 5: Different length concatenation +INSERT INTO BinaryConcatTests ( + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +) +VALUES +( + 'BINARY(2) + BINARY(4)', + 'BINARY(2)', + 'BINARY(4)', + CAST(0x12 AS BINARY(2)), + CAST(0x5678 AS BINARY(4)), + CAST(0x12 AS BINARY(2)) + CAST(0x5678 AS BINARY(4)), + 'BINARY(6)', + DATALENGTH(CAST(0x12 AS BINARY(2)) + CAST(0x5678 AS BINARY(4))) +), +( + 'VARBINARY(2) + VARBINARY(4)', + 'VARBINARY(2)', + 'VARBINARY(4)', + CAST(0x12 AS VARBINARY(2)), + CAST(0x5678 AS VARBINARY(4)), + CAST(0x12 AS VARBINARY(2)) + CAST(0x5678 AS VARBINARY(4)), + 'VARBINARY(6)', + DATALENGTH(CAST(0x12 AS VARBINARY(2)) + CAST(0x5678 AS VARBINARY(4))) +); +GO + +-- Display results +SELECT + TestID, + TestDescription, + LeftOperandType, + RightOperandType, + LeftOperand, + RightOperand, + ConcatResult, + ResultType, + ResultLength +FROM BinaryConcatTests +ORDER BY TestID; +GO + +-- Additional verification queries +SELECT 'Type Precedence Tests' AS TestType; +GO + +-- Test BINARY + VARBINARY type precedence +SELECT + 'BINARY + VARBINARY Results in: ' + + CASE + WHEN SQL_VARIANT_PROPERTY( + CAST(0x12 AS BINARY(2)) + CAST(0x34 AS VARBINARY(2)), 'BaseType' + ) = 'varbinary' + THEN 'VARBINARY (Higher Precedence)' + ELSE 'Other' + END AS TypePrecedenceTest; +GO + +-- Test NULL handling +SELECT 'NULL Handling Tests' AS TestType; +SELECT + CASE + WHEN (CAST(0x12 AS BINARY(2)) + NULL) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS BinaryPlusNULL, + CASE + WHEN (NULL + CAST(0x12 AS BINARY(2))) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS NULLPlusBinary, + CASE + WHEN (NULL + NULL) IS NULL THEN 'NULL' + ELSE 'Not NULL' + END AS NULLPlusNULL; +GO + +-- Cleanup +DROP TABLE BinaryConcatTests; GO \ No newline at end of file From b1f9e96dc513ad81ed5e1e3a504709b66d2c1f93 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 21 Feb 2025 06:32:13 +0000 Subject: [PATCH 7/8] system tests --- test/JDBC/expected/TestBinary.out | 154 +++++++++++++++++++++++ test/JDBC/input/datatypes/TestBinary.sql | 117 ++++++++++++++++- 2 files changed, 270 insertions(+), 1 deletion(-) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index baa75c9b9e1..5c729e38f63 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -2834,3 +2834,157 @@ NULL#!#NULL#!#NULL -- Cleanup DROP TABLE BinaryConcatTests; GO + +-- Create a test table +CREATE TABLE BinaryFunctionTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + InputValue VARBINARY(MAX), + OutputValue SQL_VARIANT, + FunctionUsed VARCHAR(50) +); +GO + +-- 1. Aggregate Functions +INSERT INTO BinaryFunctionTests VALUES +-- MAX +('MAX Function', 0x1234, + CAST((SELECT MAX(CAST(0x1234 AS VARBINARY(10))) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'MAX'), +-- MIN +('MIN Function', 0x1234, + CAST((SELECT MIN(CAST(0x1234 AS VARBINARY(10))) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'MIN'); +GO +~~ROW COUNT: 2~~ + + + + + + +-- 2. String/Binary Functions +INSERT INTO BinaryFunctionTests VALUES +('DATALENGTH', 0x1234, + DATALENGTH(0x1234), + 'DATALENGTH'), +('LEN', 0x1234, + LEN(0x1234), + 'LEN'), +('SUBSTRING', 0x123456, + SUBSTRING(0x123456, 2, 2), + 'SUBSTRING'), +('LEFT', 0x123456, + LEFT(0x123456, 2), + 'LEFT'), +('RIGHT', 0x123456, + RIGHT(0x123456, 2), + 'RIGHT'); +GO +~~ROW COUNT: 5~~ + + +-- 3. Cryptographic Functions +INSERT INTO BinaryFunctionTests VALUES +-- HASHBYTES +('HASHBYTES SHA2_256', CAST('Test' AS VARBINARY(100)), + HASHBYTES('SHA2_256', 'Test'), + 'HASHBYTES'); +GO +~~ROW COUNT: 1~~ + + +-- 4. Mathematical Functions that work with binary +INSERT INTO BinaryFunctionTests VALUES +('AVG Function', 0x1234, + CAST((SELECT AVG(CAST(0x12 AS INT)) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'AVG'); +GO +~~ROW COUNT: 1~~ + + +-- 5. System Metadata Functions +-- INSERT INTO BinaryFunctionTests VALUES +-- -- DATABASEPROPERTYEX +-- ('DATABASEPROPERTYEX', NULL, +-- CAST(DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS VARCHAR(100)) IS NOT NULL, +-- 'DATABASEPROPERTYEX'); +GO + +-- Display results +SELECT + TestID, + TestDescription, + CASE + WHEN InputValue IS NULL THEN NULL + ELSE InputValue + END AS InputValueHex, + OutputValue, + FunctionUsed +FROM BinaryFunctionTests +ORDER BY TestID; +GO +~~START~~ +int#!#varchar#!#varbinary#!#sql_variant#!#varchar +1#!#MAX Function#!#1234#!#4660#!#MAX +2#!#MIN Function#!#1234#!#4660#!#MIN +3#!#DATALENGTH#!#1234#!#2#!#DATALENGTH +4#!#LEN#!#1234#!#2#!#LEN +5#!#SUBSTRING#!#123456#!#[B@16f7b4af#!#SUBSTRING +6#!#LEFT#!#123456#!#4#!#LEFT +7#!#RIGHT#!#123456#!#4V#!#RIGHT +8#!#HASHBYTES SHA2_256#!#54657374#!#[B@7adf16aa#!#HASHBYTES +9#!#AVG Function#!#1234#!#18#!#AVG +~~END~~ + + + +-- Additional examples with explanations +-- 1. String Manipulation with Binary Data +SELECT + 'Original' AS Operation, CAST(0x123456 AS VARCHAR(100)) AS Result +UNION ALL +SELECT 'SUBSTRING', CAST(SUBSTRING(0x123456, 2, 2) AS VARCHAR(100)) +UNION ALL +SELECT 'LEFT', CAST(LEFT(0x123456, 2) AS VARCHAR(100)) +UNION ALL +SELECT 'RIGHT', CAST(RIGHT(0x123456, 2) AS VARCHAR(100)); +GO +~~START~~ +varchar#!#varchar +Original#!#4V +SUBSTRING#!#4V +LEFT#!#4 +RIGHT#!#4V +~~END~~ + + +-- 2. Conversion Examples +SELECT + 'HEX' AS ConversionType, CONVERT(VARCHAR(100), 0x1234, 1) AS Result +UNION ALL +SELECT 'CHARACTER', CONVERT(VARCHAR(100), 0x1234, 0) +UNION ALL +SELECT 'BINARY', CAST(CONVERT(VARBINARY(10), '1234', 1) AS VARCHAR(100)); +GO +~~ERROR (Code: 33557097)~~ + +~~ERROR (Message: Error converting data type varchar to varbinary.)~~ + + +-- 3. Cryptographic Function Examples +SELECT + 'SHA2_256' AS HashType, HASHBYTES('SHA2_256', 'Test') AS HashResult +UNION ALL +SELECT 'SHA2_512', HASHBYTES('SHA2_512', 'Test'); +GO +~~START~~ +varchar#!#varbinary +SHA2_256#!#532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25 +SHA2_512#!#C6EE9E33CF5C6715A1D148FD73F7318884B41ADCB916021E2BC0E800A5C5DD97F5142178F6AE88C8FDD98E1AFB0CE4C8D2C54B5F37B30B7DA1997BB33B0B8A31 +~~END~~ + + +-- Cleanup +DROP TABLE BinaryFunctionTests; +GO diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index b894617b008..201df5c69d6 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -2065,4 +2065,119 @@ GO -- Cleanup DROP TABLE BinaryConcatTests; -GO \ No newline at end of file +GO + +-- Create a test table +CREATE TABLE BinaryFunctionTests ( + TestID INT IDENTITY(1,1), + TestDescription VARCHAR(100), + InputValue VARBINARY(MAX), + OutputValue SQL_VARIANT, + FunctionUsed VARCHAR(50) +); +GO + +-- 1. Aggregate Functions +INSERT INTO BinaryFunctionTests VALUES +-- MAX +('MAX Function', 0x1234, + CAST((SELECT MAX(CAST(0x1234 AS VARBINARY(10))) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'MAX'), +-- MIN +('MIN Function', 0x1234, + CAST((SELECT MIN(CAST(0x1234 AS VARBINARY(10))) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'MIN'); +GO + +-- 2. String/Binary Functions +INSERT INTO BinaryFunctionTests VALUES +('DATALENGTH', 0x1234, + DATALENGTH(0x1234), + 'DATALENGTH'), + +('LEN', 0x1234, + LEN(0x1234), + 'LEN'), + +('SUBSTRING', 0x123456, + SUBSTRING(0x123456, 2, 2), + 'SUBSTRING'), + +('LEFT', 0x123456, + LEFT(0x123456, 2), + 'LEFT'), + +('RIGHT', 0x123456, + RIGHT(0x123456, 2), + 'RIGHT'); +GO + +-- 3. Cryptographic Functions +INSERT INTO BinaryFunctionTests VALUES +-- HASHBYTES +('HASHBYTES SHA2_256', CAST('Test' AS VARBINARY(100)), + HASHBYTES('SHA2_256', 'Test'), + 'HASHBYTES'); +GO + +-- 4. Mathematical Functions that work with binary +INSERT INTO BinaryFunctionTests VALUES +('AVG Function', 0x1234, + CAST((SELECT AVG(CAST(0x12 AS INT)) FROM (VALUES (1)) AS t(c)) AS VARCHAR(100)), + 'AVG'); +GO + +-- 5. System Metadata Functions +-- INSERT INTO BinaryFunctionTests VALUES +-- -- DATABASEPROPERTYEX +-- ('DATABASEPROPERTYEX', NULL, +-- CAST(DATABASEPROPERTYEX(DB_NAME(), 'Collation') AS VARCHAR(100)) IS NOT NULL, +-- 'DATABASEPROPERTYEX'); +GO + +-- Display results +SELECT + TestID, + TestDescription, + CASE + WHEN InputValue IS NULL THEN NULL + ELSE InputValue + END AS InputValueHex, + OutputValue, + FunctionUsed +FROM BinaryFunctionTests +ORDER BY TestID; +GO + +-- Additional examples with explanations + +-- 1. String Manipulation with Binary Data +SELECT + 'Original' AS Operation, CAST(0x123456 AS VARCHAR(100)) AS Result +UNION ALL +SELECT 'SUBSTRING', CAST(SUBSTRING(0x123456, 2, 2) AS VARCHAR(100)) +UNION ALL +SELECT 'LEFT', CAST(LEFT(0x123456, 2) AS VARCHAR(100)) +UNION ALL +SELECT 'RIGHT', CAST(RIGHT(0x123456, 2) AS VARCHAR(100)); +GO + +-- 2. Conversion Examples +SELECT + 'HEX' AS ConversionType, CONVERT(VARCHAR(100), 0x1234, 1) AS Result +UNION ALL +SELECT 'CHARACTER', CONVERT(VARCHAR(100), 0x1234, 0) +UNION ALL +SELECT 'BINARY', CAST(CONVERT(VARBINARY(10), '1234', 1) AS VARCHAR(100)); +GO + +-- 3. Cryptographic Function Examples +SELECT + 'SHA2_256' AS HashType, HASHBYTES('SHA2_256', 'Test') AS HashResult +UNION ALL +SELECT 'SHA2_512', HASHBYTES('SHA2_512', 'Test'); +GO + +-- Cleanup +DROP TABLE BinaryFunctionTests; +GO From fc292168da5904b424c9e49a049b4dd31553e501 Mon Sep 17 00:00:00 2001 From: Dipesh Dhameliya Date: Fri, 21 Feb 2025 09:22:33 +0000 Subject: [PATCH 8/8] some more test cases --- test/JDBC/expected/TestBinary.out | 256 ++++++++++++++++++++--- test/JDBC/input/datatypes/TestBinary.sql | 173 ++++++++++++--- 2 files changed, 371 insertions(+), 58 deletions(-) diff --git a/test/JDBC/expected/TestBinary.out b/test/JDBC/expected/TestBinary.out index 5c729e38f63..8a50022a2b4 100644 --- a/test/JDBC/expected/TestBinary.out +++ b/test/JDBC/expected/TestBinary.out @@ -2844,6 +2844,10 @@ CREATE TABLE BinaryFunctionTests ( FunctionUsed VARCHAR(50) ); GO +~~ERROR (Code: 2714)~~ + +~~ERROR (Message: relation "binaryfunctiontests" already exists)~~ + -- 1. Aggregate Functions INSERT INTO BinaryFunctionTests VALUES @@ -2935,56 +2939,240 @@ int#!#varchar#!#varbinary#!#sql_variant#!#varchar 7#!#RIGHT#!#123456#!#4V#!#RIGHT 8#!#HASHBYTES SHA2_256#!#54657374#!#[B@7adf16aa#!#HASHBYTES 9#!#AVG Function#!#1234#!#18#!#AVG +10#!#MAX Function#!#1234#!#4660#!#MAX +11#!#MIN Function#!#1234#!#4660#!#MIN +12#!#DATALENGTH#!#1234#!#2#!#DATALENGTH +13#!#LEN#!#1234#!#2#!#LEN +14#!#SUBSTRING#!#123456#!#[B@34a1d21f#!#SUBSTRING +15#!#LEFT#!#123456#!#4#!#LEFT +16#!#RIGHT#!#123456#!#4V#!#RIGHT +17#!#HASHBYTES SHA2_256#!#54657374#!#[B@58bf8650#!#HASHBYTES +18#!#AVG Function#!#1234#!#18#!#AVG +19#!#MAX Function#!#1234#!#4660#!#MAX +20#!#MIN Function#!#1234#!#4660#!#MIN +21#!#DATALENGTH#!#1234#!#2#!#DATALENGTH +22#!#LEN#!#1234#!#2#!#LEN +23#!#SUBSTRING#!#123456#!#[B@73c60324#!#SUBSTRING +24#!#LEFT#!#123456#!#4#!#LEFT +25#!#RIGHT#!#123456#!#4V#!#RIGHT +26#!#HASHBYTES SHA2_256#!#54657374#!#[B@71ae31b0#!#HASHBYTES +27#!#AVG Function#!#1234#!#18#!#AVG +~~END~~ + + +-- Test Case 1: Simple UNION with different VARBINARY sizes +select * into temp_tbl from +( +SELECT 'UNION Test 1' AS Test, + CAST(0x1234 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x1234 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 1', + CAST(0x5678 AS VARBINARY(8)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(8))) AS Length2 +); +GO + +select * from temp_tbl +GO +~~START~~ +varchar#!#varbinary#!#int +UNION Test 1#!#1234#!#2 +UNION Test 1#!#5678#!#2 +~~END~~ + + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#8 +length1#!#int#!#4 ~~END~~ +drop table temp_tbl +GO --- Additional examples with explanations --- 1. String Manipulation with Binary Data -SELECT - 'Original' AS Operation, CAST(0x123456 AS VARCHAR(100)) AS Result -UNION ALL -SELECT 'SUBSTRING', CAST(SUBSTRING(0x123456, 2, 2) AS VARCHAR(100)) -UNION ALL -SELECT 'LEFT', CAST(LEFT(0x123456, 2) AS VARCHAR(100)) -UNION ALL -SELECT 'RIGHT', CAST(RIGHT(0x123456, 2) AS VARCHAR(100)); +-- Test Case 2: UNION with NULL and non-NULL values +select * into temp_tbl from +( +SELECT 'UNION Test 2' AS Test, + CAST(NULL AS VARBINARY(4)) AS Value1, + NULL AS Length1 +UNION +SELECT 'UNION Test 2', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); GO ~~START~~ -varchar#!#varchar -Original#!#4V -SUBSTRING#!#4V -LEFT#!#4 -RIGHT#!#4V +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#4 +length1#!#int#!#4 ~~END~~ --- 2. Conversion Examples -SELECT - 'HEX' AS ConversionType, CONVERT(VARCHAR(100), 0x1234, 1) AS Result -UNION ALL -SELECT 'CHARACTER', CONVERT(VARCHAR(100), 0x1234, 0) -UNION ALL -SELECT 'BINARY', CAST(CONVERT(VARBINARY(10), '1234', 1) AS VARCHAR(100)); +drop table temp_tbl GO -~~ERROR (Code: 33557097)~~ -~~ERROR (Message: Error converting data type varchar to varbinary.)~~ +-- Test Case 3: UNION with empty and non-empty values +select * into temp_tbl from +( +SELECT 'UNION Test 3' AS Test, + CAST(0x AS VARBINARY(8)) AS Value1, + DATALENGTH(CAST(0x AS VARBINARY(8))) AS Length1 +UNION +SELECT 'UNION Test 3', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#8 +length1#!#int#!#4 +~~END~~ + +drop table temp_tbl +GO --- 3. Cryptographic Function Examples -SELECT - 'SHA2_256' AS HashType, HASHBYTES('SHA2_256', 'Test') AS HashResult -UNION ALL -SELECT 'SHA2_512', HASHBYTES('SHA2_512', 'Test'); +-- Test Case 4: UNION with BINARY and VARBINARY +select * into temp_tbl from +( +SELECT 'UNION Test 4' AS Test, + CAST(0x1234 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x1234 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 4', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); GO ~~START~~ -varchar#!#varbinary -SHA2_256#!#532EAABD9574880DBF76B9B8CC00832C20A6EC113D682299550D7A6E0F345E25 -SHA2_512#!#C6EE9E33CF5C6715A1D148FD73F7318884B41ADCB916021E2BC0E800A5C5DD97F5142178F6AE88C8FDD98E1AFB0CE4C8D2C54B5F37B30B7DA1997BB33B0B8A31 +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#4 +length1#!#int#!#4 ~~END~~ --- Cleanup -DROP TABLE BinaryFunctionTests; +drop table temp_tbl +GO + +-- Test Case 5: UNION with different size values +select * into temp_tbl from +( +SELECT 'UNION Test 5' AS Test, + CAST(0x12 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 5', + CAST(0x345678 AS BINARY(8)) AS Value2, + DATALENGTH(CAST(0x345678 AS BINARY(8))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#8 +length1#!#int#!#4 +~~END~~ + + +drop table temp_tbl +GO + +-- Test Case 6: UNION with different size values for BINARY +select * into temp_tbl from +( +SELECT 'UNION Test 5' AS Test, + CAST(0x12 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 5', + CAST(0x345678 AS BINARY(8)) AS Value2, + DATALENGTH(CAST(0x345678 AS BINARY(8))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#binary#!#8 +length1#!#int#!#4 +~~END~~ + + +drop table temp_tbl +GO + +-- Test Case 7: UNION with varbinary[n] and varbinary[max] +select * into temp_tbl from +( +SELECT 'UNION Test 5' AS Test, + CAST(0x12 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 5', + CAST(0x345678 AS VARBINARY(max)) AS Value2, + DATALENGTH(CAST(0x345678 AS VARBINARY(max))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#-1 +length1#!#int#!#4 +~~END~~ + + +drop table temp_tbl +GO + +-- Test Case 8: UNION with binary[n] and varbinary[max] +select * into temp_tbl from +( +SELECT 'UNION Test 5' AS Test, + CAST(0x12 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 5', + CAST(0x345678 AS VARBINARY(max)) AS Value2, + DATALENGTH(CAST(0x345678 AS VARBINARY(max))) AS Length2 +); +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO +~~START~~ +varchar#!#varchar#!#smallint +test#!#varchar#!#12 +value1#!#varbinary#!#-1 +length1#!#int#!#4 +~~END~~ + + +drop table temp_tbl GO diff --git a/test/JDBC/input/datatypes/TestBinary.sql b/test/JDBC/input/datatypes/TestBinary.sql index 201df5c69d6..bb2df34edfb 100644 --- a/test/JDBC/input/datatypes/TestBinary.sql +++ b/test/JDBC/input/datatypes/TestBinary.sql @@ -2149,35 +2149,160 @@ FROM BinaryFunctionTests ORDER BY TestID; GO --- Additional examples with explanations +DROp TABLE BinaryFunctionTests +GO --- 1. String Manipulation with Binary Data -SELECT - 'Original' AS Operation, CAST(0x123456 AS VARCHAR(100)) AS Result -UNION ALL -SELECT 'SUBSTRING', CAST(SUBSTRING(0x123456, 2, 2) AS VARCHAR(100)) -UNION ALL -SELECT 'LEFT', CAST(LEFT(0x123456, 2) AS VARCHAR(100)) -UNION ALL -SELECT 'RIGHT', CAST(RIGHT(0x123456, 2) AS VARCHAR(100)); +-- Test Case 1: Simple UNION with different VARBINARY sizes +select t.* into temp_tbl from +( +SELECT 'UNION Test 1' AS Test, + CAST(0x1234 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x1234 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 1', + CAST(0x5678 AS VARBINARY(8)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(8))) AS Length2 +) t; GO --- 2. Conversion Examples -SELECT - 'HEX' AS ConversionType, CONVERT(VARCHAR(100), 0x1234, 1) AS Result -UNION ALL -SELECT 'CHARACTER', CONVERT(VARCHAR(100), 0x1234, 0) -UNION ALL -SELECT 'BINARY', CAST(CONVERT(VARBINARY(10), '1234', 1) AS VARCHAR(100)); +select * from temp_tbl GO --- 3. Cryptographic Function Examples -SELECT - 'SHA2_256' AS HashType, HASHBYTES('SHA2_256', 'Test') AS HashResult -UNION ALL -SELECT 'SHA2_512', HASHBYTES('SHA2_512', 'Test'); +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); GO --- Cleanup -DROP TABLE BinaryFunctionTests; +drop table temp_tbl +GO + +-- Test Case 2: UNION with NULL and non-NULL values +select t.* into temp_tbl from +( +SELECT 'UNION Test 2' AS Test, + CAST(NULL AS VARBINARY(4)) AS Value1, + NULL AS Length1 +UNION +SELECT 'UNION Test 2', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 3: UNION with empty and non-empty values +select t.* into temp_tbl from +( +SELECT 'UNION Test 3' AS Test, + CAST(0x AS VARBINARY(8)) AS Value1, + DATALENGTH(CAST(0x AS VARBINARY(8))) AS Length1 +UNION +SELECT 'UNION Test 3', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 4: UNION with BINARY and VARBINARY +select t.* into temp_tbl from +( +SELECT 'UNION Test 4' AS Test, + CAST(0x1234 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x1234 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 4', + CAST(0x5678 AS VARBINARY(4)) AS Value2, + DATALENGTH(CAST(0x5678 AS VARBINARY(4))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 5: UNION with different size values +select t.* into temp_tbl from +( +SELECT 'UNION Test 5' AS Test, + CAST(0x12 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 5', + CAST(0x345678 AS BINARY(8)) AS Value2, + DATALENGTH(CAST(0x345678 AS BINARY(8))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 6: UNION with different size values for BINARY +select t.* into temp_tbl from +( +SELECT 'UNION Test 6' AS Test, + CAST(0x12 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 6', + CAST(0x345678 AS BINARY(8)) AS Value2, + DATALENGTH(CAST(0x345678 AS BINARY(8))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 7: UNION with varbinary[n] and varbinary[max] +select t.* into temp_tbl from +( +SELECT 'UNION Test 7' AS Test, + CAST(0x12 AS VARBINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS VARBINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 7', + CAST(0x345678 AS VARBINARY(max)) AS Value2, + DATALENGTH(CAST(0x345678 AS VARBINARY(max))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl +GO + +-- Test Case 8: UNION with binary[n] and varbinary[max] +select t.* into temp_tbl from +( +SELECT 'UNION Test 8' AS Test, + CAST(0x12 AS BINARY(4)) AS Value1, + DATALENGTH(CAST(0x12 AS BINARY(4))) AS Length1 +UNION +SELECT 'UNION Test 8', + CAST(0x345678 AS VARBINARY(max)) AS Value2, + DATALENGTH(CAST(0x345678 AS VARBINARY(max))) AS Length2 +) t; +GO + +select name, (select name from sys.types where system_type_id = c.system_type_id), max_length from sys.columns c where object_id = object_id('temp_tbl'); +GO + +drop table temp_tbl GO