/ Hex Artifact Content
Login

Artifact 9fa79845ef0f701082bea0f86bfe4aa22bf714e8369862f227dfc8fd1c24879d:


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 23 20 41 64 64 65  0.0 abc}..# Adde
2330: 64 20 32 30 31 38 2d 30 31 2d 32 36 0a 23 0a 23  d 2018-01-26.#.#
2340: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2350: 34 38 37 34 31 2d 33 32 34 35 34 20 49 66 20 74  48741-32454 If t
2360: 68 65 20 70 72 65 66 69 78 20 69 6e 74 65 67 65  he prefix intege
2370: 72 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  r is greater tha
2380: 6e 0a 23 20 2b 39 32 32 33 33 37 32 30 33 36 38  n.# +92233720368
2390: 35 34 37 37 35 38 30 37 20 74 68 65 6e 20 74 68  54775807 then th
23a0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
23b0: 63 61 73 74 20 69 73 20 65 78 61 63 74 6c 79 0a  cast is exactly.
23c0: 23 20 2b 39 32 32 33 33 37 32 30 33 36 38 35 34  # +9223372036854
23d0: 37 37 35 38 30 37 2e 0a 64 6f 5f 65 78 65 63 73  775807..do_execs
23e0: 71 6c 5f 74 65 73 74 20 63 61 73 74 2d 35 2e 31  ql_test cast-5.1
23f0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54   {.  SELECT CAST
2400: 28 27 39 32 32 33 33 37 32 30 33 36 38 35 34 37  ('92233720368547
2410: 37 35 38 30 38 27 20 41 53 20 69 6e 74 65 67 65  75808' AS intege
2420: 72 29 3b 0a 20 20 53 45 4c 45 43 54 20 43 41 53  r);.  SELECT CAS
2430: 54 28 27 20 20 2b 30 30 30 30 30 39 32 32 33 33  T('  +0000092233
2440: 37 32 30 33 36 38 35 34 37 37 35 38 30 38 27 20  72036854775808' 
2450: 41 53 20 69 6e 74 65 67 65 72 29 3b 0a 20 20 53  AS integer);.  S
2460: 45 4c 45 43 54 20 43 41 53 54 28 27 31 32 33 34  ELECT CAST('1234
2470: 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 30  5678901234567890
2480: 31 32 33 27 20 41 53 20 49 4e 54 45 47 45 52 29  123' AS INTEGER)
2490: 3b 0a 7d 20 7b 39 32 32 33 33 37 32 30 33 36 38  ;.} {92233720368
24a0: 35 34 37 37 35 38 30 37 20 39 32 32 33 33 37 32  54775807 9223372
24b0: 30 33 36 38 35 34 37 37 35 38 30 37 20 39 32 32  036854775807 922
24c0: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 37  3372036854775807
24d0: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
24e0: 3a 20 52 2d 30 36 30 32 38 2d 31 36 38 35 37 20  : R-06028-16857 
24f0: 53 69 6d 69 6c 61 72 6c 79 2c 20 69 66 20 74 68  Similarly, if th
2500: 65 20 70 72 65 66 69 78 20 69 6e 74 65 67 65 72  e prefix integer
2510: 20 69 73 20 6c 65 73 73 0a 23 20 74 68 61 6e 20   is less.# than 
2520: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
2530: 35 38 30 38 20 74 68 65 6e 20 74 68 65 20 72 65  5808 then the re
2540: 73 75 6c 74 20 6f 66 20 74 68 65 20 63 61 73 74  sult of the cast
2550: 20 69 73 20 65 78 61 63 74 6c 79 0a 23 20 2d 39   is exactly.# -9
2560: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
2570: 30 38 2e 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  08..do_execsql_t
2580: 65 73 74 20 63 61 73 74 2d 35 2e 32 20 7b 0a 20  est cast-5.2 {. 
2590: 20 53 45 4c 45 43 54 20 43 41 53 54 28 27 2d 39   SELECT CAST('-9
25a0: 32 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38  2233720368547758
25b0: 30 38 27 20 41 53 20 69 6e 74 65 67 65 72 29 3b  08' AS integer);
25c0: 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54 28 27  .  SELECT CAST('
25d0: 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  -922337203685477
25e0: 35 38 30 39 27 20 41 53 20 69 6e 74 65 67 65 72  5809' AS integer
25f0: 29 3b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54  );.  SELECT CAST
2600: 28 27 2d 31 32 33 34 35 36 37 38 39 30 31 32 33  ('-1234567890123
2610: 34 35 36 37 38 39 30 31 32 33 27 20 41 53 20 49  4567890123' AS I
2620: 4e 54 45 47 45 52 29 3b 0a 7d 20 7b 2d 39 32 32  NTEGER);.} {-922
2630: 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38  3372036854775808
2640: 20 2d 39 32 32 33 33 37 32 30 33 36 38 35 34 37   -92233720368547
2650: 37 35 38 30 38 20 2d 39 32 32 33 33 37 32 30 33  75808 -922337203
2660: 36 38 35 34 37 37 35 38 30 38 7d 0a 0a 23 20 45  6854775808}..# E
2670: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 33  VIDENCE-OF: R-33
2680: 39 39 30 2d 33 33 35 32 37 20 57 68 65 6e 20 63  990-33527 When c
2690: 61 73 74 69 6e 67 20 74 6f 20 49 4e 54 45 47 45  asting to INTEGE
26a0: 52 2c 20 69 66 20 74 68 65 20 74 65 78 74 20 6c  R, if the text l
26b0: 6f 6f 6b 73 0a 23 20 6c 69 6b 65 20 61 20 66 6c  ooks.# like a fl
26c0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76 61 6c  oating point val
26d0: 75 65 20 77 69 74 68 20 61 6e 20 65 78 70 6f 6e  ue with an expon
26e0: 65 6e 74 2c 20 74 68 65 20 65 78 70 6f 6e 65 6e  ent, the exponen
26f0: 74 20 77 69 6c 6c 20 62 65 0a 23 20 69 67 6e 6f  t will be.# igno
2700: 72 65 64 20 62 65 63 61 75 73 65 20 69 74 20 69  red because it i
2710: 73 20 6e 6f 20 70 61 72 74 20 6f 66 20 74 68 65  s no part of the
2720: 20 69 6e 74 65 67 65 72 20 70 72 65 66 69 78 2e   integer prefix.
2730: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
2740: 52 2d 32 34 32 32 35 2d 34 36 39 39 35 20 46 6f  R-24225-46995 Fo
2750: 72 20 65 78 61 6d 70 6c 65 2c 20 22 28 43 41 53  r example, "(CAS
2760: 54 20 27 31 32 33 65 2b 35 27 20 41 53 20 49 4e  T '123e+5' AS IN
2770: 54 45 47 45 52 29 22 0a 23 20 72 65 73 75 6c 74  TEGER)".# result
2780: 73 20 69 6e 20 31 32 33 2c 20 6e 6f 74 20 69 6e  s in 123, not in
2790: 20 31 32 33 30 30 30 30 30 2e 0a 64 6f 5f 65 78   12300000..do_ex
27a0: 65 63 73 71 6c 5f 74 65 73 74 20 63 61 73 65 2d  ecsql_test case-
27b0: 35 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 43  5.3 {.  SELECT C
27c0: 41 53 54 28 27 31 32 33 65 2b 35 27 20 41 53 20  AST('123e+5' AS 
27d0: 49 4e 54 45 47 45 52 29 3b 0a 20 20 53 45 4c 45  INTEGER);.  SELE
27e0: 43 54 20 43 41 53 54 28 27 31 32 33 65 2b 35 27  CT CAST('123e+5'
27f0: 20 41 53 20 4e 55 4d 45 52 49 43 29 3b 0a 20 20   AS NUMERIC);.  
2800: 53 45 4c 45 43 54 20 43 41 53 54 28 27 31 32 33  SELECT CAST('123
2810: 65 2b 35 27 20 41 53 20 52 45 41 4c 29 3b 0a 7d  e+5' AS REAL);.}
2820: 20 7b 31 32 33 20 31 32 33 30 30 30 30 30 20 31   {123 12300000 1
2830: 32 33 30 30 30 30 30 2e 30 7d 0a 0a 0a 23 20 54  2300000.0}...# T
2840: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 64 6f 65  he following doe
2850: 73 20 6e 6f 74 20 68 61 76 65 20 61 6e 79 74 68  s not have anyth
2860: 69 6e 67 20 74 6f 20 64 6f 20 77 69 74 68 20 74  ing to do with t
2870: 68 65 20 43 41 53 54 20 6f 70 65 72 61 74 6f 72  he CAST operator
2880: 2c 0a 23 20 62 75 74 20 69 74 20 64 6f 65 73 20  ,.# but it does 
2890: 64 65 61 6c 20 77 69 74 68 20 61 66 66 69 6e 69  deal with affini
28a0: 74 79 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty transformatio
28b0: 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ns..#.do_execsql
28c0: 5f 74 65 73 74 20 63 61 73 65 2d 36 2e 31 20 7b  _test case-6.1 {
28d0: 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46  .  DROP TABLE IF
28e0: 20 45 58 49 53 54 53 20 74 31 3b 0a 20 20 43 52   EXISTS t1;.  CR
28f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2900: 4e 55 4d 45 52 49 43 29 3b 0a 20 20 49 4e 53 45  NUMERIC);.  INSE
2910: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
2920: 53 0a 20 20 20 20 20 28 27 39 30 30 30 30 30 30  S.     ('9000000
2930: 30 30 30 30 30 30 30 30 30 30 30 31 27 29 2c 0a  000000000001'),.
2940: 20 20 20 20 20 28 27 39 30 30 30 30 30 30 30 30       ('900000000
2950: 30 30 30 30 30 30 30 30 30 31 20 27 29 2c 0a 20  0000000001 '),. 
2960: 20 20 20 20 28 27 20 39 30 30 30 30 30 30 30 30      (' 900000000
2970: 30 30 30 30 30 30 30 30 30 31 27 29 2c 0a 20 20  0000000001'),.  
2980: 20 20 20 28 27 20 39 30 30 30 30 30 30 30 30 30     (' 9000000000
2990: 30 30 30 30 30 30 30 30 31 20 27 29 3b 0a 20 20  000000001 ');.  
29a0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
29b0: 3b 0a 7d 20 7b 39 30 30 30 30 30 30 30 30 30 30  ;.} {90000000000
29c0: 30 30 30 30 30 30 30 31 20 39 30 30 30 30 30 30  00000001 9000000
29d0: 30 30 30 30 30 30 30 30 30 30 30 31 20 39 30 30  000000000001 900
29e0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 31  0000000000000001
29f0: 20 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30   900000000000000
2a00: 30 30 30 31 7d 0a 0a 23 20 32 30 31 39 2d 30 36  0001}..# 2019-06
2a10: 2d 30 37 0a 23 20 68 74 74 70 73 3a 2f 2f 77 77  -07.# https://ww
2a20: 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73 72 63  w.sqlite.org/src
2a30: 2f 69 6e 66 6f 2f 34 63 32 64 37 36 33 39 66 30  /info/4c2d7639f0
2a40: 37 36 61 61 37 63 0a 64 6f 5f 65 78 65 63 73 71  76aa7c.do_execsq
2a50: 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e 31 20  l_test case-7.1 
2a60: 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54 28  {.  SELECT CAST(
2a70: 27 2d 27 20 41 53 20 4e 55 4d 45 52 49 43 29 3b  '-' AS NUMERIC);
2a80: 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73 71  .} {0}.do_execsq
2a90: 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e 32 20  l_test case-7.2 
2aa0: 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54 28  {.  SELECT CAST(
2ab0: 27 2d 30 27 20 41 53 20 4e 55 4d 45 52 49 43 29  '-0' AS NUMERIC)
2ac0: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
2ad0: 71 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e 33  ql_test case-7.3
2ae0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54   {.  SELECT CAST
2af0: 28 27 2b 27 20 41 53 20 4e 55 4d 45 52 49 43 29  ('+' AS NUMERIC)
2b00: 3b 0a 7d 20 7b 30 7d 0a 64 6f 5f 65 78 65 63 73  ;.} {0}.do_execs
2b10: 71 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e 34  ql_test case-7.4
2b20: 20 7b 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54   {.  SELECT CAST
2b30: 28 27 2f 27 20 41 53 20 4e 55 4d 45 52 49 43 29  ('/' AS NUMERIC)
2b40: 3b 0a 7d 20 7b 30 7d 0a 0a 23 20 32 30 31 39 2d  ;.} {0}..# 2019-
2b50: 30 36 2d 30 37 0a 23 20 68 74 74 70 73 3a 2f 2f  06-07.# https://
2b60: 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 73  www.sqlite.org/s
2b70: 72 63 2f 69 6e 66 6f 2f 65 38 62 65 64 62 32 61  rc/info/e8bedb2a
2b80: 31 38 34 30 30 31 62 62 0a 64 6f 5f 65 78 65 63  184001bb.do_exec
2b90: 73 71 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e  sql_test case-7.
2ba0: 31 30 20 7b 0a 20 20 53 45 4c 45 43 54 20 27 27  10 {.  SELECT ''
2bb0: 20 2d 20 32 38 35 31 34 32 37 37 33 34 35 38 32   - 2851427734582
2bc0: 31 39 36 39 37 30 3b 0a 7d 20 7b 2d 32 38 35 31  196970;.} {-2851
2bd0: 34 32 37 37 33 34 35 38 32 31 39 36 39 37 30 7d  427734582196970}
2be0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2bf0: 20 63 61 73 65 2d 37 2e 31 31 20 7b 0a 20 20 53   case-7.11 {.  S
2c00: 45 4c 45 43 54 20 30 20 2d 20 32 38 35 31 34 32  ELECT 0 - 285142
2c10: 37 37 33 34 35 38 32 31 39 36 39 37 30 3b 0a 7d  7734582196970;.}
2c20: 20 7b 2d 32 38 35 31 34 32 37 37 33 34 35 38 32   {-2851427734582
2c30: 31 39 36 39 37 30 7d 0a 64 6f 5f 65 78 65 63 73  196970}.do_execs
2c40: 71 6c 5f 74 65 73 74 20 63 61 73 65 2d 37 2e 31  ql_test case-7.1
2c50: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 27 27 20  2 {.  SELECT '' 
2c60: 2d 20 31 3b 0a 7d 20 7b 2d 31 7d 0a 0a 23 20 32  - 1;.} {-1}..# 2
2c70: 30 31 39 2d 30 36 2d 31 30 0a 23 20 68 74 74 70  019-06-10.# http
2c80: 73 3a 2f 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f  s://www.sqlite.o
2c90: 72 67 2f 73 72 63 2f 69 6e 66 6f 2f 64 64 36 62  rg/src/info/dd6b
2ca0: 66 66 62 66 62 36 65 36 31 64 62 39 0a 23 0a 23  ffbfb6e61db9.#.#
2cb0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2cc0: 30 39 32 39 35 2d 36 31 33 33 37 20 43 61 73 74  09295-61337 Cast
2cd0: 69 6e 67 20 61 20 54 45 58 54 20 6f 72 20 42 4c  ing a TEXT or BL
2ce0: 4f 42 20 76 61 6c 75 65 20 69 6e 74 6f 20 4e 55  OB value into NU
2cf0: 4d 45 52 49 43 0a 23 20 66 69 72 73 74 20 64 6f  MERIC.# first do
2d00: 65 73 20 61 20 66 6f 72 63 65 64 20 63 6f 6e 76  es a forced conv
2d10: 65 72 73 69 6f 6e 20 69 6e 74 6f 20 52 45 41 4c  ersion into REAL
2d20: 20 62 75 74 20 74 68 65 6e 20 66 75 72 74 68 65   but then furthe
2d30: 72 20 63 6f 6e 76 65 72 74 73 20 74 68 65 0a 23  r converts the.#
2d40: 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 49 4e 54   result into INT
2d50: 45 47 45 52 20 69 66 20 61 6e 64 20 6f 6e 6c 79  EGER if and only
2d60: 20 69 66 20 74 68 65 20 63 6f 6e 76 65 72 73 69   if the conversi
2d70: 6f 6e 20 66 72 6f 6d 20 52 45 41 4c 20 74 6f 20  on from REAL to 
2d80: 49 4e 54 45 47 45 52 0a 23 20 69 73 20 6c 6f 73  INTEGER.# is los
2d90: 73 6c 65 73 73 20 61 6e 64 20 72 65 76 65 72 73  sless and revers
2da0: 69 62 6c 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ible..#.do_execs
2db0: 71 6c 5f 74 65 73 74 20 63 61 73 74 2d 37 2e 32  ql_test cast-7.2
2dc0: 30 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45  0 {.  DROP TABLE
2dd0: 20 49 46 20 45 58 49 53 54 53 20 74 30 3b 0a 20   IF EXISTS t0;. 
2de0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 30   CREATE TABLE t0
2df0: 20 28 63 30 20 54 45 58 54 29 3b 0a 20 20 49 4e   (c0 TEXT);.  IN
2e00: 53 45 52 54 20 49 4e 54 4f 20 74 30 28 63 30 29  SERT INTO t0(c0)
2e10: 20 56 41 4c 55 45 53 20 28 27 31 2e 30 27 29 3b   VALUES ('1.0');
2e20: 0a 20 20 53 45 4c 45 43 54 20 43 41 53 54 28 63  .  SELECT CAST(c
2e30: 30 20 41 53 20 4e 55 4d 45 52 49 43 29 20 46 52  0 AS NUMERIC) FR
2e40: 4f 4d 20 74 30 3b 0a 7d 20 7b 31 7d 0a 0a 66 69  OM t0;.} {1}..fi
2e50: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.