Annotation of embedaddon/sqlite3/test/cast.test, revision 1.1
1.1 ! misho 1: # 2005 June 25
! 2: #
! 3: # The author disclaims copyright to this source code. In place of
! 4: # a legal notice, here is a blessing:
! 5: #
! 6: # May you do good and not evil.
! 7: # May you find forgiveness for yourself and forgive others.
! 8: # May you share freely, never taking more than you give.
! 9: #
! 10: #***********************************************************************
! 11: # This file implements regression tests for SQLite library. The
! 12: # focus of this file is testing the CAST operator.
! 13: #
! 14: # $Id: cast.test,v 1.10 2008/11/06 15:33:04 drh Exp $
! 15:
! 16: set testdir [file dirname $argv0]
! 17: source $testdir/tester.tcl
! 18:
! 19: # Only run these tests if the build includes the CAST operator
! 20: ifcapable !cast {
! 21: finish_test
! 22: return
! 23: }
! 24:
! 25: # Tests for the CAST( AS blob), CAST( AS text) and CAST( AS numeric) built-ins
! 26: #
! 27: ifcapable bloblit {
! 28: do_test cast-1.1 {
! 29: execsql {SELECT x'616263'}
! 30: } abc
! 31: do_test cast-1.2 {
! 32: execsql {SELECT typeof(x'616263')}
! 33: } blob
! 34: do_test cast-1.3 {
! 35: execsql {SELECT CAST(x'616263' AS text)}
! 36: } abc
! 37: do_test cast-1.4 {
! 38: execsql {SELECT typeof(CAST(x'616263' AS text))}
! 39: } text
! 40: do_test cast-1.5 {
! 41: execsql {SELECT CAST(x'616263' AS numeric)}
! 42: } 0
! 43: do_test cast-1.6 {
! 44: execsql {SELECT typeof(CAST(x'616263' AS numeric))}
! 45: } integer
! 46: do_test cast-1.7 {
! 47: execsql {SELECT CAST(x'616263' AS blob)}
! 48: } abc
! 49: do_test cast-1.8 {
! 50: execsql {SELECT typeof(CAST(x'616263' AS blob))}
! 51: } blob
! 52: do_test cast-1.9 {
! 53: execsql {SELECT CAST(x'616263' AS integer)}
! 54: } 0
! 55: do_test cast-1.10 {
! 56: execsql {SELECT typeof(CAST(x'616263' AS integer))}
! 57: } integer
! 58: }
! 59: do_test cast-1.11 {
! 60: execsql {SELECT null}
! 61: } {{}}
! 62: do_test cast-1.12 {
! 63: execsql {SELECT typeof(NULL)}
! 64: } null
! 65: do_test cast-1.13 {
! 66: execsql {SELECT CAST(NULL AS text)}
! 67: } {{}}
! 68: do_test cast-1.14 {
! 69: execsql {SELECT typeof(CAST(NULL AS text))}
! 70: } null
! 71: do_test cast-1.15 {
! 72: execsql {SELECT CAST(NULL AS numeric)}
! 73: } {{}}
! 74: do_test cast-1.16 {
! 75: execsql {SELECT typeof(CAST(NULL AS numeric))}
! 76: } null
! 77: do_test cast-1.17 {
! 78: execsql {SELECT CAST(NULL AS blob)}
! 79: } {{}}
! 80: do_test cast-1.18 {
! 81: execsql {SELECT typeof(CAST(NULL AS blob))}
! 82: } null
! 83: do_test cast-1.19 {
! 84: execsql {SELECT CAST(NULL AS integer)}
! 85: } {{}}
! 86: do_test cast-1.20 {
! 87: execsql {SELECT typeof(CAST(NULL AS integer))}
! 88: } null
! 89: do_test cast-1.21 {
! 90: execsql {SELECT 123}
! 91: } {123}
! 92: do_test cast-1.22 {
! 93: execsql {SELECT typeof(123)}
! 94: } integer
! 95: do_test cast-1.23 {
! 96: execsql {SELECT CAST(123 AS text)}
! 97: } {123}
! 98: do_test cast-1.24 {
! 99: execsql {SELECT typeof(CAST(123 AS text))}
! 100: } text
! 101: do_test cast-1.25 {
! 102: execsql {SELECT CAST(123 AS numeric)}
! 103: } 123
! 104: do_test cast-1.26 {
! 105: execsql {SELECT typeof(CAST(123 AS numeric))}
! 106: } integer
! 107: do_test cast-1.27 {
! 108: execsql {SELECT CAST(123 AS blob)}
! 109: } {123}
! 110: do_test cast-1.28 {
! 111: execsql {SELECT typeof(CAST(123 AS blob))}
! 112: } blob
! 113: do_test cast-1.29 {
! 114: execsql {SELECT CAST(123 AS integer)}
! 115: } {123}
! 116: do_test cast-1.30 {
! 117: execsql {SELECT typeof(CAST(123 AS integer))}
! 118: } integer
! 119: do_test cast-1.31 {
! 120: execsql {SELECT 123.456}
! 121: } {123.456}
! 122: do_test cast-1.32 {
! 123: execsql {SELECT typeof(123.456)}
! 124: } real
! 125: do_test cast-1.33 {
! 126: execsql {SELECT CAST(123.456 AS text)}
! 127: } {123.456}
! 128: do_test cast-1.34 {
! 129: execsql {SELECT typeof(CAST(123.456 AS text))}
! 130: } text
! 131: do_test cast-1.35 {
! 132: execsql {SELECT CAST(123.456 AS numeric)}
! 133: } 123.456
! 134: do_test cast-1.36 {
! 135: execsql {SELECT typeof(CAST(123.456 AS numeric))}
! 136: } real
! 137: do_test cast-1.37 {
! 138: execsql {SELECT CAST(123.456 AS blob)}
! 139: } {123.456}
! 140: do_test cast-1.38 {
! 141: execsql {SELECT typeof(CAST(123.456 AS blob))}
! 142: } blob
! 143: do_test cast-1.39 {
! 144: execsql {SELECT CAST(123.456 AS integer)}
! 145: } {123}
! 146: do_test cast-1.38 {
! 147: execsql {SELECT typeof(CAST(123.456 AS integer))}
! 148: } integer
! 149: do_test cast-1.41 {
! 150: execsql {SELECT '123abc'}
! 151: } {123abc}
! 152: do_test cast-1.42 {
! 153: execsql {SELECT typeof('123abc')}
! 154: } text
! 155: do_test cast-1.43 {
! 156: execsql {SELECT CAST('123abc' AS text)}
! 157: } {123abc}
! 158: do_test cast-1.44 {
! 159: execsql {SELECT typeof(CAST('123abc' AS text))}
! 160: } text
! 161: do_test cast-1.45 {
! 162: execsql {SELECT CAST('123abc' AS numeric)}
! 163: } 123
! 164: do_test cast-1.46 {
! 165: execsql {SELECT typeof(CAST('123abc' AS numeric))}
! 166: } integer
! 167: do_test cast-1.47 {
! 168: execsql {SELECT CAST('123abc' AS blob)}
! 169: } {123abc}
! 170: do_test cast-1.48 {
! 171: execsql {SELECT typeof(CAST('123abc' AS blob))}
! 172: } blob
! 173: do_test cast-1.49 {
! 174: execsql {SELECT CAST('123abc' AS integer)}
! 175: } 123
! 176: do_test cast-1.50 {
! 177: execsql {SELECT typeof(CAST('123abc' AS integer))}
! 178: } integer
! 179: do_test cast-1.51 {
! 180: execsql {SELECT CAST('123.5abc' AS numeric)}
! 181: } 123.5
! 182: do_test cast-1.53 {
! 183: execsql {SELECT CAST('123.5abc' AS integer)}
! 184: } 123
! 185:
! 186: do_test case-1.60 {
! 187: execsql {SELECT CAST(null AS REAL)}
! 188: } {{}}
! 189: do_test case-1.61 {
! 190: execsql {SELECT typeof(CAST(null AS REAL))}
! 191: } {null}
! 192: do_test case-1.62 {
! 193: execsql {SELECT CAST(1 AS REAL)}
! 194: } {1.0}
! 195: do_test case-1.63 {
! 196: execsql {SELECT typeof(CAST(1 AS REAL))}
! 197: } {real}
! 198: do_test case-1.64 {
! 199: execsql {SELECT CAST('1' AS REAL)}
! 200: } {1.0}
! 201: do_test case-1.65 {
! 202: execsql {SELECT typeof(CAST('1' AS REAL))}
! 203: } {real}
! 204: do_test case-1.66 {
! 205: execsql {SELECT CAST('abc' AS REAL)}
! 206: } {0.0}
! 207: do_test case-1.67 {
! 208: execsql {SELECT typeof(CAST('abc' AS REAL))}
! 209: } {real}
! 210: do_test case-1.68 {
! 211: execsql {SELECT CAST(x'31' AS REAL)}
! 212: } {1.0}
! 213: do_test case-1.69 {
! 214: execsql {SELECT typeof(CAST(x'31' AS REAL))}
! 215: } {real}
! 216:
! 217:
! 218: # Ticket #1662. Ignore leading spaces in numbers when casting.
! 219: #
! 220: do_test cast-2.1 {
! 221: execsql {SELECT CAST(' 123' AS integer)}
! 222: } 123
! 223: do_test cast-2.2 {
! 224: execsql {SELECT CAST(' -123.456' AS real)}
! 225: } -123.456
! 226:
! 227: # ticket #2364. Use full percision integers if possible when casting
! 228: # to numeric. Do not fallback to real (and the corresponding 48-bit
! 229: # mantissa) unless absolutely necessary.
! 230: #
! 231: do_test cast-3.1 {
! 232: execsql {SELECT CAST(9223372036854774800 AS integer)}
! 233: } 9223372036854774800
! 234: do_test cast-3.2 {
! 235: execsql {SELECT CAST(9223372036854774800 AS numeric)}
! 236: } 9223372036854774800
! 237: do_realnum_test cast-3.3 {
! 238: execsql {SELECT CAST(9223372036854774800 AS real)}
! 239: } 9.22337203685477e+18
! 240: do_test cast-3.4 {
! 241: execsql {SELECT CAST(CAST(9223372036854774800 AS real) AS integer)}
! 242: } 9223372036854774784
! 243: do_test cast-3.5 {
! 244: execsql {SELECT CAST(-9223372036854774800 AS integer)}
! 245: } -9223372036854774800
! 246: do_test cast-3.6 {
! 247: execsql {SELECT CAST(-9223372036854774800 AS numeric)}
! 248: } -9223372036854774800
! 249: do_realnum_test cast-3.7 {
! 250: execsql {SELECT CAST(-9223372036854774800 AS real)}
! 251: } -9.22337203685477e+18
! 252: do_test cast-3.8 {
! 253: execsql {SELECT CAST(CAST(-9223372036854774800 AS real) AS integer)}
! 254: } -9223372036854774784
! 255: do_test cast-3.11 {
! 256: execsql {SELECT CAST('9223372036854774800' AS integer)}
! 257: } 9223372036854774800
! 258: do_test cast-3.12 {
! 259: execsql {SELECT CAST('9223372036854774800' AS numeric)}
! 260: } 9223372036854774800
! 261: do_realnum_test cast-3.13 {
! 262: execsql {SELECT CAST('9223372036854774800' AS real)}
! 263: } 9.22337203685477e+18
! 264: ifcapable long_double {
! 265: do_test cast-3.14 {
! 266: execsql {SELECT CAST(CAST('9223372036854774800' AS real) AS integer)}
! 267: } 9223372036854774784
! 268: }
! 269: do_test cast-3.15 {
! 270: execsql {SELECT CAST('-9223372036854774800' AS integer)}
! 271: } -9223372036854774800
! 272: do_test cast-3.16 {
! 273: execsql {SELECT CAST('-9223372036854774800' AS numeric)}
! 274: } -9223372036854774800
! 275: do_realnum_test cast-3.17 {
! 276: execsql {SELECT CAST('-9223372036854774800' AS real)}
! 277: } -9.22337203685477e+18
! 278: ifcapable long_double {
! 279: do_test cast-3.18 {
! 280: execsql {SELECT CAST(CAST('-9223372036854774800' AS real) AS integer)}
! 281: } -9223372036854774784
! 282: }
! 283: if {[db eval {PRAGMA encoding}]=="UTF-8"} {
! 284: do_test cast-3.21 {
! 285: execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS integer)}
! 286: } 9223372036854774800
! 287: do_test cast-3.22 {
! 288: execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS numeric)}
! 289: } 9223372036854774800
! 290: do_realnum_test cast-3.23 {
! 291: execsql {SELECT CAST(x'39323233333732303336383534373734383030' AS real)}
! 292: } 9.22337203685477e+18
! 293: ifcapable long_double {
! 294: do_test cast-3.24 {
! 295: execsql {
! 296: SELECT CAST(CAST(x'39323233333732303336383534373734383030' AS real)
! 297: AS integer)
! 298: }
! 299: } 9223372036854774784
! 300: }
! 301: }
! 302: do_test case-3.31 {
! 303: execsql {SELECT CAST(NULL AS numeric)}
! 304: } {{}}
! 305:
! 306: # Test to see if it is possible to trick SQLite into reading past
! 307: # the end of a blob when converting it to a number.
! 308: do_test cast-3.32.1 {
! 309: set blob "1234567890"
! 310: set DB [sqlite3_connection_pointer db]
! 311: set ::STMT [sqlite3_prepare $DB {SELECT CAST(? AS real)} -1 TAIL]
! 312: sqlite3_bind_blob -static $::STMT 1 $blob 5
! 313: sqlite3_step $::STMT
! 314: } {SQLITE_ROW}
! 315: do_test cast-3.32.2 {
! 316: sqlite3_column_int $::STMT 0
! 317: } {12345}
! 318: do_test cast-3.32.3 {
! 319: sqlite3_finalize $::STMT
! 320: } {SQLITE_OK}
! 321:
! 322:
! 323: do_test cast-4.1 {
! 324: db eval {
! 325: CREATE TABLE t1(a);
! 326: INSERT INTO t1 VALUES('abc');
! 327: SELECT a, CAST(a AS integer) FROM t1;
! 328: }
! 329: } {abc 0}
! 330: do_test cast-4.2 {
! 331: db eval {
! 332: SELECT CAST(a AS integer), a FROM t1;
! 333: }
! 334: } {0 abc}
! 335: do_test cast-4.3 {
! 336: db eval {
! 337: SELECT a, CAST(a AS integer), a FROM t1;
! 338: }
! 339: } {abc 0 abc}
! 340: do_test cast-4.4 {
! 341: db eval {
! 342: SELECT CAST(a AS integer), a, CAST(a AS real), a FROM t1;
! 343: }
! 344: } {0 abc 0.0 abc}
! 345:
! 346: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>