/ Hex Artifact Content
Login

Artifact bf816ce73c7dfcfe26b700c19f97ef4050d194ff:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 53 70 65 63 66 69 63 61 6c 6c  rary. Specficall
01b0: 79 0a 23 20 69 74 20 74 65 73 74 73 20 74 68 61  y.# it tests tha
01c0: 74 20 74 68 65 20 64 69 66 66 65 72 65 6e 74 20  t the different 
01d0: 73 74 6f 72 61 67 65 20 63 6c 61 73 73 65 73 20  storage classes 
01e0: 28 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20  (integer, real, 
01f0: 74 65 78 74 20 65 74 63 2e 29 0a 23 20 61 6c 6c  text etc.).# all
0200: 20 77 6f 72 6b 20 63 6f 72 72 65 63 74 6c 79 2e   work correctly.
0210: 0a 23 0a 23 20 24 49 64 3a 20 74 79 70 65 73 2e  .#.# $Id: types.
0220: 74 65 73 74 2c 76 20 31 2e 32 30 20 32 30 30 39  test,v 1.20 2009
0230: 2f 30 36 2f 32 39 20 30 36 3a 30 30 3a 33 37 20  /06/29 06:00:37 
0240: 64 61 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20  danielk1977 Exp 
0250: 24 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b  $..set testdir [
0260: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72  file dirname $ar
0270: 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73  gv0].source $tes
0280: 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a  tdir/tester.tcl.
0290: 0a 23 20 54 65 73 74 73 20 69 6e 20 74 68 69 73  .# Tests in this
02a0: 20 66 69 6c 65 20 61 72 65 20 6f 72 67 61 6e 69   file are organi
02b0: 7a 65 64 20 72 6f 75 67 68 6c 79 20 61 73 20 66  zed roughly as f
02c0: 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 74 79 70 65  ollows:.#.# type
02d0: 73 2d 31 2e 2a 2e 2a 3a 20 54 65 73 74 20 74 68  s-1.*.*: Test th
02e0: 61 74 20 76 61 6c 75 65 73 20 61 72 65 20 73 74  at values are st
02f0: 6f 72 65 64 20 75 73 69 6e 67 20 74 68 65 20 65  ored using the e
0300: 78 70 65 63 74 65 64 20 73 74 6f 72 61 67 65 0a  xpected storage.
0310: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  #              c
0320: 6c 61 73 73 65 73 20 77 68 65 6e 20 76 61 72 69  lasses when vari
0330: 6f 75 73 20 66 6f 72 6d 73 20 6f 66 20 6c 69 74  ous forms of lit
0340: 65 72 61 6c 73 20 61 72 65 20 69 6e 73 65 72 74  erals are insert
0350: 65 64 20 69 6e 74 6f 0a 23 20 20 20 20 20 20 20  ed into.#       
0360: 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 73 20 77         columns w
0370: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 61 66  ith different af
0380: 66 69 6e 69 74 69 65 73 2e 0a 23 20 74 79 70 65  finities..# type
0390: 73 2d 31 2e 31 2e 2a 3a 20 49 4e 53 45 52 54 20  s-1.1.*: INSERT 
03a0: 49 4e 54 4f 20 3c 74 61 62 6c 65 3e 20 56 41 4c  INTO <table> VAL
03b0: 55 45 53 28 2e 2e 2e 29 0a 23 20 74 79 70 65 73  UES(...).# types
03c0: 2d 31 2e 32 2e 2a 3a 20 49 4e 53 45 52 54 20 49  -1.2.*: INSERT I
03d0: 4e 54 4f 20 3c 74 61 62 6c 65 3e 20 53 45 4c 45  NTO <table> SELE
03e0: 43 54 2e 2e 2e 0a 23 20 74 79 70 65 73 2d 31 2e  CT....# types-1.
03f0: 33 2e 2a 3a 20 55 50 44 41 54 45 20 3c 74 61 62  3.*: UPDATE <tab
0400: 6c 65 3e 20 53 45 54 2e 2e 2e 0a 23 0a 23 20 74  le> SET....#.# t
0410: 79 70 65 73 2d 32 2e 2a 2e 2a 3a 20 43 68 65 63  ypes-2.*.*: Chec
0420: 6b 20 74 68 61 74 20 76 61 6c 75 65 73 20 63 61  k that values ca
0430: 6e 20 62 65 20 73 74 6f 72 65 64 20 61 6e 64 20  n be stored and 
0440: 72 65 74 72 69 65 76 69 6e 67 20 75 73 69 6e 67  retrieving using
0450: 20 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20   the.#          
0460: 20 20 20 20 76 61 72 69 6f 75 73 20 73 74 6f 72      various stor
0470: 61 67 65 20 63 6c 61 73 73 65 73 2e 0a 23 20 74  age classes..# t
0480: 79 70 65 73 2d 32 2e 31 2e 2a 3a 20 49 4e 54 45  ypes-2.1.*: INTE
0490: 47 45 52 0a 23 20 74 79 70 65 73 2d 32 2e 32 2e  GER.# types-2.2.
04a0: 2a 3a 20 52 45 41 4c 0a 23 20 74 79 70 65 73 2d  *: REAL.# types-
04b0: 32 2e 33 2e 2a 3a 20 4e 55 4c 4c 0a 23 20 74 79  2.3.*: NULL.# ty
04c0: 70 65 73 2d 32 2e 34 2e 2a 3a 20 54 45 58 54 0a  pes-2.4.*: TEXT.
04d0: 23 20 74 79 70 65 73 2d 32 2e 35 2e 2a 3a 20 52  # types-2.5.*: R
04e0: 65 63 6f 72 64 73 20 77 69 74 68 20 61 20 66 65  ecords with a fe
04f0: 77 20 64 69 66 66 65 72 65 6e 74 20 73 74 6f 72  w different stor
0500: 61 67 65 20 63 6c 61 73 73 65 73 2e 0a 23 0a 23  age classes..#.#
0510: 20 74 79 70 65 73 2d 33 2e 2a 3a 20 54 65 73 74   types-3.*: Test
0520: 20 74 68 61 74 20 74 68 65 20 27 3d 27 20 6f 70   that the '=' op
0530: 65 72 61 74 6f 72 20 72 65 73 70 65 63 74 73 20  erator respects 
0540: 6d 61 6e 69 66 65 73 74 20 74 79 70 65 73 2e 0a  manifest types..
0550: 23 0a 0a 23 20 44 69 73 61 62 6c 65 20 65 6e 63  #..# Disable enc
0560: 72 79 70 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  ryption on the d
0570: 61 74 61 62 61 73 65 20 66 6f 72 20 74 68 69 73  atabase for this
0580: 20 74 65 73 74 2e 0a 64 62 20 63 6c 6f 73 65 0a   test..db close.
0590: 73 65 74 20 44 42 20 5b 73 71 6c 69 74 65 33 20  set DB [sqlite3 
05a0: 64 62 20 74 65 73 74 2e 64 62 3b 20 73 71 6c 69  db test.db; sqli
05b0: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
05c0: 6f 69 6e 74 65 72 20 64 62 5d 0a 73 71 6c 69 74  ointer db].sqlit
05d0: 65 33 5f 72 65 6b 65 79 20 24 44 42 20 7b 7d 0a  e3_rekey $DB {}.
05e0: 0a 23 20 43 72 65 61 74 65 20 61 20 74 61 62 6c  .# Create a tabl
05f0: 65 20 77 69 74 68 20 6f 6e 65 20 63 6f 6c 75 6d  e with one colum
0600: 6e 20 66 6f 72 20 65 61 63 68 20 74 79 70 65 20  n for each type 
0610: 6f 66 20 61 66 66 69 6e 69 74 79 0a 64 6f 5f 74  of affinity.do_t
0620: 65 73 74 20 74 79 70 65 73 2d 31 2e 31 2e 30 20  est types-1.1.0 
0630: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0640: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0650: 31 28 69 20 69 6e 74 65 67 65 72 2c 20 6e 20 6e  1(i integer, n n
0660: 75 6d 65 72 69 63 2c 20 74 20 74 65 78 74 2c 20  umeric, t text, 
0670: 6f 20 62 6c 6f 62 29 3b 0a 20 20 7d 0a 7d 20 7b  o blob);.  }.} {
0680: 7d 0a 0a 23 20 45 61 63 68 20 65 6c 65 6d 65 6e  }..# Each elemen
0690: 74 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  t of the followi
06a0: 6e 67 20 6c 69 73 74 20 72 65 70 72 65 73 65 6e  ng list represen
06b0: 74 73 20 6f 6e 65 20 74 65 73 74 20 63 61 73 65  ts one test case
06c0: 2e 0a 23 0a 23 20 54 68 65 20 66 69 72 73 74 20  ..#.# The first 
06d0: 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20 73 75  value of each su
06e0: 62 2d 6c 69 73 74 20 69 73 20 61 6e 20 53 51 4c  b-list is an SQL
06f0: 20 6c 69 74 65 72 61 6c 2e 20 54 68 65 20 66 6f   literal. The fo
0700: 6c 6c 6f 77 69 6e 67 0a 23 20 66 6f 75 72 20 76  llowing.# four v
0710: 61 6c 75 65 20 61 72 65 20 74 68 65 20 73 74 6f  alue are the sto
0720: 72 61 67 65 20 63 6c 61 73 73 65 73 20 74 68 61  rage classes tha
0730: 74 20 77 6f 75 6c 64 20 62 65 20 75 73 65 64 20  t would be used 
0740: 69 66 20 74 68 65 0a 23 20 6c 69 74 65 72 61 6c  if the.# literal
0750: 20 77 65 72 65 20 69 6e 73 65 72 74 65 64 20 69   were inserted i
0760: 6e 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74  nto a column wit
0770: 68 20 61 66 66 69 6e 69 74 79 20 49 4e 54 45 47  h affinity INTEG
0780: 45 52 2c 20 4e 55 4d 45 52 49 43 2c 20 54 45 58  ER, NUMERIC, TEX
0790: 54 0a 23 20 6f 72 20 4e 4f 4e 45 2c 20 72 65 73  T.# or NONE, res
07a0: 70 65 63 74 69 76 65 6c 79 2e 0a 73 65 74 20 76  pectively..set v
07b0: 61 6c 75 65 73 20 7b 0a 20 20 7b 20 35 2e 30 20  alues {.  { 5.0 
07c0: 20 20 20 69 6e 74 65 67 65 72 20 69 6e 74 65 67     integer integ
07d0: 65 72 20 74 65 78 74 20 72 65 61 6c 20 20 20 20  er text real    
07e0: 7d 0a 20 20 7b 20 35 2e 31 20 20 20 20 72 65 61  }.  { 5.1    rea
07f0: 6c 20 20 20 20 72 65 61 6c 20 20 20 20 74 65 78  l    real    tex
0800: 74 20 72 65 61 6c 20 20 20 20 7d 0a 20 20 7b 20  t real    }.  { 
0810: 35 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 69  5      integer i
0820: 6e 74 65 67 65 72 20 74 65 78 74 20 69 6e 74 65  nteger text inte
0830: 67 65 72 20 7d 0a 20 20 7b 20 27 35 2e 30 27 20  ger }.  { '5.0' 
0840: 20 69 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72   integer integer
0850: 20 74 65 78 74 20 74 65 78 74 20 20 20 20 7d 0a   text text    }.
0860: 20 20 7b 20 27 35 2e 31 27 20 20 72 65 61 6c 20    { '5.1'  real 
0870: 20 20 20 72 65 61 6c 20 20 20 20 74 65 78 74 20     real    text 
0880: 74 65 78 74 20 20 20 20 7d 0a 20 20 7b 20 27 2d  text    }.  { '-
0890: 35 2e 30 27 20 69 6e 74 65 67 65 72 20 69 6e 74  5.0' integer int
08a0: 65 67 65 72 20 74 65 78 74 20 74 65 78 74 20 20  eger text text  
08b0: 20 20 7d 0a 20 20 7b 20 27 2d 35 2e 30 27 20 69    }.  { '-5.0' i
08c0: 6e 74 65 67 65 72 20 69 6e 74 65 67 65 72 20 74  nteger integer t
08d0: 65 78 74 20 74 65 78 74 20 20 20 20 7d 0a 20 20  ext text    }.  
08e0: 7b 20 27 35 27 20 20 20 20 69 6e 74 65 67 65 72  { '5'    integer
08f0: 20 69 6e 74 65 67 65 72 20 74 65 78 74 20 74 65   integer text te
0900: 78 74 20 20 20 20 7d 0a 20 20 7b 20 27 61 62 63  xt    }.  { 'abc
0910: 27 20 20 74 65 78 74 20 20 20 20 74 65 78 74 20  '  text    text 
0920: 20 20 20 74 65 78 74 20 74 65 78 74 20 20 20 20     text text    
0930: 7d 0a 20 20 7b 20 4e 55 4c 4c 20 20 20 6e 75 6c  }.  { NULL   nul
0940: 6c 20 20 20 20 6e 75 6c 6c 20 20 20 20 6e 75 6c  l    null    nul
0950: 6c 20 6e 75 6c 6c 20 20 20 20 7d 0a 7d 0a 69 66  l null    }.}.if
0960: 63 61 70 61 62 6c 65 20 7b 62 6c 6f 62 6c 69 74  capable {bloblit
0970: 7d 20 7b 0a 20 20 6c 61 70 70 65 6e 64 20 76 61  } {.  lappend va
0980: 6c 75 65 73 20 20 7b 20 58 27 30 30 27 20 20 62  lues  { X'00'  b
0990: 6c 6f 62 20 20 20 20 62 6c 6f 62 20 20 20 20 62  lob    blob    b
09a0: 6c 6f 62 20 62 6c 6f 62 20 20 20 20 7d 0a 7d 0a  lob blob    }.}.
09b0: 0a 23 20 54 68 69 73 20 63 6f 64 65 20 74 65 73  .# This code tes
09c0: 74 73 20 74 68 61 74 20 74 68 65 20 73 74 6f 72  ts that the stor
09d0: 61 67 65 20 63 6c 61 73 73 65 73 20 73 70 65 63  age classes spec
09e0: 69 66 69 65 64 20 61 62 6f 76 65 20 28 69 6e 20  ified above (in 
09f0: 74 68 65 20 24 76 61 6c 75 65 73 0a 23 20 74 61  the $values.# ta
0a00: 62 6c 65 29 20 61 72 65 20 63 6f 72 72 65 63 74  ble) are correct
0a10: 6c 79 20 61 73 73 69 67 6e 65 64 20 77 68 65 6e  ly assigned when
0a20: 20 76 61 6c 75 65 73 20 61 72 65 20 69 6e 73 65   values are inse
0a30: 72 74 65 64 20 75 73 69 6e 67 20 61 20 73 74 61  rted using a sta
0a40: 74 65 6d 65 6e 74 0a 23 20 6f 66 20 74 68 65 20  tement.# of the 
0a50: 66 6f 72 6d 3a 0a 23 0a 23 20 49 4e 53 45 52 54  form:.#.# INSERT
0a60: 20 49 4e 54 4f 20 3c 74 61 62 6c 65 3e 20 56 41   INTO <table> VA
0a70: 4c 55 45 28 3c 76 61 6c 75 65 73 3e 29 3b 0a 23  LUE(<values>);.#
0a80: 0a 73 65 74 20 74 6e 75 6d 20 31 0a 66 6f 72 65  .set tnum 1.fore
0a90: 61 63 68 20 76 61 6c 20 24 76 61 6c 75 65 73 20  ach val $values 
0aa0: 7b 0a 20 20 73 65 74 20 6c 69 74 20 5b 6c 69 6e  {.  set lit [lin
0ab0: 64 65 78 20 24 76 61 6c 20 30 5d 0a 20 20 65 78  dex $val 0].  ex
0ac0: 65 63 73 71 6c 20 22 44 45 4c 45 54 45 20 46 52  ecsql "DELETE FR
0ad0: 4f 4d 20 74 31 3b 22 0a 20 20 65 78 65 63 73 71  OM t1;".  execsq
0ae0: 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l "INSERT INTO t
0af0: 31 20 56 41 4c 55 45 53 28 24 6c 69 74 2c 20 24  1 VALUES($lit, $
0b00: 6c 69 74 2c 20 24 6c 69 74 2c 20 24 6c 69 74 29  lit, $lit, $lit)
0b10: 3b 22 0a 20 20 64 6f 5f 74 65 73 74 20 74 79 70  ;".  do_test typ
0b20: 65 73 2d 31 2e 31 2e 24 74 6e 75 6d 20 7b 0a 20  es-1.1.$tnum {. 
0b30: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
0b40: 20 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66     SELECT typeof
0b50: 28 69 29 2c 20 74 79 70 65 6f 66 28 6e 29 2c 20  (i), typeof(n), 
0b60: 74 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f  typeof(t), typeo
0b70: 66 28 6f 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20  f(o) FROM t1;.  
0b80: 20 20 7d 0a 20 20 7d 20 5b 6c 72 61 6e 67 65 20    }.  } [lrange 
0b90: 24 76 61 6c 20 31 20 65 6e 64 5d 0a 20 20 69 6e  $val 1 end].  in
0ba0: 63 72 20 74 6e 75 6d 0a 7d 0a 0a 23 20 54 68 69  cr tnum.}..# Thi
0bb0: 73 20 63 6f 64 65 20 74 65 73 74 73 20 74 68 61  s code tests tha
0bc0: 74 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  t the storage cl
0bd0: 61 73 73 65 73 20 73 70 65 63 69 66 69 65 64 20  asses specified 
0be0: 61 62 6f 76 65 20 28 69 6e 20 74 68 65 20 24 76  above (in the $v
0bf0: 61 6c 75 65 73 0a 23 20 74 61 62 6c 65 29 20 61  alues.# table) a
0c00: 72 65 20 63 6f 72 72 65 63 74 6c 79 20 61 73 73  re correctly ass
0c10: 69 67 6e 65 64 20 77 68 65 6e 20 76 61 6c 75 65  igned when value
0c20: 73 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 75  s are inserted u
0c30: 73 69 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74  sing a statement
0c40: 0a 23 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 0a  .# of the form:.
0c50: 23 0a 23 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  #.# INSERT INTO 
0c60: 74 31 20 53 45 4c 45 43 54 20 2e 2e 2e 2e 0a 23  t1 SELECT .....#
0c70: 0a 73 65 74 20 74 6e 75 6d 20 31 0a 66 6f 72 65  .set tnum 1.fore
0c80: 61 63 68 20 76 61 6c 20 24 76 61 6c 75 65 73 20  ach val $values 
0c90: 7b 0a 20 20 73 65 74 20 6c 69 74 20 5b 6c 69 6e  {.  set lit [lin
0ca0: 64 65 78 20 24 76 61 6c 20 30 5d 0a 20 20 65 78  dex $val 0].  ex
0cb0: 65 63 73 71 6c 20 22 44 45 4c 45 54 45 20 46 52  ecsql "DELETE FR
0cc0: 4f 4d 20 74 31 3b 22 0a 20 20 65 78 65 63 73 71  OM t1;".  execsq
0cd0: 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  l "INSERT INTO t
0ce0: 31 20 53 45 4c 45 43 54 20 24 6c 69 74 2c 20 24  1 SELECT $lit, $
0cf0: 6c 69 74 2c 20 24 6c 69 74 2c 20 24 6c 69 74 3b  lit, $lit, $lit;
0d00: 22 0a 20 20 64 6f 5f 74 65 73 74 20 74 79 70 65  ".  do_test type
0d10: 73 2d 31 2e 32 2e 24 74 6e 75 6d 20 7b 0a 20 20  s-1.2.$tnum {.  
0d20: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0d30: 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28    SELECT typeof(
0d40: 69 29 2c 20 74 79 70 65 6f 66 28 6e 29 2c 20 74  i), typeof(n), t
0d50: 79 70 65 6f 66 28 74 29 2c 20 74 79 70 65 6f 66  ypeof(t), typeof
0d60: 28 6f 29 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  (o) FROM t1;.   
0d70: 20 7d 0a 20 20 7d 20 5b 6c 72 61 6e 67 65 20 24   }.  } [lrange $
0d80: 76 61 6c 20 31 20 65 6e 64 5d 0a 20 20 69 6e 63  val 1 end].  inc
0d90: 72 20 74 6e 75 6d 0a 7d 0a 0a 23 20 54 68 69 73  r tnum.}..# This
0da0: 20 63 6f 64 65 20 74 65 73 74 73 20 74 68 61 74   code tests that
0db0: 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c 61   the storage cla
0dc0: 73 73 65 73 20 73 70 65 63 69 66 69 65 64 20 61  sses specified a
0dd0: 62 6f 76 65 20 28 69 6e 20 74 68 65 20 24 76 61  bove (in the $va
0de0: 6c 75 65 73 0a 23 20 74 61 62 6c 65 29 20 61 72  lues.# table) ar
0df0: 65 20 63 6f 72 72 65 63 74 6c 79 20 61 73 73 69  e correctly assi
0e00: 67 6e 65 64 20 77 68 65 6e 20 76 61 6c 75 65 73  gned when values
0e10: 20 61 72 65 20 69 6e 73 65 72 74 65 64 20 75 73   are inserted us
0e20: 69 6e 67 20 61 20 73 74 61 74 65 6d 65 6e 74 0a  ing a statement.
0e30: 23 20 6f 66 20 74 68 65 20 66 6f 72 6d 3a 0a 23  # of the form:.#
0e40: 0a 23 20 55 50 44 41 54 45 20 3c 74 61 62 6c 65  .# UPDATE <table
0e50: 3e 20 53 45 54 20 3c 63 6f 6c 75 6d 6e 3e 20 3d  > SET <column> =
0e60: 20 3c 76 61 6c 75 65 3e 3b 0a 23 0a 73 65 74 20   <value>;.#.set 
0e70: 74 6e 75 6d 20 31 0a 66 6f 72 65 61 63 68 20 76  tnum 1.foreach v
0e80: 61 6c 20 24 76 61 6c 75 65 73 20 7b 0a 20 20 73  al $values {.  s
0e90: 65 74 20 6c 69 74 20 5b 6c 69 6e 64 65 78 20 24  et lit [lindex $
0ea0: 76 61 6c 20 30 5d 0a 20 20 65 78 65 63 73 71 6c  val 0].  execsql
0eb0: 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20   "UPDATE t1 SET 
0ec0: 69 20 3d 20 24 6c 69 74 2c 20 6e 20 3d 20 24 6c  i = $lit, n = $l
0ed0: 69 74 2c 20 74 20 3d 20 24 6c 69 74 2c 20 6f 20  it, t = $lit, o 
0ee0: 3d 20 24 6c 69 74 3b 22 0a 20 20 64 6f 5f 74 65  = $lit;".  do_te
0ef0: 73 74 20 74 79 70 65 73 2d 31 2e 33 2e 24 74 6e  st types-1.3.$tn
0f00: 75 6d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  um {.    execsql
0f10: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
0f20: 74 79 70 65 6f 66 28 69 29 2c 20 74 79 70 65 6f  typeof(i), typeo
0f30: 66 28 6e 29 2c 20 74 79 70 65 6f 66 28 74 29 2c  f(n), typeof(t),
0f40: 20 74 79 70 65 6f 66 28 6f 29 20 46 52 4f 4d 20   typeof(o) FROM 
0f50: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c  t1;.    }.  } [l
0f60: 72 61 6e 67 65 20 24 76 61 6c 20 31 20 65 6e 64  range $val 1 end
0f70: 5d 0a 20 20 69 6e 63 72 20 74 6e 75 6d 0a 7d 0a  ].  incr tnum.}.
0f80: 0a 65 78 65 63 73 71 6c 20 7b 0a 20 20 44 52 4f  .execsql {.  DRO
0f90: 50 20 54 41 42 4c 45 20 74 31 3b 0a 7d 0a 0a 23  P TABLE t1;.}..#
0fa0: 20 4f 70 65 6e 20 74 68 65 20 74 61 62 6c 65 20   Open the table 
0fb0: 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20 24  with root-page $
0fc0: 72 6f 6f 74 70 61 67 65 20 61 74 20 74 68 65 20  rootpage at the 
0fd0: 62 74 72 65 65 0a 23 20 6c 65 76 65 6c 2e 20 52  btree.# level. R
0fe0: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 74 68 61  eturn a list tha
0ff0: 74 20 69 73 20 74 68 65 20 6c 65 6e 67 74 68 20  t is the length 
1000: 6f 66 20 65 61 63 68 20 72 65 63 6f 72 64 0a 23  of each record.#
1010: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 69   in the table, i
1020: 6e 20 74 68 65 20 74 61 62 6c 65 73 20 64 65 66  n the tables def
1030: 61 75 6c 74 20 73 63 61 6e 6e 69 6e 67 20 6f 72  ault scanning or
1040: 64 65 72 2e 0a 70 72 6f 63 20 72 65 63 6f 72 64  der..proc record
1050: 5f 73 69 7a 65 73 20 7b 72 6f 6f 74 70 61 67 65  _sizes {rootpage
1060: 7d 20 7b 0a 20 20 73 65 74 20 62 74 20 5b 62 74  } {.  set bt [bt
1070: 72 65 65 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62  ree_open test.db
1080: 20 31 30 5d 0a 20 20 62 74 72 65 65 5f 62 65 67   10].  btree_beg
1090: 69 6e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 20 24  in_transaction $
10a0: 62 74 0a 20 20 73 65 74 20 63 20 5b 62 74 72 65  bt.  set c [btre
10b0: 65 5f 63 75 72 73 6f 72 20 24 62 74 20 24 72 6f  e_cursor $bt $ro
10c0: 6f 74 70 61 67 65 20 30 5d 0a 20 20 62 74 72 65  otpage 0].  btre
10d0: 65 5f 66 69 72 73 74 20 24 63 0a 20 20 77 68 69  e_first $c.  whi
10e0: 6c 65 20 31 20 7b 0a 20 20 20 20 6c 61 70 70 65  le 1 {.    lappe
10f0: 6e 64 20 72 65 73 20 5b 62 74 72 65 65 5f 70 61  nd res [btree_pa
1100: 79 6c 6f 61 64 5f 73 69 7a 65 20 24 63 5d 0a 20  yload_size $c]. 
1110: 20 20 20 69 66 20 7b 5b 62 74 72 65 65 5f 6e 65     if {[btree_ne
1120: 78 74 20 24 63 5d 7d 20 62 72 65 61 6b 0a 20 20  xt $c]} break.  
1130: 7d 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65 5f  }.  btree_close_
1140: 63 75 72 73 6f 72 20 24 63 0a 20 20 62 74 72 65  cursor $c.  btre
1150: 65 5f 63 6c 6f 73 65 20 24 62 74 0a 20 20 73 65  e_close $bt.  se
1160: 74 20 72 65 73 0a 7d 0a 0a 0a 23 20 43 72 65 61  t res.}...# Crea
1170: 74 65 20 61 20 74 61 62 6c 65 20 61 6e 64 20 69  te a table and i
1180: 6e 73 65 72 74 20 73 6f 6d 65 20 31 2d 62 79 74  nsert some 1-byt
1190: 65 20 69 6e 74 65 67 65 72 73 2e 20 4d 61 6b 65  e integers. Make
11a0: 20 73 75 72 65 20 74 68 65 79 20 0a 23 20 63 61   sure they .# ca
11b0: 6e 20 62 65 20 72 65 61 64 20 62 61 63 6b 20 4f  n be read back O
11c0: 4b 2e 20 54 68 65 73 65 20 73 68 6f 75 6c 64 20  K. These should 
11d0: 62 65 20 33 20 62 79 74 65 20 72 65 63 6f 72 64  be 3 byte record
11e0: 73 2e 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73  s..do_test types
11f0: 2d 32 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  -2.1.1 {.  execs
1200: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
1210: 54 41 42 4c 45 20 74 31 28 61 20 69 6e 74 65 67  TABLE t1(a integ
1220: 65 72 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  er);.    INSERT 
1230: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30  INTO t1 VALUES(0
1240: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1250: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 32 30  TO t1 VALUES(120
1260: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1270: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 2d 31 32  TO t1 VALUES(-12
1280: 30 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  0);.  }.} {}.do_
1290: 74 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 32  test types-2.1.2
12a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
12b0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
12c0: 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31 32   t1;.  }.} {0 12
12d0: 30 20 2d 31 32 30 7d 0a 0a 23 20 54 72 79 20 73  0 -120}..# Try s
12e0: 6f 6d 65 20 32 2d 62 79 74 65 20 69 6e 74 65 67  ome 2-byte integ
12f0: 65 72 73 20 28 34 20 62 79 74 65 20 72 65 63 6f  ers (4 byte reco
1300: 72 64 73 29 0a 64 6f 5f 74 65 73 74 20 74 79 70  rds).do_test typ
1310: 65 73 2d 32 2e 31 2e 33 20 7b 0a 20 20 65 78 65  es-2.1.3 {.  exe
1320: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
1330: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
1340: 28 33 30 30 30 30 29 3b 0a 20 20 20 20 49 4e 53  (30000);.    INS
1350: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1360: 45 53 28 2d 33 30 30 30 30 29 3b 0a 20 20 7d 0a  ES(-30000);.  }.
1370: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70  } {}.do_test typ
1380: 65 73 2d 32 2e 31 2e 34 20 7b 0a 20 20 65 78 65  es-2.1.4 {.  exe
1390: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
13a0: 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d  T a FROM t1;.  }
13b0: 0a 7d 20 7b 30 20 31 32 30 20 2d 31 32 30 20 33  .} {0 120 -120 3
13c0: 30 30 30 30 20 2d 33 30 30 30 30 7d 0a 0a 23 20  0000 -30000}..# 
13d0: 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 73 20  4-byte integers 
13e0: 28 36 20 62 79 74 65 20 72 65 63 6f 72 64 73 29  (6 byte records)
13f0: 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32  .do_test types-2
1400: 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.5 {.  execsql
1410: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
1420: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 31 30  TO t1 VALUES(210
1430: 30 30 30 30 30 30 30 29 3b 0a 20 20 20 20 49 4e  0000000);.    IN
1440: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1450: 55 45 53 28 2d 32 31 30 30 30 30 30 30 30 30 29  UES(-2100000000)
1460: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
1470: 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 36 20 7b  st types-2.1.6 {
1480: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1490: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74   SELECT a FROM t
14a0: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31 32 30 20  1;.  }.} {0 120 
14b0: 2d 31 32 30 20 33 30 30 30 30 20 2d 33 30 30 30  -120 30000 -3000
14c0: 30 20 32 31 30 30 30 30 30 30 30 30 20 2d 32 31  0 2100000000 -21
14d0: 30 30 30 30 30 30 30 30 7d 0a 0a 23 20 38 2d 62  00000000}..# 8-b
14e0: 79 74 65 20 69 6e 74 65 67 65 72 73 20 28 31 30  yte integers (10
14f0: 20 62 79 74 65 20 72 65 63 6f 72 64 73 29 0a 64   byte records).d
1500: 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e 31  o_test types-2.1
1510: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
1520: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1530: 20 74 31 20 56 41 4c 55 45 53 28 39 30 30 30 30   t1 VALUES(90000
1540: 30 30 2a 31 30 30 30 30 30 30 2a 31 30 30 30 30  00*1000000*10000
1550: 30 30 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  00);.    INSERT 
1560: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 2d  INTO t1 VALUES(-
1570: 39 30 30 30 30 30 30 2a 31 30 30 30 30 30 30 2a  9000000*1000000*
1580: 31 30 30 30 30 30 30 29 3b 0a 20 20 7d 0a 7d 20  1000000);.  }.} 
1590: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73  {}.do_test types
15a0: 2d 32 2e 31 2e 38 20 7b 0a 20 20 65 78 65 63 73  -2.1.8 {.  execs
15b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
15c0: 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d  a FROM t1;.  }.}
15d0: 20 5b 6c 69 73 74 20 30 20 31 32 30 20 2d 31 32   [list 0 120 -12
15e0: 30 20 33 30 30 30 30 20 2d 33 30 30 30 30 20 32  0 30000 -30000 2
15f0: 31 30 30 30 30 30 30 30 30 20 2d 32 31 30 30 30  100000000 -21000
1600: 30 30 30 30 30 20 5c 0a 20 20 20 20 20 20 20 20  00000 \.        
1610: 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  9000000000000000
1620: 30 30 30 20 2d 39 30 30 30 30 30 30 30 30 30 30  000 -90000000000
1630: 30 30 30 30 30 30 30 30 5d 0a 0a 23 20 43 68 65  00000000]..# Che
1640: 63 6b 20 74 68 61 74 20 61 6c 6c 20 74 68 65 20  ck that all the 
1650: 72 65 63 6f 72 64 20 73 69 7a 65 73 20 61 72 65  record sizes are
1660: 20 61 73 20 77 65 20 65 78 70 65 63 74 65 64 2e   as we expected.
1670: 0a 69 66 63 61 70 61 62 6c 65 20 6c 65 67 61 63  .ifcapable legac
1680: 79 66 6f 72 6d 61 74 20 7b 0a 20 20 64 6f 5f 74  yformat {.  do_t
1690: 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 39 20  est types-2.1.9 
16a0: 7b 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b  {.    set root [
16b0: 64 62 20 65 76 61 6c 20 7b 73 65 6c 65 63 74 20  db eval {select 
16c0: 72 6f 6f 74 70 61 67 65 20 66 72 6f 6d 20 73 71  rootpage from sq
16d0: 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72  lite_master wher
16e0: 65 20 6e 61 6d 65 20 3d 20 27 74 31 27 7d 5d 0a  e name = 't1'}].
16f0: 20 20 20 20 72 65 63 6f 72 64 5f 73 69 7a 65 73      record_sizes
1700: 20 24 72 6f 6f 74 0a 20 20 7d 20 7b 33 20 33 20   $root.  } {3 3 
1710: 33 20 34 20 34 20 36 20 36 20 31 30 20 31 30 7d  3 4 4 6 6 10 10}
1720: 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f 74  .} else {.  do_t
1730: 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 39 20  est types-2.1.9 
1740: 7b 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b  {.    set root [
1750: 64 62 20 65 76 61 6c 20 7b 73 65 6c 65 63 74 20  db eval {select 
1760: 72 6f 6f 74 70 61 67 65 20 66 72 6f 6d 20 73 71  rootpage from sq
1770: 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72  lite_master wher
1780: 65 20 6e 61 6d 65 20 3d 20 27 74 31 27 7d 5d 0a  e name = 't1'}].
1790: 20 20 20 20 72 65 63 6f 72 64 5f 73 69 7a 65 73      record_sizes
17a0: 20 24 72 6f 6f 74 0a 20 20 7d 20 7b 32 20 33 20   $root.  } {2 3 
17b0: 33 20 34 20 34 20 36 20 36 20 31 30 20 31 30 7d  3 4 4 6 6 10 10}
17c0: 0a 7d 0a 20 20 0a 23 20 49 6e 73 65 72 74 20 73  .}.  .# Insert s
17d0: 6f 6d 65 20 72 65 61 6c 73 2e 20 54 68 65 73 65  ome reals. These
17e0: 20 73 68 6f 75 6c 64 20 62 65 20 31 30 20 62 79   should be 10 by
17f0: 74 65 20 72 65 63 6f 72 64 73 2e 0a 64 6f 5f 74  te records..do_t
1800: 65 73 74 20 74 79 70 65 73 2d 32 2e 32 2e 31 20  est types-2.2.1 
1810: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1820: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1830: 32 28 61 20 66 6c 6f 61 74 29 3b 0a 20 20 20 20  2(a float);.    
1840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1850: 41 4c 55 45 53 28 30 2e 30 29 3b 0a 20 20 20 20  ALUES(0.0);.    
1860: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
1870: 41 4c 55 45 53 28 31 32 33 34 35 2e 36 37 38 29  ALUES(12345.678)
1880: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1890: 4f 20 74 32 20 56 41 4c 55 45 53 28 2d 31 32 33  O t2 VALUES(-123
18a0: 34 35 2e 36 37 38 29 3b 0a 20 20 7d 0a 7d 20 7b  45.678);.  }.} {
18b0: 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d  }.do_test types-
18c0: 32 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  2.2.2 {.  execsq
18d0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
18e0: 20 46 52 4f 4d 20 74 32 3b 0a 20 20 7d 0a 7d 20   FROM t2;.  }.} 
18f0: 7b 30 2e 30 20 31 32 33 34 35 2e 36 37 38 20 2d  {0.0 12345.678 -
1900: 31 32 33 34 35 2e 36 37 38 7d 0a 0a 23 20 43 68  12345.678}..# Ch
1910: 65 63 6b 20 74 68 61 74 20 61 6c 6c 20 74 68 65  eck that all the
1920: 20 72 65 63 6f 72 64 20 73 69 7a 65 73 20 61 72   record sizes ar
1930: 65 20 61 73 20 77 65 20 65 78 70 65 63 74 65 64  e as we expected
1940: 2e 0a 69 66 63 61 70 61 62 6c 65 20 6c 65 67 61  ..ifcapable lega
1950: 63 79 66 6f 72 6d 61 74 20 7b 0a 20 20 64 6f 5f  cyformat {.  do_
1960: 74 65 73 74 20 74 79 70 65 73 2d 32 2e 32 2e 33  test types-2.2.3
1970: 20 7b 0a 20 20 20 20 73 65 74 20 72 6f 6f 74 20   {.    set root 
1980: 5b 64 62 20 65 76 61 6c 20 7b 73 65 6c 65 63 74  [db eval {select
1990: 20 72 6f 6f 74 70 61 67 65 20 66 72 6f 6d 20 73   rootpage from s
19a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68 65  qlite_master whe
19b0: 72 65 20 6e 61 6d 65 20 3d 20 27 74 32 27 7d 5d  re name = 't2'}]
19c0: 0a 20 20 20 20 72 65 63 6f 72 64 5f 73 69 7a 65  .    record_size
19d0: 73 20 24 72 6f 6f 74 0a 20 20 7d 20 7b 33 20 31  s $root.  } {3 1
19e0: 30 20 31 30 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20  0 10}.} else {. 
19f0: 20 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32   do_test types-2
1a00: 2e 32 2e 33 20 7b 0a 20 20 20 20 73 65 74 20 72  .2.3 {.    set r
1a10: 6f 6f 74 20 5b 64 62 20 65 76 61 6c 20 7b 73 65  oot [db eval {se
1a20: 6c 65 63 74 20 72 6f 6f 74 70 61 67 65 20 66 72  lect rootpage fr
1a30: 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  om sqlite_master
1a40: 20 77 68 65 72 65 20 6e 61 6d 65 20 3d 20 27 74   where name = 't
1a50: 32 27 7d 5d 0a 20 20 20 20 72 65 63 6f 72 64 5f  2'}].    record_
1a60: 73 69 7a 65 73 20 24 72 6f 6f 74 0a 20 20 7d 20  sizes $root.  } 
1a70: 7b 32 20 31 30 20 31 30 7d 0a 7d 0a 20 20 0a 23  {2 10 10}.}.  .#
1a80: 20 49 6e 73 65 72 74 20 61 20 4e 55 4c 4c 2e 20   Insert a NULL. 
1a90: 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 61  This should be a
1aa0: 20 74 77 6f 20 62 79 74 65 20 72 65 63 6f 72 64   two byte record
1ab0: 2e 0a 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d  ..do_test types-
1ac0: 32 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2.3.1 {.  execsq
1ad0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1ae0: 41 42 4c 45 20 74 33 28 61 20 6e 75 6c 6c 76 61  ABLE t3(a nullva
1af0: 6c 75 65 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  lue);.    INSERT
1b00: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
1b10: 4e 55 4c 4c 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  NULL);.  }.} {}.
1b20: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e  do_test types-2.
1b30: 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.2 {.  execsql 
1b40: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 49  {.    SELECT a I
1b50: 53 4e 55 4c 4c 20 46 52 4f 4d 20 74 33 3b 0a 20  SNULL FROM t3;. 
1b60: 20 7d 0a 7d 20 7b 31 7d 0a 0a 23 20 43 68 65 63   }.} {1}..# Chec
1b70: 6b 20 74 68 61 74 20 61 6c 6c 20 74 68 65 20 72  k that all the r
1b80: 65 63 6f 72 64 20 73 69 7a 65 73 20 61 72 65 20  ecord sizes are 
1b90: 61 73 20 77 65 20 65 78 70 65 63 74 65 64 2e 0a  as we expected..
1ba0: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e  do_test types-2.
1bb0: 33 2e 33 20 7b 0a 20 20 73 65 74 20 72 6f 6f 74  3.3 {.  set root
1bc0: 20 5b 64 62 20 65 76 61 6c 20 7b 73 65 6c 65 63   [db eval {selec
1bd0: 74 20 72 6f 6f 74 70 61 67 65 20 66 72 6f 6d 20  t rootpage from 
1be0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 77 68  sqlite_master wh
1bf0: 65 72 65 20 6e 61 6d 65 20 3d 20 27 74 33 27 7d  ere name = 't3'}
1c00: 5d 0a 20 20 72 65 63 6f 72 64 5f 73 69 7a 65 73  ].  record_sizes
1c10: 20 24 72 6f 6f 74 0a 7d 20 7b 32 7d 0a 0a 23 20   $root.} {2}..# 
1c20: 49 6e 73 65 72 74 20 61 20 63 6f 75 70 6c 65 20  Insert a couple 
1c30: 6f 66 20 73 74 72 69 6e 67 73 2e 0a 64 6f 5f 74  of strings..do_t
1c40: 65 73 74 20 74 79 70 65 73 2d 32 2e 34 2e 31 20  est types-2.4.1 
1c50: 7b 0a 20 20 73 65 74 20 73 74 72 69 6e 67 31 30  {.  set string10
1c60: 20 61 62 63 64 65 66 67 68 69 6a 0a 20 20 73 65   abcdefghij.  se
1c70: 74 20 73 74 72 69 6e 67 35 30 30 20 5b 73 74 72  t string500 [str
1c80: 69 6e 67 20 72 65 70 65 61 74 20 24 73 74 72 69  ing repeat $stri
1c90: 6e 67 31 30 20 35 30 5d 0a 20 20 73 65 74 20 73  ng10 50].  set s
1ca0: 74 72 69 6e 67 35 30 30 30 30 30 20 5b 73 74 72  tring500000 [str
1cb0: 69 6e 67 20 72 65 70 65 61 74 20 24 73 74 72 69  ing repeat $stri
1cc0: 6e 67 31 30 20 35 30 30 30 30 5d 0a 0a 20 20 65  ng10 50000]..  e
1cd0: 78 65 63 73 71 6c 20 22 0a 20 20 20 20 43 52 45  xecsql ".    CRE
1ce0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 20 73  ATE TABLE t4(a s
1cf0: 74 72 69 6e 67 29 3b 0a 20 20 20 20 49 4e 53 45  tring);.    INSE
1d00: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
1d10: 53 28 27 24 73 74 72 69 6e 67 31 30 27 29 3b 0a  S('$string10');.
1d20: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1d30: 74 34 20 56 41 4c 55 45 53 28 27 24 73 74 72 69  t4 VALUES('$stri
1d40: 6e 67 35 30 30 27 29 3b 0a 20 20 20 20 49 4e 53  ng500');.    INS
1d50: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
1d60: 45 53 28 27 24 73 74 72 69 6e 67 35 30 30 30 30  ES('$string50000
1d70: 30 27 29 3b 0a 20 20 22 0a 7d 20 7b 7d 0a 64 6f  0');.  ".} {}.do
1d80: 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e 34 2e  _test types-2.4.
1d90: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
1da0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1db0: 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73  M t4;.  }.} [lis
1dc0: 74 20 24 73 74 72 69 6e 67 31 30 20 24 73 74 72  t $string10 $str
1dd0: 69 6e 67 35 30 30 20 24 73 74 72 69 6e 67 35 30  ing500 $string50
1de0: 30 30 30 30 5d 0a 0a 23 20 43 68 65 63 6b 20 74  0000]..# Check t
1df0: 68 61 74 20 61 6c 6c 20 74 68 65 20 72 65 63 6f  hat all the reco
1e00: 72 64 20 73 69 7a 65 73 20 61 72 65 20 61 73 20  rd sizes are as 
1e10: 77 65 20 65 78 70 65 63 74 65 64 2e 20 54 68 69  we expected. Thi
1e20: 73 20 69 73 20 64 65 70 65 6e 64 61 6e 74 20 6f  s is dependant o
1e30: 6e 0a 23 20 74 68 65 20 64 61 74 61 62 61 73 65  n.# the database
1e40: 20 65 6e 63 6f 64 69 6e 67 2e 0a 69 66 20 7b 20   encoding..if { 
1e50: 24 73 71 6c 69 74 65 5f 6f 70 74 69 6f 6e 73 28  $sqlite_options(
1e60: 75 74 66 31 36 29 3d 3d 30 20 7c 7c 20 5b 65 78  utf16)==0 || [ex
1e70: 65 63 73 71 6c 20 7b 70 72 61 67 6d 61 20 65 6e  ecsql {pragma en
1e80: 63 6f 64 69 6e 67 7d 5d 20 3d 3d 20 22 55 54 46  coding}] == "UTF
1e90: 2d 38 22 20 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  -8" } {.  do_tes
1ea0: 74 20 74 79 70 65 73 2d 32 2e 34 2e 33 20 7b 0a  t types-2.4.3 {.
1eb0: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 64 62      set root [db
1ec0: 20 65 76 61 6c 20 7b 73 65 6c 65 63 74 20 72 6f   eval {select ro
1ed0: 6f 74 70 61 67 65 20 66 72 6f 6d 20 73 71 6c 69  otpage from sqli
1ee0: 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72 65 20  te_master where 
1ef0: 6e 61 6d 65 20 3d 20 27 74 34 27 7d 5d 0a 20 20  name = 't4'}].  
1f00: 20 20 72 65 63 6f 72 64 5f 73 69 7a 65 73 20 24    record_sizes $
1f10: 72 6f 6f 74 0a 20 20 7d 20 7b 31 32 20 35 30 33  root.  } {12 503
1f20: 20 35 30 30 30 30 34 7d 0a 7d 20 65 6c 73 65 20   500004}.} else 
1f30: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 79 70 65  {.  do_test type
1f40: 73 2d 32 2e 34 2e 33 20 7b 0a 20 20 20 20 73 65  s-2.4.3 {.    se
1f50: 74 20 72 6f 6f 74 20 5b 64 62 20 65 76 61 6c 20  t root [db eval 
1f60: 7b 73 65 6c 65 63 74 20 72 6f 6f 74 70 61 67 65  {select rootpage
1f70: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
1f80: 74 65 72 20 77 68 65 72 65 20 6e 61 6d 65 20 3d  ter where name =
1f90: 20 27 74 34 27 7d 5d 0a 20 20 20 20 72 65 63 6f   't4'}].    reco
1fa0: 72 64 5f 73 69 7a 65 73 20 24 72 6f 6f 74 0a 20  rd_sizes $root. 
1fb0: 20 7d 20 7b 32 32 20 31 30 30 33 20 31 30 30 30   } {22 1003 1000
1fc0: 30 30 34 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  004}.}..do_test 
1fd0: 74 79 70 65 73 2d 32 2e 35 2e 31 20 7b 0a 20 20  types-2.5.1 {.  
1fe0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52  execsql {.    DR
1ff0: 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20 20  OP TABLE t1;.   
2000: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a   DROP TABLE t2;.
2010: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74      DROP TABLE t
2020: 33 3b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c  3;.    DROP TABL
2030: 45 20 74 34 3b 0a 20 20 20 20 43 52 45 41 54 45  E t4;.    CREATE
2040: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
2050: 63 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  c);.  }.} {}.do_
2060: 74 65 73 74 20 74 79 70 65 73 2d 32 2e 35 2e 32  test types-2.5.2
2070: 20 7b 0a 20 20 73 65 74 20 73 74 72 69 6e 67 31   {.  set string1
2080: 30 20 61 62 63 64 65 66 67 68 69 6a 0a 20 20 73  0 abcdefghij.  s
2090: 65 74 20 73 74 72 69 6e 67 35 30 30 20 5b 73 74  et string500 [st
20a0: 72 69 6e 67 20 72 65 70 65 61 74 20 24 73 74 72  ring repeat $str
20b0: 69 6e 67 31 30 20 35 30 5d 0a 20 20 73 65 74 20  ing10 50].  set 
20c0: 73 74 72 69 6e 67 35 30 30 30 30 30 20 5b 73 74  string500000 [st
20d0: 72 69 6e 67 20 72 65 70 65 61 74 20 24 73 74 72  ring repeat $str
20e0: 69 6e 67 31 30 20 35 30 30 30 30 5d 0a 0a 20 20  ing10 50000]..  
20f0: 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20  execsql "INSERT 
2100: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e  INTO t1 VALUES(N
2110: 55 4c 4c 2c 20 27 24 73 74 72 69 6e 67 31 30 27  ULL, '$string10'
2120: 2c 20 34 30 30 30 29 3b 22 0a 20 20 65 78 65 63  , 4000);".  exec
2130: 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  sql "INSERT INTO
2140: 20 74 31 20 56 41 4c 55 45 53 28 27 24 73 74 72   t1 VALUES('$str
2150: 69 6e 67 35 30 30 27 2c 20 34 30 30 30 2c 20 4e  ing500', 4000, N
2160: 55 4c 4c 29 3b 22 0a 20 20 65 78 65 63 73 71 6c  ULL);".  execsql
2170: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
2180: 20 56 41 4c 55 45 53 28 34 30 30 30 2c 20 4e 55   VALUES(4000, NU
2190: 4c 4c 2c 20 27 24 73 74 72 69 6e 67 35 30 30 30  LL, '$string5000
21a0: 30 30 27 29 3b 22 0a 7d 20 7b 7d 0a 64 6f 5f 74  00');".} {}.do_t
21b0: 65 73 74 20 74 79 70 65 73 2d 32 2e 35 2e 33 20  est types-2.5.3 
21c0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
21d0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
21e0: 74 31 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  t1;.  }.} [list 
21f0: 7b 7d 20 24 73 74 72 69 6e 67 31 30 20 34 30 30  {} $string10 400
2200: 30 20 24 73 74 72 69 6e 67 35 30 30 20 34 30 30  0 $string500 400
2210: 30 20 7b 7d 20 34 30 30 30 20 7b 7d 20 24 73 74  0 {} 4000 {} $st
2220: 72 69 6e 67 35 30 30 30 30 30 5d 0a 0a 66 69 6e  ring500000]..fin
2230: 69 73 68 5f 74 65 73 74 0a                       ish_test.