1df0bddaeSdrh# 2005 June 25 2487e262fSdrh# 3487e262fSdrh# The author disclaims copyright to this source code. In place of 4487e262fSdrh# a legal notice, here is a blessing: 5487e262fSdrh# 6487e262fSdrh# May you do good and not evil. 7487e262fSdrh# May you find forgiveness for yourself and forgive others. 8487e262fSdrh# May you share freely, never taking more than you give. 9487e262fSdrh# 10487e262fSdrh#*********************************************************************** 11487e262fSdrh# This file implements regression tests for SQLite library. The 12487e262fSdrh# focus of this file is testing the CAST operator. 13487e262fSdrh# 141735fa88Sdrh# $Id: cast.test,v 1.10 2008/11/06 15:33:04 drh Exp $ 15487e262fSdrh 16487e262fSdrhset testdir [file dirname $argv0] 17487e262fSdrhsource $testdir/tester.tcl 18487e262fSdrh 19487e262fSdrh# Only run these tests if the build includes the CAST operator 20487e262fSdrhifcapable !cast { 21487e262fSdrh finish_test 22487e262fSdrh return 23487e262fSdrh} 24487e262fSdrh 25487e262fSdrh# Tests for the CAST( AS blob), CAST( AS text) and CAST( AS numeric) built-ins 26487e262fSdrh# 27ff890793Sdanielk1977ifcapable bloblit { 28487e262fSdrh do_test cast-1.1 { 29487e262fSdrh execsql {SELECT x'616263'} 30487e262fSdrh } abc 31487e262fSdrh do_test cast-1.2 { 32487e262fSdrh execsql {SELECT typeof(x'616263')} 33487e262fSdrh } blob 34487e262fSdrh do_test cast-1.3 { 35487e262fSdrh execsql {SELECT CAST(x'616263' AS text)} 36487e262fSdrh } abc 37487e262fSdrh do_test cast-1.4 { 38487e262fSdrh execsql {SELECT typeof(CAST(x'616263' AS text))} 39487e262fSdrh } text 40487e262fSdrh do_test cast-1.5 { 41487e262fSdrh execsql {SELECT CAST(x'616263' AS numeric)} 428df447f0Sdrh } 0 43487e262fSdrh do_test cast-1.6 { 44487e262fSdrh execsql {SELECT typeof(CAST(x'616263' AS numeric))} 458df447f0Sdrh } integer 46487e262fSdrh do_test cast-1.7 { 47487e262fSdrh execsql {SELECT CAST(x'616263' AS blob)} 48487e262fSdrh } abc 49487e262fSdrh do_test cast-1.8 { 50487e262fSdrh execsql {SELECT typeof(CAST(x'616263' AS blob))} 51487e262fSdrh } blob 52487e262fSdrh do_test cast-1.9 { 53487e262fSdrh execsql {SELECT CAST(x'616263' AS integer)} 54487e262fSdrh } 0 55487e262fSdrh do_test cast-1.10 { 56487e262fSdrh execsql {SELECT typeof(CAST(x'616263' AS integer))} 57487e262fSdrh } integer 58ff890793Sdanielk1977} 59487e262fSdrhdo_test cast-1.11 { 60487e262fSdrh execsql {SELECT null} 61487e262fSdrh} {{}} 62487e262fSdrhdo_test cast-1.12 { 63487e262fSdrh execsql {SELECT typeof(NULL)} 64487e262fSdrh} null 65487e262fSdrhdo_test cast-1.13 { 66487e262fSdrh execsql {SELECT CAST(NULL AS text)} 67487e262fSdrh} {{}} 68487e262fSdrhdo_test cast-1.14 { 69487e262fSdrh execsql {SELECT typeof(CAST(NULL AS text))} 70487e262fSdrh} null 71487e262fSdrhdo_test cast-1.15 { 72487e262fSdrh execsql {SELECT CAST(NULL AS numeric)} 73487e262fSdrh} {{}} 74487e262fSdrhdo_test cast-1.16 { 75487e262fSdrh execsql {SELECT typeof(CAST(NULL AS numeric))} 76487e262fSdrh} null 77487e262fSdrhdo_test cast-1.17 { 78487e262fSdrh execsql {SELECT CAST(NULL AS blob)} 79487e262fSdrh} {{}} 80487e262fSdrhdo_test cast-1.18 { 81487e262fSdrh execsql {SELECT typeof(CAST(NULL AS blob))} 82487e262fSdrh} null 83487e262fSdrhdo_test cast-1.19 { 84487e262fSdrh execsql {SELECT CAST(NULL AS integer)} 85487e262fSdrh} {{}} 86487e262fSdrhdo_test cast-1.20 { 87487e262fSdrh execsql {SELECT typeof(CAST(NULL AS integer))} 88487e262fSdrh} null 89487e262fSdrhdo_test cast-1.21 { 90487e262fSdrh execsql {SELECT 123} 91487e262fSdrh} {123} 92487e262fSdrhdo_test cast-1.22 { 93487e262fSdrh execsql {SELECT typeof(123)} 94487e262fSdrh} integer 95487e262fSdrhdo_test cast-1.23 { 96487e262fSdrh execsql {SELECT CAST(123 AS text)} 97487e262fSdrh} {123} 98487e262fSdrhdo_test cast-1.24 { 99487e262fSdrh execsql {SELECT typeof(CAST(123 AS text))} 100487e262fSdrh} text 101487e262fSdrhdo_test cast-1.25 { 102487e262fSdrh execsql {SELECT CAST(123 AS numeric)} 103487e262fSdrh} 123 104487e262fSdrhdo_test cast-1.26 { 105487e262fSdrh execsql {SELECT typeof(CAST(123 AS numeric))} 106487e262fSdrh} integer 107487e262fSdrhdo_test cast-1.27 { 108487e262fSdrh execsql {SELECT CAST(123 AS blob)} 109487e262fSdrh} {123} 110487e262fSdrhdo_test cast-1.28 { 111487e262fSdrh execsql {SELECT typeof(CAST(123 AS blob))} 112487e262fSdrh} blob 113487e262fSdrhdo_test cast-1.29 { 114487e262fSdrh execsql {SELECT CAST(123 AS integer)} 115487e262fSdrh} {123} 116487e262fSdrhdo_test cast-1.30 { 117487e262fSdrh execsql {SELECT typeof(CAST(123 AS integer))} 118487e262fSdrh} integer 119487e262fSdrhdo_test cast-1.31 { 120487e262fSdrh execsql {SELECT 123.456} 121487e262fSdrh} {123.456} 122487e262fSdrhdo_test cast-1.32 { 123487e262fSdrh execsql {SELECT typeof(123.456)} 124487e262fSdrh} real 125487e262fSdrhdo_test cast-1.33 { 126487e262fSdrh execsql {SELECT CAST(123.456 AS text)} 127487e262fSdrh} {123.456} 128487e262fSdrhdo_test cast-1.34 { 129487e262fSdrh execsql {SELECT typeof(CAST(123.456 AS text))} 130487e262fSdrh} text 131487e262fSdrhdo_test cast-1.35 { 132487e262fSdrh execsql {SELECT CAST(123.456 AS numeric)} 133487e262fSdrh} 123.456 134487e262fSdrhdo_test cast-1.36 { 135487e262fSdrh execsql {SELECT typeof(CAST(123.456 AS numeric))} 136487e262fSdrh} real 137487e262fSdrhdo_test cast-1.37 { 138487e262fSdrh execsql {SELECT CAST(123.456 AS blob)} 139487e262fSdrh} {123.456} 140487e262fSdrhdo_test cast-1.38 { 141487e262fSdrh execsql {SELECT typeof(CAST(123.456 AS blob))} 142487e262fSdrh} blob 143487e262fSdrhdo_test cast-1.39 { 144487e262fSdrh execsql {SELECT CAST(123.456 AS integer)} 145487e262fSdrh} {123} 146487e262fSdrhdo_test cast-1.38 { 147487e262fSdrh execsql {SELECT typeof(CAST(123.456 AS integer))} 148487e262fSdrh} integer 149487e262fSdrhdo_test cast-1.41 { 150487e262fSdrh execsql {SELECT '123abc'} 151487e262fSdrh} {123abc} 152487e262fSdrhdo_test cast-1.42 { 153487e262fSdrh execsql {SELECT typeof('123abc')} 154487e262fSdrh} text 155487e262fSdrhdo_test cast-1.43 { 156487e262fSdrh execsql {SELECT CAST('123abc' AS text)} 157487e262fSdrh} {123abc} 158487e262fSdrhdo_test cast-1.44 { 159487e262fSdrh execsql {SELECT typeof(CAST('123abc' AS text))} 160487e262fSdrh} text 161487e262fSdrhdo_test cast-1.45 { 162487e262fSdrh execsql {SELECT CAST('123abc' AS numeric)} 1638df447f0Sdrh} 123 164487e262fSdrhdo_test cast-1.46 { 165487e262fSdrh execsql {SELECT typeof(CAST('123abc' AS numeric))} 1668df447f0Sdrh} integer 167487e262fSdrhdo_test cast-1.47 { 168487e262fSdrh execsql {SELECT CAST('123abc' AS blob)} 169487e262fSdrh} {123abc} 170487e262fSdrhdo_test cast-1.48 { 171487e262fSdrh execsql {SELECT typeof(CAST('123abc' AS blob))} 172487e262fSdrh} blob 173487e262fSdrhdo_test cast-1.49 { 174487e262fSdrh execsql {SELECT CAST('123abc' AS integer)} 175487e262fSdrh} 123 176487e262fSdrhdo_test cast-1.50 { 177487e262fSdrh execsql {SELECT typeof(CAST('123abc' AS integer))} 178487e262fSdrh} integer 179487e262fSdrhdo_test cast-1.51 { 180487e262fSdrh execsql {SELECT CAST('123.5abc' AS numeric)} 181487e262fSdrh} 123.5 182487e262fSdrhdo_test cast-1.53 { 183487e262fSdrh execsql {SELECT CAST('123.5abc' AS integer)} 184487e262fSdrh} 123 185487e262fSdrh 18613d04020Sdrhdo_test cast-1.60 { 18791fd4d46Sdrh execsql {SELECT CAST(null AS REAL)} 18891fd4d46Sdrh} {{}} 18913d04020Sdrhdo_test cast-1.61 { 19091fd4d46Sdrh execsql {SELECT typeof(CAST(null AS REAL))} 19191fd4d46Sdrh} {null} 19213d04020Sdrhdo_test cast-1.62 { 19391fd4d46Sdrh execsql {SELECT CAST(1 AS REAL)} 19491fd4d46Sdrh} {1.0} 19513d04020Sdrhdo_test cast-1.63 { 19691fd4d46Sdrh execsql {SELECT typeof(CAST(1 AS REAL))} 19791fd4d46Sdrh} {real} 19813d04020Sdrhdo_test cast-1.64 { 19991fd4d46Sdrh execsql {SELECT CAST('1' AS REAL)} 20091fd4d46Sdrh} {1.0} 20113d04020Sdrhdo_test cast-1.65 { 20291fd4d46Sdrh execsql {SELECT typeof(CAST('1' AS REAL))} 20391fd4d46Sdrh} {real} 20413d04020Sdrhdo_test cast-1.66 { 20591fd4d46Sdrh execsql {SELECT CAST('abc' AS REAL)} 20691fd4d46Sdrh} {0.0} 20713d04020Sdrhdo_test cast-1.67 { 20891fd4d46Sdrh execsql {SELECT typeof(CAST('abc' AS REAL))} 20991fd4d46Sdrh} {real} 21013d04020Sdrhdo_test cast-1.68 { 21191fd4d46Sdrh execsql {SELECT CAST(x'31' AS REAL)} 21291fd4d46Sdrh} {1.0} 21313d04020Sdrhdo_test cast-1.69 { 21491fd4d46Sdrh execsql {SELECT typeof(CAST(x'31' AS REAL))} 21591fd4d46Sdrh} {real} 21691fd4d46Sdrh 21791fd4d46Sdrh 21857bacb22Sdrh# Ticket #1662. Ignore leading spaces in numbers when casting. 21957bacb22Sdrh# 22057bacb22Sdrhdo_test cast-2.1 { 22157bacb22Sdrh execsql {SELECT CAST(' 123' AS integer)} 22257bacb22Sdrh} 123 22357bacb22Sdrhdo_test cast-2.2 { 22457bacb22Sdrh execsql {SELECT CAST(' -123.456' AS real)} 22557bacb22Sdrh} -123.456 22657bacb22Sdrh 227cd7b46dbSdrh# ticket #2364. Use full percision integers if possible when casting 228cd7b46dbSdrh# to numeric. Do not fallback to real (and the corresponding 48-bit 229cd7b46dbSdrh# mantissa) unless absolutely necessary. 230cd7b46dbSdrh# 231cd7b46dbSdrhdo_test cast-3.1 { 232cd7b46dbSdrh execsql {SELECT CAST(9223372036854774800 AS integer)} 233cd7b46dbSdrh} 9223372036854774800 234cd7b46dbSdrhdo_test cast-3.2 { 235cd7b46dbSdrh execsql {SELECT CAST(9223372036854774800 AS numeric)} 236cd7b46dbSdrh} 9223372036854774800 23733f5379cSdando_realnum_test cast-3.3 { 238cd7b46dbSdrh execsql {SELECT CAST(9223372036854774800 AS real)} 239cd7b46dbSdrh} 9.22337203685477e+18 240cd7b46dbSdrhdo_test cast-3.4 { 241cd7b46dbSdrh execsql {SELECT CAST(CAST(9223372036854774800 AS real) AS integer)} 242cd7b46dbSdrh} 9223372036854774784 243cd7b46dbSdrhdo_test cast-3.5 { 244cd7b46dbSdrh execsql {SELECT CAST(-9223372036854774800 AS integer)} 245cd7b46dbSdrh} -9223372036854774800 246cd7b46dbSdrhdo_test cast-3.6 { 247cd7b46dbSdrh execsql {SELECT CAST(-9223372036854774800 AS numeric)} 248cd7b46dbSdrh} -9223372036854774800 24933f5379cSdando_realnum_test cast-3.7 { 250cd7b46dbSdrh execsql {SELECT CAST(-9223372036854774800 AS real)} 251cd7b46dbSdrh} -9.22337203685477e+18 252cd7b46dbSdrhdo_test cast-3.8 { 253cd7b46dbSdrh execsql {SELECT CAST(CAST(-9223372036854774800 AS real) AS integer)} 254cd7b46dbSdrh} -9223372036854774784 255cd7b46dbSdrhdo_test cast-3.11 { 256cd7b46dbSdrh execsql {SELECT CAST('9223372036854774800' AS integer)} 257cd7b46dbSdrh} 9223372036854774800 258cd7b46dbSdrhdo_test cast-3.12 { 259cd7b46dbSdrh execsql {SELECT CAST('9223372036854774800' AS numeric)} 260cd7b46dbSdrh} 9223372036854774800 26133f5379cSdando_realnum_test cast-3.13 { 262cd7b46dbSdrh execsql {SELECT CAST('9223372036854774800' AS real)} 263cd7b46dbSdrh} 9.22337203685477e+18 264a7fba4b0Sdrhifcapable long_double { 265cd7b46dbSdrh do_test cast-3.14 { 266cd7b46dbSdrh execsql {SELECT CAST(CAST('9223372036854774800' AS real) AS integer)} 267cd7b46dbSdrh } 9223372036854774784 268a7fba4b0Sdrh} 269cd7b46dbSdrhdo_test cast-3.15 { 270cd7b46dbSdrh execsql {SELECT CAST('-9223372036854774800' AS integer)} 271cd7b46dbSdrh} -9223372036854774800 272cd7b46dbSdrhdo_test cast-3.16 { 273cd7b46dbSdrh execsql {SELECT CAST('-9223372036854774800' AS numeric)} 274cd7b46dbSdrh} -9223372036854774800 27533f5379cSdando_realnum_test cast-3.17 { 276cd7b46dbSdrh execsql {SELECT CAST('-9223372036854774800' AS real)} 277cd7b46dbSdrh} -9.22337203685477e+18 278a7fba4b0Sdrhifcapable long_double { 279cd7b46dbSdrh do_test cast-3.18 { 280cd7b46dbSdrh execsql {SELECT CAST(CAST('-9223372036854774800' AS real) AS integer)} 281cd7b46dbSdrh } -9223372036854774784 282a7fba4b0Sdrh} 283cd7b46dbSdrhif {[db eval {PRAGMA encoding}]=="UTF-8"} { 284cd7b46dbSdrh do_test cast-3.21 { 285cd7b46dbSdrh execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS integer)} 286cd7b46dbSdrh } 9223372036854774800 287cd7b46dbSdrh do_test cast-3.22 { 288cd7b46dbSdrh execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS numeric)} 289cd7b46dbSdrh } 9223372036854774800 29033f5379cSdan do_realnum_test cast-3.23 { 291cd7b46dbSdrh execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS real)} 292cd7b46dbSdrh } 9.22337203685477e+18 293a7fba4b0Sdrh ifcapable long_double { 294cd7b46dbSdrh do_test cast-3.24 { 295a7fba4b0Sdrh execsql { 296a7fba4b0Sdrh SELECT CAST(CAST(x'39323233333732303336383534373734383030' AS real) 297a7fba4b0Sdrh AS integer) 298a7fba4b0Sdrh } 299cd7b46dbSdrh } 9223372036854774784 300cd7b46dbSdrh } 301a7fba4b0Sdrh} 30213d04020Sdrhdo_test cast-3.31 { 303cd7b46dbSdrh execsql {SELECT CAST(NULL AS numeric)} 304cd7b46dbSdrh} {{}} 305cd7b46dbSdrh 3065b159dc3Sdanielk1977# Test to see if it is possible to trick SQLite into reading past 3075b159dc3Sdanielk1977# the end of a blob when converting it to a number. 3085b159dc3Sdanielk1977do_test cast-3.32.1 { 3095b159dc3Sdanielk1977 set blob "1234567890" 3105b159dc3Sdanielk1977 set DB [sqlite3_connection_pointer db] 3115b159dc3Sdanielk1977 set ::STMT [sqlite3_prepare $DB {SELECT CAST(? AS real)} -1 TAIL] 3125b159dc3Sdanielk1977 sqlite3_bind_blob -static $::STMT 1 $blob 5 3135b159dc3Sdanielk1977 sqlite3_step $::STMT 3145b159dc3Sdanielk1977} {SQLITE_ROW} 3155b159dc3Sdanielk1977do_test cast-3.32.2 { 3165b159dc3Sdanielk1977 sqlite3_column_int $::STMT 0 3175b159dc3Sdanielk1977} {12345} 3185b159dc3Sdanielk1977do_test cast-3.32.3 { 3195b159dc3Sdanielk1977 sqlite3_finalize $::STMT 3205b159dc3Sdanielk1977} {SQLITE_OK} 32157bacb22Sdrh 3221735fa88Sdrh 3231735fa88Sdrhdo_test cast-4.1 { 3241735fa88Sdrh db eval { 3251735fa88Sdrh CREATE TABLE t1(a); 3261735fa88Sdrh INSERT INTO t1 VALUES('abc'); 3271735fa88Sdrh SELECT a, CAST(a AS integer) FROM t1; 3281735fa88Sdrh } 3291735fa88Sdrh} {abc 0} 3301735fa88Sdrhdo_test cast-4.2 { 3311735fa88Sdrh db eval { 3321735fa88Sdrh SELECT CAST(a AS integer), a FROM t1; 3331735fa88Sdrh } 3341735fa88Sdrh} {0 abc} 3351735fa88Sdrhdo_test cast-4.3 { 3361735fa88Sdrh db eval { 3371735fa88Sdrh SELECT a, CAST(a AS integer), a FROM t1; 3381735fa88Sdrh } 3391735fa88Sdrh} {abc 0 abc} 3401735fa88Sdrhdo_test cast-4.4 { 3411735fa88Sdrh db eval { 3421735fa88Sdrh SELECT CAST(a AS integer), a, CAST(a AS real), a FROM t1; 3431735fa88Sdrh } 3441735fa88Sdrh} {0 abc 0.0 abc} 3451735fa88Sdrh 3464eb57cefSdrh# Added 2018-01-26 3474eb57cefSdrh# 3484eb57cefSdrh# EVIDENCE-OF: R-48741-32454 If the prefix integer is greater than 3494eb57cefSdrh# +9223372036854775807 then the result of the cast is exactly 3504eb57cefSdrh# +9223372036854775807. 3514eb57cefSdrhdo_execsql_test cast-5.1 { 3524eb57cefSdrh SELECT CAST('9223372036854775808' AS integer); 3534eb57cefSdrh SELECT CAST(' +000009223372036854775808' AS integer); 3544eb57cefSdrh SELECT CAST('12345678901234567890123' AS INTEGER); 3554eb57cefSdrh} {9223372036854775807 9223372036854775807 9223372036854775807} 3564eb57cefSdrh 3574eb57cefSdrh# EVIDENCE-OF: R-06028-16857 Similarly, if the prefix integer is less 3584eb57cefSdrh# than -9223372036854775808 then the result of the cast is exactly 3594eb57cefSdrh# -9223372036854775808. 3604eb57cefSdrhdo_execsql_test cast-5.2 { 3614eb57cefSdrh SELECT CAST('-9223372036854775808' AS integer); 3624eb57cefSdrh SELECT CAST('-9223372036854775809' AS integer); 3634eb57cefSdrh SELECT CAST('-12345678901234567890123' AS INTEGER); 3644eb57cefSdrh} {-9223372036854775808 -9223372036854775808 -9223372036854775808} 3654eb57cefSdrh 3664eb57cefSdrh# EVIDENCE-OF: R-33990-33527 When casting to INTEGER, if the text looks 3674eb57cefSdrh# like a floating point value with an exponent, the exponent will be 3684eb57cefSdrh# ignored because it is no part of the integer prefix. 3694eb57cefSdrh# EVIDENCE-OF: R-24225-46995 For example, "(CAST '123e+5' AS INTEGER)" 3704eb57cefSdrh# results in 123, not in 12300000. 37113d04020Sdrhdo_execsql_test cast-5.3 { 3724eb57cefSdrh SELECT CAST('123e+5' AS INTEGER); 3734eb57cefSdrh SELECT CAST('123e+5' AS NUMERIC); 374c285ded2Sdrh SELECT CAST('123e+5' AS REAL); 375c285ded2Sdrh} {123 12300000 12300000.0} 3764eb57cefSdrh 3774eb57cefSdrh 3784eb57cefSdrh# The following does not have anything to do with the CAST operator, 3794eb57cefSdrh# but it does deal with affinity transformations. 3804eb57cefSdrh# 38113d04020Sdrhdo_execsql_test cast-6.1 { 3824eb57cefSdrh DROP TABLE IF EXISTS t1; 3834eb57cefSdrh CREATE TABLE t1(a NUMERIC); 3844eb57cefSdrh INSERT INTO t1 VALUES 3854eb57cefSdrh ('9000000000000000001'), 3864eb57cefSdrh ('9000000000000000001 '), 3874eb57cefSdrh (' 9000000000000000001'), 3884eb57cefSdrh (' 9000000000000000001 '); 3894eb57cefSdrh SELECT * FROM t1; 3904eb57cefSdrh} {9000000000000000001 9000000000000000001 9000000000000000001 9000000000000000001} 3914eb57cefSdrh 3929a278229Sdrh# 2019-06-07 3939a278229Sdrh# https://www.sqlite.org/src/info/4c2d7639f076aa7c 39413d04020Sdrhdo_execsql_test cast-7.1 { 3959a278229Sdrh SELECT CAST('-' AS NUMERIC); 3969a278229Sdrh} {0} 39713d04020Sdrhdo_execsql_test cast-7.2 { 3989a278229Sdrh SELECT CAST('-0' AS NUMERIC); 3999a278229Sdrh} {0} 40013d04020Sdrhdo_execsql_test cast-7.3 { 4019a278229Sdrh SELECT CAST('+' AS NUMERIC); 4029a278229Sdrh} {0} 40313d04020Sdrhdo_execsql_test cast-7.4 { 4049a278229Sdrh SELECT CAST('/' AS NUMERIC); 4059a278229Sdrh} {0} 4069a278229Sdrh 4079a278229Sdrh# 2019-06-07 4089a278229Sdrh# https://www.sqlite.org/src/info/e8bedb2a184001bb 40913d04020Sdrhdo_execsql_test cast-7.10 { 4109a278229Sdrh SELECT '' - 2851427734582196970; 4119a278229Sdrh} {-2851427734582196970} 41213d04020Sdrhdo_execsql_test cast-7.11 { 4139a278229Sdrh SELECT 0 - 2851427734582196970; 4149a278229Sdrh} {-2851427734582196970} 41513d04020Sdrhdo_execsql_test cast-7.12 { 4169a278229Sdrh SELECT '' - 1; 4179a278229Sdrh} {-1} 4189a278229Sdrh 419c285ded2Sdrh# 2019-06-10 420c285ded2Sdrh# https://www.sqlite.org/src/info/dd6bffbfb6e61db9 421c285ded2Sdrh# 4220ce974d1Sdrh# EVIDENCE-OF: R-55084-10555 Casting a TEXT or BLOB value into NUMERIC 4230ce974d1Sdrh# yields either an INTEGER or a REAL result. 424c285ded2Sdrh# 425c285ded2Sdrhdo_execsql_test cast-7.20 { 426c285ded2Sdrh DROP TABLE IF EXISTS t0; 427c285ded2Sdrh CREATE TABLE t0 (c0 TEXT); 428c285ded2Sdrh INSERT INTO t0(c0) VALUES ('1.0'); 429c285ded2Sdrh SELECT CAST(c0 AS NUMERIC) FROM t0; 430c285ded2Sdrh} {1} 431c285ded2Sdrh 432378a7d35Sdrh# 2019-06-10 433378a7d35Sdrh# https://sqlite.org/src/info/27de823723a41df45af3 434378a7d35Sdrh# 435378a7d35Sdrhdo_execsql_test cast-7.30 { 436378a7d35Sdrh SELECT -'.'; 437378a7d35Sdrh} 0 438378a7d35Sdrhdo_execsql_test cast-7.31 { 439378a7d35Sdrh SELECT '.'+0; 440378a7d35Sdrh} 0 441378a7d35Sdrhdo_execsql_test cast-7.32 { 442378a7d35Sdrh SELECT CAST('.' AS numeric); 443378a7d35Sdrh} 0 444378a7d35Sdrhdo_execsql_test cast-7.33 { 445378a7d35Sdrh SELECT -CAST('.' AS numeric); 446378a7d35Sdrh} 0 447378a7d35Sdrh 44813d04020Sdrh# 2019-06-12 44913d04020Sdrh# https://www.sqlite.org/src/info/674385aeba91c774 45013d04020Sdrh# 45113d04020Sdrhdo_execsql_test cast-7.40 { 45213d04020Sdrh SELECT CAST('-0.0' AS numeric); 45313d04020Sdrh} 0 45413d04020Sdrhdo_execsql_test cast-7.41 { 45513d04020Sdrh SELECT CAST('0.0' AS numeric); 45613d04020Sdrh} 0 45713d04020Sdrhdo_execsql_test cast-7.42 { 45813d04020Sdrh SELECT CAST('+0.0' AS numeric); 45913d04020Sdrh} 0 46013d04020Sdrhdo_execsql_test cast-7.43 { 46113d04020Sdrh SELECT CAST('-1.0' AS numeric); 46213d04020Sdrh} -1 46313d04020Sdrh 4649f3e6fadSdanifcapable utf16 { 4659f3e6fadSdan reset_db 4669f3e6fadSdan execsql { PRAGMA encoding='utf16' } 4679f3e6fadSdan 4689f3e6fadSdan do_execsql_test cast-8.1 { 4699f3e6fadSdan SELECT quote(X'310032003300')==quote(substr(X'310032003300', 1)) 4709f3e6fadSdan } 1 4719f3e6fadSdan do_execsql_test cast-8.2 { 4729f3e6fadSdan SELECT CAST(X'310032003300' AS TEXT) 4739f3e6fadSdan ==CAST(substr(X'310032003300', 1) AS TEXT) 4749f3e6fadSdan } 1 4759f3e6fadSdan} 47613d04020Sdrh 477a344ad47Sdanreset_db 478a344ad47Sdando_execsql_test cast-9.0 { 479a344ad47Sdan CREATE TABLE t0(c0); 480a344ad47Sdan INSERT INTO t0(c0) VALUES (0); 481a344ad47Sdan CREATE VIEW v1(c0, c1) AS 482a344ad47Sdan SELECT CAST(0.0 AS NUMERIC), COUNT(*) OVER () FROM t0; 483a344ad47Sdan SELECT v1.c0 FROM v1, t0 WHERE v1.c0=0; 484*5fdb9a35Sdrh} {0} 485a344ad47Sdan 486378a7d35Sdrh 487487e262fSdrhfinish_test 488