/ Hex Artifact Content
Login

Artifact 4c275cbdc8202d6f9c54a3596701719868ac7dc3:


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: 72 65 61 6c 6e 75 6d 5f 74 65 73 74 20 63 61 73  realnum_test cas
16d0: 74 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  t-3.3 {.  execsq
16e0: 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 39  l {SELECT CAST(9
16f0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38  2233720368547748
1700: 30 30 20 41 53 20 72 65 61 6c 29 7d 0a 7d 20 39  00 AS real)}.} 9
1710: 2e 32 32 33 33 37 32 30 33 36 38 35 34 37 37 65  .22337203685477e
1720: 2b 31 38 0a 64 6f 5f 74 65 73 74 20 63 61 73 74  +18.do_test cast
1730: 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.4 {.  execsql
1740: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 43 41   {SELECT CAST(CA
1750: 53 54 28 39 32 32 33 33 37 32 30 33 36 38 35 34  ST(9223372036854
1760: 37 37 34 38 30 30 20 41 53 20 72 65 61 6c 29 20  774800 AS real) 
1770: 41 53 20 69 6e 74 65 67 65 72 29 7d 0a 7d 20 39  AS integer)}.} 9
1780: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 37  2233720368547747
1790: 38 34 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  84.do_test cast-
17a0: 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.5 {.  execsql 
17b0: 7b 53 45 4c 45 43 54 20 43 41 53 54 28 2d 39 32  {SELECT CAST(-92
17c0: 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38 30  2337203685477480
17d0: 30 20 41 53 20 69 6e 74 65 67 65 72 29 7d 0a 7d  0 AS integer)}.}
17e0: 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
17f0: 37 34 38 30 30 0a 64 6f 5f 74 65 73 74 20 63 61  74800.do_test ca
1800: 73 74 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73  st-3.6 {.  execs
1810: 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28  ql {SELECT CAST(
1820: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
1830: 34 38 30 30 20 41 53 20 6e 75 6d 65 72 69 63 29  4800 AS numeric)
1840: 7d 0a 7d 20 2d 39 32 32 33 33 37 32 30 33 36 38  }.} -92233720368
1850: 35 34 37 37 34 38 30 30 0a 64 6f 5f 72 65 61 6c  54774800.do_real
1860: 6e 75 6d 5f 74 65 73 74 20 63 61 73 74 2d 33 2e  num_test cast-3.
1870: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  7 {.  execsql {S
1880: 45 4c 45 43 54 20 43 41 53 54 28 2d 39 32 32 33  ELECT CAST(-9223
1890: 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30 20  372036854774800 
18a0: 41 53 20 72 65 61 6c 29 7d 0a 7d 20 2d 39 2e 32  AS real)}.} -9.2
18b0: 32 33 33 37 32 30 33 36 38 35 34 37 37 65 2b 31  2337203685477e+1
18c0: 38 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33  8.do_test cast-3
18d0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
18e0: 53 45 4c 45 43 54 20 43 41 53 54 28 43 41 53 54  SELECT CAST(CAST
18f0: 28 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37  (-92233720368547
1900: 37 34 38 30 30 20 41 53 20 72 65 61 6c 29 20 41  74800 AS real) A
1910: 53 20 69 6e 74 65 67 65 72 29 7d 0a 7d 20 2d 39  S integer)}.} -9
1920: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 37  2233720368547747
1930: 38 34 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d  84.do_test cast-
1940: 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.11 {.  execsql
1950: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27 39   {SELECT CAST('9
1960: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38  2233720368547748
1970: 30 30 27 20 41 53 20 69 6e 74 65 67 65 72 29 7d  00' AS integer)}
1980: 0a 7d 20 39 32 32 33 33 37 32 30 33 36 38 35 34  .} 9223372036854
1990: 37 37 34 38 30 30 0a 64 6f 5f 74 65 73 74 20 63  774800.do_test c
19a0: 61 73 74 2d 33 2e 31 32 20 7b 0a 20 20 65 78 65  ast-3.12 {.  exe
19b0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53  csql {SELECT CAS
19c0: 54 28 27 39 32 32 33 33 37 32 30 33 36 38 35 34  T('9223372036854
19d0: 37 37 34 38 30 30 27 20 41 53 20 6e 75 6d 65 72  774800' AS numer
19e0: 69 63 29 7d 0a 7d 20 39 32 32 33 33 37 32 30 33  ic)}.} 922337203
19f0: 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f 72 65  6854774800.do_re
1a00: 61 6c 6e 75 6d 5f 74 65 73 74 20 63 61 73 74 2d  alnum_test cast-
1a10: 33 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.13 {.  execsql
1a20: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 27 39   {SELECT CAST('9
1a30: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38  2233720368547748
1a40: 30 30 27 20 41 53 20 72 65 61 6c 29 7d 0a 7d 20  00' AS real)}.} 
1a50: 39 2e 32 32 33 33 37 32 30 33 36 38 35 34 37 37  9.22337203685477
1a60: 65 2b 31 38 0a 69 66 63 61 70 61 62 6c 65 20 6c  e+18.ifcapable l
1a70: 6f 6e 67 5f 64 6f 75 62 6c 65 20 7b 0a 20 20 64  ong_double {.  d
1a80: 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 31 34  o_test cast-3.14
1a90: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1aa0: 53 45 4c 45 43 54 20 43 41 53 54 28 43 41 53 54  SELECT CAST(CAST
1ab0: 28 27 39 32 32 33 33 37 32 30 33 36 38 35 34 37  ('92233720368547
1ac0: 37 34 38 30 30 27 20 41 53 20 72 65 61 6c 29 20  74800' AS real) 
1ad0: 41 53 20 69 6e 74 65 67 65 72 29 7d 0a 20 20 7d  AS integer)}.  }
1ae0: 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37   922337203685477
1af0: 34 37 38 34 0a 7d 0a 64 6f 5f 74 65 73 74 20 63  4784.}.do_test c
1b00: 61 73 74 2d 33 2e 31 35 20 7b 0a 20 20 65 78 65  ast-3.15 {.  exe
1b10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53  csql {SELECT CAS
1b20: 54 28 27 2d 39 32 32 33 33 37 32 30 33 36 38 35  T('-922337203685
1b30: 34 37 37 34 38 30 30 27 20 41 53 20 69 6e 74 65  4774800' AS inte
1b40: 67 65 72 29 7d 0a 7d 20 2d 39 32 32 33 33 37 32  ger)}.} -9223372
1b50: 30 33 36 38 35 34 37 37 34 38 30 30 0a 64 6f 5f  036854774800.do_
1b60: 74 65 73 74 20 63 61 73 74 2d 33 2e 31 36 20 7b  test cast-3.16 {
1b70: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
1b80: 43 54 20 43 41 53 54 28 27 2d 39 32 32 33 33 37  CT CAST('-922337
1b90: 32 30 33 36 38 35 34 37 37 34 38 30 30 27 20 41  2036854774800' A
1ba0: 53 20 6e 75 6d 65 72 69 63 29 7d 0a 7d 20 2d 39  S numeric)}.} -9
1bb0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 34 38  2233720368547748
1bc0: 30 30 0a 64 6f 5f 72 65 61 6c 6e 75 6d 5f 74 65  00.do_realnum_te
1bd0: 73 74 20 63 61 73 74 2d 33 2e 31 37 20 7b 0a 20  st cast-3.17 {. 
1be0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1bf0: 20 43 41 53 54 28 27 2d 39 32 32 33 33 37 32 30   CAST('-92233720
1c00: 33 36 38 35 34 37 37 34 38 30 30 27 20 41 53 20  36854774800' AS 
1c10: 72 65 61 6c 29 7d 0a 7d 20 2d 39 2e 32 32 33 33  real)}.} -9.2233
1c20: 37 32 30 33 36 38 35 34 37 37 65 2b 31 38 0a 69  7203685477e+18.i
1c30: 66 63 61 70 61 62 6c 65 20 6c 6f 6e 67 5f 64 6f  fcapable long_do
1c40: 75 62 6c 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74  uble {.  do_test
1c50: 20 63 61 73 74 2d 33 2e 31 38 20 7b 0a 20 20 20   cast-3.18 {.   
1c60: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
1c70: 20 43 41 53 54 28 43 41 53 54 28 27 2d 39 32 32   CAST(CAST('-922
1c80: 33 33 37 32 30 33 36 38 35 34 37 37 34 38 30 30  3372036854774800
1c90: 27 20 41 53 20 72 65 61 6c 29 20 41 53 20 69 6e  ' AS real) AS in
1ca0: 74 65 67 65 72 29 7d 0a 20 20 7d 20 2d 39 32 32  teger)}.  } -922
1cb0: 33 33 37 32 30 33 36 38 35 34 37 37 34 37 38 34  3372036854774784
1cc0: 0a 7d 0a 69 66 20 7b 5b 64 62 20 65 76 61 6c 20  .}.if {[db eval 
1cd0: 7b 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67  {PRAGMA encoding
1ce0: 7d 5d 3d 3d 22 55 54 46 2d 38 22 7d 20 7b 0a 20  }]=="UTF-8"} {. 
1cf0: 20 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e   do_test cast-3.
1d00: 32 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  21 {.    execsql
1d10: 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28 78 27   {SELECT CAST(x'
1d20: 33 39 33 32 33 32 33 33 33 33 33 37 33 32 33 30  3932323333373230
1d30: 33 33 33 36 33 38 33 35 33 34 33 37 33 37 33 34  3336383534373734
1d40: 33 38 33 30 33 30 27 20 41 53 20 69 6e 74 65 67  383030' AS integ
1d50: 65 72 29 7d 0a 20 20 7d 20 39 32 32 33 33 37 32  er)}.  } 9223372
1d60: 30 33 36 38 35 34 37 37 34 38 30 30 0a 20 20 64  036854774800.  d
1d70: 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 32 32  o_test cast-3.22
1d80: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1d90: 53 45 4c 45 43 54 20 43 41 53 54 28 78 27 33 39  SELECT CAST(x'39
1da0: 33 32 33 32 33 33 33 33 33 37 33 32 33 30 33 33  3232333337323033
1db0: 33 36 33 38 33 35 33 34 33 37 33 37 33 34 33 38  3638353437373438
1dc0: 33 30 33 30 27 20 41 53 20 6e 75 6d 65 72 69 63  3030' AS numeric
1dd0: 29 7d 0a 20 20 7d 20 39 32 32 33 33 37 32 30 33  )}.  } 922337203
1de0: 36 38 35 34 37 37 34 38 30 30 0a 20 20 64 6f 5f  6854774800.  do_
1df0: 72 65 61 6c 6e 75 6d 5f 74 65 73 74 20 63 61 73  realnum_test cas
1e00: 74 2d 33 2e 32 33 20 7b 0a 20 20 20 20 65 78 65  t-3.23 {.    exe
1e10: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53  csql {SELECT CAS
1e20: 54 28 78 27 33 39 33 32 33 32 33 33 33 33 33 37  T(x'393232333337
1e30: 33 32 33 30 33 33 33 36 33 38 33 35 33 34 33 37  3230333638353437
1e40: 33 37 33 34 33 38 33 30 33 30 27 20 41 53 20 72  3734383030' AS r
1e50: 65 61 6c 29 7d 0a 20 20 7d 20 39 2e 32 32 33 33  eal)}.  } 9.2233
1e60: 37 32 30 33 36 38 35 34 37 37 65 2b 31 38 0a 20  7203685477e+18. 
1e70: 20 69 66 63 61 70 61 62 6c 65 20 6c 6f 6e 67 5f   ifcapable long_
1e80: 64 6f 75 62 6c 65 20 7b 0a 20 20 20 20 64 6f 5f  double {.    do_
1e90: 74 65 73 74 20 63 61 73 74 2d 33 2e 32 34 20 7b  test cast-3.24 {
1ea0: 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b  .      execsql {
1eb0: 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 20  .        SELECT 
1ec0: 43 41 53 54 28 43 41 53 54 28 78 27 33 39 33 32  CAST(CAST(x'3932
1ed0: 33 32 33 33 33 33 33 37 33 32 33 30 33 33 33 36  3233333732303336
1ee0: 33 38 33 35 33 34 33 37 33 37 33 34 33 38 33 30  3835343737343830
1ef0: 33 30 27 20 41 53 20 72 65 61 6c 29 0a 20 20 20  30' AS real).   
1f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f10: 20 41 53 20 69 6e 74 65 67 65 72 29 0a 20 20 20   AS integer).   
1f20: 20 20 20 7d 0a 20 20 20 20 7d 20 39 32 32 33 33     }.    } 92233
1f30: 37 32 30 33 36 38 35 34 37 37 34 37 38 34 0a 20  72036854774784. 
1f40: 20 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 63 61 73   }.}.do_test cas
1f50: 65 2d 33 2e 33 31 20 7b 0a 20 20 65 78 65 63 73  e-3.31 {.  execs
1f60: 71 6c 20 7b 53 45 4c 45 43 54 20 43 41 53 54 28  ql {SELECT CAST(
1f70: 4e 55 4c 4c 20 41 53 20 6e 75 6d 65 72 69 63 29  NULL AS numeric)
1f80: 7d 0a 7d 20 7b 7b 7d 7d 0a 0a 23 20 54 65 73 74  }.} {{}}..# Test
1f90: 20 74 6f 20 73 65 65 20 69 66 20 69 74 20 69 73   to see if it is
1fa0: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 74 72 69   possible to tri
1fb0: 63 6b 20 53 51 4c 69 74 65 20 69 6e 74 6f 20 72  ck SQLite into r
1fc0: 65 61 64 69 6e 67 20 70 61 73 74 20 0a 23 20 74  eading past .# t
1fd0: 68 65 20 65 6e 64 20 6f 66 20 61 20 62 6c 6f 62  he end of a blob
1fe0: 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67   when converting
1ff0: 20 69 74 20 74 6f 20 61 20 6e 75 6d 62 65 72 2e   it to a number.
2000: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e  .do_test cast-3.
2010: 33 32 2e 31 20 7b 0a 20 20 73 65 74 20 62 6c 6f  32.1 {.  set blo
2020: 62 20 22 31 32 33 34 35 36 37 38 39 30 22 0a 20  b "1234567890". 
2030: 20 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33   set DB [sqlite3
2040: 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69 6e  _connection_poin
2050: 74 65 72 20 64 62 5d 0a 20 20 73 65 74 20 3a 3a  ter db].  set ::
2060: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
2070: 65 70 61 72 65 20 24 44 42 20 7b 53 45 4c 45 43  epare $DB {SELEC
2080: 54 20 43 41 53 54 28 3f 20 41 53 20 72 65 61 6c  T CAST(? AS real
2090: 29 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71  )} -1 TAIL].  sq
20a0: 6c 69 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 20  lite3_bind_blob 
20b0: 2d 73 74 61 74 69 63 20 24 3a 3a 53 54 4d 54 20  -static $::STMT 
20c0: 31 20 24 62 6c 6f 62 20 35 0a 20 20 73 71 6c 69  1 $blob 5.  sqli
20d0: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
20e0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
20f0: 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 33  do_test cast-3.3
2100: 32 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.2 {.  sqlite3_
2110: 63 6f 6c 75 6d 6e 5f 69 6e 74 20 24 3a 3a 53 54  column_int $::ST
2120: 4d 54 20 30 0a 7d 20 7b 31 32 33 34 35 7d 0a 64  MT 0.} {12345}.d
2130: 6f 5f 74 65 73 74 20 63 61 73 74 2d 33 2e 33 32  o_test cast-3.32
2140: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .3 {.  sqlite3_f
2150: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
2160: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 0a  } {SQLITE_OK}...
2170: 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 34 2e 31  do_test cast-4.1
2180: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
2190: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
21a0: 74 31 28 61 29 3b 0a 20 20 20 20 49 4e 53 45 52  t1(a);.    INSER
21b0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
21c0: 28 27 61 62 63 27 29 3b 0a 20 20 20 20 53 45 4c  ('abc');.    SEL
21d0: 45 43 54 20 61 2c 20 43 41 53 54 28 61 20 41 53  ECT a, CAST(a AS
21e0: 20 69 6e 74 65 67 65 72 29 20 46 52 4f 4d 20 74   integer) FROM t
21f0: 31 3b 0a 20 20 7d 0a 7d 20 7b 61 62 63 20 30 7d  1;.  }.} {abc 0}
2200: 0a 64 6f 5f 74 65 73 74 20 63 61 73 74 2d 34 2e  .do_test cast-4.
2210: 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  2 {.  db eval {.
2220: 20 20 20 20 53 45 4c 45 43 54 20 43 41 53 54 28      SELECT CAST(
2230: 61 20 41 53 20 69 6e 74 65 67 65 72 29 2c 20 61  a AS integer), a
2240: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20   FROM t1;.  }.} 
2250: 7b 30 20 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20  {0 abc}.do_test 
2260: 63 61 73 74 2d 34 2e 33 20 7b 0a 20 20 64 62 20  cast-4.3 {.  db 
2270: 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  eval {.    SELEC
2280: 54 20 61 2c 20 43 41 53 54 28 61 20 41 53 20 69  T a, CAST(a AS i
2290: 6e 74 65 67 65 72 29 2c 20 61 20 46 52 4f 4d 20  nteger), a FROM 
22a0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 62 63 20 30  t1;.  }.} {abc 0
22b0: 20 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20 63 61   abc}.do_test ca
22c0: 73 74 2d 34 2e 34 20 7b 0a 20 20 64 62 20 65 76  st-4.4 {.  db ev
22d0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
22e0: 43 41 53 54 28 61 20 41 53 20 69 6e 74 65 67 65  CAST(a AS intege
22f0: 72 29 2c 20 61 2c 20 43 41 53 54 28 61 20 41 53  r), a, CAST(a AS
2300: 20 72 65 61 6c 29 2c 20 61 20 46 52 4f 4d 20 74   real), a FROM t
2310: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 61 62 63 20  1;.  }.} {0 abc 
2320: 30 2e 30 20 61 62 63 7d 0a 0a 66 69 6e 69 73 68  0.0 abc}..finish
2330: 5f 74 65 73 74 0a                                _test.