/ Hex Artifact Content
Login

Artifact f0a98d10c5ecc9865d19dc94486f9873afc6bb6b:


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 31 34 20 32 30 30 34  test,v 1.14 2004
0230: 2f 31 31 2f 31 34 20 32 31 3a 35 36 3a 33 31 20  /11/14 21:56:31 
0240: 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74  drh 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 54 65 73 74 73  ter.tcl..# Tests
0290: 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 61 72   in this file ar
02a0: 65 20 6f 72 67 61 6e 69 7a 65 64 20 72 6f 75 67  e organized roug
02b0: 68 6c 79 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  hly as follows:.
02c0: 23 0a 23 20 74 79 70 65 73 2d 31 2e 2a 2e 2a 3a  #.# types-1.*.*:
02d0: 20 54 65 73 74 20 74 68 61 74 20 76 61 6c 75 65   Test that value
02e0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 75 73 69  s are stored usi
02f0: 6e 67 20 74 68 65 20 65 78 70 65 63 74 65 64 20  ng the expected 
0300: 73 74 6f 72 61 67 65 0a 23 20 20 20 20 20 20 20  storage.#       
0310: 20 20 20 20 20 20 20 63 6c 61 73 73 65 73 20 77         classes w
0320: 68 65 6e 20 76 61 72 69 6f 75 73 20 66 6f 72 6d  hen various form
0330: 73 20 6f 66 20 6c 69 74 65 72 61 6c 73 20 61 72  s of literals ar
0340: 65 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 0a  e inserted into.
0350: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  #              c
0360: 6f 6c 75 6d 6e 73 20 77 69 74 68 20 64 69 66 66  olumns with diff
0370: 65 72 65 6e 74 20 61 66 66 69 6e 69 74 69 65 73  erent affinities
0380: 2e 0a 23 20 74 79 70 65 73 2d 31 2e 31 2e 2a 3a  ..# types-1.1.*:
0390: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 74 61   INSERT INTO <ta
03a0: 62 6c 65 3e 20 56 41 4c 55 45 53 28 2e 2e 2e 29  ble> VALUES(...)
03b0: 0a 23 20 74 79 70 65 73 2d 31 2e 32 2e 2a 3a 20  .# types-1.2.*: 
03c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 3c 74 61 62  INSERT INTO <tab
03d0: 6c 65 3e 20 53 45 4c 45 43 54 2e 2e 2e 0a 23 20  le> SELECT....# 
03e0: 74 79 70 65 73 2d 31 2e 33 2e 2a 3a 20 55 50 44  types-1.3.*: UPD
03f0: 41 54 45 20 3c 74 61 62 6c 65 3e 20 53 45 54 2e  ATE <table> SET.
0400: 2e 2e 0a 23 0a 23 20 74 79 70 65 73 2d 32 2e 2a  ...#.# types-2.*
0410: 2e 2a 3a 20 43 68 65 63 6b 20 74 68 61 74 20 76  .*: Check that v
0420: 61 6c 75 65 73 20 63 61 6e 20 62 65 20 73 74 6f  alues can be sto
0430: 72 65 64 20 61 6e 64 20 72 65 74 72 69 65 76 69  red and retrievi
0440: 6e 67 20 75 73 69 6e 67 20 74 68 65 0a 23 20 20  ng using the.#  
0450: 20 20 20 20 20 20 20 20 20 20 20 20 76 61 72 69              vari
0460: 6f 75 73 20 73 74 6f 72 61 67 65 20 63 6c 61 73  ous storage clas
0470: 73 65 73 2e 0a 23 20 74 79 70 65 73 2d 32 2e 31  ses..# types-2.1
0480: 2e 2a 3a 20 49 4e 54 45 47 45 52 0a 23 20 74 79  .*: INTEGER.# ty
0490: 70 65 73 2d 32 2e 32 2e 2a 3a 20 52 45 41 4c 0a  pes-2.2.*: REAL.
04a0: 23 20 74 79 70 65 73 2d 32 2e 33 2e 2a 3a 20 4e  # types-2.3.*: N
04b0: 55 4c 4c 0a 23 20 74 79 70 65 73 2d 32 2e 34 2e  ULL.# types-2.4.
04c0: 2a 3a 20 54 45 58 54 0a 23 20 74 79 70 65 73 2d  *: TEXT.# types-
04d0: 32 2e 35 2e 2a 3a 20 52 65 63 6f 72 64 73 20 77  2.5.*: Records w
04e0: 69 74 68 20 61 20 66 65 77 20 64 69 66 66 65 72  ith a few differ
04f0: 65 6e 74 20 73 74 6f 72 61 67 65 20 63 6c 61 73  ent storage clas
0500: 73 65 73 2e 0a 23 0a 23 20 74 79 70 65 73 2d 33  ses..#.# types-3
0510: 2e 2a 3a 20 54 65 73 74 20 74 68 61 74 20 74 68  .*: Test that th
0520: 65 20 27 3d 27 20 6f 70 65 72 61 74 6f 72 20 72  e '=' operator r
0530: 65 73 70 65 63 74 73 20 6d 61 6e 69 66 65 73 74  espects manifest
0540: 20 74 79 70 65 73 2e 0a 23 0a 0a 23 20 44 69 73   types..#..# Dis
0550: 61 62 6c 65 20 65 6e 63 72 79 70 74 69 6f 6e 20  able encryption 
0560: 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
0570: 66 6f 72 20 74 68 69 73 20 74 65 73 74 2e 0a 64  for this test..d
0580: 62 20 63 6c 6f 73 65 0a 73 65 74 20 44 42 20 5b  b close.set DB [
0590: 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e  sqlite3 db test.
05a0: 64 62 5d 0a 73 71 6c 69 74 65 33 5f 72 65 6b 65  db].sqlite3_reke
05b0: 79 20 24 44 42 20 7b 7d 0a 0a 23 20 43 72 65 61  y $DB {}..# Crea
05c0: 74 65 20 61 20 74 61 62 6c 65 20 77 69 74 68 20  te a table with 
05d0: 6f 6e 65 20 63 6f 6c 75 6d 6e 20 66 6f 72 20 65  one column for e
05e0: 61 63 68 20 74 79 70 65 20 6f 66 20 61 66 66 69  ach type of affi
05f0: 6e 69 74 79 0a 64 6f 5f 74 65 73 74 20 74 79 70  nity.do_test typ
0600: 65 73 2d 31 2e 31 2e 30 20 7b 0a 20 20 65 78 65  es-1.1.0 {.  exe
0610: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0620: 45 20 54 41 42 4c 45 20 74 31 28 69 20 69 6e 74  E TABLE t1(i int
0630: 65 67 65 72 2c 20 6e 20 6e 75 6d 65 72 69 63 2c  eger, n numeric,
0640: 20 74 20 74 65 78 74 2c 20 6f 20 62 6c 6f 62 29   t text, o blob)
0650: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 45 61  ;.  }.} {}..# Ea
0660: 63 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  ch element of th
0670: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 69 73 74  e following list
0680: 20 72 65 70 72 65 73 65 6e 74 73 20 6f 6e 65 20   represents one 
0690: 74 65 73 74 20 63 61 73 65 2e 0a 23 0a 23 20 54  test case..#.# T
06a0: 68 65 20 66 69 72 73 74 20 76 61 6c 75 65 20 6f  he first value o
06b0: 66 20 65 61 63 68 20 73 75 62 2d 6c 69 73 74 20  f each sub-list 
06c0: 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61  is an SQL litera
06d0: 6c 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  l. The following
06e0: 0a 23 20 66 6f 75 72 20 76 61 6c 75 65 20 61 72  .# four value ar
06f0: 65 20 74 68 65 20 73 74 6f 72 61 67 65 20 63 6c  e the storage cl
0700: 61 73 73 65 73 20 74 68 61 74 20 77 6f 75 6c 64  asses that would
0710: 20 62 65 20 75 73 65 64 20 69 66 20 74 68 65 0a   be used if the.
0720: 23 20 6c 69 74 65 72 61 6c 20 77 65 72 65 20 69  # literal were i
0730: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 63  nserted into a c
0740: 6f 6c 75 6d 6e 20 77 69 74 68 20 61 66 66 69 6e  olumn with affin
0750: 69 74 79 20 49 4e 54 45 47 45 52 2c 20 4e 55 4d  ity INTEGER, NUM
0760: 45 52 49 43 2c 20 54 45 58 54 0a 23 20 6f 72 20  ERIC, TEXT.# or 
0770: 4e 4f 4e 45 2c 20 72 65 73 70 65 63 74 69 76 65  NONE, respective
0780: 6c 79 2e 0a 73 65 74 20 76 61 6c 75 65 73 20 7b  ly..set values {
0790: 0a 20 20 7b 20 35 2e 30 20 20 20 20 69 6e 74 65  .  { 5.0    inte
07a0: 67 65 72 20 72 65 61 6c 20 20 20 20 74 65 78 74  ger real    text
07b0: 20 72 65 61 6c 20 20 20 20 7d 0a 20 20 7b 20 35   real    }.  { 5
07c0: 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 69 6e        integer in
07d0: 74 65 67 65 72 20 74 65 78 74 20 69 6e 74 65 67  teger text integ
07e0: 65 72 20 7d 0a 20 20 7b 20 27 35 2e 30 27 20 20  er }.  { '5.0'  
07f0: 69 6e 74 65 67 65 72 20 72 65 61 6c 20 20 20 20  integer real    
0800: 74 65 78 74 20 74 65 78 74 20 20 20 20 7d 0a 20  text text    }. 
0810: 20 7b 20 27 2d 35 2e 30 27 20 69 6e 74 65 67 65   { '-5.0' intege
0820: 72 20 72 65 61 6c 20 20 20 20 74 65 78 74 20 74  r real    text t
0830: 65 78 74 20 20 20 20 7d 0a 20 20 7b 20 27 2d 35  ext    }.  { '-5
0840: 2e 30 27 20 69 6e 74 65 67 65 72 20 72 65 61 6c  .0' integer real
0850: 20 20 20 20 74 65 78 74 20 74 65 78 74 20 20 20      text text   
0860: 20 7d 0a 20 20 7b 20 27 35 27 20 20 20 20 69 6e   }.  { '5'    in
0870: 74 65 67 65 72 20 69 6e 74 65 67 65 72 20 74 65  teger integer te
0880: 78 74 20 74 65 78 74 20 20 20 20 7d 0a 20 20 7b  xt text    }.  {
0890: 20 27 61 62 63 27 20 20 74 65 78 74 20 20 20 20   'abc'  text    
08a0: 74 65 78 74 20 20 20 20 74 65 78 74 20 74 65 78  text    text tex
08b0: 74 20 20 20 20 7d 0a 20 20 7b 20 4e 55 4c 4c 20  t    }.  { NULL 
08c0: 20 20 6e 75 6c 6c 20 20 20 20 6e 75 6c 6c 20 20    null    null  
08d0: 20 20 6e 75 6c 6c 20 6e 75 6c 6c 20 20 20 20 7d    null null    }
08e0: 0a 7d 0a 69 66 63 61 70 61 62 6c 65 20 7b 62 6c  .}.ifcapable {bl
08f0: 6f 62 6c 69 74 7d 20 7b 0a 20 20 6c 61 70 70 65  oblit} {.  lappe
0900: 6e 64 20 76 61 6c 75 65 73 20 20 7b 20 58 27 30  nd values  { X'0
0910: 30 27 20 20 62 6c 6f 62 20 20 20 20 62 6c 6f 62  0'  blob    blob
0920: 20 20 20 20 62 6c 6f 62 20 62 6c 6f 62 20 20 20      blob blob   
0930: 20 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 63 6f 64   }.}..# This cod
0940: 65 20 74 65 73 74 73 20 74 68 61 74 20 74 68 65  e tests that the
0950: 20 73 74 6f 72 61 67 65 20 63 6c 61 73 73 65 73   storage classes
0960: 20 73 70 65 63 69 66 69 65 64 20 61 62 6f 76 65   specified above
0970: 20 28 69 6e 20 74 68 65 20 24 76 61 6c 75 65 73   (in the $values
0980: 0a 23 20 74 61 62 6c 65 29 20 61 72 65 20 63 6f  .# table) are co
0990: 72 72 65 63 74 6c 79 20 61 73 73 69 67 6e 65 64  rrectly assigned
09a0: 20 77 68 65 6e 20 76 61 6c 75 65 73 20 61 72 65   when values are
09b0: 20 69 6e 73 65 72 74 65 64 20 75 73 69 6e 67 20   inserted using 
09c0: 61 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 6f 66  a statement.# of
09d0: 20 74 68 65 20 66 6f 72 6d 3a 0a 23 0a 23 20 49   the form:.#.# I
09e0: 4e 53 45 52 54 20 49 4e 54 4f 20 3c 74 61 62 6c  NSERT INTO <tabl
09f0: 65 3e 20 56 41 4c 55 45 28 3c 76 61 6c 75 65 73  e> VALUE(<values
0a00: 3e 29 3b 0a 23 0a 73 65 74 20 74 6e 75 6d 20 31  >);.#.set tnum 1
0a10: 0a 66 6f 72 65 61 63 68 20 76 61 6c 20 24 76 61  .foreach val $va
0a20: 6c 75 65 73 20 7b 0a 20 20 73 65 74 20 6c 69 74  lues {.  set lit
0a30: 20 5b 6c 69 6e 64 65 78 20 24 76 61 6c 20 30 5d   [lindex $val 0]
0a40: 0a 20 20 65 78 65 63 73 71 6c 20 22 44 45 4c 45  .  execsql "DELE
0a50: 54 45 20 46 52 4f 4d 20 74 31 3b 22 0a 20 20 65  TE FROM t1;".  e
0a60: 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49  xecsql "INSERT I
0a70: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24 6c  NTO t1 VALUES($l
0a80: 69 74 2c 20 24 6c 69 74 2c 20 24 6c 69 74 2c 20  it, $lit, $lit, 
0a90: 24 6c 69 74 29 3b 22 0a 20 20 64 6f 5f 74 65 73  $lit);".  do_tes
0aa0: 74 20 74 79 70 65 73 2d 31 2e 31 2e 24 74 6e 75  t types-1.1.$tnu
0ab0: 6d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  m {.    execsql 
0ac0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74  {.      SELECT t
0ad0: 79 70 65 6f 66 28 69 29 2c 20 74 79 70 65 6f 66  ypeof(i), typeof
0ae0: 28 6e 29 2c 20 74 79 70 65 6f 66 28 74 29 2c 20  (n), typeof(t), 
0af0: 74 79 70 65 6f 66 28 6f 29 20 46 52 4f 4d 20 74  typeof(o) FROM t
0b00: 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 72  1;.    }.  } [lr
0b10: 61 6e 67 65 20 24 76 61 6c 20 31 20 65 6e 64 5d  ange $val 1 end]
0b20: 0a 20 20 69 6e 63 72 20 74 6e 75 6d 0a 7d 0a 0a  .  incr tnum.}..
0b30: 23 20 54 68 69 73 20 63 6f 64 65 20 74 65 73 74  # This code test
0b40: 73 20 74 68 61 74 20 74 68 65 20 73 74 6f 72 61  s that the stora
0b50: 67 65 20 63 6c 61 73 73 65 73 20 73 70 65 63 69  ge classes speci
0b60: 66 69 65 64 20 61 62 6f 76 65 20 28 69 6e 20 74  fied above (in t
0b70: 68 65 20 24 76 61 6c 75 65 73 0a 23 20 74 61 62  he $values.# tab
0b80: 6c 65 29 20 61 72 65 20 63 6f 72 72 65 63 74 6c  le) are correctl
0b90: 79 20 61 73 73 69 67 6e 65 64 20 77 68 65 6e 20  y assigned when 
0ba0: 76 61 6c 75 65 73 20 61 72 65 20 69 6e 73 65 72  values are inser
0bb0: 74 65 64 20 75 73 69 6e 67 20 61 20 73 74 61 74  ted using a stat
0bc0: 65 6d 65 6e 74 0a 23 20 6f 66 20 74 68 65 20 66  ement.# of the f
0bd0: 6f 72 6d 3a 0a 23 0a 23 20 49 4e 53 45 52 54 20  orm:.#.# INSERT 
0be0: 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2e  INTO t1 SELECT .
0bf0: 2e 2e 2e 0a 23 0a 73 65 74 20 74 6e 75 6d 20 31  ....#.set tnum 1
0c00: 0a 66 6f 72 65 61 63 68 20 76 61 6c 20 24 76 61  .foreach val $va
0c10: 6c 75 65 73 20 7b 0a 20 20 73 65 74 20 6c 69 74  lues {.  set lit
0c20: 20 5b 6c 69 6e 64 65 78 20 24 76 61 6c 20 30 5d   [lindex $val 0]
0c30: 0a 20 20 65 78 65 63 73 71 6c 20 22 44 45 4c 45  .  execsql "DELE
0c40: 54 45 20 46 52 4f 4d 20 74 31 3b 22 0a 20 20 65  TE FROM t1;".  e
0c50: 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20 49  xecsql "INSERT I
0c60: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 24 6c  NTO t1 SELECT $l
0c70: 69 74 2c 20 24 6c 69 74 2c 20 24 6c 69 74 2c 20  it, $lit, $lit, 
0c80: 24 6c 69 74 3b 22 0a 20 20 64 6f 5f 74 65 73 74  $lit;".  do_test
0c90: 20 74 79 70 65 73 2d 31 2e 32 2e 24 74 6e 75 6d   types-1.2.$tnum
0ca0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
0cb0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 79  .      SELECT ty
0cc0: 70 65 6f 66 28 69 29 2c 20 74 79 70 65 6f 66 28  peof(i), typeof(
0cd0: 6e 29 2c 20 74 79 70 65 6f 66 28 74 29 2c 20 74  n), typeof(t), t
0ce0: 79 70 65 6f 66 28 6f 29 20 46 52 4f 4d 20 74 31  ypeof(o) FROM t1
0cf0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 5b 6c 72 61  ;.    }.  } [lra
0d00: 6e 67 65 20 24 76 61 6c 20 31 20 65 6e 64 5d 0a  nge $val 1 end].
0d10: 20 20 69 6e 63 72 20 74 6e 75 6d 0a 7d 0a 0a 23    incr tnum.}..#
0d20: 20 54 68 69 73 20 63 6f 64 65 20 74 65 73 74 73   This code tests
0d30: 20 74 68 61 74 20 74 68 65 20 73 74 6f 72 61 67   that the storag
0d40: 65 20 63 6c 61 73 73 65 73 20 73 70 65 63 69 66  e classes specif
0d50: 69 65 64 20 61 62 6f 76 65 20 28 69 6e 20 74 68  ied above (in th
0d60: 65 20 24 76 61 6c 75 65 73 0a 23 20 74 61 62 6c  e $values.# tabl
0d70: 65 29 20 61 72 65 20 63 6f 72 72 65 63 74 6c 79  e) are correctly
0d80: 20 61 73 73 69 67 6e 65 64 20 77 68 65 6e 20 76   assigned when v
0d90: 61 6c 75 65 73 20 61 72 65 20 69 6e 73 65 72 74  alues are insert
0da0: 65 64 20 75 73 69 6e 67 20 61 20 73 74 61 74 65  ed using a state
0db0: 6d 65 6e 74 0a 23 20 6f 66 20 74 68 65 20 66 6f  ment.# of the fo
0dc0: 72 6d 3a 0a 23 0a 23 20 55 50 44 41 54 45 20 3c  rm:.#.# UPDATE <
0dd0: 74 61 62 6c 65 3e 20 53 45 54 20 3c 63 6f 6c 75  table> SET <colu
0de0: 6d 6e 3e 20 3d 20 3c 76 61 6c 75 65 3e 3b 0a 23  mn> = <value>;.#
0df0: 0a 73 65 74 20 74 6e 75 6d 20 31 0a 66 6f 72 65  .set tnum 1.fore
0e00: 61 63 68 20 76 61 6c 20 24 76 61 6c 75 65 73 20  ach val $values 
0e10: 7b 0a 20 20 73 65 74 20 6c 69 74 20 5b 6c 69 6e  {.  set lit [lin
0e20: 64 65 78 20 24 76 61 6c 20 30 5d 0a 20 20 65 78  dex $val 0].  ex
0e30: 65 63 73 71 6c 20 22 55 50 44 41 54 45 20 74 31  ecsql "UPDATE t1
0e40: 20 53 45 54 20 69 20 3d 20 24 6c 69 74 2c 20 6e   SET i = $lit, n
0e50: 20 3d 20 24 6c 69 74 2c 20 74 20 3d 20 24 6c 69   = $lit, t = $li
0e60: 74 2c 20 6f 20 3d 20 24 6c 69 74 3b 22 0a 20 20  t, o = $lit;".  
0e70: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 31 2e  do_test types-1.
0e80: 33 2e 24 74 6e 75 6d 20 7b 0a 20 20 20 20 65 78  3.$tnum {.    ex
0e90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
0ea0: 4c 45 43 54 20 74 79 70 65 6f 66 28 69 29 2c 20  LECT typeof(i), 
0eb0: 74 79 70 65 6f 66 28 6e 29 2c 20 74 79 70 65 6f  typeof(n), typeo
0ec0: 66 28 74 29 2c 20 74 79 70 65 6f 66 28 6f 29 20  f(t), typeof(o) 
0ed0: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
0ee0: 20 7d 20 5b 6c 72 61 6e 67 65 20 24 76 61 6c 20   } [lrange $val 
0ef0: 31 20 65 6e 64 5d 0a 20 20 69 6e 63 72 20 74 6e  1 end].  incr tn
0f00: 75 6d 0a 7d 0a 0a 65 78 65 63 73 71 6c 20 7b 0a  um.}..execsql {.
0f10: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
0f20: 0a 7d 0a 0a 23 20 4f 70 65 6e 20 74 68 65 20 74  .}..# Open the t
0f30: 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
0f40: 61 67 65 20 24 72 6f 6f 74 70 61 67 65 20 61 74  age $rootpage at
0f50: 20 74 68 65 20 62 74 72 65 65 0a 23 20 6c 65 76   the btree.# lev
0f60: 65 6c 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73  el. Return a lis
0f70: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6c 65  t that is the le
0f80: 6e 67 74 68 20 6f 66 20 65 61 63 68 20 72 65 63  ngth of each rec
0f90: 6f 72 64 0a 23 20 69 6e 20 74 68 65 20 74 61 62  ord.# in the tab
0fa0: 6c 65 2c 20 69 6e 20 74 68 65 20 74 61 62 6c 65  le, in the table
0fb0: 73 20 64 65 66 61 75 6c 74 20 73 63 61 6e 6e 69  s default scanni
0fc0: 6e 67 20 6f 72 64 65 72 2e 0a 70 72 6f 63 20 72  ng order..proc r
0fd0: 65 63 6f 72 64 5f 73 69 7a 65 73 20 7b 72 6f 6f  ecord_sizes {roo
0fe0: 74 70 61 67 65 7d 20 7b 0a 20 20 73 65 74 20 62  tpage} {.  set b
0ff0: 74 20 5b 62 74 72 65 65 5f 6f 70 65 6e 20 74 65  t [btree_open te
1000: 73 74 2e 64 62 20 31 30 20 30 5d 0a 20 20 73 65  st.db 10 0].  se
1010: 74 20 63 20 5b 62 74 72 65 65 5f 63 75 72 73 6f  t c [btree_curso
1020: 72 20 24 62 74 20 24 72 6f 6f 74 70 61 67 65 20  r $bt $rootpage 
1030: 30 5d 0a 20 20 62 74 72 65 65 5f 66 69 72 73 74  0].  btree_first
1040: 20 24 63 0a 20 20 77 68 69 6c 65 20 31 20 7b 0a   $c.  while 1 {.
1050: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
1060: 5b 62 74 72 65 65 5f 70 61 79 6c 6f 61 64 5f 73  [btree_payload_s
1070: 69 7a 65 20 24 63 5d 0a 20 20 20 20 69 66 20 7b  ize $c].    if {
1080: 5b 62 74 72 65 65 5f 6e 65 78 74 20 24 63 5d 7d  [btree_next $c]}
1090: 20 62 72 65 61 6b 0a 20 20 7d 0a 20 20 62 74 72   break.  }.  btr
10a0: 65 65 5f 63 6c 6f 73 65 5f 63 75 72 73 6f 72 20  ee_close_cursor 
10b0: 24 63 0a 20 20 62 74 72 65 65 5f 63 6c 6f 73 65  $c.  btree_close
10c0: 20 24 62 74 0a 20 20 73 65 74 20 72 65 73 0a 7d   $bt.  set res.}
10d0: 0a 0a 0a 23 20 43 72 65 61 74 65 20 61 20 74 61  ...# Create a ta
10e0: 62 6c 65 20 61 6e 64 20 69 6e 73 65 72 74 20 73  ble and insert s
10f0: 6f 6d 65 20 31 2d 62 79 74 65 20 69 6e 74 65 67  ome 1-byte integ
1100: 65 72 73 2e 20 4d 61 6b 65 20 73 75 72 65 20 74  ers. Make sure t
1110: 68 65 79 20 0a 23 20 63 61 6e 20 62 65 20 72 65  hey .# can be re
1120: 61 64 20 62 61 63 6b 20 4f 4b 2e 20 54 68 65 73  ad back OK. Thes
1130: 65 20 73 68 6f 75 6c 64 20 62 65 20 33 20 62 79  e should be 3 by
1140: 74 65 20 72 65 63 6f 72 64 73 2e 0a 64 6f 5f 74  te records..do_t
1150: 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 31 20  est types-2.1.1 
1160: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1170: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1180: 31 28 61 20 69 6e 74 65 67 65 72 29 3b 0a 20 20  1(a integer);.  
1190: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
11a0: 20 56 41 4c 55 45 53 28 30 29 3b 0a 20 20 20 20   VALUES(0);.    
11b0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
11c0: 41 4c 55 45 53 28 31 32 30 29 3b 0a 20 20 20 20  ALUES(120);.    
11d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
11e0: 41 4c 55 45 53 28 2d 31 32 30 29 3b 0a 20 20 7d  ALUES(-120);.  }
11f0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 79  .} {}.do_test ty
1200: 70 65 73 2d 32 2e 31 2e 32 20 7b 0a 20 20 65 78  pes-2.1.2 {.  ex
1210: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1220: 43 54 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT a FROM t1;.  
1230: 7d 0a 7d 20 7b 30 20 31 32 30 20 2d 31 32 30 7d  }.} {0 120 -120}
1240: 0a 0a 23 20 54 72 79 20 73 6f 6d 65 20 32 2d 62  ..# Try some 2-b
1250: 79 74 65 20 69 6e 74 65 67 65 72 73 20 28 34 20  yte integers (4 
1260: 62 79 74 65 20 72 65 63 6f 72 64 73 29 0a 64 6f  byte records).do
1270: 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e  _test types-2.1.
1280: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1290: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
12a0: 74 31 20 56 41 4c 55 45 53 28 33 30 30 30 30 29  t1 VALUES(30000)
12b0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
12c0: 4f 20 74 31 20 56 41 4c 55 45 53 28 2d 33 30 30  O t1 VALUES(-300
12d0: 30 30 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  00);.  }.} {}.do
12e0: 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e  _test types-2.1.
12f0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1300: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1310: 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31  M t1;.  }.} {0 1
1320: 32 30 20 2d 31 32 30 20 33 30 30 30 30 20 2d 33  20 -120 30000 -3
1330: 30 30 30 30 7d 0a 0a 23 20 34 2d 62 79 74 65 20  0000}..# 4-byte 
1340: 69 6e 74 65 67 65 72 73 20 28 36 20 62 79 74 65  integers (6 byte
1350: 20 72 65 63 6f 72 64 73 29 0a 64 6f 5f 74 65 73   records).do_tes
1360: 74 20 74 79 70 65 73 2d 32 2e 31 2e 35 20 7b 0a  t types-2.1.5 {.
1370: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1380: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1390: 41 4c 55 45 53 28 32 31 30 30 30 30 30 30 30 30  ALUES(2100000000
13a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
13b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 2d 32 31  TO t1 VALUES(-21
13c0: 30 30 30 30 30 30 30 30 29 3b 0a 20 20 7d 0a 7d  00000000);.  }.}
13d0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 79 70 65   {}.do_test type
13e0: 73 2d 32 2e 31 2e 36 20 7b 0a 20 20 65 78 65 63  s-2.1.6 {.  exec
13f0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1400: 20 61 20 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a   a FROM t1;.  }.
1410: 7d 20 7b 30 20 31 32 30 20 2d 31 32 30 20 33 30  } {0 120 -120 30
1420: 30 30 30 20 2d 33 30 30 30 30 20 32 31 30 30 30  000 -30000 21000
1430: 30 30 30 30 30 20 2d 32 31 30 30 30 30 30 30 30  00000 -210000000
1440: 30 7d 0a 0a 23 20 38 2d 62 79 74 65 20 69 6e 74  0}..# 8-byte int
1450: 65 67 65 72 73 20 28 31 30 20 62 79 74 65 20 72  egers (10 byte r
1460: 65 63 6f 72 64 73 29 0a 64 6f 5f 74 65 73 74 20  ecords).do_test 
1470: 74 79 70 65 73 2d 32 2e 31 2e 37 20 7b 0a 20 20  types-2.1.7 {.  
1480: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
1490: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
14a0: 55 45 53 28 39 30 30 30 30 30 30 2a 31 30 30 30  UES(9000000*1000
14b0: 30 30 30 2a 31 30 30 30 30 30 30 29 3b 0a 20 20  000*1000000);.  
14c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
14d0: 20 56 41 4c 55 45 53 28 2d 39 30 30 30 30 30 30   VALUES(-9000000
14e0: 2a 31 30 30 30 30 30 30 2a 31 30 30 30 30 30 30  *1000000*1000000
14f0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
1500: 65 73 74 20 74 79 70 65 73 2d 32 2e 31 2e 38 20  est types-2.1.8 
1510: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1520: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
1530: 74 31 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20  t1;.  }.} [list 
1540: 30 20 31 32 30 20 2d 31 32 30 20 33 30 30 30 30  0 120 -120 30000
1550: 20 2d 33 30 30 30 30 20 32 31 30 30 30 30 30 30   -30000 21000000
1560: 30 30 20 2d 32 31 30 30 30 30 30 30 30 30 20 5c  00 -2100000000 \
1570: 0a 20 20 20 20 20 20 20 20 39 30 30 30 30 30 30  .        9000000
1580: 30 30 30 30 30 30 30 30 30 30 30 30 20 2d 39 30  000000000000 -90
1590: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
15a0: 30 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  0]..# Check that
15b0: 20 61 6c 6c 20 74 68 65 20 72 65 63 6f 72 64 20   all the record 
15c0: 73 69 7a 65 73 20 61 72 65 20 61 73 20 77 65 20  sizes are as we 
15d0: 65 78 70 65 63 74 65 64 2e 0a 64 6f 5f 74 65 73  expected..do_tes
15e0: 74 20 74 79 70 65 73 2d 32 2e 31 2e 39 20 7b 0a  t types-2.1.9 {.
15f0: 20 20 73 65 74 20 72 6f 6f 74 20 5b 64 62 20 65    set root [db e
1600: 76 61 6c 20 7b 73 65 6c 65 63 74 20 72 6f 6f 74  val {select root
1610: 70 61 67 65 20 66 72 6f 6d 20 73 71 6c 69 74 65  page from sqlite
1620: 5f 6d 61 73 74 65 72 20 77 68 65 72 65 20 6e 61  _master where na
1630: 6d 65 20 3d 20 27 74 31 27 7d 5d 0a 20 20 72 65  me = 't1'}].  re
1640: 63 6f 72 64 5f 73 69 7a 65 73 20 24 72 6f 6f 74  cord_sizes $root
1650: 0a 7d 20 7b 33 20 33 20 33 20 34 20 34 20 36 20  .} {3 3 3 4 4 6 
1660: 36 20 31 30 20 31 30 7d 0a 0a 23 20 49 6e 73 65  6 10 10}..# Inse
1670: 72 74 20 73 6f 6d 65 20 72 65 61 6c 73 2e 20 54  rt some reals. T
1680: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 31  hese should be 1
1690: 30 20 62 79 74 65 20 72 65 63 6f 72 64 73 2e 0a  0 byte records..
16a0: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e  do_test types-2.
16b0: 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.1 {.  execsql 
16c0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
16d0: 4c 45 20 74 32 28 61 20 66 6c 6f 61 74 29 3b 0a  LE t2(a float);.
16e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
16f0: 74 32 20 56 41 4c 55 45 53 28 30 2e 30 29 3b 0a  t2 VALUES(0.0);.
1700: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1710: 74 32 20 56 41 4c 55 45 53 28 31 32 33 34 35 2e  t2 VALUES(12345.
1720: 36 37 38 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  678);.    INSERT
1730: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
1740: 2d 31 32 33 34 35 2e 36 37 38 29 3b 0a 20 20 7d  -12345.678);.  }
1750: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 79  .} {}.do_test ty
1760: 70 65 73 2d 32 2e 32 2e 32 20 7b 0a 20 20 65 78  pes-2.2.2 {.  ex
1770: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1780: 43 54 20 61 20 46 52 4f 4d 20 74 32 3b 0a 20 20  CT a FROM t2;.  
1790: 7d 0a 7d 20 7b 30 2e 30 20 31 32 33 34 35 2e 36  }.} {0.0 12345.6
17a0: 37 38 20 2d 31 32 33 34 35 2e 36 37 38 7d 0a 0a  78 -12345.678}..
17b0: 23 20 43 68 65 63 6b 20 74 68 61 74 20 61 6c 6c  # Check that all
17c0: 20 74 68 65 20 72 65 63 6f 72 64 20 73 69 7a 65   the record size
17d0: 73 20 61 72 65 20 61 73 20 77 65 20 65 78 70 65  s are as we expe
17e0: 63 74 65 64 2e 0a 64 6f 5f 74 65 73 74 20 74 79  cted..do_test ty
17f0: 70 65 73 2d 32 2e 32 2e 33 20 7b 0a 20 20 73 65  pes-2.2.3 {.  se
1800: 74 20 72 6f 6f 74 20 5b 64 62 20 65 76 61 6c 20  t root [db eval 
1810: 7b 73 65 6c 65 63 74 20 72 6f 6f 74 70 61 67 65  {select rootpage
1820: 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d 61 73   from sqlite_mas
1830: 74 65 72 20 77 68 65 72 65 20 6e 61 6d 65 20 3d  ter where name =
1840: 20 27 74 32 27 7d 5d 0a 20 20 72 65 63 6f 72 64   't2'}].  record
1850: 5f 73 69 7a 65 73 20 24 72 6f 6f 74 0a 7d 20 7b  _sizes $root.} {
1860: 31 30 20 31 30 20 31 30 7d 0a 0a 23 20 49 6e 73  10 10 10}..# Ins
1870: 65 72 74 20 61 20 4e 55 4c 4c 2e 20 54 68 69 73  ert a NULL. This
1880: 20 73 68 6f 75 6c 64 20 62 65 20 61 20 74 77 6f   should be a two
1890: 20 62 79 74 65 20 72 65 63 6f 72 64 2e 0a 64 6f   byte record..do
18a0: 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e 33 2e  _test types-2.3.
18b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
18c0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
18d0: 20 74 33 28 61 20 6e 75 6c 6c 76 61 6c 75 65 29   t3(a nullvalue)
18e0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
18f0: 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t3 VALUES(NULL
1900: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
1910: 65 73 74 20 74 79 70 65 73 2d 32 2e 33 2e 32 20  est types-2.3.2 
1920: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1930: 20 20 53 45 4c 45 43 54 20 61 20 49 53 4e 55 4c    SELECT a ISNUL
1940: 4c 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d  L FROM t3;.  }.}
1950: 20 7b 31 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68   {1}..# Check th
1960: 61 74 20 61 6c 6c 20 74 68 65 20 72 65 63 6f 72  at all the recor
1970: 64 20 73 69 7a 65 73 20 61 72 65 20 61 73 20 77  d sizes are as w
1980: 65 20 65 78 70 65 63 74 65 64 2e 0a 64 6f 5f 74  e expected..do_t
1990: 65 73 74 20 74 79 70 65 73 2d 32 2e 33 2e 33 20  est types-2.3.3 
19a0: 7b 0a 20 20 73 65 74 20 72 6f 6f 74 20 5b 64 62  {.  set root [db
19b0: 20 65 76 61 6c 20 7b 73 65 6c 65 63 74 20 72 6f   eval {select ro
19c0: 6f 74 70 61 67 65 20 66 72 6f 6d 20 73 71 6c 69  otpage from sqli
19d0: 74 65 5f 6d 61 73 74 65 72 20 77 68 65 72 65 20  te_master where 
19e0: 6e 61 6d 65 20 3d 20 27 74 33 27 7d 5d 0a 20 20  name = 't3'}].  
19f0: 72 65 63 6f 72 64 5f 73 69 7a 65 73 20 24 72 6f  record_sizes $ro
1a00: 6f 74 0a 7d 20 7b 32 7d 0a 0a 23 20 49 6e 73 65  ot.} {2}..# Inse
1a10: 72 74 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 73  rt a couple of s
1a20: 74 72 69 6e 67 73 2e 0a 64 6f 5f 74 65 73 74 20  trings..do_test 
1a30: 74 79 70 65 73 2d 32 2e 34 2e 31 20 7b 0a 20 20  types-2.4.1 {.  
1a40: 73 65 74 20 73 74 72 69 6e 67 31 30 20 61 62 63  set string10 abc
1a50: 64 65 66 67 68 69 6a 0a 20 20 73 65 74 20 73 74  defghij.  set st
1a60: 72 69 6e 67 35 30 30 20 5b 73 74 72 69 6e 67 20  ring500 [string 
1a70: 72 65 70 65 61 74 20 24 73 74 72 69 6e 67 31 30  repeat $string10
1a80: 20 35 30 5d 0a 20 20 73 65 74 20 73 74 72 69 6e   50].  set strin
1a90: 67 35 30 30 30 30 30 20 5b 73 74 72 69 6e 67 20  g500000 [string 
1aa0: 72 65 70 65 61 74 20 24 73 74 72 69 6e 67 31 30  repeat $string10
1ab0: 20 35 30 30 30 30 5d 0a 0a 20 20 65 78 65 63 73   50000]..  execs
1ac0: 71 6c 20 22 0a 20 20 20 20 43 52 45 41 54 45 20  ql ".    CREATE 
1ad0: 54 41 42 4c 45 20 74 34 28 61 20 73 74 72 69 6e  TABLE t4(a strin
1ae0: 67 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  g);.    INSERT I
1af0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 24  NTO t4 VALUES('$
1b00: 73 74 72 69 6e 67 31 30 27 29 3b 0a 20 20 20 20  string10');.    
1b10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
1b20: 41 4c 55 45 53 28 27 24 73 74 72 69 6e 67 35 30  ALUES('$string50
1b30: 30 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  0');.    INSERT 
1b40: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
1b50: 24 73 74 72 69 6e 67 35 30 30 30 30 30 27 29 3b  $string500000');
1b60: 0a 20 20 22 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  ".} {}.do_tes
1b70: 74 20 74 79 70 65 73 2d 32 2e 34 2e 32 20 7b 0a  t types-2.4.2 {.
1b80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1b90: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 34  SELECT a FROM t4
1ba0: 3b 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 73  ;.  }.} [list $s
1bb0: 74 72 69 6e 67 31 30 20 24 73 74 72 69 6e 67 35  tring10 $string5
1bc0: 30 30 20 24 73 74 72 69 6e 67 35 30 30 30 30 30  00 $string500000
1bd0: 5d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74 20  ]..# Check that 
1be0: 61 6c 6c 20 74 68 65 20 72 65 63 6f 72 64 20 73  all the record s
1bf0: 69 7a 65 73 20 61 72 65 20 61 73 20 77 65 20 65  izes are as we e
1c00: 78 70 65 63 74 65 64 2e 20 54 68 69 73 20 69 73  xpected. This is
1c10: 20 64 65 70 65 6e 64 61 6e 74 20 6f 6e 0a 23 20   dependant on.# 
1c20: 74 68 65 20 64 61 74 61 62 61 73 65 20 65 6e 63  the database enc
1c30: 6f 64 69 6e 67 2e 0a 69 66 20 7b 20 24 73 71 6c  oding..if { $sql
1c40: 69 74 65 5f 6f 70 74 69 6f 6e 73 28 75 74 66 31  ite_options(utf1
1c50: 36 29 3d 3d 30 20 7c 7c 20 5b 65 78 65 63 73 71  6)==0 || [execsq
1c60: 6c 20 7b 70 72 61 67 6d 61 20 65 6e 63 6f 64 69  l {pragma encodi
1c70: 6e 67 7d 5d 20 3d 3d 20 22 55 54 46 2d 38 22 20  ng}] == "UTF-8" 
1c80: 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 74 79  } {.  do_test ty
1c90: 70 65 73 2d 32 2e 34 2e 33 20 7b 0a 20 20 20 20  pes-2.4.3 {.    
1ca0: 73 65 74 20 72 6f 6f 74 20 5b 64 62 20 65 76 61  set root [db eva
1cb0: 6c 20 7b 73 65 6c 65 63 74 20 72 6f 6f 74 70 61  l {select rootpa
1cc0: 67 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 6d  ge from sqlite_m
1cd0: 61 73 74 65 72 20 77 68 65 72 65 20 6e 61 6d 65  aster where name
1ce0: 20 3d 20 27 74 34 27 7d 5d 0a 20 20 20 20 72 65   = 't4'}].    re
1cf0: 63 6f 72 64 5f 73 69 7a 65 73 20 24 72 6f 6f 74  cord_sizes $root
1d00: 0a 20 20 7d 20 7b 31 32 20 35 30 33 20 35 30 30  .  } {12 503 500
1d10: 30 30 34 7d 0a 7d 20 65 6c 73 65 20 7b 0a 20 20  004}.} else {.  
1d20: 64 6f 5f 74 65 73 74 20 74 79 70 65 73 2d 32 2e  do_test types-2.
1d30: 34 2e 33 20 7b 0a 20 20 20 20 73 65 74 20 72 6f  4.3 {.    set ro
1d40: 6f 74 20 5b 64 62 20 65 76 61 6c 20 7b 73 65 6c  ot [db eval {sel
1d50: 65 63 74 20 72 6f 6f 74 70 61 67 65 20 66 72 6f  ect rootpage fro
1d60: 6d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  m sqlite_master 
1d70: 77 68 65 72 65 20 6e 61 6d 65 20 3d 20 27 74 34  where name = 't4
1d80: 27 7d 5d 0a 20 20 20 20 72 65 63 6f 72 64 5f 73  '}].    record_s
1d90: 69 7a 65 73 20 24 72 6f 6f 74 0a 20 20 7d 20 7b  izes $root.  } {
1da0: 32 32 20 31 30 30 33 20 31 30 30 30 30 30 34 7d  22 1003 1000004}
1db0: 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 74 79 70 65  .}..do_test type
1dc0: 73 2d 32 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63  s-2.5.1 {.  exec
1dd0: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
1de0: 41 42 4c 45 20 74 31 3b 0a 20 20 20 20 44 52 4f  ABLE t1;.    DRO
1df0: 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20 20  P TABLE t2;.    
1e00: 44 52 4f 50 20 54 41 42 4c 45 20 74 33 3b 0a 20  DROP TABLE t3;. 
1e10: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 34     DROP TABLE t4
1e20: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
1e30: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t1(a, b, c);.
1e40: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1e50: 20 74 79 70 65 73 2d 32 2e 35 2e 32 20 7b 0a 20   types-2.5.2 {. 
1e60: 20 73 65 74 20 73 74 72 69 6e 67 31 30 20 61 62   set string10 ab
1e70: 63 64 65 66 67 68 69 6a 0a 20 20 73 65 74 20 73  cdefghij.  set s
1e80: 74 72 69 6e 67 35 30 30 20 5b 73 74 72 69 6e 67  tring500 [string
1e90: 20 72 65 70 65 61 74 20 24 73 74 72 69 6e 67 31   repeat $string1
1ea0: 30 20 35 30 5d 0a 20 20 73 65 74 20 73 74 72 69  0 50].  set stri
1eb0: 6e 67 35 30 30 30 30 30 20 5b 73 74 72 69 6e 67  ng500000 [string
1ec0: 20 72 65 70 65 61 74 20 24 73 74 72 69 6e 67 31   repeat $string1
1ed0: 30 20 35 30 30 30 30 5d 0a 0a 20 20 65 78 65 63  0 50000]..  exec
1ee0: 73 71 6c 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  sql "INSERT INTO
1ef0: 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t1 VALUES(NULL,
1f00: 20 27 24 73 74 72 69 6e 67 31 30 27 2c 20 34 30   '$string10', 40
1f10: 30 30 29 3b 22 0a 20 20 65 78 65 63 73 71 6c 20  00);".  execsql 
1f20: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
1f30: 56 41 4c 55 45 53 28 27 24 73 74 72 69 6e 67 35  VALUES('$string5
1f40: 30 30 27 2c 20 34 30 30 30 2c 20 4e 55 4c 4c 29  00', 4000, NULL)
1f50: 3b 22 0a 20 20 65 78 65 63 73 71 6c 20 22 49 4e  ;".  execsql "IN
1f60: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
1f70: 55 45 53 28 34 30 30 30 2c 20 4e 55 4c 4c 2c 20  UES(4000, NULL, 
1f80: 27 24 73 74 72 69 6e 67 35 30 30 30 30 30 27 29  '$string500000')
1f90: 3b 22 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20  ;".} {}.do_test 
1fa0: 74 79 70 65 73 2d 32 2e 35 2e 33 20 7b 0a 20 20  types-2.5.3 {.  
1fb0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1fc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a  LECT * FROM t1;.
1fd0: 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 7b 7d 20 24    }.} [list {} $
1fe0: 73 74 72 69 6e 67 31 30 20 34 30 30 30 20 24 73  string10 4000 $s
1ff0: 74 72 69 6e 67 35 30 30 20 34 30 30 30 20 7b 7d  tring500 4000 {}
2000: 20 34 30 30 30 20 7b 7d 20 24 73 74 72 69 6e 67   4000 {} $string
2010: 35 30 30 30 30 30 5d 0a 0a 66 69 6e 69 73 68 5f  500000]..finish_
2020: 74 65 73 74 0a                                   test.