/ Hex Artifact Content
Login

Artifact 166951664a0b0a2e0f8fb5997a152490c6363932:


0000: 23 20 32 30 30 35 20 4a 75 6e 65 20 32 35 0a 23  # 2005 June 25.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65  ****.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 65   this file is te
01c0: 73 74 69 6e 67 20 74 68 65 20 43 41 53 54 20 6f  sting the CAST o
01d0: 70 65 72 61 74 6f 72 2e 0a 23 0a 23 20 24 49 64  perator..#.# $Id
01e0: 3a 20 63 61 73 74 2e 74 65 73 74 2c 76 20 31 2e  : cast.test,v 1.
01f0: 31 30 20 32 30 30 38 2f 31 31 2f 30 36 20 31 35  10 2008/11/06 15
0200: 3a 33 33 3a 30 34 20 64 72 68 20 45 78 70 20 24  :33:04 drh Exp $
0210: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0220: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0230: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0240: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0250: 23 20 4f 6e 6c 79 20 72 75 6e 20 74 68 65 73 65  # Only run these
0260: 20 74 65 73 74 73 20 69 66 20 74 68 65 20 62 75   tests if the bu
0270: 69 6c 64 20 69 6e 63 6c 75 64 65 73 20 74 68 65  ild includes the
0280: 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72 0a 69   CAST operator.i
0290: 66 63 61 70 61 62 6c 65 20 21 63 61 73 74 20 7b  fcapable !cast {
02a0: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
02b0: 20 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 54 65 73   return.}..# Tes
02c0: 74 73 20 66 6f 72 20 74 68 65 20 43 41 53 54 28  ts for the CAST(
02d0: 20 41 53 20 62 6c 6f 62 29 2c 20 43 41 53 54 28   AS blob), CAST(
02e0: 20 41 53 20 74 65 78 74 29 20 61 6e 64 20 43 41   AS text) and CA
02f0: 53 54 28 20 41 53 20 6e 75 6d 65 72 69 63 29 20  ST( AS numeric) 
0300: 62 75 69 6c 74 2d 69 6e 73 0a 23 0a 69 66 63 61  built-ins.#.ifca
0310: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a  pable bloblit {.
0320: 20 20 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31    do_test cast-1
0330: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
0340: 20 7b 53 45 4c 45 43 54 20 78 27 36 31 36 32 36   {SELECT x'61626
0350: 33 27 7d 0a 20 20 7d 20 61 62 63 0a 20 20 64 6f  3'}.  } abc.  do
0360: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 32 20 7b  _test cast-1.2 {
0370: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
0380: 4c 45 43 54 20 74 79 70 65 6f 66 28 78 27 36 31  LECT typeof(x'61
0390: 36 32 36 33 27 29 7d 0a 20 20 7d 20 62 6c 6f 62  6263')}.  } blob
03a0: 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  .  do_test cast-
03b0: 31 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  1.3 {.    execsq
03c0: 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 78  l {SELECT CAST(x
03d0: 27 36 31 36 32 36 33 27 20 41 53 20 74 65 78 74  '616263' AS text
03e0: 29 7d 0a 20 20 7d 20 61 62 63 0a 20 20 64 6f 5f  )}.  } abc.  do_
03f0: 74 65 73 74 20 63 61 73 74 2d 31 2e 34 20 7b 0a  test cast-1.4 {.
0400: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
0410: 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54 28  ECT typeof(CAST(
0420: 78 27 36 31 36 32 36 33 27 20 41 53 20 74 65 78  x'616263' AS tex
0430: 74 29 29 7d 0a 20 20 7d 20 74 65 78 74 0a 20 20  t))}.  } text.  
0440: 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 35  do_test cast-1.5
0450: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0460: 53 45 4c 45 43 54 20 43 41 53 54 28 78 27 36 31  SELECT CAST(x'61
0470: 36 32 36 33 27 20 41 53 20 6e 75 6d 65 72 69 63  6263' AS numeric
0480: 29 7d 0a 20 20 7d 20 30 0a 20 20 64 6f 5f 74 65  )}.  } 0.  do_te
0490: 73 74 20 63 61 73 74 2d 31 2e 36 20 7b 0a 20 20  st cast-1.6 {.  
04a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
04b0: 54 20 74 79 70 65 6f 66 28 43 41 53 54 28 78 27  T typeof(CAST(x'
04c0: 36 31 36 32 36 33 27 20 41 53 20 6e 75 6d 65 72  616263' AS numer
04d0: 69 63 29 29 7d 0a 20 20 7d 20 69 6e 74 65 67 65  ic))}.  } intege
04e0: 72 0a 20 20 64 6f 5f 74 65 73 74 20 63 61 73 74  r.  do_test cast
04f0: 2d 31 2e 37 20 7b 0a 20 20 20 20 65 78 65 63 73  -1.7 {.    execs
0500: 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28  ql {SELECT CAST(
0510: 78 27 36 31 36 32 36 33 27 20 41 53 20 62 6c 6f  x'616263' AS blo
0520: 62 29 7d 0a 20 20 7d 20 61 62 63 0a 20 20 64 6f  b)}.  } abc.  do
0530: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 38 20 7b  _test cast-1.8 {
0540: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
0550: 4c 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54  LECT typeof(CAST
0560: 28 78 27 36 31 36 32 36 33 27 20 41 53 20 62 6c  (x'616263' AS bl
0570: 6f 62 29 29 7d 0a 20 20 7d 20 62 6c 6f 62 0a 20  ob))}.  } blob. 
0580: 20 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e   do_test cast-1.
0590: 39 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  9 {.    execsql 
05a0: 7b 53 45 4c 45 43 54 20 43 41 53 54 28 78 27 36  {SELECT CAST(x'6
05b0: 31 36 32 36 33 27 20 41 53 20 69 6e 74 65 67 65  16263' AS intege
05c0: 72 29 7d 0a 20 20 7d 20 30 0a 20 20 64 6f 5f 74  r)}.  } 0.  do_t
05d0: 65 73 74 20 63 61 73 74 2d 31 2e 31 30 20 7b 0a  est cast-1.10 {.
05e0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c      execsql {SEL
05f0: 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54 28  ECT typeof(CAST(
0600: 78 27 36 31 36 32 36 33 27 20 41 53 20 69 6e 74  x'616263' AS int
0610: 65 67 65 72 29 29 7d 0a 20 20 7d 20 69 6e 74 65  eger))}.  } inte
0620: 67 65 72 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61  ger.}.do_test ca
0630: 73 74 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63  st-1.11 {.  exec
0640: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 75 6c 6c  sql {SELECT null
0650: 7d 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f 74 65 73 74  }.} {{}}.do_test
0660: 20 63 61 73 74 2d 31 2e 31 32 20 7b 0a 20 20 65   cast-1.12 {.  e
0670: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
0680: 79 70 65 6f 66 28 4e 55 4c 4c 29 7d 0a 7d 20 6e  ypeof(NULL)}.} n
0690: 75 6c 6c 0a 64 6f 5f 74 65 73 74 20 63 61 73 74  ull.do_test cast
06a0: 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -1.13 {.  execsq
06b0: 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 4e  l {SELECT CAST(N
06c0: 55 4c 4c 20 41 53 20 74 65 78 74 29 7d 0a 7d 20  ULL AS text)}.} 
06d0: 7b 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73  {{}}.do_test cas
06e0: 74 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65 63 73  t-1.14 {.  execs
06f0: 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f  ql {SELECT typeo
0700: 66 28 43 41 53 54 28 4e 55 4c 4c 20 41 53 20 74  f(CAST(NULL AS t
0710: 65 78 74 29 29 7d 0a 7d 20 6e 75 6c 6c 0a 64 6f  ext))}.} null.do
0720: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 31 35 20  _test cast-1.15 
0730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0740: 45 43 54 20 43 41 53 54 28 4e 55 4c 4c 20 41 53  ECT CAST(NULL AS
0750: 20 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 7b 7b 7d   numeric)}.} {{}
0760: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31  }.do_test cast-1
0770: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
0780: 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43  {SELECT typeof(C
0790: 41 53 54 28 4e 55 4c 4c 20 41 53 20 6e 75 6d 65  AST(NULL AS nume
07a0: 72 69 63 29 29 7d 0a 7d 20 6e 75 6c 6c 0a 64 6f  ric))}.} null.do
07b0: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 31 37 20  _test cast-1.17 
07c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
07d0: 45 43 54 20 43 41 53 54 28 4e 55 4c 4c 20 41 53  ECT CAST(NULL AS
07e0: 20 62 6c 6f 62 29 7d 0a 7d 20 7b 7b 7d 7d 0a 64   blob)}.} {{}}.d
07f0: 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 31 38  o_test cast-1.18
0800: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0810: 4c 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54  LECT typeof(CAST
0820: 28 4e 55 4c 4c 20 41 53 20 62 6c 6f 62 29 29 7d  (NULL AS blob))}
0830: 0a 7d 20 6e 75 6c 6c 0a 64 6f 5f 74 65 73 74 20  .} null.do_test 
0840: 63 61 73 74 2d 31 2e 31 39 20 7b 0a 20 20 65 78  cast-1.19 {.  ex
0850: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41  ecsql {SELECT CA
0860: 53 54 28 4e 55 4c 4c 20 41 53 20 69 6e 74 65 67  ST(NULL AS integ
0870: 65 72 29 7d 0a 7d 20 7b 7b 7d 7d 0a 64 6f 5f 74  er)}.} {{}}.do_t
0880: 65 73 74 20 63 61 73 74 2d 31 2e 32 30 20 7b 0a  est cast-1.20 {.
0890: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
08a0: 54 20 74 79 70 65 6f 66 28 43 41 53 54 28 4e 55  T typeof(CAST(NU
08b0: 4c 4c 20 41 53 20 69 6e 74 65 67 65 72 29 29 7d  LL AS integer))}
08c0: 0a 7d 20 6e 75 6c 6c 0a 64 6f 5f 74 65 73 74 20  .} null.do_test 
08d0: 63 61 73 74 2d 31 2e 32 31 20 7b 0a 20 20 65 78  cast-1.21 {.  ex
08e0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 31 32  ecsql {SELECT 12
08f0: 33 7d 0a 7d 20 7b 31 32 33 7d 0a 64 6f 5f 74 65  3}.} {123}.do_te
0900: 73 74 20 63 61 73 74 2d 31 2e 32 32 20 7b 0a 20  st cast-1.22 {. 
0910: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0920: 20 74 79 70 65 6f 66 28 31 32 33 29 7d 0a 7d 20   typeof(123)}.} 
0930: 69 6e 74 65 67 65 72 0a 64 6f 5f 74 65 73 74 20  integer.do_test 
0940: 63 61 73 74 2d 31 2e 32 33 20 7b 0a 20 20 65 78  cast-1.23 {.  ex
0950: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41  ecsql {SELECT CA
0960: 53 54 28 31 32 33 20 41 53 20 74 65 78 74 29 7d  ST(123 AS text)}
0970: 0a 7d 20 7b 31 32 33 7d 0a 64 6f 5f 74 65 73 74  .} {123}.do_test
0980: 20 63 61 73 74 2d 31 2e 32 34 20 7b 0a 20 20 65   cast-1.24 {.  e
0990: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
09a0: 79 70 65 6f 66 28 43 41 53 54 28 31 32 33 20 41  ypeof(CAST(123 A
09b0: 53 20 74 65 78 74 29 29 7d 0a 7d 20 74 65 78 74  S text))}.} text
09c0: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e  .do_test cast-1.
09d0: 32 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  25 {.  execsql {
09e0: 53 45 4c 45 43 54 20 43 41 53 54 28 31 32 33 20  SELECT CAST(123 
09f0: 41 53 20 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 31  AS numeric)}.} 1
0a00: 32 33 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  23.do_test cast-
0a10: 31 2e 32 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.26 {.  execsql
0a20: 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28   {SELECT typeof(
0a30: 43 41 53 54 28 31 32 33 20 41 53 20 6e 75 6d 65  CAST(123 AS nume
0a40: 72 69 63 29 29 7d 0a 7d 20 69 6e 74 65 67 65 72  ric))}.} integer
0a50: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e  .do_test cast-1.
0a60: 32 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  27 {.  execsql {
0a70: 53 45 4c 45 43 54 20 43 41 53 54 28 31 32 33 20  SELECT CAST(123 
0a80: 41 53 20 62 6c 6f 62 29 7d 0a 7d 20 7b 31 32 33  AS blob)}.} {123
0a90: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31  }.do_test cast-1
0aa0: 2e 32 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .28 {.  execsql 
0ab0: 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43  {SELECT typeof(C
0ac0: 41 53 54 28 31 32 33 20 41 53 20 62 6c 6f 62 29  AST(123 AS blob)
0ad0: 29 7d 0a 7d 20 62 6c 6f 62 0a 64 6f 5f 74 65 73  )}.} blob.do_tes
0ae0: 74 20 63 61 73 74 2d 31 2e 32 39 20 7b 0a 20 20  t cast-1.29 {.  
0af0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0b00: 43 41 53 54 28 31 32 33 20 41 53 20 69 6e 74 65  CAST(123 AS inte
0b10: 67 65 72 29 7d 0a 7d 20 7b 31 32 33 7d 0a 64 6f  ger)}.} {123}.do
0b20: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 33 30 20  _test cast-1.30 
0b30: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0b40: 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54 28  ECT typeof(CAST(
0b50: 31 32 33 20 41 53 20 69 6e 74 65 67 65 72 29 29  123 AS integer))
0b60: 7d 0a 7d 20 69 6e 74 65 67 65 72 0a 64 6f 5f 74  }.} integer.do_t
0b70: 65 73 74 20 63 61 73 74 2d 31 2e 33 31 20 7b 0a  est cast-1.31 {.
0b80: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0b90: 54 20 31 32 33 2e 34 35 36 7d 0a 7d 20 7b 31 32  T 123.456}.} {12
0ba0: 33 2e 34 35 36 7d 0a 64 6f 5f 74 65 73 74 20 63  3.456}.do_test c
0bb0: 61 73 74 2d 31 2e 33 32 20 7b 0a 20 20 65 78 65  ast-1.32 {.  exe
0bc0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70  csql {SELECT typ
0bd0: 65 6f 66 28 31 32 33 2e 34 35 36 29 7d 0a 7d 20  eof(123.456)}.} 
0be0: 72 65 61 6c 0a 64 6f 5f 74 65 73 74 20 63 61 73  real.do_test cas
0bf0: 74 2d 31 2e 33 33 20 7b 0a 20 20 65 78 65 63 73  t-1.33 {.  execs
0c00: 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28  ql {SELECT CAST(
0c10: 31 32 33 2e 34 35 36 20 41 53 20 74 65 78 74 29  123.456 AS text)
0c20: 7d 0a 7d 20 7b 31 32 33 2e 34 35 36 7d 0a 64 6f  }.} {123.456}.do
0c30: 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 33 34 20  _test cast-1.34 
0c40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0c50: 45 43 54 20 74 79 70 65 6f 66 28 43 41 53 54 28  ECT typeof(CAST(
0c60: 31 32 33 2e 34 35 36 20 41 53 20 74 65 78 74 29  123.456 AS text)
0c70: 29 7d 0a 7d 20 74 65 78 74 0a 64 6f 5f 74 65 73  )}.} text.do_tes
0c80: 74 20 63 61 73 74 2d 31 2e 33 35 20 7b 0a 20 20  t cast-1.35 {.  
0c90: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0ca0: 43 41 53 54 28 31 32 33 2e 34 35 36 20 41 53 20  CAST(123.456 AS 
0cb0: 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 31 32 33 2e  numeric)}.} 123.
0cc0: 34 35 36 0a 64 6f 5f 74 65 73 74 20 63 61 73 74  456.do_test cast
0cd0: 2d 31 2e 33 36 20 7b 0a 20 20 65 78 65 63 73 71  -1.36 {.  execsq
0ce0: 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66  l {SELECT typeof
0cf0: 28 43 41 53 54 28 31 32 33 2e 34 35 36 20 41 53  (CAST(123.456 AS
0d00: 20 6e 75 6d 65 72 69 63 29 29 7d 0a 7d 20 72 65   numeric))}.} re
0d10: 61 6c 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  al.do_test cast-
0d20: 31 2e 33 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.37 {.  execsql
0d30: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 31 32   {SELECT CAST(12
0d40: 33 2e 34 35 36 20 41 53 20 62 6c 6f 62 29 7d 0a  3.456 AS blob)}.
0d50: 7d 20 7b 31 32 33 2e 34 35 36 7d 0a 64 6f 5f 74  } {123.456}.do_t
0d60: 65 73 74 20 63 61 73 74 2d 31 2e 33 38 20 7b 0a  est cast-1.38 {.
0d70: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0d80: 54 20 74 79 70 65 6f 66 28 43 41 53 54 28 31 32  T typeof(CAST(12
0d90: 33 2e 34 35 36 20 41 53 20 62 6c 6f 62 29 29 7d  3.456 AS blob))}
0da0: 0a 7d 20 62 6c 6f 62 0a 64 6f 5f 74 65 73 74 20  .} blob.do_test 
0db0: 63 61 73 74 2d 31 2e 33 39 20 7b 0a 20 20 65 78  cast-1.39 {.  ex
0dc0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41  ecsql {SELECT CA
0dd0: 53 54 28 31 32 33 2e 34 35 36 20 41 53 20 69 6e  ST(123.456 AS in
0de0: 74 65 67 65 72 29 7d 0a 7d 20 7b 31 32 33 7d 0a  teger)}.} {123}.
0df0: 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31 2e 33  do_test cast-1.3
0e00: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  8 {.  execsql {S
0e10: 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43 41 53  ELECT typeof(CAS
0e20: 54 28 31 32 33 2e 34 35 36 20 41 53 20 69 6e 74  T(123.456 AS int
0e30: 65 67 65 72 29 29 7d 0a 7d 20 69 6e 74 65 67 65  eger))}.} intege
0e40: 72 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31  r.do_test cast-1
0e50: 2e 34 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .41 {.  execsql 
0e60: 7b 53 45 4c 45 43 54 20 27 31 32 33 61 62 63 27  {SELECT '123abc'
0e70: 7d 0a 7d 20 7b 31 32 33 61 62 63 7d 0a 64 6f 5f  }.} {123abc}.do_
0e80: 74 65 73 74 20 63 61 73 74 2d 31 2e 34 32 20 7b  test cast-1.42 {
0e90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0ea0: 43 54 20 74 79 70 65 6f 66 28 27 31 32 33 61 62  CT typeof('123ab
0eb0: 63 27 29 7d 0a 7d 20 74 65 78 74 0a 64 6f 5f 74  c')}.} text.do_t
0ec0: 65 73 74 20 63 61 73 74 2d 31 2e 34 33 20 7b 0a  est cast-1.43 {.
0ed0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0ee0: 54 20 43 41 53 54 28 27 31 32 33 61 62 63 27 20  T CAST('123abc' 
0ef0: 41 53 20 74 65 78 74 29 7d 0a 7d 20 7b 31 32 33  AS text)}.} {123
0f00: 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73  abc}.do_test cas
0f10: 74 2d 31 2e 34 34 20 7b 0a 20 20 65 78 65 63 73  t-1.44 {.  execs
0f20: 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f  ql {SELECT typeo
0f30: 66 28 43 41 53 54 28 27 31 32 33 61 62 63 27 20  f(CAST('123abc' 
0f40: 41 53 20 74 65 78 74 29 29 7d 0a 7d 20 74 65 78  AS text))}.} tex
0f50: 74 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31  t.do_test cast-1
0f60: 2e 34 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .45 {.  execsql 
0f70: 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27 31 32  {SELECT CAST('12
0f80: 33 61 62 63 27 20 41 53 20 6e 75 6d 65 72 69 63  3abc' AS numeric
0f90: 29 7d 0a 7d 20 31 32 33 0a 64 6f 5f 74 65 73 74  )}.} 123.do_test
0fa0: 20 63 61 73 74 2d 31 2e 34 36 20 7b 0a 20 20 65   cast-1.46 {.  e
0fb0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
0fc0: 79 70 65 6f 66 28 43 41 53 54 28 27 31 32 33 61  ypeof(CAST('123a
0fd0: 62 63 27 20 41 53 20 6e 75 6d 65 72 69 63 29 29  bc' AS numeric))
0fe0: 7d 0a 7d 20 69 6e 74 65 67 65 72 0a 64 6f 5f 74  }.} integer.do_t
0ff0: 65 73 74 20 63 61 73 74 2d 31 2e 34 37 20 7b 0a  est cast-1.47 {.
1000: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1010: 54 20 43 41 53 54 28 27 31 32 33 61 62 63 27 20  T CAST('123abc' 
1020: 41 53 20 62 6c 6f 62 29 7d 0a 7d 20 7b 31 32 33  AS blob)}.} {123
1030: 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73  abc}.do_test cas
1040: 74 2d 31 2e 34 38 20 7b 0a 20 20 65 78 65 63 73  t-1.48 {.  execs
1050: 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f  ql {SELECT typeo
1060: 66 28 43 41 53 54 28 27 31 32 33 61 62 63 27 20  f(CAST('123abc' 
1070: 41 53 20 62 6c 6f 62 29 29 7d 0a 7d 20 62 6c 6f  AS blob))}.} blo
1080: 62 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 31  b.do_test cast-1
1090: 2e 34 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .49 {.  execsql 
10a0: 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27 31 32  {SELECT CAST('12
10b0: 33 61 62 63 27 20 41 53 20 69 6e 74 65 67 65 72  3abc' AS integer
10c0: 29 7d 0a 7d 20 31 32 33 0a 64 6f 5f 74 65 73 74  )}.} 123.do_test
10d0: 20 63 61 73 74 2d 31 2e 35 30 20 7b 0a 20 20 65   cast-1.50 {.  e
10e0: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74  xecsql {SELECT t
10f0: 79 70 65 6f 66 28 43 41 53 54 28 27 31 32 33 61  ypeof(CAST('123a
1100: 62 63 27 20 41 53 20 69 6e 74 65 67 65 72 29 29  bc' AS integer))
1110: 7d 0a 7d 20 69 6e 74 65 67 65 72 0a 64 6f 5f 74  }.} integer.do_t
1120: 65 73 74 20 63 61 73 74 2d 31 2e 35 31 20 7b 0a  est cast-1.51 {.
1130: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
1140: 54 20 43 41 53 54 28 27 31 32 33 2e 35 61 62 63  T CAST('123.5abc
1150: 27 20 41 53 20 6e 75 6d 65 72 69 63 29 7d 0a 7d  ' AS numeric)}.}
1160: 20 31 32 33 2e 35 0a 64 6f 5f 74 65 73 74 20 63   123.5.do_test c
1170: 61 73 74 2d 31 2e 35 33 20 7b 0a 20 20 65 78 65  ast-1.53 {.  exe
1180: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53  csql {SELECT CAS
1190: 54 28 27 31 32 33 2e 35 61 62 63 27 20 41 53 20  T('123.5abc' AS 
11a0: 69 6e 74 65 67 65 72 29 7d 0a 7d 20 31 32 33 0a  integer)}.} 123.
11b0: 0a 64 6f 5f 74 65 73 74 20 63 61 73 65 2d 31 2e  .do_test case-1.
11c0: 36 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  60 {.  execsql {
11d0: 53 45 4c 45 43 54 20 43 41 53 54 28 6e 75 6c 6c  SELECT CAST(null
11e0: 20 41 53 20 52 45 41 4c 29 7d 0a 7d 20 7b 7b 7d   AS REAL)}.} {{}
11f0: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73 65 2d 31  }.do_test case-1
1200: 2e 36 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .61 {.  execsql 
1210: 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43  {SELECT typeof(C
1220: 41 53 54 28 6e 75 6c 6c 20 41 53 20 52 45 41 4c  AST(null AS REAL
1230: 29 29 7d 0a 7d 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f  ))}.} {null}.do_
1240: 74 65 73 74 20 63 61 73 65 2d 31 2e 36 32 20 7b  test case-1.62 {
1250: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1260: 43 54 20 43 41 53 54 28 31 20 41 53 20 52 45 41  CT CAST(1 AS REA
1270: 4c 29 7d 0a 7d 20 7b 31 2e 30 7d 0a 64 6f 5f 74  L)}.} {1.0}.do_t
1280: 65 73 74 20 63 61 73 65 2d 31 2e 36 33 20 7b 0a  est case-1.63 {.
1290: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
12a0: 54 20 74 79 70 65 6f 66 28 43 41 53 54 28 31 20  T typeof(CAST(1 
12b0: 41 53 20 52 45 41 4c 29 29 7d 0a 7d 20 7b 72 65  AS REAL))}.} {re
12c0: 61 6c 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73 65  al}.do_test case
12d0: 2d 31 2e 36 34 20 7b 0a 20 20 65 78 65 63 73 71  -1.64 {.  execsq
12e0: 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27  l {SELECT CAST('
12f0: 31 27 20 41 53 20 52 45 41 4c 29 7d 0a 7d 20 7b  1' AS REAL)}.} {
1300: 31 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73  1.0}.do_test cas
1310: 65 2d 31 2e 36 35 20 7b 0a 20 20 65 78 65 63 73  e-1.65 {.  execs
1320: 71 6c 20 7b 53 45 4c 45 43 54 20 74 79 70 65 6f  ql {SELECT typeo
1330: 66 28 43 41 53 54 28 27 31 27 20 41 53 20 52 45  f(CAST('1' AS RE
1340: 41 4c 29 29 7d 0a 7d 20 7b 72 65 61 6c 7d 0a 64  AL))}.} {real}.d
1350: 6f 5f 74 65 73 74 20 63 61 73 65 2d 31 2e 36 36  o_test case-1.66
1360: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1370: 4c 45 43 54 20 43 41 53 54 28 27 61 62 63 27 20  LECT CAST('abc' 
1380: 41 53 20 52 45 41 4c 29 7d 0a 7d 20 7b 30 2e 30  AS REAL)}.} {0.0
1390: 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73 65 2d 31  }.do_test case-1
13a0: 2e 36 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .67 {.  execsql 
13b0: 7b 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43  {SELECT typeof(C
13c0: 41 53 54 28 27 61 62 63 27 20 41 53 20 52 45 41  AST('abc' AS REA
13d0: 4c 29 29 7d 0a 7d 20 7b 72 65 61 6c 7d 0a 64 6f  L))}.} {real}.do
13e0: 5f 74 65 73 74 20 63 61 73 65 2d 31 2e 36 38 20  _test case-1.68 
13f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
1400: 45 43 54 20 43 41 53 54 28 78 27 33 31 27 20 41  ECT CAST(x'31' A
1410: 53 20 52 45 41 4c 29 7d 0a 7d 20 7b 31 2e 30 7d  S REAL)}.} {1.0}
1420: 0a 64 6f 5f 74 65 73 74 20 63 61 73 65 2d 31 2e  .do_test case-1.
1430: 36 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  69 {.  execsql {
1440: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 43 41  SELECT typeof(CA
1450: 53 54 28 78 27 33 31 27 20 41 53 20 52 45 41 4c  ST(x'31' AS REAL
1460: 29 29 7d 0a 7d 20 7b 72 65 61 6c 7d 0a 0a 0a 23  ))}.} {real}...#
1470: 20 54 69 63 6b 65 74 20 23 31 36 36 32 2e 20 20   Ticket #1662.  
1480: 49 67 6e 6f 72 65 20 6c 65 61 64 69 6e 67 20 73  Ignore leading s
1490: 70 61 63 65 73 20 69 6e 20 6e 75 6d 62 65 72 73  paces in numbers
14a0: 20 77 68 65 6e 20 63 61 73 74 69 6e 67 2e 0a 23   when casting..#
14b0: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 32 2e  .do_test cast-2.
14c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
14d0: 45 4c 45 43 54 20 43 41 53 54 28 27 20 20 20 31  ELECT CAST('   1
14e0: 32 33 27 20 41 53 20 69 6e 74 65 67 65 72 29 7d  23' AS integer)}
14f0: 0a 7d 20 31 32 33 0a 64 6f 5f 74 65 73 74 20 63  .} 123.do_test c
1500: 61 73 74 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63  ast-2.2 {.  exec
1510: 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54  sql {SELECT CAST
1520: 28 27 20 20 20 2d 31 32 33 2e 34 35 36 27 20 41  ('   -123.456' A
1530: 53 20 72 65 61 6c 29 7d 0a 7d 20 2d 31 32 33 2e  S real)}.} -123.
1540: 34 35 36 0a 0a 23 20 74 69 63 6b 65 74 20 23 32  456..# ticket #2
1550: 33 36 34 2e 20 20 55 73 65 20 66 75 6c 6c 20 70  364.  Use full p
1560: 65 72 63 69 73 69 6f 6e 20 69 6e 74 65 67 65 72  ercision integer
1570: 73 20 69 66 20 70 6f 73 73 69 62 6c 65 20 77 68  s if possible wh
1580: 65 6e 20 63 61 73 74 69 6e 67 0a 23 20 74 6f 20  en casting.# to 
1590: 6e 75 6d 65 72 69 63 2e 20 20 44 6f 20 6e 6f 74  numeric.  Do not
15a0: 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 72 65 61   fallback to rea
15b0: 6c 20 28 61 6e 64 20 74 68 65 20 63 6f 72 72 65  l (and the corre
15c0: 73 70 6f 6e 64 69 6e 67 20 34 38 2d 62 69 74 0a  sponding 48-bit.
15d0: 23 20 6d 61 6e 74 69 73 73 61 29 20 75 6e 6c 65  # mantissa) unle
15e0: 73 73 20 61 62 73 6f 6c 75 74 65 6c 79 20 6e 65  ss absolutely ne
15f0: 63 65 73 73 61 72 79 2e 0a 23 0a 64 6f 5f 74 65  cessary..#.do_te
1600: 73 74 20 63 61 73 74 2d 33 2e 31 20 7b 0a 20 20  st cast-3.1 {.  
1610: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
1620: 43 41 53 54 28 39 32 32 33 33 37 32 30 33 36 38  CAST(92233720368
1630: 35 34 37 37 34 38 30 30 20 41 53 20 69 6e 74 65  54774800 AS inte
1640: 67 65 72 29 7d 0a 7d 20 39 32 32 33 33 37 32 30  ger)}.} 92233720
1650: 33 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f 74  36854774800.do_t
1660: 65 73 74 20 63 61 73 74 2d 33 2e 32 20 7b 0a 20  est cast-3.2 {. 
1670: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1680: 20 43 41 53 54 28 39 32 32 33 33 37 32 30 33 36   CAST(9223372036
1690: 38 35 34 37 37 34 38 30 30 20 41 53 20 6e 75 6d  854774800 AS num
16a0: 65 72 69 63 29 7d 0a 7d 20 39 32 32 33 33 37 32  eric)}.} 9223372
16b0: 30 33 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f  036854774800.do_
16c0: 74 65 73 74 20 63 61 73 74 2d 33 2e 33 20 7b 0a  test cast-3.3 {.
16d0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
16e0: 54 20 43 41 53 54 28 39 32 32 33 33 37 32 30 33  T CAST(922337203
16f0: 36 38 35 34 37 37 34 38 30 30 20 41 53 20 72 65  6854774800 AS re
1700: 61 6c 29 7d 0a 7d 20 39 2e 32 32 33 33 37 32 30  al)}.} 9.2233720
1710: 33 36 38 35 34 37 37 65 2b 31 38 0a 64 6f 5f 74  3685477e+18.do_t
1720: 65 73 74 20 63 61 73 74 2d 33 2e 34 20 7b 0a 20  est cast-3.4 {. 
1730: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1740: 20 43 41 53 54 28 43 41 53 54 28 39 32 32 33 33   CAST(CAST(92233
1750: 37 32 30 33 36 38 35 34 37 37 34 38 30 30 20 41  72036854774800 A
1760: 53 20 72 65 61 6c 29 20 41 53 20 69 6e 74 65 67  S real) AS integ
1770: 65 72 29 7d 0a 7d 20 39 32 32 33 33 37 32 30 33  er)}.} 922337203
1780: 36 38 35 34 37 37 34 37 38 34 0a 64 6f 5f 74 65  6854774784.do_te
1790: 73 74 20 63 61 73 74 2d 33 2e 35 20 7b 0a 20 20  st cast-3.5 {.  
17a0: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
17b0: 43 41 53 54 28 2d 39 32 32 33 33 37 32 30 33 36  CAST(-9223372036
17c0: 38 35 34 37 37 34 38 30 30 20 41 53 20 69 6e 74  854774800 AS int
17d0: 65 67 65 72 29 7d 0a 7d 20 2d 39 32 32 33 33 37  eger)}.} -922337
17e0: 32 30 33 36 38 35 34 37 37 34 38 30 30 0a 64 6f  2036854774800.do
17f0: 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 36 20 7b  _test cast-3.6 {
1800: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1810: 43 54 20 43 41 53 54 28 2d 39 32 32 33 33 37 32  CT CAST(-9223372
1820: 30 33 36 38 35 34 37 37 34 38 30 30 20 41 53 20  036854774800 AS 
1830: 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 2d 39 32 32  numeric)}.} -922
1840: 33 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30  3372036854774800
1850: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e  .do_test cast-3.
1860: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
1870: 45 4c 45 43 54 20 43 41 53 54 28 2d 39 32 32 33  ELECT CAST(-9223
1880: 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30 20  372036854774800 
1890: 41 53 20 72 65 61 6c 29 7d 0a 7d 20 2d 39 2e 32  AS real)}.} -9.2
18a0: 32 33 33 37 32 30 33 36 38 35 34 37 37 65 2b 31  2337203685477e+1
18b0: 38 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33  8.do_test cast-3
18c0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
18d0: 53 45 4c 45 43 54 20 43 41 53 54 28 43 41 53 54  SELECT CAST(CAST
18e0: 28 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37  (-92233720368547
18f0: 37 34 38 30 30 20 41 53 20 72 65 61 6c 29 20 41  74800 AS real) A
1900: 53 20 69 6e 74 65 67 65 72 29 7d 0a 7d 20 2d 39  S integer)}.} -9
1910: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 37  2233720368547747
1920: 38 34 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  84.do_test cast-
1930: 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.11 {.  execsql
1940: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27 39   {SELECT CAST('9
1950: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38  2233720368547748
1960: 30 30 27 20 41 53 20 69 6e 74 65 67 65 72 29 7d  00' AS integer)}
1970: 0a 7d 20 39 32 32 33 33 37 32 30 33 36 38 35 34  .} 9223372036854
1980: 37 37 34 38 30 30 0a 64 6f 5f 74 65 73 74 20 63  774800.do_test c
1990: 61 73 74 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65  ast-3.12 {.  exe
19a0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53  csql {SELECT CAS
19b0: 54 28 27 39 32 32 33 33 37 32 30 33 36 38 35 34  T('9223372036854
19c0: 37 37 34 38 30 30 27 20 41 53 20 6e 75 6d 65 72  774800' AS numer
19d0: 69 63 29 7d 0a 7d 20 39 32 32 33 33 37 32 30 33  ic)}.} 922337203
19e0: 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f 74 65  6854774800.do_te
19f0: 73 74 20 63 61 73 74 2d 33 2e 31 33 20 7b 0a 20  st cast-3.13 {. 
1a00: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1a10: 20 43 41 53 54 28 27 39 32 32 33 33 37 32 30 33   CAST('922337203
1a20: 36 38 35 34 37 37 34 38 30 30 27 20 41 53 20 72  6854774800' AS r
1a30: 65 61 6c 29 7d 0a 7d 20 39 2e 32 32 33 33 37 32  eal)}.} 9.223372
1a40: 30 33 36 38 35 34 37 37 65 2b 31 38 0a 69 66 63  03685477e+18.ifc
1a50: 61 70 61 62 6c 65 20 6c 6f 6e 67 5f 64 6f 75 62  apable long_doub
1a60: 6c 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  le {.  do_test c
1a70: 61 73 74 2d 33 2e 31 34 20 7b 0a 20 20 20 20 65  ast-3.14 {.    e
1a80: 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43  xecsql {SELECT C
1a90: 41 53 54 28 43 41 53 54 28 27 39 32 32 33 33 37  AST(CAST('922337
1aa0: 32 30 33 36 38 35 34 37 37 34 38 30 30 27 20 41  2036854774800' A
1ab0: 53 20 72 65 61 6c 29 20 41 53 20 69 6e 74 65 67  S real) AS integ
1ac0: 65 72 29 7d 0a 20 20 7d 20 39 32 32 33 33 37 32  er)}.  } 9223372
1ad0: 30 33 36 38 35 34 37 37 34 37 38 34 0a 7d 0a 64  036854774784.}.d
1ae0: 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 31 35  o_test cast-3.15
1af0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
1b00: 4c 45 43 54 20 43 41 53 54 28 27 2d 39 32 32 33  LECT CAST('-9223
1b10: 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30 27  372036854774800'
1b20: 20 41 53 20 69 6e 74 65 67 65 72 29 7d 0a 7d 20   AS integer)}.} 
1b30: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
1b40: 34 38 30 30 0a 64 6f 5f 74 65 73 74 20 63 61 73  4800.do_test cas
1b50: 74 2d 33 2e 31 36 20 7b 0a 20 20 65 78 65 63 73  t-3.16 {.  execs
1b60: 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28  ql {SELECT CAST(
1b70: 27 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37  '-92233720368547
1b80: 37 34 38 30 30 27 20 41 53 20 6e 75 6d 65 72 69  74800' AS numeri
1b90: 63 29 7d 0a 7d 20 2d 39 32 32 33 33 37 32 30 33  c)}.} -922337203
1ba0: 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f 74 65  6854774800.do_te
1bb0: 73 74 20 63 61 73 74 2d 33 2e 31 37 20 7b 0a 20  st cast-3.17 {. 
1bc0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1bd0: 20 43 41 53 54 28 27 2d 39 32 32 33 33 37 32 30   CAST('-92233720
1be0: 33 36 38 35 34 37 37 34 38 30 30 27 20 41 53 20  36854774800' AS 
1bf0: 72 65 61 6c 29 7d 0a 7d 20 2d 39 2e 32 32 33 33  real)}.} -9.2233
1c00: 37 32 30 33 36 38 35 34 37 37 65 2b 31 38 0a 69  7203685477e+18.i
1c10: 66 63 61 70 61 62 6c 65 20 6c 6f 6e 67 5f 64 6f  fcapable long_do
1c20: 75 62 6c 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  uble {.  do_test
1c30: 20 63 61 73 74 2d 33 2e 31 38 20 7b 0a 20 20 20   cast-3.18 {.   
1c40: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1c50: 20 43 41 53 54 28 43 41 53 54 28 27 2d 39 32 32   CAST(CAST('-922
1c60: 33 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30  3372036854774800
1c70: 27 20 41 53 20 72 65 61 6c 29 20 41 53 20 69 6e  ' AS real) AS in
1c80: 74 65 67 65 72 29 7d 0a 20 20 7d 20 2d 39 32 32  teger)}.  } -922
1c90: 33 33 37 32 30 33 36 38 35 34 37 37 34 37 38 34  3372036854774784
1ca0: 0a 7d 0a 69 66 20 7b 5b 64 62 20 65 76 61 6c 20  .}.if {[db eval 
1cb0: 7b 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  {PRAGMA encoding
1cc0: 7d 5d 3d 3d 22 55 54 46 2d 38 22 7d 20 7b 0a 20  }]=="UTF-8"} {. 
1cd0: 20 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e   do_test cast-3.
1ce0: 32 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  21 {.    execsql
1cf0: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 78 27   {SELECT CAST(x'
1d00: 33 39 33 32 33 32 33 33 33 33 33 37 33 32 33 30  3932323333373230
1d10: 33 33 33 36 33 38 33 35 33 34 33 37 33 37 33 34  3336383534373734
1d20: 33 38 33 30 33 30 27 20 41 53 20 69 6e 74 65 67  383030' AS integ
1d30: 65 72 29 7d 0a 20 20 7d 20 39 32 32 33 33 37 32  er)}.  } 9223372
1d40: 30 33 36 38 35 34 37 37 34 38 30 30 0a 20 20 64  036854774800.  d
1d50: 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 32 32  o_test cast-3.22
1d60: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1d70: 53 45 4c 45 43 54 20 43 41 53 54 28 78 27 33 39  SELECT CAST(x'39
1d80: 33 32 33 32 33 33 33 33 33 37 33 32 33 30 33 33  3232333337323033
1d90: 33 36 33 38 33 35 33 34 33 37 33 37 33 34 33 38  3638353437373438
1da0: 33 30 33 30 27 20 41 53 20 6e 75 6d 65 72 69 63  3030' AS numeric
1db0: 29 7d 0a 20 20 7d 20 39 32 32 33 33 37 32 30 33  )}.  } 922337203
1dc0: 36 38 35 34 37 37 34 38 30 30 0a 20 20 64 6f 5f  6854774800.  do_
1dd0: 74 65 73 74 20 63 61 73 74 2d 33 2e 32 33 20 7b  test cast-3.23 {
1de0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 53 45  .    execsql {SE
1df0: 4c 45 43 54 20 43 41 53 54 28 78 27 33 39 33 32  LECT CAST(x'3932
1e00: 33 32 33 33 33 33 33 37 33 32 33 30 33 33 33 36  3233333732303336
1e10: 33 38 33 35 33 34 33 37 33 37 33 34 33 38 33 30  3835343737343830
1e20: 33 30 27 20 41 53 20 72 65 61 6c 29 7d 0a 20 20  30' AS real)}.  
1e30: 7d 20 39 2e 32 32 33 33 37 32 30 33 36 38 35 34  } 9.223372036854
1e40: 37 37 65 2b 31 38 0a 20 20 69 66 63 61 70 61 62  77e+18.  ifcapab
1e50: 6c 65 20 6c 6f 6e 67 5f 64 6f 75 62 6c 65 20 7b  le long_double {
1e60: 0a 20 20 20 20 64 6f 5f 74 65 73 74 20 63 61 73  .    do_test cas
1e70: 74 2d 33 2e 32 34 20 7b 0a 20 20 20 20 20 20 65  t-3.24 {.      e
1e80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 20  xecsql {.       
1e90: 20 53 45 4c 45 43 54 20 43 41 53 54 28 43 41 53   SELECT CAST(CAS
1ea0: 54 28 78 27 33 39 33 32 33 32 33 33 33 33 33 37  T(x'393232333337
1eb0: 33 32 33 30 33 33 33 36 33 38 33 35 33 34 33 37  3230333638353437
1ec0: 33 37 33 34 33 38 33 30 33 30 27 20 41 53 20 72  3734383030' AS r
1ed0: 65 61 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20  eal).           
1ee0: 20 20 20 20 20 20 20 20 20 41 53 20 69 6e 74 65           AS inte
1ef0: 67 65 72 29 0a 20 20 20 20 20 20 7d 0a 20 20 20  ger).      }.   
1f00: 20 7d 20 39 32 32 33 33 37 32 30 33 36 38 35 34   } 9223372036854
1f10: 37 37 34 37 38 34 0a 20 20 7d 0a 7d 0a 64 6f 5f  774784.  }.}.do_
1f20: 74 65 73 74 20 63 61 73 65 2d 33 2e 33 31 20 7b  test case-3.31 {
1f30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1f40: 43 54 20 43 41 53 54 28 4e 55 4c 4c 20 41 53 20  CT CAST(NULL AS 
1f50: 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 7b 7b 7d 7d  numeric)}.} {{}}
1f60: 0a 0a 23 20 54 65 73 74 20 74 6f 20 73 65 65 20  ..# Test to see 
1f70: 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  if it is possibl
1f80: 65 20 74 6f 20 74 72 69 63 6b 20 53 51 4c 69 74  e to trick SQLit
1f90: 65 20 69 6e 74 6f 20 72 65 61 64 69 6e 67 20 70  e into reading p
1fa0: 61 73 74 20 0a 23 20 74 68 65 20 65 6e 64 20 6f  ast .# the end o
1fb0: 66 20 61 20 62 6c 6f 62 20 77 68 65 6e 20 63 6f  f a blob when co
1fc0: 6e 76 65 72 74 69 6e 67 20 69 74 20 74 6f 20 61  nverting it to a
1fd0: 20 6e 75 6d 62 65 72 2e 0a 64 6f 5f 74 65 73 74   number..do_test
1fe0: 20 63 61 73 74 2d 33 2e 33 32 2e 31 20 7b 0a 20   cast-3.32.1 {. 
1ff0: 20 73 65 74 20 62 6c 6f 62 20 22 31 32 33 34 35   set blob "12345
2000: 36 37 38 39 30 22 0a 20 20 73 65 74 20 44 42 20  67890".  set DB 
2010: 5b 73 71 6c 69 74 65 33 5f 63 6f 6e 6e 65 63 74  [sqlite3_connect
2020: 69 6f 6e 5f 70 6f 69 6e 74 65 72 20 64 62 5d 0a  ion_pointer db].
2030: 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71    set ::STMT [sq
2040: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 44  lite3_prepare $D
2050: 42 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 3f  B {SELECT CAST(?
2060: 20 41 53 20 72 65 61 6c 29 7d 20 2d 31 20 54 41   AS real)} -1 TA
2070: 49 4c 5d 0a 20 20 73 71 6c 69 74 65 33 5f 62 69  IL].  sqlite3_bi
2080: 6e 64 5f 62 6c 6f 62 20 2d 73 74 61 74 69 63 20  nd_blob -static 
2090: 24 3a 3a 53 54 4d 54 20 31 20 24 62 6c 6f 62 20  $::STMT 1 $blob 
20a0: 35 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  5.  sqlite3_step
20b0: 20 24 3a 3a 53 54 4d 54 0a 7d 20 7b 53 51 4c 49   $::STMT.} {SQLI
20c0: 54 45 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20  TE_ROW}.do_test 
20d0: 63 61 73 74 2d 33 2e 33 32 2e 32 20 7b 0a 20 20  cast-3.32.2 {.  
20e0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
20f0: 6e 74 20 24 3a 3a 53 54 4d 54 20 30 0a 7d 20 7b  nt $::STMT 0.} {
2100: 31 32 33 34 35 7d 0a 64 6f 5f 74 65 73 74 20 63  12345}.do_test c
2110: 61 73 74 2d 33 2e 33 32 2e 33 20 7b 0a 20 20 73  ast-3.32.3 {.  s
2120: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
2130: 24 3a 3a 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  $::STMT.} {SQLIT
2140: 45 5f 4f 4b 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20  E_OK}...do_test 
2150: 63 61 73 74 2d 34 2e 31 20 7b 0a 20 20 64 62 20  cast-4.1 {.  db 
2160: 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  eval {.    CREAT
2170: 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b 0a 20  E TABLE t1(a);. 
2180: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
2190: 31 20 56 41 4c 55 45 53 28 27 61 62 63 27 29 3b  1 VALUES('abc');
21a0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 43  .    SELECT a, C
21b0: 41 53 54 28 61 20 41 53 20 69 6e 74 65 67 65 72  AST(a AS integer
21c0: 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  ) FROM t1;.  }.}
21d0: 20 7b 61 62 63 20 30 7d 0a 64 6f 5f 74 65 73 74   {abc 0}.do_test
21e0: 20 63 61 73 74 2d 34 2e 32 20 7b 0a 20 20 64 62   cast-4.2 {.  db
21f0: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
2200: 43 54 20 43 41 53 54 28 61 20 41 53 20 69 6e 74  CT CAST(a AS int
2210: 65 67 65 72 29 2c 20 61 20 46 52 4f 4d 20 74 31  eger), a FROM t1
2220: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 62 63 7d 0a  ;.  }.} {0 abc}.
2230: 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 34 2e 33  do_test cast-4.3
2240: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
2250: 20 20 20 53 45 4c 45 43 54 20 61 2c 20 43 41 53     SELECT a, CAS
2260: 54 28 61 20 41 53 20 69 6e 74 65 67 65 72 29 2c  T(a AS integer),
2270: 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   a FROM t1;.  }.
2280: 7d 20 7b 61 62 63 20 30 20 61 62 63 7d 0a 64 6f  } {abc 0 abc}.do
2290: 5f 74 65 73 74 20 63 61 73 74 2d 34 2e 34 20 7b  _test cast-4.4 {
22a0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
22b0: 20 53 45 4c 45 43 54 20 43 41 53 54 28 61 20 41   SELECT CAST(a A
22c0: 53 20 69 6e 74 65 67 65 72 29 2c 20 61 2c 20 43  S integer), a, C
22d0: 41 53 54 28 61 20 41 53 20 72 65 61 6c 29 2c 20  AST(a AS real), 
22e0: 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  a FROM t1;.  }.}
22f0: 20 7b 30 20 61 62 63 20 30 2e 30 20 61 62 63 7d   {0 abc 0.0 abc}
2300: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.