/ Hex Artifact Content
Login

Artifact f0aeb7573dcb8caaafea76454be3ade29b7fc747:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 32 33 0a 23 0a 23 20 54 68 65 20 61 75 74 68   23.#.# 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 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 73 74 72 65 73 73 69 6e 67 20 74 68 65  is stressing the
01d0: 20 6c 69 62 72 61 72 79 20 62 79 20 70 75 74 74   library by putt
01e0: 69 6e 67 20 6c 61 72 67 65 20 61 6d 6f 75 6e 74  ing large amount
01f0: 73 0a 23 20 6f 66 20 64 61 74 61 20 69 6e 20 61  s.# of data in a
0200: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 61   single row of a
0210: 20 74 61 62 6c 65 2e 0a 23 0a 23 20 24 49 64 3a   table..#.# $Id:
0220: 20 62 69 67 72 6f 77 2e 74 65 73 74 2c 76 20 31   bigrow.test,v 1
0230: 2e 35 20 32 30 30 34 2f 30 38 2f 30 37 20 32 33  .5 2004/08/07 23
0240: 3a 35 34 3a 34 38 20 64 72 68 20 45 78 70 20 24  :54:48 drh Exp $
0250: 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66  ..set testdir [f
0260: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67  ile dirname $arg
0270: 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74  v0].source $test
0280: 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a  dir/tester.tcl..
0290: 23 20 4d 61 6b 65 20 61 20 62 69 67 20 73 74 72  # Make a big str
02a0: 69 6e 67 20 74 68 61 74 20 77 65 20 63 61 6e 20  ing that we can 
02b0: 75 73 65 20 66 6f 72 20 74 65 73 74 20 64 61 74  use for test dat
02c0: 61 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69 67 72  a.#.do_test bigr
02d0: 6f 77 2d 31 2e 30 20 7b 0a 20 20 73 65 74 20 3a  ow-1.0 {.  set :
02e0: 3a 62 69 67 73 74 72 20 7b 7d 0a 20 20 66 6f 72  :bigstr {}.  for
02f0: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d   {set i 1} {$i<=
0300: 39 39 39 39 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  9999} {incr i} {
0310: 0a 20 20 20 20 73 65 74 20 73 65 70 20 5b 73 74  .    set sep [st
0320: 72 69 6e 67 20 69 6e 64 65 78 20 22 61 62 63 64  ring index "abcd
0330: 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74  efghijklmnopqrst
0340: 75 76 77 78 79 7a 22 20 5b 65 78 70 72 20 7b 24  uvwxyz" [expr {$
0350: 69 25 32 36 7d 5d 5d 0a 20 20 20 20 61 70 70 65  i%26}]].    appe
0360: 6e 64 20 3a 3a 62 69 67 73 74 72 20 22 24 73 65  nd ::bigstr "$se
0370: 70 20 5b 66 6f 72 6d 61 74 20 25 30 34 64 20 24  p [format %04d $
0380: 69 5d 20 22 0a 20 20 7d 0a 20 20 73 74 72 69 6e  i] ".  }.  strin
0390: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 67 73  g length $::bigs
03a0: 74 72 0a 7d 20 7b 36 39 39 39 33 7d 0a 0a 23 20  tr.} {69993}..# 
03b0: 4d 61 6b 65 20 61 20 74 61 62 6c 65 20 69 6e 74  Make a table int
03c0: 6f 20 77 68 69 63 68 20 77 65 20 63 61 6e 20 69  o which we can i
03d0: 6e 73 65 72 74 20 73 6f 6d 65 20 62 75 74 20 72  nsert some but r
03e0: 65 63 6f 72 64 73 2e 0a 23 0a 64 6f 5f 74 65 73  ecords..#.do_tes
03f0: 74 20 62 69 67 72 6f 77 2d 31 2e 31 20 7b 0a 20  t bigrow-1.1 {. 
0400: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
0410: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
0420: 20 74 65 78 74 2c 20 62 20 74 65 78 74 2c 20 63   text, b text, c
0430: 20 74 65 78 74 29 3b 0a 20 20 20 20 53 45 4c 45   text);.    SELE
0440: 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  CT name FROM sql
0450: 69 74 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 20  ite_master.     
0460: 20 57 48 45 52 45 20 74 79 70 65 3d 27 74 61 62   WHERE type='tab
0470: 6c 65 27 20 4f 52 20 74 79 70 65 3d 27 69 6e 64  le' OR type='ind
0480: 65 78 27 0a 20 20 20 20 20 20 4f 52 44 45 52 20  ex'.      ORDER 
0490: 42 59 20 6e 61 6d 65 0a 20 20 7d 0a 7d 20 7b 74  BY name.  }.} {t
04a0: 31 7d 0a 0a 64 6f 5f 74 65 73 74 20 62 69 67 72  1}..do_test bigr
04b0: 6f 77 2d 31 2e 32 20 7b 0a 20 20 73 65 74 20 3a  ow-1.2 {.  set :
04c0: 3a 62 69 67 31 20 5b 73 74 72 69 6e 67 20 72 61  :big1 [string ra
04d0: 6e 67 65 20 24 3a 3a 62 69 67 73 74 72 20 30 20  nge $::bigstr 0 
04e0: 36 35 35 31 39 5d 0a 20 20 73 65 74 20 73 71 6c  65519].  set sql
04f0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
0500: 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 22 0a   VALUES('abc',".
0510: 20 20 61 70 70 65 6e 64 20 73 71 6c 20 22 27 24    append sql "'$
0520: 3a 3a 62 69 67 31 27 2c 20 27 78 79 7a 27 29 3b  ::big1', 'xyz');
0530: 22 0a 20 20 65 78 65 63 73 71 6c 20 24 73 71 6c  ".  execsql $sql
0540: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0550: 43 54 20 61 2c 20 63 20 46 52 4f 4d 20 74 31 7d  CT a, c FROM t1}
0560: 0a 7d 20 7b 61 62 63 20 78 79 7a 7d 0a 64 6f 5f  .} {abc xyz}.do_
0570: 74 65 73 74 20 62 69 67 72 6f 77 2d 31 2e 33 20  test bigrow-1.3 
0580: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  {.  execsql {SEL
0590: 45 43 54 20 62 20 46 52 4f 4d 20 74 31 7d 0a 7d  ECT b FROM t1}.}
05a0: 20 5b 6c 69 73 74 20 24 3a 3a 62 69 67 31 5d 0a   [list $::big1].
05b0: 64 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 31  do_test bigrow-1
05c0: 2e 34 20 7b 0a 20 20 73 65 74 20 3a 3a 62 69 67  .4 {.  set ::big
05d0: 32 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 20  2 [string range 
05e0: 24 3a 3a 62 69 67 73 74 72 20 30 20 36 35 35 32  $::bigstr 0 6552
05f0: 30 5d 0a 20 20 73 65 74 20 73 71 6c 20 22 49 4e  0].  set sql "IN
0600: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0610: 55 45 53 28 27 61 62 63 32 27 2c 22 0a 20 20 61  UES('abc2',".  a
0620: 70 70 65 6e 64 20 73 71 6c 20 22 27 24 3a 3a 62  ppend sql "'$::b
0630: 69 67 32 27 2c 20 27 78 79 7a 32 27 29 3b 22 0a  ig2', 'xyz2');".
0640: 20 20 73 65 74 20 72 20 5b 63 61 74 63 68 20 7b    set r [catch {
0650: 65 78 65 63 73 71 6c 20 24 73 71 6c 7d 20 6d 73  execsql $sql} ms
0660: 67 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 20 24  g].  lappend r $
0670: 6d 73 67 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  msg.} {0 {}}.do_
0680: 74 65 73 74 20 62 69 67 72 6f 77 2d 31 2e 34 2e  test bigrow-1.4.
0690: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
06a0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20  ELECT b FROM t1 
06b0: 4f 52 44 45 52 20 42 59 20 63 7d 0a 7d 20 5b 6c  ORDER BY c}.} [l
06c0: 69 73 74 20 24 3a 3a 62 69 67 31 20 24 3a 3a 62  ist $::big1 $::b
06d0: 69 67 32 5d 0a 64 6f 5f 74 65 73 74 20 62 69 67  ig2].do_test big
06e0: 72 6f 77 2d 31 2e 34 2e 32 20 7b 0a 20 20 65 78  row-1.4.2 {.  ex
06f0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 63 20  ecsql {SELECT c 
0700: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0710: 20 63 7d 0a 7d 20 7b 78 79 7a 20 78 79 7a 32 7d   c}.} {xyz xyz2}
0720: 0a 64 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d  .do_test bigrow-
0730: 31 2e 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  1.4.3 {.  execsq
0740: 6c 20 7b 44 45 4c 45 54 45 20 46 52 4f 4d 20 74  l {DELETE FROM t
0750: 31 20 57 48 45 52 45 20 61 3d 27 61 62 63 32 27  1 WHERE a='abc2'
0760: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c  }.  execsql {SEL
0770: 45 43 54 20 63 20 46 52 4f 4d 20 74 31 7d 0a 7d  ECT c FROM t1}.}
0780: 20 7b 78 79 7a 7d 0a 0a 64 6f 5f 74 65 73 74 20   {xyz}..do_test 
0790: 62 69 67 72 6f 77 2d 31 2e 35 20 7b 0a 20 20 65  bigrow-1.5 {.  e
07a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
07b0: 41 54 45 20 74 31 20 53 45 54 20 61 3d 62 2c 20  ATE t1 SET a=b, 
07c0: 62 3d 61 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  b=a;.    SELECT 
07d0: 62 2c 63 20 46 52 4f 4d 20 74 31 0a 20 20 7d 0a  b,c FROM t1.  }.
07e0: 7d 20 7b 61 62 63 20 78 79 7a 7d 0a 64 6f 5f 74  } {abc xyz}.do_t
07f0: 65 73 74 20 62 69 67 72 6f 77 2d 31 2e 36 20 7b  est bigrow-1.6 {
0800: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0810: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
0820: 31 0a 20 20 7d 0a 7d 20 5b 6c 69 73 74 20 24 3a  1.  }.} [list $:
0830: 3a 62 69 67 31 20 61 62 63 20 78 79 7a 5d 0a 64  :big1 abc xyz].d
0840: 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 31 2e  o_test bigrow-1.
0850: 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  7 {.  execsql {.
0860: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0870: 74 31 20 56 41 4c 55 45 53 28 27 31 27 2c 27 32  t1 VALUES('1','2
0880: 27 2c 27 33 27 29 3b 0a 20 20 20 20 49 4e 53 45  ','3');.    INSE
0890: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
08a0: 53 28 27 41 27 2c 27 42 27 2c 27 43 27 29 3b 0a  S('A','B','C');.
08b0: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
08c0: 4d 20 74 31 20 57 48 45 52 45 20 61 3d 3d 27 31  M t1 WHERE a=='1
08d0: 27 3b 0a 20 20 7d 0a 7d 20 7b 32 7d 0a 64 6f 5f  ';.  }.} {2}.do_
08e0: 74 65 73 74 20 62 69 67 72 6f 77 2d 31 2e 38 20  test bigrow-1.8 
08f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 22 53 45 4c  {.  execsql "SEL
0900: 45 43 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48  ECT b FROM t1 WH
0910: 45 52 45 20 61 3d 3d 27 24 3a 3a 62 69 67 31 27  ERE a=='$::big1'
0920: 22 0a 7d 20 7b 61 62 63 7d 0a 64 6f 5f 74 65 73  ".} {abc}.do_tes
0930: 74 20 62 69 67 72 6f 77 2d 31 2e 39 20 7b 0a 20  t bigrow-1.9 {. 
0940: 20 65 78 65 63 73 71 6c 20 22 53 45 4c 45 43 54   execsql "SELECT
0950: 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   b FROM t1 WHERE
0960: 20 61 21 3d 27 24 3a 3a 62 69 67 31 27 20 4f 52   a!='$::big1' OR
0970: 44 45 52 20 42 59 20 61 22 0a 7d 20 7b 32 20 42  DER BY a".} {2 B
0980: 7d 0a 0a 23 20 54 72 79 20 64 6f 69 6e 67 20 73  }..# Try doing s
0990: 6f 6d 65 20 69 6e 64 65 78 69 6e 67 20 6f 6e 20  ome indexing on 
09a0: 62 69 67 20 63 6f 6c 75 6d 6e 73 0a 23 0a 64 6f  big columns.#.do
09b0: 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 32 2e 31  _test bigrow-2.1
09c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
09d0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
09e0: 69 31 20 4f 4e 20 74 31 28 61 29 0a 20 20 7d 0a  i1 ON t1(a).  }.
09f0: 20 20 65 78 65 63 73 71 6c 20 22 53 45 4c 45 43    execsql "SELEC
0a00: 54 20 62 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T b FROM t1 WHER
0a10: 45 20 61 3d 3d 27 24 3a 3a 62 69 67 31 27 22 0a  E a=='$::big1'".
0a20: 7d 20 7b 61 62 63 7d 0a 64 6f 5f 74 65 73 74 20  } {abc}.do_test 
0a30: 62 69 67 72 6f 77 2d 32 2e 32 20 7b 0a 20 20 65  bigrow-2.2 {.  e
0a40: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44  xecsql {.    UPD
0a50: 41 54 45 20 74 31 20 53 45 54 20 61 3d 62 2c 20  ATE t1 SET a=b, 
0a60: 62 3d 61 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  b=a.  }.  execsq
0a70: 6c 20 22 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  l "SELECT b FROM
0a80: 20 74 31 20 57 48 45 52 45 20 61 3d 3d 27 61 62   t1 WHERE a=='ab
0a90: 63 27 22 0a 7d 20 5b 6c 69 73 74 20 24 3a 3a 62  c'".} [list $::b
0aa0: 69 67 31 5d 0a 64 6f 5f 74 65 73 74 20 62 69 67  ig1].do_test big
0ab0: 72 6f 77 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63  row-2.3 {.  exec
0ac0: 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  sql {.    UPDATE
0ad0: 20 74 31 20 53 45 54 20 61 3d 62 2c 20 62 3d 61   t1 SET a=b, b=a
0ae0: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 22  .  }.  execsql "
0af0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 31  SELECT b FROM t1
0b00: 20 57 48 45 52 45 20 61 3d 3d 27 24 3a 3a 62 69   WHERE a=='$::bi
0b10: 67 31 27 22 0a 7d 20 7b 61 62 63 7d 0a 63 61 74  g1'".} {abc}.cat
0b20: 63 68 20 7b 75 6e 73 65 74 20 3a 3a 62 69 67 73  ch {unset ::bigs
0b30: 74 72 7d 0a 63 61 74 63 68 20 7b 75 6e 73 65 74  tr}.catch {unset
0b40: 20 3a 3a 62 69 67 31 7d 0a 63 61 74 63 68 20 7b   ::big1}.catch {
0b50: 75 6e 73 65 74 20 3a 3a 62 69 67 32 7d 0a 0a 23  unset ::big2}..#
0b60: 20 4d 6f 73 74 73 20 6f 66 20 74 68 65 20 74 65   Mosts of the te
0b70: 73 74 73 20 61 62 6f 76 65 20 77 65 72 65 20 63  sts above were c
0b80: 72 65 61 74 65 64 20 62 61 63 6b 20 77 68 65 6e  reated back when
0b90: 20 72 6f 77 73 20 77 65 72 65 20 6c 69 6d 69 74   rows were limit
0ba0: 65 64 20 69 6e 0a 23 20 73 69 7a 65 20 74 6f 20  ed in.# size to 
0bb0: 36 34 4b 2e 20 20 4e 6f 77 20 72 6f 77 73 20 63  64K.  Now rows c
0bc0: 61 6e 20 62 65 20 6d 75 63 68 20 62 69 67 67 65  an be much bigge
0bd0: 72 2e 20 20 54 65 73 74 20 74 68 61 74 20 6c 6f  r.  Test that lo
0be0: 67 69 63 2e 20 20 41 6c 73 6f 0a 23 20 6d 61 6b  gic.  Also.# mak
0bf0: 65 20 73 75 72 65 20 74 68 69 6e 67 73 20 77 6f  e sure things wo
0c00: 72 6b 20 63 6f 72 72 65 63 74 6c 79 20 61 74 20  rk correctly at 
0c10: 74 68 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62  the transition b
0c20: 6f 75 6e 64 72 69 65 73 20 62 65 74 77 65 65 6e  oundries between
0c30: 0a 23 20 72 6f 77 20 73 69 7a 65 73 20 6f 66 20  .# row sizes of 
0c40: 32 35 36 20 74 6f 20 32 35 37 20 62 79 74 65 73  256 to 257 bytes
0c50: 20 61 6e 64 20 66 72 6f 6d 20 36 35 35 33 36 20   and from 65536 
0c60: 74 6f 20 36 35 35 33 37 20 62 79 74 65 73 2e 0a  to 65537 bytes..
0c70: 23 0a 23 20 57 65 20 62 65 67 69 6e 20 62 79 20  #.# We begin by 
0c80: 74 65 73 74 69 6e 67 20 74 68 65 20 32 35 36 2e  testing the 256.
0c90: 2e 32 35 37 20 74 72 61 6e 73 69 74 69 6f 6e 2e  .257 transition.
0ca0: 0a 23 0a 64 6f 5f 74 65 73 74 20 62 69 67 72 6f  .#.do_test bigro
0cb0: 77 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  w-3.1 {.  execsq
0cc0: 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46  l {.    DELETE F
0cd0: 52 4f 4d 20 74 31 3b 0a 20 20 20 20 49 4e 53 45  ROM t1;.    INSE
0ce0: 52 54 20 49 4e 54 4f 20 74 31 28 61 2c 62 2c 63  RT INTO t1(a,b,c
0cf0: 29 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 27  ) VALUES('one','
0d00: 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  abcdefghijklmnop
0d10: 71 72 73 74 75 76 77 78 79 7a 30 31 32 33 27 2c  qrstuvwxyz0123',
0d20: 27 68 69 27 29 3b 0a 20 20 7d 0a 20 20 65 78 65  'hi');.  }.  exe
0d30: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c 6c  csql {SELECT a,l
0d40: 65 6e 67 74 68 28 62 29 2c 63 20 46 52 4f 4d 20  ength(b),c FROM 
0d50: 74 31 7d 0a 7d 20 7b 6f 6e 65 20 33 30 20 68 69  t1}.} {one 30 hi
0d60: 7d 0a 64 6f 5f 74 65 73 74 20 62 69 67 72 6f 77  }.do_test bigrow
0d70: 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.2 {.  execsql
0d80: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31   {.    UPDATE t1
0d90: 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a 20 20 20   SET b=b||b;.   
0da0: 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62   UPDATE t1 SET b
0db0: 3d 62 7c 7c 62 3b 0a 20 20 20 20 55 50 44 41 54  =b||b;.    UPDAT
0dc0: 45 20 74 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b  E t1 SET b=b||b;
0dd0: 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b  .  }.  execsql {
0de0: 53 45 4c 45 43 54 20 61 2c 6c 65 6e 67 74 68 28  SELECT a,length(
0df0: 62 29 2c 63 20 46 52 4f 4d 20 74 31 7d 0a 7d 20  b),c FROM t1}.} 
0e00: 7b 6f 6e 65 20 32 34 30 20 68 69 7d 0a 66 6f 72  {one 240 hi}.for
0e10: 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 31   {set i 1} {$i<1
0e20: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  0} {incr i} {.  
0e30: 64 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 33  do_test bigrow-3
0e40: 2e 33 2e 24 69 20 7b 0a 20 20 20 20 65 78 65 63  .3.$i {.    exec
0e50: 73 71 6c 20 22 55 50 44 41 54 45 20 74 31 20 53  sql "UPDATE t1 S
0e60: 45 54 20 62 3d 62 7c 7c 27 24 69 27 22 0a 20 20  ET b=b||'$i'".  
0e70: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0e80: 54 20 61 2c 6c 65 6e 67 74 68 28 62 29 2c 63 20  T a,length(b),c 
0e90: 46 52 4f 4d 20 74 31 7d 0a 20 20 7d 20 22 6f 6e  FROM t1}.  } "on
0ea0: 65 20 5b 65 78 70 72 20 7b 32 34 30 2b 24 69 7d  e [expr {240+$i}
0eb0: 5d 20 68 69 22 0a 7d 0a 0a 23 20 4e 6f 77 20 74  ] hi".}..# Now t
0ec0: 65 73 74 20 74 68 65 20 36 35 35 33 36 2e 2e 36  est the 65536..6
0ed0: 35 35 33 37 20 72 6f 77 2d 73 69 7a 65 20 74 72  5537 row-size tr
0ee0: 61 6e 73 69 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 74  ansition..#.do_t
0ef0: 65 73 74 20 62 69 67 72 6f 77 2d 34 2e 31 20 7b  est bigrow-4.1 {
0f00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0f10: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
0f20: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0f30: 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45   t1(a,b,c) VALUE
0f40: 53 28 27 6f 6e 65 27 2c 27 61 62 63 64 65 66 67  S('one','abcdefg
0f50: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
0f60: 78 79 7a 30 31 32 33 27 2c 27 68 69 27 29 3b 0a  xyz0123','hi');.
0f70: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
0f80: 45 4c 45 43 54 20 61 2c 6c 65 6e 67 74 68 28 62  ELECT a,length(b
0f90: 29 2c 63 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  ),c FROM t1}.} {
0fa0: 6f 6e 65 20 33 30 20 68 69 7d 0a 64 6f 5f 74 65  one 30 hi}.do_te
0fb0: 73 74 20 62 69 67 72 6f 77 2d 34 2e 32 20 7b 0a  st bigrow-4.2 {.
0fc0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0fd0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
0fe0: 62 7c 7c 62 3b 0a 20 20 20 20 55 50 44 41 54 45  b||b;.    UPDATE
0ff0: 20 74 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a   t1 SET b=b||b;.
1000: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
1010: 54 20 62 3d 62 7c 7c 62 3b 0a 20 20 20 20 55 50  T b=b||b;.    UP
1020: 44 41 54 45 20 74 31 20 53 45 54 20 62 3d 62 7c  DATE t1 SET b=b|
1030: 7c 62 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  |b;.    UPDATE t
1040: 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a 20 20  1 SET b=b||b;.  
1050: 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54 20    UPDATE t1 SET 
1060: 62 3d 62 7c 7c 62 3b 0a 20 20 20 20 55 50 44 41  b=b||b;.    UPDA
1070: 54 45 20 74 31 20 53 45 54 20 62 3d 62 7c 7c 62  TE t1 SET b=b||b
1080: 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20  ;.    UPDATE t1 
1090: 53 45 54 20 62 3d 62 7c 7c 62 3b 0a 20 20 20 20  SET b=b||b;.    
10a0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
10b0: 62 7c 7c 62 3b 0a 20 20 20 20 55 50 44 41 54 45  b||b;.    UPDATE
10c0: 20 74 31 20 53 45 54 20 62 3d 62 7c 7c 62 3b 0a   t1 SET b=b||b;.
10d0: 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53 45      UPDATE t1 SE
10e0: 54 20 62 3d 62 7c 7c 62 3b 0a 20 20 20 20 55 50  T b=b||b;.    UP
10f0: 44 41 54 45 20 74 31 20 53 45 54 20 62 3d 62 7c  DATE t1 SET b=b|
1100: 7c 62 3b 0a 20 20 7d 0a 20 20 65 78 65 63 73 71  |b;.  }.  execsq
1110: 6c 20 7b 53 45 4c 45 43 54 20 61 2c 6c 65 6e 67  l {SELECT a,leng
1120: 74 68 28 62 29 2c 63 20 46 52 4f 4d 20 74 31 7d  th(b),c FROM t1}
1130: 0a 7d 20 7b 6f 6e 65 20 31 32 32 38 38 30 20 68  .} {one 122880 h
1140: 69 7d 0a 64 6f 5f 74 65 73 74 20 62 69 67 72 6f  i}.do_test bigro
1150: 77 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  w-4.3 {.  execsq
1160: 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  l {.    UPDATE t
1170: 31 20 53 45 54 20 62 3d 73 75 62 73 74 72 28 62  1 SET b=substr(b
1180: 2c 31 2c 36 35 35 31 35 29 0a 20 20 7d 0a 20 20  ,1,65515).  }.  
1190: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
11a0: 61 2c 6c 65 6e 67 74 68 28 62 29 2c 63 20 46 52  a,length(b),c FR
11b0: 4f 4d 20 74 31 7d 0a 7d 20 7b 6f 6e 65 20 36 35  OM t1}.} {one 65
11c0: 35 31 35 20 68 69 7d 0a 66 6f 72 20 7b 73 65 74  515 hi}.for {set
11d0: 20 69 20 31 7d 20 7b 24 69 3c 31 30 7d 20 7b 69   i 1} {$i<10} {i
11e0: 6e 63 72 20 69 7d 20 7b 0a 20 20 64 6f 5f 74 65  ncr i} {.  do_te
11f0: 73 74 20 62 69 67 72 6f 77 2d 34 2e 34 2e 24 69  st bigrow-4.4.$i
1200: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
1210: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
1220: 62 7c 7c 27 24 69 27 22 0a 20 20 20 20 65 78 65  b||'$i'".    exe
1230: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 61 2c 6c  csql {SELECT a,l
1240: 65 6e 67 74 68 28 62 29 2c 63 20 46 52 4f 4d 20  ength(b),c FROM 
1250: 74 31 7d 0a 20 20 7d 20 22 6f 6e 65 20 5b 65 78  t1}.  } "one [ex
1260: 70 72 20 7b 36 35 35 31 35 2b 24 69 7d 5d 20 68  pr {65515+$i}] h
1270: 69 22 0a 7d 0a 0a 23 20 43 68 65 63 6b 20 74 6f  i".}..# Check to
1280: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6c   make sure the l
1290: 69 62 72 61 72 79 20 72 65 63 6f 76 65 72 73 20  ibrary recovers 
12a0: 73 61 66 65 6c 79 20 69 66 20 61 20 72 6f 77 20  safely if a row 
12b0: 63 6f 6e 74 61 69 6e 73 0a 23 20 74 6f 6f 20 6d  contains.# too m
12c0: 75 63 68 20 64 61 74 61 2e 0a 23 0a 64 6f 5f 74  uch data..#.do_t
12d0: 65 73 74 20 62 69 67 72 6f 77 2d 35 2e 31 20 7b  est bigrow-5.1 {
12e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
12f0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 3b   DELETE FROM t1;
1300: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1310: 20 74 31 28 61 2c 62 2c 63 29 20 56 41 4c 55 45   t1(a,b,c) VALUE
1320: 53 28 27 6f 6e 65 27 2c 27 61 62 63 64 65 66 67  S('one','abcdefg
1330: 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77  hijklmnopqrstuvw
1340: 78 79 7a 30 31 32 33 27 2c 27 68 69 27 29 3b 0a  xyz0123','hi');.
1350: 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 53    }.  execsql {S
1360: 45 4c 45 43 54 20 61 2c 6c 65 6e 67 74 68 28 62  ELECT a,length(b
1370: 29 2c 63 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b  ),c FROM t1}.} {
1380: 6f 6e 65 20 33 30 20 68 69 7d 0a 73 65 74 20 69  one 30 hi}.set i
1390: 20 31 0a 66 6f 72 20 7b 73 65 74 20 73 7a 20 36   1.for {set sz 6
13a0: 30 7d 20 7b 24 73 7a 3c 31 30 34 38 35 36 30 7d  0} {$sz<1048560}
13b0: 20 7b 69 6e 63 72 20 73 7a 20 24 73 7a 7d 20 7b   {incr sz $sz} {
13c0: 0a 20 20 64 6f 5f 74 65 73 74 20 62 69 67 72 6f  .  do_test bigro
13d0: 77 2d 35 2e 32 2e 24 69 20 7b 0a 20 20 20 20 65  w-5.2.$i {.    e
13e0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 55  xecsql {.      U
13f0: 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d 62  PDATE t1 SET b=b
1400: 7c 7c 62 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  ||b;.      SELEC
1410: 54 20 61 2c 6c 65 6e 67 74 68 28 62 29 2c 63 20  T a,length(b),c 
1420: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a 20  FROM t1;.    }. 
1430: 20 7d 20 22 6f 6e 65 20 24 73 7a 20 68 69 22 0a   } "one $sz hi".
1440: 20 20 69 6e 63 72 20 69 0a 7d 0a 64 6f 5f 74 65    incr i.}.do_te
1450: 73 74 20 62 69 67 72 6f 77 2d 35 2e 33 20 7b 0a  st bigrow-5.3 {.
1460: 20 20 63 61 74 63 68 73 71 6c 20 7b 55 50 44 41    catchsql {UPDA
1470: 54 45 20 74 31 20 53 45 54 20 62 3d 62 7c 7c 62  TE t1 SET b=b||b
1480: 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 74 65  }.} {0 {}}.do_te
1490: 73 74 20 62 69 67 72 6f 77 2d 35 2e 34 20 7b 0a  st bigrow-5.4 {.
14a0: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
14b0: 54 20 6c 65 6e 67 74 68 28 62 29 20 46 52 4f 4d  T length(b) FROM
14c0: 20 74 31 7d 0a 7d 20 31 39 36 36 30 38 30 0a 64   t1}.} 1966080.d
14d0: 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 35 2e  o_test bigrow-5.
14e0: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
14f0: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 62 3d  UPDATE t1 SET b=
1500: 62 7c 7c 62 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  b||b}.} {0 {}}.d
1510: 6f 5f 74 65 73 74 20 62 69 67 72 6f 77 2d 35 2e  o_test bigrow-5.
1520: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  6 {.  execsql {S
1530: 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 62 29 20  ELECT length(b) 
1540: 46 52 4f 4d 20 74 31 7d 0a 7d 20 33 39 33 32 31  FROM t1}.} 39321
1550: 36 30 0a 64 6f 5f 74 65 73 74 20 62 69 67 72 6f  60.do_test bigro
1560: 77 2d 35 2e 39 39 20 7b 0a 20 20 65 78 65 63 73  w-5.99 {.  execs
1570: 71 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 74  ql {DROP TABLE t
1580: 31 7d 0a 7d 20 7b 7d 0a 0a 66 69 6e 69 73 68 5f  1}.} {}..finish_
1590: 74 65 73 74 0a                                   test.