select NUMERIC(18,2) "123" SQL_C_NUMERIC """38 0 1 7B"""
# some binary
#
select CHAR(7) pippo SQL_C_BINARY 706970706F2020
select TEXT mickey SQL_C_BINARY 6D69636B6579
select VARCHAR(20) foo SQL_C_BINARY 666F6F
select TIMESTAMP "abcdefghi" SQL_C_BINARY "6162636465666768"
select BINARY(5) qwer SQL_C_BINARY 7177657200
select IMAGE cricetone SQL_C_BINARY 6372696365746F6E65
select VARBINARY(20) teo SQL_C_BINARY 74656F
select_cond bigint BIGINT 87654 SQL_C_CHAR "5 87654"
if bigint
select_cond cond1 BIGINT 123456789012345 SQL_C_BINARY 13000179DF0D86487000000000000000000000
if not cond1 and bigendian
select BIGINT "123456789012345" SQL_C_BINARY "00007048860DDF79"
endif
if not cond1 and not bigendian
select BIGINT "123456789012345" SQL_C_BINARY "79DF0D8648700000"
endif
endif
if bigendian
select DATETIME "2004-02-24 15:16:17" SQL_C_BINARY "0000949700FBAA2C"
select SMALLDATETIME "2004-02-24 15:16:17" SQL_C_BINARY "94970394"
select SMALLINT "4321" SQL_C_BINARY "10E1"
select INT "1234567" SQL_C_BINARY "0012D687"
select FLOAT "1234.5678" SQL_C_BINARY "40934A456D5CFAAD"
select REAL "8765.4321" SQL_C_BINARY "4608F5BA"
select SMALLMONEY "765.4321" SQL_C_BINARY "0074CBB1"
select MONEY "4321234.5678" SQL_C_BINARY "0000000A0FA8114E"
select UNIQUEIDENTIFIER "0DDF3B64-E692-11D1-AB06-00AA00BDD685" SQL_C_BINARY "0DDF3B64E69211D1AB0600AA00BDD685"
else
select DATETIME "2004-02-24 15:16:17" SQL_C_BINARY "979400002CAAFB00"
select SMALLDATETIME "2004-02-24 15:16:17" SQL_C_BINARY "97949403"
select SMALLINT "4321" SQL_C_BINARY "E110"
select INT "1234567" SQL_C_BINARY "87D61200"
select FLOAT "1234.5678" SQL_C_BINARY "ADFA5C6D454A9340"
select REAL "8765.4321" SQL_C_BINARY "BAF50846"
select SMALLMONEY "765.4321" SQL_C_BINARY "B1CB7400"
select MONEY "4321234.5678" SQL_C_BINARY "0A0000004E11A80F"
select UNIQUEIDENTIFIER "0DDF3B64-E692-11D1-AB06-00AA00BDD685" SQL_C_BINARY "643BDF0D92E6D111AB0600AA00BDD685"
endif
select BIT 1 SQL_C_BINARY 01
select BIT 0 SQL_C_BINARY 00
select TINYINT 231 SQL_C_BINARY E7
select DECIMAL 1234.5678 SQL_C_BINARY 120001D3040000000000000000000000000000
select NUMERIC 8765.4321 SQL_C_BINARY 1200013D220000000000000000000000000000
# behavior is different from MS ODBC, Sybase does not handle N types with unicode
if msdb
select NCHAR(7) "donald" SQL_C_BINARY "64006F006E0061006C0064002000"
select NTEXT "duck" SQL_C_BINARY "6400750063006B00"
select NVARCHAR(20) "daffy" SQL_C_BINARY "64006100660066007900"
endif
# others
select INT -123 SQL_C_CHAR "4 -123"
select INT 78654 SQL_C_WCHAR "5 78654"
select VARCHAR(10) " 51245 " SQL_C_LONG 51245
select VARCHAR(20) " 15 " SQL_C_NUMERIC "38 0 1 0F"
select UNIVARCHAR(10) """u&'\06A4\FBA5'""" SQL_C_WCHAR """2 \u06a4\ufba5"""
select VARCHAR(20) test SQL_C_WCHAR "4 test"
# date to char
#
select DATETIME "2006-06-09 11:22:44" SQL_C_CHAR "23 2006-06-09 11:22:44.000"
select DATETIME "2106-06-09 11:22:44" SQL_C_CHAR "23 2106-06-09 11:22:44.000"
select DATETIME "2206-06-09 11:22:44" SQL_C_CHAR "23 2206-06-09 11:22:44.000"
select DATETIME "2306-06-09 11:22:44" SQL_C_CHAR "23 2306-06-09 11:22:44.000"
select DATETIME "3806-06-09 11:22:44" SQL_C_CHAR "23 3806-06-09 11:22:44.000"
select SMALLDATETIME "2006-06-12 22:37:21" SQL_C_CHAR "19 2006-06-12 22:37:00"
select DATETIME "2006-06-09 11:22:44" SQL_C_WCHAR "23 2006-06-09 11:22:44.000"
select SMALLDATETIME "2006-06-12 22:37:21" SQL_C_WCHAR "19 2006-06-12 22:37:00"
select DATETIME "2006-06-09 11:22:44" SQL_C_TIMESTAMP "2006-06-09 11:22:44.000"
select SMALLDATETIME "2006-06-12 22:37:21" SQL_C_TIMESTAMP "2006-06-12 22:37:00.000"
if msdb
sql_cond cond1 "SELECT CAST('test' AS NVARCHAR(10)) WHERE 0=1"
if cond1
# nvarchar without extended characters
select NVARCHAR(20) "test" SQL_C_CHAR "4 test"
# nvarchar with extended characters
# don't test with MS which usually have a not compatible encoding
if freetds
select NVARCHAR(20) 0x830068006900f200 SQL_C_CHAR "4 \x83hi\xf2"
endif
# nvarchar with extended characters
select NVARCHAR(20) "0x830068006900f200" SQL_C_WCHAR "4 \x83hi\xf2"
select NVARCHAR(20) "0xA406A5FB" SQL_C_WCHAR """2 \u06a4\ufba5"""
# NVARCHAR -> SQL_C_LONG
select NVARCHAR(20) "-24785 " SQL_C_LONG "-24785"
endif
# check variant existence
sql_cond cond1 "SELECT CAST(123 AS SQL_VARIANT) WHERE 0=1"
if cond1
select SQL_VARIANT "CAST('123' AS INT)" SQL_C_CHAR "3 123"
select SQL_VARIANT "CAST('hello' AS CHAR(6))" SQL_C_CHAR "6 hello "
select SQL_VARIANT "CAST('ciao' AS VARCHAR(10))" SQL_C_CHAR "4 ciao"
select SQL_VARIANT "CAST('foo' AS NVARCHAR(10))" SQL_C_CHAR "3 foo"
select SQL_VARIANT "CAST('Super' AS NCHAR(8))" SQL_C_CHAR "8 Super "
# using protocol version 7.0 server returns NVARCHAR instead of NVARBINARY so test it
select_cond bug SQL_VARIANT "CAST(0x330032003100 AS VARBINARY(10))" SQL_C_CHAR "3 321"
if not bug
select SQL_VARIANT "CAST(0x333231 AS VARBINARY(10))" SQL_C_CHAR "6 333231"
endif
# for some reasons MS ODBC seems to convert -123.4 to -123.40000000000001
select SQL_VARIANT "CAST('-123.5' AS FLOAT)" SQL_C_CHAR "6 -123.5"
select SQL_VARIANT "CAST('-123.4' AS NUMERIC(10,2))" SQL_C_CHAR "7 -123.40"
select SQL_VARIANT "CAST('0DDF3B64-E692-11D1-AB06-00AA00BDD685' AS UNIQUEIDENTIFIER)" SQL_C_CHAR "36 0DDF3B64-E692-11D1-AB06-00AA00BDD685"
endif
# mssql2005 varchar(max)
sql_cond cond1 "SELECT CAST('test' AS VARCHAR(MAX)) WHERE 0=1"
if cond1
select VARCHAR(MAX) "goodbye!" SQL_C_CHAR "8 goodbye!"
select NVARCHAR(MAX) "Micio mao" SQL_C_CHAR "9 Micio mao"
select VARBINARY(MAX) "ciao" SQL_C_BINARY "6369616F"
select XML """ciaohi""" SQL_C_CHAR """28 ciaohi"""
# XML with schema
sql "IF EXISTS(SELECT * FROM sys.xml_schema_collections WHERE [name] = 'test_schema') DROP XML SCHEMA COLLECTION test_schema"
sql """CREATE XML SCHEMA COLLECTION test_schema AS ''"""
select XML(test_schema) "ciao" SQL_C_CHAR "17 ciao"
sql "DROP XML SCHEMA COLLECTION test_schema"
endif
# mssql 2008 date/time
sql_cond cond1 "SELECT CAST('1923-12-02' AS DATE) WHERE 0=1"
if cond1
select DATE "1923-12-02" SQL_C_CHAR "10 1923-12-02"
select TIME "12:23:45" SQL_C_CHAR "16 12:23:45.0000000"
select TIME(4) "12:23:45.765" SQL_C_CHAR "13 12:23:45.7650"
select TIME(0) "12:23:45.765" SQL_C_CHAR "8 12:23:46"
select DATETIME2 "2011-08-10 12:23:45" SQL_C_CHAR "27 2011-08-10 12:23:45.0000000"
select DATETIME2(4) "12:23:45.345888" SQL_C_CHAR "24 1900-01-01 12:23:45.3459"
select DATETIME2(0) "2011-08-10 12:23:45.93" SQL_C_CHAR "19 2011-08-10 12:23:46"
select DATETIMEOFFSET "12:23:45 -02:30" SQL_C_CHAR "34 1900-01-01 12:23:45.0000000 -02:30"
select DATETIMEOFFSET(4) "12:23:45" SQL_C_CHAR "31 1900-01-01 12:23:45.0000 +00:00"
# test we are using mssql2008 protocol (7.3)
select_cond cond1 DATE "1923-12-02" SQL_C_BINARY "31003900320033002D00310032002D0030003200"
if not cond1 and bigendian
select DATE "1923-12-02" SQL_C_BINARY "0783000C0002"
select TIME "12:23:45" SQL_C_BINARY "000C0017002D000000000000"
select TIME(4) "12:23:45.765" SQL_C_BINARY "000C0017002D00002D98F940"
select DATETIME2 "2011-08-10 12:23:45" SQL_C_BINARY "07DB0008000A000C0017002D00000000"
select DATETIME2(4) "12:23:45" SQL_C_BINARY "076C00010001000C0017002D00000000"
select DATETIMEOFFSET "12:23:45 -08:30" SQL_C_BINARY "076C00010001000C0017002D00000000FFF8FFE2"
select DATETIMEOFFSET(4) "12:23:45" SQL_C_BINARY "076C00010001000C0017002D0000000000000000"
endif
if not cond1 and not bigendian
select DATE "1923-12-02" SQL_C_BINARY "83070C000200"
select TIME "12:23:45" SQL_C_BINARY "0C0017002D00000000000000"
select TIME(4) "12:23:45.765" SQL_C_BINARY "0C0017002D00000040F9982D"
select DATETIME2 "2011-08-10 12:23:45" SQL_C_BINARY "DB0708000A000C0017002D0000000000"
select DATETIME2(4) "12:23:45" SQL_C_BINARY "6C07010001000C0017002D0000000000"
select DATETIMEOFFSET "12:23:45 -08:30" SQL_C_BINARY "6C07010001000C0017002D0000000000F8FFE2FF"
select DATETIMEOFFSET(4) "12:23:45" SQL_C_BINARY "6C07010001000C0017002D000000000000000000"
endif
# new date/time types embedded into variant types
tds_version_cmp tds71p >= 7.1
if tds71p
select SQL_VARIANT "CAST('2014-04-15 20:23:56' AS DATETIME2)" SQL_C_CHAR "27 2014-04-15 20:23:56.0000000"
select SQL_VARIANT "CAST('2014-04-15 20:23:56' AS DATETIME2(3))" SQL_C_CHAR "23 2014-04-15 20:23:56.000"
select SQL_VARIANT "CAST('2014-04-15 20:23:56' AS TIME)" SQL_C_CHAR "16 20:23:56.0000000"
select SQL_VARIANT "CAST('2014-04-15 20:23:56' AS TIME(3))" SQL_C_CHAR "12 20:23:56.000"
select SQL_VARIANT "CAST('2014-04-15' AS DATE)" SQL_C_CHAR "10 2014-04-15"
endif
endif
# mssql 2008 hierarchyid
select HIERARCHYID "/" SQL_C_BINARY ""
select HIERARCHYID "/1.2/" SQL_C_BINARY "6340"
endif
# test sybase date/time types
if not msdb
# FIXME sure ?? with date and time always ??
sql_cond cond1 "SELECT CAST('1923-12-02' AS DATE) WHERE 0=1"
if cond1
select DATE "1923-12-02" SQL_C_CHAR "10 1923-12-02"
select TIME "12:23:45" SQL_C_CHAR "12 12:23:45.000"
select TIME "12:23:45.983" SQL_C_CHAR "12 12:23:45.983"
# TODO binary
endif
endif
# check for Sybase big(date)time
sql_cond cond1 "SELECT CAST('2015-10-10' AS BIGDATETIME) WHERE 0=1"
if cond1
if bigendian
select BIGTIME "2004-02-24 15:16:17" SQL_C_BINARY "000F00100011000000000000"
select BIGDATETIME "2004-02-24 15:16:17" SQL_C_BINARY "07D400020018000F0010001100000000"
else
select BIGTIME "2004-02-24 15:16:17" SQL_C_BINARY "0F0010001100000000000000"
select BIGDATETIME "2004-02-24 15:16:17" SQL_C_BINARY "D407020018000F001000110000000000"
endif
select BIGTIME "21:51:38.73973" SQL_C_CHAR "15 21:51:38.739730"
select BIGDATETIME "1998-02-17 21:54:38.73973" SQL_C_CHAR "26 1998-02-17 21:54:38.739730"
select BIGTIME "2006-06-12 22:37:21.372" SQL_C_TIMESTAMP "1900-01-01 22:37:21.372"
select BIGDATETIME "2006-06-09 11:22:44" SQL_C_TIMESTAMP "2006-06-09 11:22:44.000"
endif
select VARCHAR(20) " 15.0000 " SQL_C_NUMERIC "38 0 1 0F"
select VARCHAR(20) " 15.0000 " SQL_C_LONG "15"
if bigint
select VARCHAR(20) " 13.0000 " SQL_C_SBIGINT "13"
endif
# mssql 2008 give a warning for truncation (01004)
if freetds
select VARCHAR(20) " 15.1245 " SQL_C_NUMERIC "38 0 1 0F"
select VARCHAR(20) " 15.1234 " SQL_C_LONG "15"
if bigint
select VARCHAR(20) " 12.98 " SQL_C_SBIGINT "12"
endif
endif