/ Hex Artifact Content
Login

Artifact a0f66bf12f80fad89493535474f7a6d16fa58150:


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 54 68 65 20 66 6f 63 75 73 0a 23 20 6f 66 20   The focus.# of 
01b0: 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 65 73  this file is tes
01c0: 74 69 6e 67 20 74 68 65 20 69 6e 74 65 72 61 63  ting the interac
01d0: 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 6d  tion of SQLite m
01e0: 61 6e 69 66 65 73 74 20 74 79 70 65 73 0a 23 20  anifest types.# 
01f0: 77 69 74 68 20 54 63 6c 20 64 75 61 6c 2d 72 65  with Tcl dual-re
0200: 70 72 65 73 65 6e 74 61 74 69 6f 6e 73 2e 0a 23  presentations..#
0210: 0a 23 20 24 49 64 3a 20 74 79 70 65 73 33 2e 74  .# $Id: types3.t
0220: 65 73 74 2c 76 20 31 2e 38 20 32 30 30 38 2f 30  est,v 1.8 2008/0
0230: 34 2f 32 38 20 31 33 3a 30 32 3a 35 38 20 64 72  4/28 13:02:58 dr
0240: 68 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74  h Exp $.#..set t
0250: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0260: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0270: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0280: 74 65 72 2e 74 63 6c 0a 0a 23 20 41 20 76 61 72  ter.tcl..# A var
0290: 69 61 62 6c 65 20 77 69 74 68 20 6f 6e 6c 79 20  iable with only 
02a0: 61 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  a string represe
02b0: 6e 74 61 74 69 6f 6e 20 63 6f 6d 65 73 20 69 6e  ntation comes in
02c0: 20 61 73 20 54 45 58 54 0a 64 6f 5f 74 65 73 74   as TEXT.do_test
02d0: 20 74 79 70 65 73 33 2d 31 2e 31 20 7b 0a 20 20   types3-1.1 {.  
02e0: 73 65 74 20 56 20 7b 7d 0a 20 20 61 70 70 65 6e  set V {}.  appen
02f0: 64 20 56 20 7b 7d 0a 20 20 63 6f 6e 63 61 74 20  d V {}.  concat 
0300: 5b 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79  [tcl_variable_ty
0310: 70 65 20 56 5d 20 5b 65 78 65 63 73 71 6c 20 7b  pe V] [execsql {
0320: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 3a 56  SELECT typeof(:V
0330: 29 7d 5d 0a 7d 20 7b 73 74 72 69 6e 67 20 74 65  )}].} {string te
0340: 78 74 7d 0a 0a 23 20 41 20 76 61 72 69 61 62 6c  xt}..# A variabl
0350: 65 20 77 69 74 68 20 61 6e 20 69 6e 74 65 67 65  e with an intege
0360: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
0370: 20 63 6f 6d 65 73 20 69 6e 20 61 73 20 49 4e 54   comes in as INT
0380: 45 47 45 52 0a 64 6f 5f 74 65 73 74 20 74 79 70  EGER.do_test typ
0390: 65 73 33 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20  es3-1.2 {.  set 
03a0: 56 20 5b 65 78 70 72 20 7b 69 6e 74 28 31 2b 32  V [expr {int(1+2
03b0: 29 7d 5d 0a 20 20 63 6f 6e 63 61 74 20 5b 74 63  )}].  concat [tc
03c0: 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20  l_variable_type 
03d0: 56 5d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c  V] [execsql {SEL
03e0: 45 43 54 20 74 79 70 65 6f 66 28 3a 56 29 7d 5d  ECT typeof(:V)}]
03f0: 0a 7d 20 7b 69 6e 74 20 69 6e 74 65 67 65 72 7d  .} {int integer}
0400: 0a 73 65 74 20 56 20 5b 65 78 70 72 20 7b 31 2b  .set V [expr {1+
0410: 31 32 33 34 35 36 37 38 30 31 32 33 34 35 7d 5d  12345678012345}]
0420: 0a 69 66 20 7b 5b 74 63 6c 5f 76 61 72 69 61 62  .if {[tcl_variab
0430: 6c 65 5f 74 79 70 65 20 56 5d 3d 3d 22 77 69 64  le_type V]=="wid
0440: 65 49 6e 74 22 7d 20 7b 0a 20 20 64 6f 5f 74 65  eInt"} {.  do_te
0450: 73 74 20 74 79 70 65 73 33 2d 31 2e 33 20 7b 0a  st types3-1.3 {.
0460: 20 20 20 20 73 65 74 20 56 20 5b 65 78 70 72 20      set V [expr 
0470: 7b 31 2b 31 32 33 34 35 36 37 38 39 30 31 32 33  {1+1234567890123
0480: 34 35 7d 5d 0a 20 20 20 20 63 6f 6e 63 61 74 20  45}].    concat 
0490: 5b 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79  [tcl_variable_ty
04a0: 70 65 20 56 5d 20 5b 65 78 65 63 73 71 6c 20 7b  pe V] [execsql {
04b0: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 3a 56  SELECT typeof(:V
04c0: 29 7d 5d 0a 20 20 7d 20 7b 77 69 64 65 49 6e 74  )}].  } {wideInt
04d0: 20 69 6e 74 65 67 65 72 7d 0a 7d 20 65 6c 73 65   integer}.} else
04e0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 79 70   {.  do_test typ
04f0: 65 73 33 2d 31 2e 33 20 7b 0a 20 20 20 20 73 65  es3-1.3 {.    se
0500: 74 20 56 20 5b 65 78 70 72 20 7b 31 2b 31 32 33  t V [expr {1+123
0510: 34 35 36 37 38 39 30 31 32 33 34 35 7d 5d 0a 20  456789012345}]. 
0520: 20 20 20 63 6f 6e 63 61 74 20 5b 74 63 6c 5f 76     concat [tcl_v
0530: 61 72 69 61 62 6c 65 5f 74 79 70 65 20 56 5d 20  ariable_type V] 
0540: 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54  [execsql {SELECT
0550: 20 74 79 70 65 6f 66 28 3a 56 29 7d 5d 0a 20 20   typeof(:V)}].  
0560: 7d 20 7b 69 6e 74 20 69 6e 74 65 67 65 72 7d 0a  } {int integer}.
0570: 7d 0a 0a 23 20 41 20 64 6f 75 62 6c 65 20 76 61  }..# A double va
0580: 72 69 61 62 6c 65 20 63 6f 6d 65 73 20 69 6e 20  riable comes in 
0590: 61 73 20 52 45 41 4c 0a 64 6f 5f 74 65 73 74 20  as REAL.do_test 
05a0: 74 79 70 65 73 33 2d 31 2e 34 20 7b 0a 20 20 73  types3-1.4 {.  s
05b0: 65 74 20 56 20 5b 65 78 70 72 20 7b 31 2e 30 2b  et V [expr {1.0+
05c0: 31 7d 5d 0a 20 20 63 6f 6e 63 61 74 20 5b 74 63  1}].  concat [tc
05d0: 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20  l_variable_type 
05e0: 56 5d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45 4c  V] [execsql {SEL
05f0: 45 43 54 20 74 79 70 65 6f 66 28 3a 56 29 7d 5d  ECT typeof(:V)}]
0600: 0a 7d 20 7b 64 6f 75 62 6c 65 20 72 65 61 6c 7d  .} {double real}
0610: 0a 0a 23 20 41 20 62 79 74 65 2d 61 72 72 61 79  ..# A byte-array
0620: 20 76 61 72 69 61 62 6c 65 20 63 6f 6d 65 73 20   variable comes 
0630: 69 6e 20 61 20 42 4c 4f 42 20 69 66 20 69 74 20  in a BLOB if it 
0640: 68 61 73 20 6e 6f 20 73 74 72 69 6e 67 20 72 65  has no string re
0650: 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 23 20 6f  presentation.# o
0660: 72 20 61 73 20 54 45 58 54 20 69 66 20 74 68 65  r as TEXT if the
0670: 72 65 20 69 73 20 61 20 73 74 72 69 6e 67 20 72  re is a string r
0680: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 23  epresentation..#
0690: 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73 33 2d  .do_test types3-
06a0: 31 2e 35 20 7b 0a 20 20 73 65 74 20 56 20 5b 62  1.5 {.  set V [b
06b0: 69 6e 61 72 79 20 66 6f 72 6d 61 74 20 61 33 20  inary format a3 
06c0: 61 62 63 5d 0a 20 20 63 6f 6e 63 61 74 20 5b 74  abc].  concat [t
06d0: 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65  cl_variable_type
06e0: 20 56 5d 20 5b 65 78 65 63 73 71 6c 20 7b 53 45   V] [execsql {SE
06f0: 4c 45 43 54 20 74 79 70 65 6f 66 28 3a 56 29 7d  LECT typeof(:V)}
0700: 5d 0a 7d 20 7b 62 79 74 65 61 72 72 61 79 20 62  ].} {bytearray b
0710: 6c 6f 62 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70  lob}.do_test typ
0720: 65 73 33 2d 31 2e 36 20 7b 0a 20 20 73 65 74 20  es3-1.6 {.  set 
0730: 56 20 22 61 62 63 22 0a 20 20 62 69 6e 61 72 79  V "abc".  binary
0740: 20 73 63 61 6e 20 24 56 20 61 33 20 78 0a 20 20   scan $V a3 x.  
0750: 63 6f 6e 63 61 74 20 5b 74 63 6c 5f 76 61 72 69  concat [tcl_vari
0760: 61 62 6c 65 5f 74 79 70 65 20 56 5d 20 5b 65 78  able_type V] [ex
0770: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 74 79  ecsql {SELECT ty
0780: 70 65 6f 66 28 3a 56 29 7d 5d 0a 7d 20 7b 62 79  peof(:V)}].} {by
0790: 74 65 61 72 72 61 79 20 74 65 78 74 7d 0a 0a 23  tearray text}..#
07a0: 20 43 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73   Check to make s
07b0: 75 72 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  ure return value
07c0: 73 20 61 72 65 20 6f 66 20 74 68 65 20 72 69 67  s are of the rig
07d0: 68 74 20 74 79 70 65 73 2e 0a 23 0a 69 66 63 61  ht types..#.ifca
07e0: 70 61 62 6c 65 20 62 6c 6f 62 6c 69 74 20 7b 0a  pable bloblit {.
07f0: 20 20 64 6f 5f 74 65 73 74 20 74 79 70 65 73 33    do_test types3
0800: 2d 32 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 56  -2.1 {.    set V
0810: 20 5b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43 54   [db one {SELECT
0820: 20 78 27 36 31 36 32 36 33 27 7d 5d 0a 20 20 20   x'616263'}].   
0830: 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
0840: 70 65 20 56 0a 20 20 7d 20 62 79 74 65 61 72 72  pe V.  } bytearr
0850: 61 79 0a 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70  ay.}.do_test typ
0860: 65 73 33 2d 32 2e 32 20 7b 0a 20 20 73 65 74 20  es3-2.2 {.  set 
0870: 56 20 5b 64 62 20 6f 6e 65 20 7b 53 45 4c 45 43  V [db one {SELEC
0880: 54 20 31 32 33 7d 5d 0a 20 20 74 63 6c 5f 76 61  T 123}].  tcl_va
0890: 72 69 61 62 6c 65 5f 74 79 70 65 20 56 0a 7d 20  riable_type V.} 
08a0: 69 6e 74 0a 73 65 74 20 56 78 20 5b 65 78 70 72  int.set Vx [expr
08b0: 20 7b 31 2b 77 69 64 65 28 31 32 33 34 35 36 37   {1+wide(1234567
08c0: 38 39 31 32 33 34 35 36 29 7d 5d 0a 64 6f 5f 74  89123456)}].do_t
08d0: 65 73 74 20 74 79 70 65 73 33 2d 32 2e 33 20 7b  est types3-2.3 {
08e0: 0a 20 20 73 65 74 20 56 20 5b 64 62 20 6f 6e 65  .  set V [db one
08f0: 20 7b 53 45 4c 45 43 54 20 31 32 33 34 35 36 37   {SELECT 1234567
0900: 38 39 30 31 32 33 34 35 36 7d 5d 0a 20 20 74 63  890123456}].  tc
0910: 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79 70 65 20  l_variable_type 
0920: 56 0a 7d 20 5b 74 63 6c 5f 76 61 72 69 61 62 6c  V.} [tcl_variabl
0930: 65 5f 74 79 70 65 20 56 78 5d 0a 64 6f 5f 74 65  e_type Vx].do_te
0940: 73 74 20 74 79 70 65 73 33 2d 32 2e 34 2e 31 20  st types3-2.4.1 
0950: 7b 0a 20 20 73 65 74 20 56 20 5b 64 62 20 6f 6e  {.  set V [db on
0960: 65 20 7b 53 45 4c 45 43 54 20 31 32 33 34 35 36  e {SELECT 123456
0970: 37 38 39 30 31 32 33 34 35 36 2e 31 7d 5d 0a 20  7890123456.1}]. 
0980: 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f 74 79   tcl_variable_ty
0990: 70 65 20 56 0a 7d 20 64 6f 75 62 6c 65 0a 64 6f  pe V.} double.do
09a0: 5f 74 65 73 74 20 74 79 70 65 73 33 2d 32 2e 34  _test types3-2.4
09b0: 2e 32 20 7b 0a 20 20 73 65 74 20 56 20 5b 64 62  .2 {.  set V [db
09c0: 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 31 32 33   one {SELECT 123
09d0: 34 35 36 37 38 39 30 31 32 33 2e 34 35 36 7d 5d  4567890123.456}]
09e0: 0a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c 65 5f  .  tcl_variable_
09f0: 74 79 70 65 20 56 0a 7d 20 64 6f 75 62 6c 65 0a  type V.} double.
0a00: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 33 2d 32  do_test types3-2
0a10: 2e 35 20 7b 0a 20 20 73 65 74 20 56 20 5b 64 62  .5 {.  set V [db
0a20: 20 6f 6e 65 20 7b 53 45 4c 45 43 54 20 27 31 32   one {SELECT '12
0a30: 33 34 35 36 37 38 39 30 31 32 33 34 35 36 2e 30  34567890123456.0
0a40: 27 7d 5d 0a 20 20 74 63 6c 5f 76 61 72 69 61 62  '}].  tcl_variab
0a50: 6c 65 5f 74 79 70 65 20 56 0a 7d 20 7b 7d 0a 64  le_type V.} {}.d
0a60: 6f 5f 74 65 73 74 20 74 79 70 65 73 33 2d 32 2e  o_test types3-2.
0a70: 36 20 7b 0a 20 20 73 65 74 20 56 20 5b 64 62 20  6 {.  set V [db 
0a80: 6f 6e 65 20 7b 53 45 4c 45 43 54 20 4e 55 4c 4c  one {SELECT NULL
0a90: 7d 5d 0a 20 20 74 63 6c 5f 76 61 72 69 61 62 6c  }].  tcl_variabl
0aa0: 65 5f 74 79 70 65 20 56 0a 7d 20 7b 7d 0a 0a 66  e_type V.} {}..f
0ab0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.