/ Hex Artifact Content
Login

Artifact b1aae27cc98eceb845e7f7adf918561256e31298:


0000: 23 20 32 30 30 37 20 4d 61 79 20 38 0a 23 0a 23  # 2007 May 8.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u give..#.#*****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 0a 23 0a 23 20 54 68 69 73 20 66 69 6c 65  **.#.# This file
0170: 20 63 6f 6e 74 61 69 6e 73 20 74 65 73 74 73 20   contains tests 
0180: 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20 74  to verify that t
0190: 68 65 20 6c 69 6d 69 74 73 20 64 65 66 69 6e 65  he limits define
01a0: 64 20 69 6e 0a 23 20 73 71 6c 69 74 65 20 73 6f  d in.# sqlite so
01b0: 75 72 63 65 20 66 69 6c 65 20 6c 69 6d 69 74 73  urce file limits
01c0: 2e 68 20 61 72 65 20 65 6e 66 6f 72 63 65 64 2e  .h are enforced.
01d0: 0a 23 0a 23 20 24 49 64 3a 20 73 71 6c 6c 69 6d  .#.# $Id: sqllim
01e0: 69 74 73 31 2e 74 65 73 74 2c 76 20 31 2e 33 33  its1.test,v 1.33
01f0: 20 32 30 30 39 2f 30 36 2f 32 35 20 30 31 3a 34   2009/06/25 01:4
0200: 37 3a 31 32 20 64 72 68 20 45 78 70 20 24 0a 0a  7:12 drh Exp $..
0210: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0220: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0230: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0240: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20  r/tester.tcl..# 
0250: 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  Verify that the 
0260: 64 65 66 61 75 6c 74 20 70 65 72 2d 63 6f 6e 6e  default per-conn
0270: 65 63 74 69 6f 6e 20 6c 69 6d 69 74 73 20 61 72  ection limits ar
0280: 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 23 20  e the same as.# 
0290: 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
02a0: 20 68 61 72 64 20 6c 69 6d 69 74 73 2e 0a 23 0a   hard limits..#.
02b0: 73 71 6c 69 74 65 33 20 64 62 32 20 3a 6d 65 6d  sqlite3 db2 :mem
02c0: 6f 72 79 3a 0a 64 6f 5f 74 65 73 74 20 73 71 6c  ory:.do_test sql
02d0: 6c 69 6d 69 74 73 31 2d 31 2e 31 20 7b 0a 20 20  limits1-1.1 {.  
02e0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
02f0: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45   SQLITE_LIMIT_LE
0300: 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49 54  NGTH -1.} $SQLIT
0310: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 64 6f 5f  E_MAX_LENGTH.do_
0320: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0330: 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.2 {.  sqlite3_
0340: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
0350: 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48  LIMIT_SQL_LENGTH
0360: 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41   -1.} $SQLITE_MA
0370: 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 0a 64 6f 5f  X_SQL_LENGTH.do_
0380: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0390: 31 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.3 {.  sqlite3_
03a0: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
03b0: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 2d 31 0a  LIMIT_COLUMN -1.
03c0: 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  } $SQLITE_MAX_CO
03d0: 4c 55 4d 4e 0a 64 6f 5f 74 65 73 74 20 73 71 6c  LUMN.do_test sql
03e0: 6c 69 6d 69 74 73 31 2d 31 2e 34 20 7b 0a 20 20  limits1-1.4 {.  
03f0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
0400: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 45 58   SQLITE_LIMIT_EX
0410: 50 52 5f 44 45 50 54 48 20 2d 31 0a 7d 20 24 53  PR_DEPTH -1.} $S
0420: 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
0430: 45 50 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c  EPTH.do_test sql
0440: 6c 69 6d 69 74 73 31 2d 31 2e 35 20 7b 0a 20 20  limits1-1.5 {.  
0450: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
0460: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f   SQLITE_LIMIT_CO
0470: 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 2d 31  MPOUND_SELECT -1
0480: 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43  .} $SQLITE_MAX_C
0490: 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 64  OMPOUND_SELECT.d
04a0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
04b0: 31 2d 31 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65  1-1.6 {.  sqlite
04c0: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
04d0: 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20  E_LIMIT_VDBE_OP 
04e0: 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58  -1.} $SQLITE_MAX
04f0: 5f 56 44 42 45 5f 4f 50 0a 64 6f 5f 74 65 73 74  _VDBE_OP.do_test
0500: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e 37 20   sqllimits1-1.7 
0510: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
0520: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
0530: 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 20 2d  T_FUNCTION_ARG -
0540: 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f  1.} $SQLITE_MAX_
0550: 46 55 4e 43 54 49 4f 4e 5f 41 52 47 0a 64 6f 5f  FUNCTION_ARG.do_
0560: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0570: 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.8 {.  sqlite3_
0580: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
0590: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 2d  LIMIT_ATTACHED -
05a0: 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f  1.} $SQLITE_MAX_
05b0: 41 54 54 41 43 48 45 44 0a 64 6f 5f 74 65 73 74  ATTACHED.do_test
05c0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e 39 20   sqllimits1-1.9 
05d0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
05e0: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
05f0: 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c  T_LIKE_PATTERN_L
0600: 45 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49  ENGTH -1.} $SQLI
0610: 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54  TE_MAX_LIKE_PATT
0620: 45 52 4e 5f 4c 45 4e 47 54 48 0a 64 6f 5f 74 65  ERN_LENGTH.do_te
0630: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e  st sqllimits1-1.
0640: 31 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c  10 {.  sqlite3_l
0650: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
0660: 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55  IMIT_VARIABLE_NU
0670: 4d 42 45 52 20 2d 31 0a 7d 20 24 53 51 4c 49 54  MBER -1.} $SQLIT
0680: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
0690: 55 4d 42 45 52 0a 0a 23 20 4c 69 6d 69 74 20 70  UMBER..# Limit p
06a0: 61 72 61 6d 65 74 65 72 73 20 6f 75 74 20 6f 66  arameters out of
06b0: 20 72 61 6e 67 65 2e 0a 23 0a 64 6f 5f 74 65 73   range..#.do_tes
06c0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e 32  t sqllimits1-1.2
06d0: 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69  0 {.  sqlite3_li
06e0: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
06f0: 4d 49 54 5f 54 4f 4f 53 4d 41 4c 4c 20 31 32 33  MIT_TOOSMALL 123
0700: 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20  .} {-1}.do_test 
0710: 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e 32 31 20  sqllimits1-1.21 
0720: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
0730: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
0740: 54 5f 54 4f 4f 53 4d 41 4c 4c 20 31 32 33 0a 7d  T_TOOSMALL 123.}
0750: 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 73 71   {-1}.do_test sq
0760: 6c 6c 69 6d 69 74 73 31 2d 31 2e 32 32 20 7b 0a  llimits1-1.22 {.
0770: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
0780: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
0790: 54 4f 4f 42 49 47 20 31 32 33 0a 7d 20 7b 2d 31  TOOBIG 123.} {-1
07a0: 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  }.do_test sqllim
07b0: 69 74 73 31 2d 31 2e 32 33 20 7b 0a 20 20 73 71  its1-1.23 {.  sq
07c0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
07d0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 4f 4f 42  QLITE_LIMIT_TOOB
07e0: 49 47 20 31 32 33 0a 7d 20 7b 2d 31 7d 0a 0a 0a  IG 123.} {-1}...
07f0: 23 20 44 65 63 72 65 61 73 65 20 61 6c 6c 20 6c  # Decrease all l
0800: 69 6d 69 74 73 20 62 79 20 68 61 6c 66 2e 20 20  imits by half.  
0810: 56 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20  Verify that the 
0820: 6e 65 77 20 6c 69 6d 69 74 73 20 74 61 6b 65 2e  new limits take.
0830: 0a 23 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d  .#.if {$SQLITE_M
0840: 41 58 5f 4c 45 4e 47 54 48 3e 3d 32 7d 20 7b 0a  AX_LENGTH>=2} {.
0850: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
0860: 69 74 73 31 2d 32 2e 31 2e 31 20 7b 0a 20 20 20  its1-2.1.1 {.   
0870: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
0880: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  b SQLITE_LIMIT_L
0890: 45 4e 47 54 48 20 5c 0a 20 20 20 20 20 20 20 20  ENGTH \.        
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
08b0: 72 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58  r {$::SQLITE_MAX
08c0: 5f 4c 45 4e 47 54 48 2f 32 7d 5d 0a 20 20 7d 20  _LENGTH/2}].  } 
08d0: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47  $SQLITE_MAX_LENG
08e0: 54 48 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c  TH.  do_test sql
08f0: 6c 69 6d 69 74 73 31 2d 32 2e 31 2e 32 20 7b 0a  limits1-2.1.2 {.
0900: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
0910: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
0920: 54 5f 4c 45 4e 47 54 48 20 2d 31 0a 20 20 7d 20  T_LENGTH -1.  } 
0930: 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f 4d  [expr {$SQLITE_M
0940: 41 58 5f 4c 45 4e 47 54 48 2f 32 7d 5d 0a 7d 0a  AX_LENGTH/2}].}.
0950: 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f  if {$SQLITE_MAX_
0960: 53 51 4c 5f 4c 45 4e 47 54 48 3e 3d 32 7d 20 7b  SQL_LENGTH>=2} {
0970: 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .  do_test sqlli
0980: 6d 69 74 73 31 2d 32 2e 32 2e 31 20 7b 0a 20 20  mits1-2.2.1 {.  
0990: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
09a0: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
09b0: 53 51 4c 5f 4c 45 4e 47 54 48 20 5c 0a 20 20 20  SQL_LENGTH \.   
09c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09d0: 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54   [expr {$::SQLIT
09e0: 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48  E_MAX_SQL_LENGTH
09f0: 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c 49 54 45  /2}].  } $SQLITE
0a00: 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 0a  _MAX_SQL_LENGTH.
0a10: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
0a20: 69 74 73 31 2d 32 2e 32 2e 32 20 7b 0a 20 20 20  its1-2.2.2 {.   
0a30: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
0a40: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53  b SQLITE_LIMIT_S
0a50: 51 4c 5f 4c 45 4e 47 54 48 20 2d 31 0a 20 20 7d  QL_LENGTH -1.  }
0a60: 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f   [expr {$SQLITE_
0a70: 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 2f 32  MAX_SQL_LENGTH/2
0a80: 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45  }].}.if {$SQLITE
0a90: 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 3e 3d 32 7d 20  _MAX_COLUMN>=2} 
0aa0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c  {.  do_test sqll
0ab0: 69 6d 69 74 73 31 2d 32 2e 33 2e 31 20 7b 0a 20  imits1-2.3.1 {. 
0ac0: 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
0ad0: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
0ae0: 5f 43 4f 4c 55 4d 4e 20 5c 0a 20 20 20 20 20 20  _COLUMN \.      
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
0b00: 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d  xpr {$::SQLITE_M
0b10: 41 58 5f 43 4f 4c 55 4d 4e 2f 32 7d 5d 0a 20 20  AX_COLUMN/2}].  
0b20: 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  } $SQLITE_MAX_CO
0b30: 4c 55 4d 4e 0a 20 20 64 6f 5f 74 65 73 74 20 73  LUMN.  do_test s
0b40: 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 33 2e 32 20  qllimits1-2.3.2 
0b50: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69  {.    sqlite3_li
0b60: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
0b70: 4d 49 54 5f 43 4f 4c 55 4d 4e 20 2d 31 0a 20 20  MIT_COLUMN -1.  
0b80: 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45  } [expr {$SQLITE
0b90: 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2f 32 7d 5d 0a  _MAX_COLUMN/2}].
0ba0: 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41  }.if {$SQLITE_MA
0bb0: 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 3d 32 7d  X_EXPR_DEPTH>=2}
0bc0: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c   {.  do_test sql
0bd0: 6c 69 6d 69 74 73 31 2d 32 2e 34 2e 31 20 7b 0a  limits1-2.4.1 {.
0be0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
0bf0: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
0c00: 54 5f 45 58 50 52 5f 44 45 50 54 48 20 5c 0a 20  T_EXPR_DEPTH \. 
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 20 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c     [expr {$::SQL
0c30: 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
0c40: 54 48 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c 49  TH/2}].  } $SQLI
0c50: 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
0c60: 48 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c  H.  do_test sqll
0c70: 69 6d 69 74 73 31 2d 32 2e 34 2e 32 20 7b 0a 20  imits1-2.4.2 {. 
0c80: 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
0c90: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
0ca0: 5f 45 58 50 52 5f 44 45 50 54 48 20 2d 31 0a 20  _EXPR_DEPTH -1. 
0cb0: 20 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54   } [expr {$SQLIT
0cc0: 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
0cd0: 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49  /2}].}.if {$SQLI
0ce0: 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f  TE_MAX_COMPOUND_
0cf0: 53 45 4c 45 43 54 3e 3d 32 7d 20 7b 0a 20 20 64  SELECT>=2} {.  d
0d00: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
0d10: 31 2d 32 2e 35 2e 31 20 7b 0a 20 20 20 20 73 71  1-2.5.1 {.    sq
0d20: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
0d30: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50  QLITE_LIMIT_COMP
0d40: 4f 55 4e 44 5f 53 45 4c 45 43 54 20 5c 0a 20 20  OUND_SELECT \.  
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d60: 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49    [expr {$::SQLI
0d70: 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f  TE_MAX_COMPOUND_
0d80: 53 45 4c 45 43 54 2f 32 7d 5d 0a 20 20 7d 20 24  SELECT/2}].  } $
0d90: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f  SQLITE_MAX_COMPO
0da0: 55 4e 44 5f 53 45 4c 45 43 54 0a 20 20 64 6f 5f  UND_SELECT.  do_
0db0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0dc0: 32 2e 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  2.5.2 {.    sqli
0dd0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
0de0: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55  ITE_LIMIT_COMPOU
0df0: 4e 44 5f 53 45 4c 45 43 54 20 2d 31 0a 20 20 7d  ND_SELECT -1.  }
0e00: 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f   [expr {$SQLITE_
0e10: 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MAX_COMPOUND_SEL
0e20: 45 43 54 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53  ECT/2}].}.if {$S
0e30: 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f  QLITE_MAX_VDBE_O
0e40: 50 3e 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  P>=2} {.  do_tes
0e50: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 36  t sqllimits1-2.6
0e60: 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .1 {.    sqlite3
0e70: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
0e80: 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50 20 5c  _LIMIT_VDBE_OP \
0e90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ea0: 20 20 20 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53       [expr {$::S
0eb0: 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f  QLITE_MAX_VDBE_O
0ec0: 50 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c 49 54  P/2}].  } $SQLIT
0ed0: 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 0a 20 20  E_MAX_VDBE_OP.  
0ee0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
0ef0: 73 31 2d 32 2e 36 2e 32 20 7b 0a 20 20 20 20 73  s1-2.6.2 {.    s
0f00: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
0f10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42  SQLITE_LIMIT_VDB
0f20: 45 5f 4f 50 20 2d 31 0a 20 20 7d 20 5b 65 78 70  E_OP -1.  } [exp
0f30: 72 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 56  r {$SQLITE_MAX_V
0f40: 44 42 45 5f 4f 50 2f 32 7d 5d 0a 7d 0a 69 66 20  DBE_OP/2}].}.if 
0f50: 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e  {$SQLITE_MAX_FUN
0f60: 43 54 49 4f 4e 5f 41 52 47 3e 3d 32 7d 20 7b 0a  CTION_ARG>=2} {.
0f70: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
0f80: 69 74 73 31 2d 32 2e 37 2e 31 20 7b 0a 20 20 20  its1-2.7.1 {.   
0f90: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
0fa0: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 46  b SQLITE_LIMIT_F
0fb0: 55 4e 43 54 49 4f 4e 5f 41 52 47 20 5c 0a 20 20  UNCTION_ARG \.  
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49    [expr {$::SQLI
0fe0: 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
0ff0: 41 52 47 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c  ARG/2}].  } $SQL
1000: 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
1010: 5f 41 52 47 0a 20 20 64 6f 5f 74 65 73 74 20 73  _ARG.  do_test s
1020: 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 37 2e 32 20  qllimits1-2.7.2 
1030: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69  {.    sqlite3_li
1040: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
1050: 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47  MIT_FUNCTION_ARG
1060: 20 2d 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24   -1.  } [expr {$
1070: 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54  SQLITE_MAX_FUNCT
1080: 49 4f 4e 5f 41 52 47 2f 32 7d 5d 0a 7d 0a 69 66  ION_ARG/2}].}.if
1090: 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54   {$SQLITE_MAX_AT
10a0: 54 41 43 48 45 44 3e 3d 32 7d 20 7b 0a 20 20 64  TACHED>=2} {.  d
10b0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
10c0: 31 2d 32 2e 38 2e 31 20 7b 0a 20 20 20 20 73 71  1-2.8.1 {.    sq
10d0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
10e0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41  QLITE_LIMIT_ATTA
10f0: 43 48 45 44 20 5c 0a 20 20 20 20 20 20 20 20 20  CHED \.         
1100: 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72             [expr
1110: 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f   {$::SQLITE_MAX_
1120: 41 54 54 41 43 48 45 44 2f 32 7d 5d 0a 20 20 7d  ATTACHED/2}].  }
1130: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54   $SQLITE_MAX_ATT
1140: 41 43 48 45 44 0a 20 20 64 6f 5f 74 65 73 74 20  ACHED.  do_test 
1150: 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 38 2e 32  sqllimits1-2.8.2
1160: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   {.    sqlite3_l
1170: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
1180: 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 2d 31  IMIT_ATTACHED -1
1190: 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c  .  } [expr {$SQL
11a0: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
11b0: 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49  /2}].}.if {$SQLI
11c0: 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54  TE_MAX_LIKE_PATT
11d0: 45 52 4e 5f 4c 45 4e 47 54 48 3e 3d 32 7d 20 7b  ERN_LENGTH>=2} {
11e0: 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .  do_test sqlli
11f0: 6d 69 74 73 31 2d 32 2e 39 2e 31 20 7b 0a 20 20  mits1-2.9.1 {.  
1200: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
1210: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
1220: 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e  LIKE_PATTERN_LEN
1230: 47 54 48 20 5c 0a 20 20 20 20 20 20 20 20 20 20  GTH \.          
1240: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr 
1250: 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  {$::SQLITE_MAX_L
1260: 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
1270: 54 48 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c 49  TH/2}].  } $SQLI
1280: 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54  TE_MAX_LIKE_PATT
1290: 45 52 4e 5f 4c 45 4e 47 54 48 0a 20 20 64 6f 5f  ERN_LENGTH.  do_
12a0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
12b0: 32 2e 39 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  2.9.2 {.    sqli
12c0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
12d0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50  ITE_LIMIT_LIKE_P
12e0: 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 2d 31  ATTERN_LENGTH -1
12f0: 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c  .  } [expr {$SQL
1300: 49 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54  ITE_MAX_LIKE_PAT
1310: 54 45 52 4e 5f 4c 45 4e 47 54 48 2f 32 7d 5d 0a  TERN_LENGTH/2}].
1320: 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41  }.if {$SQLITE_MA
1330: 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45  X_VARIABLE_NUMBE
1340: 52 3e 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  R>=2} {.  do_tes
1350: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 31  t sqllimits1-2.1
1360: 30 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  0.1 {.    sqlite
1370: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
1380: 45 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45  E_LIMIT_VARIABLE
1390: 5f 4e 55 4d 42 45 52 20 5c 0a 20 20 20 20 20 20  _NUMBER \.      
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65                [e
13b0: 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d  xpr {$::SQLITE_M
13c0: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
13d0: 45 52 2f 32 7d 5d 0a 20 20 7d 20 24 53 51 4c 49  ER/2}].  } $SQLI
13e0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
13f0: 4e 55 4d 42 45 52 0a 20 20 64 6f 5f 74 65 73 74  NUMBER.  do_test
1400: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 31 30   sqllimits1-2.10
1410: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
1420: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
1430: 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f  _LIMIT_VARIABLE_
1440: 4e 55 4d 42 45 52 20 2d 31 0a 20 20 7d 20 5b 65  NUMBER -1.  } [e
1450: 78 70 72 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58  xpr {$SQLITE_MAX
1460: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
1470: 2f 32 7d 5d 0a 7d 0a 0a 23 20 49 6e 20 61 20 73  /2}].}..# In a s
1480: 65 70 61 72 61 74 65 20 64 61 74 61 62 61 73 65  eparate database
1490: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 76 65 72   connection, ver
14a0: 69 66 79 20 74 68 61 74 20 74 68 65 20 6c 69 6d  ify that the lim
14b0: 69 74 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65  its are unchange
14c0: 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 71 6c  d..#.do_test sql
14d0: 6c 69 6d 69 74 73 31 2d 33 2e 31 20 7b 0a 20 20  limits1-3.1 {.  
14e0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
14f0: 32 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  2 SQLITE_LIMIT_L
1500: 45 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49  ENGTH -1.} $SQLI
1510: 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 64 6f  TE_MAX_LENGTH.do
1520: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
1530: 2d 33 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.2 {.  sqlite3
1540: 5f 6c 69 6d 69 74 20 64 62 32 20 53 51 4c 49 54  _limit db2 SQLIT
1550: 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47  E_LIMIT_SQL_LENG
1560: 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f  TH -1.} $SQLITE_
1570: 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 0a 64  MAX_SQL_LENGTH.d
1580: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
1590: 31 2d 33 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  1-3.3 {.  sqlite
15a0: 33 5f 6c 69 6d 69 74 20 64 62 32 20 53 51 4c 49  3_limit db2 SQLI
15b0: 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
15c0: 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58  -1.} $SQLITE_MAX
15d0: 5f 43 4f 4c 55 4d 4e 0a 64 6f 5f 74 65 73 74 20  _COLUMN.do_test 
15e0: 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 34 20 7b  sqllimits1-3.4 {
15f0: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
1600: 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49 4d 49   db2 SQLITE_LIMI
1610: 54 5f 45 58 50 52 5f 44 45 50 54 48 20 2d 31 0a  T_EXPR_DEPTH -1.
1620: 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58  } $SQLITE_MAX_EX
1630: 50 52 5f 44 45 50 54 48 0a 64 6f 5f 74 65 73 74  PR_DEPTH.do_test
1640: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 35 20   sqllimits1-3.5 
1650: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
1660: 74 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49 4d  t db2 SQLITE_LIM
1670: 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  IT_COMPOUND_SELE
1680: 43 54 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f  CT -1.} $SQLITE_
1690: 4d 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c  MAX_COMPOUND_SEL
16a0: 45 43 54 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  ECT.do_test sqll
16b0: 69 6d 69 74 73 31 2d 33 2e 36 20 7b 0a 20 20 73  imits1-3.6 {.  s
16c0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 32  qlite3_limit db2
16d0: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44   SQLITE_LIMIT_VD
16e0: 42 45 5f 4f 50 20 2d 31 0a 7d 20 24 53 51 4c 49  BE_OP -1.} $SQLI
16f0: 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 0a 64  TE_MAX_VDBE_OP.d
1700: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
1710: 31 2d 33 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  1-3.7 {.  sqlite
1720: 33 5f 6c 69 6d 69 74 20 64 62 32 20 53 51 4c 49  3_limit db2 SQLI
1730: 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f  TE_LIMIT_FUNCTIO
1740: 4e 5f 41 52 47 20 2d 31 0a 7d 20 24 53 51 4c 49  N_ARG -1.} $SQLI
1750: 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f  TE_MAX_FUNCTION_
1760: 41 52 47 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  ARG.do_test sqll
1770: 69 6d 69 74 73 31 2d 33 2e 38 20 7b 0a 20 20 73  imits1-3.8 {.  s
1780: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 32  qlite3_limit db2
1790: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54   SQLITE_LIMIT_AT
17a0: 54 41 43 48 45 44 20 2d 31 0a 7d 20 24 53 51 4c  TACHED -1.} $SQL
17b0: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
17c0: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
17d0: 74 73 31 2d 33 2e 39 20 7b 0a 20 20 73 71 6c 69  ts1-3.9 {.  sqli
17e0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 32 20 53 51  te3_limit db2 SQ
17f0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f  LITE_LIMIT_LIKE_
1800: 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 2d  PATTERN_LENGTH -
1810: 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f  1.} $SQLITE_MAX_
1820: 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e  LIKE_PATTERN_LEN
1830: 47 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  GTH.do_test sqll
1840: 69 6d 69 74 73 31 2d 33 2e 31 30 20 7b 0a 20 20  imits1-3.10 {.  
1850: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
1860: 32 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56  2 SQLITE_LIMIT_V
1870: 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 2d  ARIABLE_NUMBER -
1880: 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f  1.} $SQLITE_MAX_
1890: 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 0a  VARIABLE_NUMBER.
18a0: 64 62 32 20 63 6c 6f 73 65 0a 0a 23 20 41 74 74  db2 close..# Att
18b0: 65 6d 70 74 20 74 6f 20 73 65 74 20 61 6c 6c 20  empt to set all 
18c0: 6c 69 6d 69 74 73 20 74 6f 20 74 68 65 20 6d 61  limits to the ma
18d0: 78 69 6d 75 6d 20 33 32 2d 62 69 74 20 69 6e 74  ximum 32-bit int
18e0: 65 67 65 72 2e 20 20 56 65 72 69 66 79 0a 23 20  eger.  Verify.# 
18f0: 74 68 61 74 20 74 68 65 20 6c 69 6d 69 74 20 64  that the limit d
1900: 6f 65 73 20 6e 6f 74 20 65 78 63 65 65 64 20 74  oes not exceed t
1910: 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
1920: 75 70 70 65 72 20 62 6f 75 6e 64 2e 0a 23 0a 64  upper bound..#.d
1930: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
1940: 31 2d 34 2e 31 2e 31 20 7b 0a 20 20 73 71 6c 69  1-4.1.1 {.  sqli
1950: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
1960: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
1970: 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73 71   0x7fffffff.  sq
1980: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1990: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
19a0: 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f  TH -1.} $SQLITE_
19b0: 4d 41 58 5f 4c 45 4e 47 54 48 0a 64 6f 5f 74 65  MAX_LENGTH.do_te
19c0: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 34 2e  st sqllimits1-4.
19d0: 32 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  2.1 {.  sqlite3_
19e0: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
19f0: 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48  LIMIT_SQL_LENGTH
1a00: 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73 71   0x7fffffff.  sq
1a10: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1a20: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f  QLITE_LIMIT_SQL_
1a30: 4c 45 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51 4c  LENGTH -1.} $SQL
1a40: 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47  ITE_MAX_SQL_LENG
1a50: 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  TH.do_test sqlli
1a60: 6d 69 74 73 31 2d 34 2e 33 2e 31 20 7b 0a 20 20  mits1-4.3.1 {.  
1a70: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
1a80: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f   SQLITE_LIMIT_CO
1a90: 4c 55 4d 4e 20 30 78 37 66 66 66 66 66 66 66 0a  LUMN 0x7fffffff.
1aa0: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
1ab0: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
1ac0: 43 4f 4c 55 4d 4e 20 2d 31 0a 7d 20 24 53 51 4c  COLUMN -1.} $SQL
1ad0: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 0a 64  ITE_MAX_COLUMN.d
1ae0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
1af0: 31 2d 34 2e 34 2e 31 20 7b 0a 20 20 73 71 6c 69  1-4.4.1 {.  sqli
1b00: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
1b10: 49 54 45 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44  ITE_LIMIT_EXPR_D
1b20: 45 50 54 48 20 30 78 37 66 66 66 66 66 66 66 0a  EPTH 0x7fffffff.
1b30: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
1b40: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
1b50: 45 58 50 52 5f 44 45 50 54 48 20 2d 31 0a 7d 20  EXPR_DEPTH -1.} 
1b60: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52  $SQLITE_MAX_EXPR
1b70: 5f 44 45 50 54 48 0a 64 6f 5f 74 65 73 74 20 73  _DEPTH.do_test s
1b80: 71 6c 6c 69 6d 69 74 73 31 2d 34 2e 35 2e 31 20  qllimits1-4.5.1 
1b90: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
1ba0: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
1bb0: 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  T_COMPOUND_SELEC
1bc0: 54 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73  T 0x7fffffff.  s
1bd0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
1be0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4d  SQLITE_LIMIT_COM
1bf0: 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 2d 31 0a  POUND_SELECT -1.
1c00: 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f  } $SQLITE_MAX_CO
1c10: 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a 64 6f  MPOUND_SELECT.do
1c20: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
1c30: 2d 34 2e 36 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -4.6.1 {.  sqlit
1c40: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
1c50: 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45 5f 4f 50  TE_LIMIT_VDBE_OP
1c60: 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73 71   0x7fffffff.  sq
1c70: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1c80: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45  QLITE_LIMIT_VDBE
1c90: 5f 4f 50 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45  _OP -1.} $SQLITE
1ca0: 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 0a 64 6f 5f  _MAX_VDBE_OP.do_
1cb0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
1cc0: 34 2e 37 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  4.7.1 {.  sqlite
1cd0: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
1ce0: 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e  E_LIMIT_FUNCTION
1cf0: 5f 41 52 47 20 30 78 37 66 66 66 66 66 66 66 0a  _ARG 0x7fffffff.
1d00: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
1d10: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
1d20: 46 55 4e 43 54 49 4f 4e 5f 41 52 47 20 2d 31 0a  FUNCTION_ARG -1.
1d30: 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55  } $SQLITE_MAX_FU
1d40: 4e 43 54 49 4f 4e 5f 41 52 47 0a 64 6f 5f 74 65  NCTION_ARG.do_te
1d50: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 34 2e  st sqllimits1-4.
1d60: 38 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  8.1 {.  sqlite3_
1d70: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
1d80: 4c 49 4d 49 54 5f 41 54 54 41 43 48 45 44 20 30  LIMIT_ATTACHED 0
1d90: 78 37 66 66 66 66 66 66 66 0a 20 20 73 71 6c 69  x7fffffff.  sqli
1da0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
1db0: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
1dc0: 45 44 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f  ED -1.} $SQLITE_
1dd0: 4d 41 58 5f 41 54 54 41 43 48 45 44 0a 64 6f 5f  MAX_ATTACHED.do_
1de0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
1df0: 34 2e 39 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65  4.9.1 {.  sqlite
1e00: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
1e10: 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50 41 54  E_LIMIT_LIKE_PAT
1e20: 54 45 52 4e 5f 4c 45 4e 47 54 48 20 30 78 37 66  TERN_LENGTH 0x7f
1e30: 66 66 66 66 66 66 0a 20 20 73 71 6c 69 74 65 33  ffffff.  sqlite3
1e40: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
1e50: 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54  _LIMIT_LIKE_PATT
1e60: 45 52 4e 5f 4c 45 4e 47 54 48 20 2d 31 0a 7d 20  ERN_LENGTH -1.} 
1e70: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45  $SQLITE_MAX_LIKE
1e80: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 0a  _PATTERN_LENGTH.
1e90: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
1ea0: 73 31 2d 34 2e 31 30 2e 31 20 7b 0a 20 20 73 71  s1-4.10.1 {.  sq
1eb0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1ec0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
1ed0: 41 42 4c 45 5f 4e 55 4d 42 45 52 20 30 78 37 66  ABLE_NUMBER 0x7f
1ee0: 66 66 66 66 66 66 0a 20 20 73 71 6c 69 74 65 33  ffffff.  sqlite3
1ef0: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
1f00: 5f 4c 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f  _LIMIT_VARIABLE_
1f10: 4e 55 4d 42 45 52 20 2d 31 0a 7d 20 24 53 51 4c  NUMBER -1.} $SQL
1f20: 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
1f30: 5f 4e 55 4d 42 45 52 0a 0a 23 2d 2d 2d 2d 2d 2d  _NUMBER..#------
1f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
1f80: 20 54 65 73 74 20 63 61 73 65 73 20 73 71 6c 6c   Test cases sqll
1f90: 69 6d 69 74 73 31 2d 35 2e 2a 20 74 65 73 74 20  imits1-5.* test 
1fa0: 74 68 61 74 20 74 68 65 20 53 51 4c 49 54 45 5f  that the SQLITE_
1fb0: 4d 41 58 5f 4c 45 4e 47 54 48 20 6c 69 6d 69 74  MAX_LENGTH limit
1fc0: 0a 23 20 69 73 20 65 6e 66 6f 72 63 65 64 2e 0a  .# is enforced..
1fd0: 23 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74  #.db close.sqlit
1fe0: 65 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73 65  e3 db test.db.se
1ff0: 74 20 4c 41 52 47 45 53 49 5a 45 20 39 39 39 39  t LARGESIZE 9999
2000: 39 0a 73 65 74 20 53 51 4c 49 54 45 5f 4c 49 4d  9.set SQLITE_LIM
2010: 49 54 5f 4c 45 4e 47 54 48 20 31 30 30 30 30 30  IT_LENGTH 100000
2020: 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64  .sqlite3_limit d
2030: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  b SQLITE_LIMIT_L
2040: 45 4e 47 54 48 20 24 53 51 4c 49 54 45 5f 4c 49  ENGTH $SQLITE_LI
2050: 4d 49 54 5f 4c 45 4e 47 54 48 0a 0a 64 6f 5f 74  MIT_LENGTH..do_t
2060: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35  est sqllimits1-5
2070: 2e 31 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71  .1.1 {.  catchsq
2080: 6c 20 7b 20 53 45 4c 45 43 54 20 72 61 6e 64 6f  l { SELECT rando
2090: 6d 62 6c 6f 62 28 32 31 34 37 34 38 33 36 34 37  mblob(2147483647
20a0: 29 20 7d 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67  ) }.} {1 {string
20b0: 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67   or blob too big
20c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  }}.do_test sqlli
20d0: 6d 69 74 73 31 2d 35 2e 31 2e 32 20 7b 0a 20 20  mits1-5.1.2 {.  
20e0: 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43  catchsql { SELEC
20f0: 54 20 7a 65 72 6f 62 6c 6f 62 28 32 31 34 37 34  T zeroblob(21474
2100: 38 33 36 34 37 29 20 7d 0a 7d 20 7b 31 20 7b 73  83647) }.} {1 {s
2110: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
2120: 6f 20 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74  o big}}..do_test
2130: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 32 20   sqllimits1-5.2 
2140: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53  {.  catchsql { S
2150: 45 4c 45 43 54 20 4c 45 4e 47 54 48 28 72 61 6e  ELECT LENGTH(ran
2160: 64 6f 6d 62 6c 6f 62 28 24 3a 3a 4c 41 52 47 45  domblob($::LARGE
2170: 53 49 5a 45 29 29 20 7d 0a 7d 20 5b 6c 69 73 74  SIZE)) }.} [list
2180: 20 30 20 24 4c 41 52 47 45 53 49 5a 45 5d 0a 0a   0 $LARGESIZE]..
2190: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
21a0: 73 31 2d 35 2e 33 20 7b 0a 20 20 63 61 74 63 68  s1-5.3 {.  catch
21b0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 71 75 6f  sql { SELECT quo
21c0: 74 65 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 24 3a  te(randomblob($:
21d0: 3a 4c 41 52 47 45 53 49 5a 45 29 29 20 7d 0a 7d  :LARGESIZE)) }.}
21e0: 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62   {1 {string or b
21f0: 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a 64  lob too big}}..d
2200: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
2210: 31 2d 35 2e 34 20 7b 0a 20 20 63 61 74 63 68 73  1-5.4 {.  catchs
2220: 71 6c 20 7b 20 53 45 4c 45 43 54 20 4c 45 4e 47  ql { SELECT LENG
2230: 54 48 28 7a 65 72 6f 62 6c 6f 62 28 24 3a 3a 4c  TH(zeroblob($::L
2240: 41 52 47 45 53 49 5a 45 29 29 20 7d 0a 7d 20 5b  ARGESIZE)) }.} [
2250: 6c 69 73 74 20 30 20 24 4c 41 52 47 45 53 49 5a  list 0 $LARGESIZ
2260: 45 5d 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  E]..do_test sqll
2270: 69 6d 69 74 73 31 2d 35 2e 35 20 7b 0a 20 20 63  imits1-5.5 {.  c
2280: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
2290: 20 71 75 6f 74 65 28 7a 65 72 6f 62 6c 6f 62 28   quote(zeroblob(
22a0: 24 3a 3a 4c 41 52 47 45 53 49 5a 45 29 29 20 7d  $::LARGESIZE)) }
22b0: 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72  .} {1 {string or
22c0: 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a   blob too big}}.
22d0: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
22e0: 74 73 31 2d 35 2e 36 20 7b 0a 20 20 63 61 74 63  ts1-5.6 {.  catc
22f0: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 7a 65  hsql { SELECT ze
2300: 72 6f 62 6c 6f 62 28 2d 31 29 20 7d 0a 7d 20 7b  roblob(-1) }.} {
2310: 30 20 7b 7b 7d 7d 7d 0a 0a 64 6f 5f 74 65 73 74  0 {{}}}..do_test
2320: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 39 20   sqllimits1-5.9 
2330: 7b 0a 20 20 73 65 74 20 3a 3a 73 74 72 20 5b 73  {.  set ::str [s
2340: 74 72 69 6e 67 20 72 65 70 65 61 74 20 41 20 36  tring repeat A 6
2350: 35 35 33 37 5d 0a 20 20 73 65 74 20 3a 3a 72 65  5537].  set ::re
2360: 70 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  p [string repeat
2370: 20 42 20 36 35 35 33 37 5d 0a 20 20 63 61 74 63   B 65537].  catc
2380: 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 72 65  hsql { SELECT re
2390: 70 6c 61 63 65 28 24 3a 3a 73 74 72 2c 20 27 41  place($::str, 'A
23a0: 27 2c 20 24 3a 3a 72 65 70 29 20 7d 0a 7d 20 7b  ', $::rep) }.} {
23b0: 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  1 {string or blo
23c0: 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a 64 6f 5f  b too big}}..do_
23d0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
23e0: 35 2e 31 30 20 7b 0a 20 20 73 65 74 20 3a 3a 73  5.10 {.  set ::s
23f0: 74 72 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  tr [string repea
2400: 74 20 25 4a 20 32 31 30 30 5d 0a 20 20 63 61 74  t %J 2100].  cat
2410: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 73  chsql { SELECT s
2420: 74 72 66 74 69 6d 65 28 24 3a 3a 73 74 72 2c 20  trftime($::str, 
2430: 27 32 30 30 33 2d 31 30 2d 33 31 27 29 20 7d 0a  '2003-10-31') }.
2440: 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20  } {1 {string or 
2450: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a  blob too big}}..
2460: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
2470: 73 31 2d 35 2e 31 31 20 7b 0a 20 20 73 65 74 20  s1-5.11 {.  set 
2480: 3a 3a 73 74 72 31 20 5b 73 74 72 69 6e 67 20 72  ::str1 [string r
2490: 65 70 65 61 74 20 41 20 5b 65 78 70 72 20 7b 24  epeat A [expr {$
24a0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
24b0: 47 54 48 20 2d 20 31 30 7d 5d 5d 0a 20 20 73 65  GTH - 10}]].  se
24c0: 74 20 3a 3a 73 74 72 32 20 5b 73 74 72 69 6e 67  t ::str2 [string
24d0: 20 72 65 70 65 61 74 20 42 20 5b 65 78 70 72 20   repeat B [expr 
24e0: 7b 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  {$SQLITE_LIMIT_L
24f0: 45 4e 47 54 48 20 2d 20 31 30 7d 5d 5d 0a 20 20  ENGTH - 10}]].  
2500: 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43  catchsql { SELEC
2510: 54 20 24 3a 3a 73 74 72 31 20 7c 7c 20 24 3a 3a  T $::str1 || $::
2520: 73 74 72 32 20 7d 0a 7d 20 7b 31 20 7b 73 74 72  str2 }.} {1 {str
2530: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
2540: 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73  big}}..do_test s
2550: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 32 20 7b  qllimits1-5.12 {
2560: 0a 20 20 73 65 74 20 3a 3a 73 74 72 31 20 5b 73  .  set ::str1 [s
2570: 74 72 69 6e 67 20 72 65 70 65 61 74 20 27 20 5b  tring repeat ' [
2580: 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f 4c 49  expr {$SQLITE_LI
2590: 4d 49 54 5f 4c 45 4e 47 54 48 20 2d 20 31 30 7d  MIT_LENGTH - 10}
25a0: 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20  ]].  catchsql { 
25b0: 53 45 4c 45 43 54 20 71 75 6f 74 65 28 24 3a 3a  SELECT quote($::
25c0: 73 74 72 31 29 20 7d 0a 7d 20 7b 31 20 7b 73 74  str1) }.} {1 {st
25d0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
25e0: 20 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20   big}}..do_test 
25f0: 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 33 20  sqllimits1-5.13 
2600: 7b 0a 20 20 73 65 74 20 3a 3a 73 74 72 31 20 5b  {.  set ::str1 [
2610: 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 27 20  string repeat ' 
2620: 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f 4c  [expr {$SQLITE_L
2630: 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2d 20 31 30  IMIT_LENGTH - 10
2640: 7d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  }]].  catchsql {
2650: 20 53 45 4c 45 43 54 20 68 65 78 28 24 3a 3a 73   SELECT hex($::s
2660: 74 72 31 29 20 7d 0a 7d 20 7b 31 20 7b 73 74 72  tr1) }.} {1 {str
2670: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20  ing or blob too 
2680: 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73  big}}..do_test s
2690: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e 31  qllimits1-5.14.1
26a0: 20 7b 0a 20 20 73 65 74 20 3a 3a 53 54 4d 54 20   {.  set ::STMT 
26b0: 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65  [sqlite3_prepare
26c0: 20 64 62 20 22 53 45 4c 45 43 54 20 3f 22 20 2d   db "SELECT ?" -
26d0: 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69 74 65  1 TAIL].  sqlite
26e0: 33 5f 62 69 6e 64 5f 7a 65 72 6f 62 6c 6f 62 20  3_bind_zeroblob 
26f0: 24 3a 3a 53 54 4d 54 20 31 20 5b 65 78 70 72 20  $::STMT 1 [expr 
2700: 7b 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  {$SQLITE_LIMIT_L
2710: 45 4e 47 54 48 20 2b 20 31 7d 5d 0a 7d 20 7b 7d  ENGTH + 1}].} {}
2720: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
2730: 74 73 31 2d 35 2e 31 34 2e 32 20 7b 0a 20 20 73  ts1-5.14.2 {.  s
2740: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53  qlite3_step $::S
2750: 54 4d 54 20 0a 7d 20 7b 53 51 4c 49 54 45 5f 45  TMT .} {SQLITE_E
2760: 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 73 71  RROR}.do_test sq
2770: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e 33 20  llimits1-5.14.3 
2780: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 65  {.  sqlite3_rese
2790: 74 20 24 3a 3a 53 54 4d 54 20 0a 7d 20 7b 53 51  t $::STMT .} {SQ
27a0: 4c 49 54 45 5f 54 4f 4f 42 49 47 7d 0a 64 6f 5f  LITE_TOOBIG}.do_
27b0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
27c0: 35 2e 31 34 2e 34 20 7b 0a 20 20 73 65 74 20 6e  5.14.4 {.  set n
27d0: 70 31 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54  p1 [expr {$SQLIT
27e0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2b  E_LIMIT_LENGTH +
27f0: 20 31 7d 5d 0a 20 20 73 65 74 20 3a 3a 73 74 72   1}].  set ::str
2800: 31 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  1 [string repeat
2810: 20 41 20 24 6e 70 31 5d 0a 20 20 63 61 74 63 68   A $np1].  catch
2820: 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74   {sqlite3_bind_t
2830: 65 78 74 20 24 3a 3a 53 54 4d 54 20 31 20 24 3a  ext $::STMT 1 $:
2840: 3a 73 74 72 31 20 2d 31 7d 20 72 65 73 0a 20 20  :str1 -1} res.  
2850: 73 65 74 20 72 65 73 0a 7d 20 7b 53 51 4c 49 54  set res.} {SQLIT
2860: 45 5f 54 4f 4f 42 49 47 7d 0a 69 66 63 61 70 61  E_TOOBIG}.ifcapa
2870: 62 6c 65 20 75 74 66 31 36 20 7b 0a 20 20 64 6f  ble utf16 {.  do
2880: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
2890: 2d 35 2e 31 34 2e 35 20 7b 0a 20 20 20 20 63 61  -5.14.5 {.    ca
28a0: 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e  tch {sqlite3_bin
28b0: 64 5f 74 65 78 74 31 36 20 24 3a 3a 53 54 4d 54  d_text16 $::STMT
28c0: 20 31 20 24 3a 3a 73 74 72 31 20 2d 31 7d 20 72   1 $::str1 -1} r
28d0: 65 73 0a 20 20 20 20 73 65 74 20 72 65 73 0a 20  es.    set res. 
28e0: 20 7d 20 7b 53 51 4c 49 54 45 5f 54 4f 4f 42 49   } {SQLITE_TOOBI
28f0: 47 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c  G}.}.do_test sql
2900: 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e 36 20 7b  limits1-5.14.6 {
2910: 0a 20 20 63 61 74 63 68 20 7b 73 71 6c 69 74 65  .  catch {sqlite
2920: 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 3a 3a 53  3_bind_text $::S
2930: 54 4d 54 20 31 20 24 3a 3a 73 74 72 31 20 24 6e  TMT 1 $::str1 $n
2940: 70 31 7d 20 72 65 73 0a 20 20 73 65 74 20 72 65  p1} res.  set re
2950: 73 0a 7d 20 7b 53 51 4c 49 54 45 5f 54 4f 4f 42  s.} {SQLITE_TOOB
2960: 49 47 7d 0a 69 66 63 61 70 61 62 6c 65 20 75 74  IG}.ifcapable ut
2970: 66 31 36 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  f16 {.  do_test 
2980: 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e  sqllimits1-5.14.
2990: 37 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 73  7 {.    catch {s
29a0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74  qlite3_bind_text
29b0: 31 36 20 24 3a 3a 53 54 4d 54 20 31 20 24 3a 3a  16 $::STMT 1 $::
29c0: 73 74 72 31 20 24 6e 70 31 7d 20 72 65 73 0a 20  str1 $np1} res. 
29d0: 20 20 20 73 65 74 20 72 65 73 0a 20 20 7d 20 7b     set res.  } {
29e0: 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 7d 0a 7d  SQLITE_TOOBIG}.}
29f0: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
2a00: 74 73 31 2d 35 2e 31 34 2e 38 20 7b 0a 20 20 73  ts1-5.14.8 {.  s
2a10: 65 74 20 6e 20 5b 65 78 70 72 20 7b 24 6e 70 31  et n [expr {$np1
2a20: 2d 31 7d 5d 0a 20 20 63 61 74 63 68 20 7b 73 71  -1}].  catch {sq
2a30: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 20  lite3_bind_text 
2a40: 24 3a 3a 53 54 4d 54 20 31 20 24 3a 3a 73 74 72  $::STMT 1 $::str
2a50: 31 20 24 6e 7d 20 72 65 73 0a 20 20 73 65 74 20  1 $n} res.  set 
2a60: 72 65 73 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  res.} {}.do_test
2a70: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34   sqllimits1-5.14
2a80: 2e 39 20 7b 0a 20 20 63 61 74 63 68 20 7b 73 71  .9 {.  catch {sq
2a90: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
2aa0: 36 20 24 3a 3a 53 54 4d 54 20 31 20 24 3a 3a 73  6 $::STMT 1 $::s
2ab0: 74 72 31 20 24 6e 7d 20 72 65 73 0a 20 20 73 65  tr1 $n} res.  se
2ac0: 74 20 72 65 73 0a 7d 20 7b 7d 0a 73 71 6c 69 74  t res.} {}.sqlit
2ad0: 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53  e3_finalize $::S
2ae0: 54 4d 54 20 0a 0a 64 6f 5f 74 65 73 74 20 73 71  TMT ..do_test sq
2af0: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 35 20 7b 0a  llimits1-5.15 {.
2b00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2b10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28  CREATE TABLE t4(
2b20: 78 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  x);.    INSERT I
2b30: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 31 29  NTO t4 VALUES(1)
2b40: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2b50: 4f 20 74 34 20 56 41 4c 55 45 53 28 32 29 3b 0a  O t4 VALUES(2);.
2b60: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2b70: 74 34 20 53 45 4c 45 43 54 20 32 2b 78 20 46 52  t4 SELECT 2+x FR
2b80: 4f 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 63 61 74  OM t4;.  }.  cat
2b90: 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  chsql {.    SELE
2ba0: 43 54 20 67 72 6f 75 70 5f 63 6f 6e 63 61 74 28  CT group_concat(
2bb0: 68 65 78 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 32  hex(randomblob(2
2bc0: 30 30 30 30 29 29 29 20 46 52 4f 4d 20 74 34 3b  0000))) FROM t4;
2bd0: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 73 74 72 69 6e  .  }.} {1 {strin
2be0: 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
2bf0: 67 7d 7d 0a 64 62 20 65 76 61 6c 20 7b 44 52 4f  g}}.db eval {DRO
2c00: 50 20 54 41 42 4c 45 20 74 34 7d 0a 0a 73 71 6c  P TABLE t4}..sql
2c10: 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51  ite3_limit db SQ
2c20: 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c  LITE_LIMIT_SQL_L
2c30: 45 4e 47 54 48 20 30 78 37 66 66 66 66 66 66 66  ENGTH 0x7fffffff
2c40: 0a 73 65 74 20 73 74 72 76 61 6c 75 65 20 5b 73  .set strvalue [s
2c50: 74 72 69 6e 67 20 72 65 70 65 61 74 20 41 20 24  tring repeat A $
2c60: 3a 3a 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  ::SQLITE_LIMIT_L
2c70: 45 4e 47 54 48 5d 0a 64 6f 5f 74 65 73 74 20 73  ENGTH].do_test s
2c80: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 36 20 7b  qllimits1-5.16 {
2c90: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c  .  catchsql "SEL
2ca0: 45 43 54 20 27 24 73 74 72 76 61 6c 75 65 27 22  ECT '$strvalue'"
2cb0: 0a 7d 20 5b 6c 69 73 74 20 30 20 24 73 74 72 76  .} [list 0 $strv
2cc0: 61 6c 75 65 5d 0a 64 6f 5f 74 65 73 74 20 73 71  alue].do_test sq
2cd0: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 37 2e 31 20  llimits1-5.17.1 
2ce0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 22 53 45  {.  catchsql "SE
2cf0: 4c 45 43 54 20 27 41 24 73 74 72 76 61 6c 75 65  LECT 'A$strvalue
2d00: 27 22 0a 7d 20 5b 6c 69 73 74 20 31 20 7b 73 74  '".} [list 1 {st
2d10: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
2d20: 20 62 69 67 7d 5d 0a 64 6f 5f 74 65 73 74 20 73   big}].do_test s
2d30: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 37 2e 32  qllimits1-5.17.2
2d40: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d   {.  sqlite3_lim
2d50: 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d  it db SQLITE_LIM
2d60: 49 54 5f 4c 45 4e 47 54 48 20 30 78 37 66 66 66  IT_LENGTH 0x7fff
2d70: 66 66 66 66 0a 20 20 63 61 74 63 68 73 71 6c 20  ffff.  catchsql 
2d80: 7b 53 45 4c 45 43 54 20 27 41 27 20 7c 7c 20 24  {SELECT 'A' || $
2d90: 3a 3a 73 74 72 76 61 6c 75 65 7d 0a 7d 20 5b 6c  ::strvalue}.} [l
2da0: 69 73 74 20 30 20 41 24 73 74 72 76 61 6c 75 65  ist 0 A$strvalue
2db0: 5d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  ].do_test sqllim
2dc0: 69 74 73 31 2d 35 2e 31 37 2e 33 20 7b 0a 20 20  its1-5.17.3 {.  
2dd0: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
2de0: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45   SQLITE_LIMIT_LE
2df0: 4e 47 54 48 20 24 53 51 4c 49 54 45 5f 4c 49 4d  NGTH $SQLITE_LIM
2e00: 49 54 5f 4c 45 4e 47 54 48 0a 20 20 63 61 74 63  IT_LENGTH.  catc
2e10: 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 27 41 27  hsql {SELECT 'A'
2e20: 20 7c 7c 20 24 3a 3a 73 74 72 76 61 6c 75 65 7d   || $::strvalue}
2e30: 0a 7d 20 5b 6c 69 73 74 20 31 20 7b 73 74 72 69  .} [list 1 {stri
2e40: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
2e50: 69 67 7d 5d 0a 73 65 74 20 62 6c 6f 62 76 61 6c  ig}].set blobval
2e60: 75 65 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61  ue [string repea
2e70: 74 20 34 31 20 24 3a 3a 53 51 4c 49 54 45 5f 4c  t 41 $::SQLITE_L
2e80: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 0a 64 6f 5f  IMIT_LENGTH].do_
2e90: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
2ea0: 35 2e 31 38 20 7b 0a 20 20 63 61 74 63 68 73 71  5.18 {.  catchsq
2eb0: 6c 20 22 53 45 4c 45 43 54 20 78 27 24 62 6c 6f  l "SELECT x'$blo
2ec0: 62 76 61 6c 75 65 27 22 0a 7d 20 5b 6c 69 73 74  bvalue'".} [list
2ed0: 20 30 20 24 73 74 72 76 61 6c 75 65 5d 0a 64 6f   0 $strvalue].do
2ee0: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
2ef0: 2d 35 2e 31 39 20 7b 0a 20 20 63 61 74 63 68 73  -5.19 {.  catchs
2f00: 71 6c 20 22 53 45 4c 45 43 54 20 27 34 31 24 62  ql "SELECT '41$b
2f10: 6c 6f 62 76 61 6c 75 65 27 22 0a 7d 20 5b 6c 69  lobvalue'".} [li
2f20: 73 74 20 31 20 7b 73 74 72 69 6e 67 20 6f 72 20  st 1 {string or 
2f30: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 5d 0a 75  blob too big}].u
2f40: 6e 73 65 74 20 62 6c 6f 62 76 61 6c 75 65 0a 0a  nset blobvalue..
2f50: 69 66 63 61 70 61 62 6c 65 20 64 61 74 65 74 69  ifcapable dateti
2f60: 6d 65 20 7b 0a 20 20 73 65 74 20 73 74 72 76 61  me {.  set strva
2f70: 6c 75 65 20 5b 73 74 72 69 6e 67 20 72 65 70 65  lue [string repe
2f80: 61 74 20 44 20 5b 65 78 70 72 20 7b 24 53 51 4c  at D [expr {$SQL
2f90: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
2fa0: 2d 31 32 7d 5d 5d 0a 20 20 64 6f 5f 74 65 73 74  -12}]].  do_test
2fb0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 32 30   sqllimits1-5.20
2fc0: 20 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   {.    catchsql 
2fd0: 7b 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65  {SELECT strftime
2fe0: 28 27 25 59 20 27 20 7c 7c 20 24 3a 3a 73 74 72  ('%Y ' || $::str
2ff0: 76 61 6c 75 65 2c 20 27 32 30 30 38 2d 30 31 2d  value, '2008-01-
3000: 30 32 27 29 7d 0a 20 20 7d 20 5b 6c 69 73 74 20  02')}.  } [list 
3010: 30 20 5b 6c 69 73 74 20 22 32 30 30 38 20 24 73  0 [list "2008 $s
3020: 74 72 76 61 6c 75 65 22 5d 5d 0a 20 20 64 6f 5f  trvalue"]].  do_
3030: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
3040: 35 2e 32 31 20 7b 0a 20 20 20 20 63 61 74 63 68  5.21 {.    catch
3050: 73 71 6c 20 7b 53 45 4c 45 43 54 20 73 74 72 66  sql {SELECT strf
3060: 74 69 6d 65 28 27 25 59 2d 25 6d 2d 25 64 20 27  time('%Y-%m-%d '
3070: 20 7c 7c 20 24 3a 3a 73 74 72 76 61 6c 75 65 2c   || $::strvalue,
3080: 20 27 32 30 30 38 2d 30 31 2d 30 32 27 29 7d 0a   '2008-01-02')}.
3090: 20 20 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f    } {1 {string o
30a0: 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d  r blob too big}}
30b0: 0a 7d 0a 75 6e 73 65 74 20 73 74 72 76 61 6c 75  .}.unset strvalu
30c0: 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  e..#------------
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3100: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
3110: 63 61 73 65 73 20 73 71 6c 6c 69 6d 69 74 73 31  cases sqllimits1
3120: 2d 36 2e 2a 20 74 65 73 74 20 74 68 61 74 20 74  -6.* test that t
3130: 68 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51  he SQLITE_MAX_SQ
3140: 4c 5f 4c 45 4e 47 54 48 20 6c 69 6d 69 74 0a 23  L_LENGTH limit.#
3150: 20 69 73 20 65 6e 66 6f 72 63 65 64 2e 0a 23 0a   is enforced..#.
3160: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
3170: 73 31 2d 36 2e 31 20 7b 0a 20 20 73 71 6c 69 74  s1-6.1 {.  sqlit
3180: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
3190: 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e  TE_LIMIT_SQL_LEN
31a0: 47 54 48 20 35 30 30 30 30 0a 20 20 73 65 74 20  GTH 50000.  set 
31b0: 73 71 6c 20 22 53 45 4c 45 43 54 20 31 20 57 48  sql "SELECT 1 WH
31c0: 45 52 45 20 31 3d 3d 31 22 0a 20 20 73 65 74 20  ERE 1==1".  set 
31d0: 74 61 69 6c 20 22 20 2f 2a 20 41 20 63 6f 6d 6d  tail " /* A comm
31e0: 65 6e 74 20 74 6f 20 74 61 6b 65 20 75 70 20 73  ent to take up s
31f0: 70 61 63 65 20 69 6e 20 6f 72 64 65 72 20 74 6f  pace in order to
3200: 20 6d 61 6b 65 20 74 68 65 20 73 74 72 69 6e 67   make the string
3210: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
3220: 20 20 6c 6f 6e 67 65 72 20 77 69 74 68 6f 75 74    longer without
3230: 20 69 6e 63 72 65 61 73 69 6e 67 20 74 68 65 20   increasing the 
3240: 65 78 70 72 65 73 73 69 6f 6e 20 64 65 70 74 68  expression depth
3250: 20 2a 2f 5c 0a 20 20 20 20 20 20 20 20 20 20 20   */\.           
3260: 20 20 20 20 20 41 4e 44 20 20 20 31 20 20 3d 3d       AND   1  ==
3270: 20 20 31 22 0a 20 20 73 65 74 20 4e 20 5b 65 78    1".  set N [ex
3280: 70 72 20 7b 28 35 30 30 30 30 20 2f 20 5b 73 74  pr {(50000 / [st
3290: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 61 69  ring length $tai
32a0: 6c 5d 29 2b 31 7d 5d 0a 20 20 61 70 70 65 6e 64  l])+1}].  append
32b0: 20 73 71 6c 20 5b 73 74 72 69 6e 67 20 72 65 70   sql [string rep
32c0: 65 61 74 20 24 74 61 69 6c 20 24 4e 5d 0a 20 20  eat $tail $N].  
32d0: 63 61 74 63 68 73 71 6c 20 24 73 71 6c 0a 7d 20  catchsql $sql.} 
32e0: 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c  {1 {string or bl
32f0: 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 64 6f 5f  ob too big}}.do_
3300: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
3310: 36 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  6.3 {.  sqlite3_
3320: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
3330: 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48  LIMIT_SQL_LENGTH
3340: 20 35 30 30 30 30 0a 20 20 73 65 74 20 73 71 6c   50000.  set sql
3350: 20 22 53 45 4c 45 43 54 20 31 20 57 48 45 52 45   "SELECT 1 WHERE
3360: 20 31 3d 3d 31 22 0a 20 20 73 65 74 20 74 61 69   1==1".  set tai
3370: 6c 20 22 20 2f 2a 20 41 20 63 6f 6d 6d 65 6e 74  l " /* A comment
3380: 20 74 6f 20 74 61 6b 65 20 75 70 20 73 70 61 63   to take up spac
3390: 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6d 61  e in order to ma
33a0: 6b 65 20 74 68 65 20 73 74 72 69 6e 67 5c 0a 20  ke the string\. 
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
33c0: 6f 6e 67 65 72 20 77 69 74 68 6f 75 74 20 69 6e  onger without in
33d0: 63 72 65 61 73 69 6e 67 20 74 68 65 20 65 78 70  creasing the exp
33e0: 72 65 73 73 69 6f 6e 20 64 65 70 74 68 20 2a 2f  ression depth */
33f0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
3400: 20 20 41 4e 44 20 20 20 31 20 20 3d 3d 20 20 31    AND   1  ==  1
3410: 22 0a 20 20 73 65 74 20 4e 20 5b 65 78 70 72 20  ".  set N [expr 
3420: 7b 28 35 30 30 30 30 20 2f 20 5b 73 74 72 69 6e  {(50000 / [strin
3430: 67 20 6c 65 6e 67 74 68 20 24 74 61 69 6c 5d 29  g length $tail])
3440: 2b 31 7d 5d 0a 20 20 61 70 70 65 6e 64 20 73 71  +1}].  append sq
3450: 6c 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  l [string repeat
3460: 20 24 74 61 69 6c 20 24 4e 5d 0a 20 20 73 65 74   $tail $N].  set
3470: 20 6e 62 79 74 65 73 20 5b 73 74 72 69 6e 67 20   nbytes [string 
3480: 6c 65 6e 67 74 68 20 24 73 71 6c 5d 0a 20 20 61  length $sql].  a
3490: 70 70 65 6e 64 20 73 71 6c 20 7b 20 41 4e 44 20  ppend sql { AND 
34a0: 30 7d 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74  0}.  set rc [cat
34b0: 63 68 20 7b 73 71 6c 69 74 65 33 5f 70 72 65 70  ch {sqlite3_prep
34c0: 61 72 65 20 64 62 20 24 73 71 6c 20 24 6e 62 79  are db $sql $nby
34d0: 74 65 73 20 54 41 49 4c 7d 20 53 54 4d 54 5d 0a  tes TAIL} STMT].
34e0: 20 20 6c 61 70 70 65 6e 64 20 72 63 20 24 53 54    lappend rc $ST
34f0: 4d 54 0a 7d 20 7b 31 20 7b 28 31 38 29 20 73 74  MT.} {1 {(18) st
3500: 61 74 65 6d 65 6e 74 20 74 6f 6f 20 6c 6f 6e 67  atement too long
3510: 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  }}.do_test sqlli
3520: 6d 69 74 73 31 2d 36 2e 34 20 7b 0a 20 20 73 71  mits1-6.4 {.  sq
3530: 6c 69 74 65 33 5f 65 72 72 6d 73 67 20 64 62 0a  lite3_errmsg db.
3540: 7d 20 7b 73 74 61 74 65 6d 65 6e 74 20 74 6f 6f  } {statement too
3550: 20 6c 6f 6e 67 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d   long}..#-------
3560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
35a0: 54 65 73 74 20 63 61 73 65 73 20 73 71 6c 6c 69  Test cases sqlli
35b0: 6d 69 74 73 31 2d 37 2e 2a 20 74 65 73 74 20 74  mits1-7.* test t
35c0: 68 61 74 20 74 68 65 20 6c 69 6d 69 74 20 73 65  hat the limit se
35d0: 74 20 75 73 69 6e 67 20 74 68 65 0a 23 20 6d 61  t using the.# ma
35e0: 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20 70 72 61  x_page_count pra
35f0: 67 6d 61 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73  gma..#.do_test s
3600: 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 31 20 7b 0a  qllimits1-7.1 {.
3610: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3620: 50 52 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f  PRAGMA max_page_
3630: 63 6f 75 6e 74 20 3d 20 31 30 30 30 3b 0a 20 20  count = 1000;.  
3640: 7d 0a 7d 20 7b 31 30 30 30 7d 0a 64 6f 5f 74 65  }.} {1000}.do_te
3650: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e  st sqllimits1-7.
3660: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
3670: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 72 69  CREATE TABLE tri
3680: 67 20 28 61 20 49 4e 54 45 47 45 52 2c 20 62 20  g (a INTEGER, b 
3690: 49 4e 54 45 47 45 52 29 3b 20 7d 0a 0a 20 20 23  INTEGER); }..  #
36a0: 20 53 65 74 20 75 70 20 61 20 74 72 65 65 20 6f   Set up a tree o
36b0: 66 20 74 72 69 67 67 65 72 73 20 74 6f 20 66 69  f triggers to fi
36c0: 72 65 20 77 68 65 6e 20 61 20 72 6f 77 20 69 73  re when a row is
36d0: 20 69 6e 73 65 72 74 65 64 0a 20 20 23 20 69 6e   inserted.  # in
36e0: 74 6f 20 74 61 62 6c 65 20 22 74 72 69 67 22 2e  to table "trig".
36f0: 0a 20 20 23 0a 20 20 23 20 49 4e 53 45 52 54 20  .  #.  # INSERT 
3700: 2d 3e 20 69 6e 73 65 72 74 5f 62 20 2d 3e 20 75  -> insert_b -> u
3710: 70 64 61 74 65 5f 62 20 2d 3e 20 69 6e 73 65 72  pdate_b -> inser
3720: 74 5f 61 20 2d 3e 20 75 70 64 61 74 65 5f 61 20  t_a -> update_a 
3730: 20 20 20 20 20 28 63 68 61 69 6e 20 31 29 0a 20       (chain 1). 
3740: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
3750: 20 20 20 20 20 20 2d 3e 20 75 70 64 61 74 65 5f        -> update_
3760: 61 20 2d 3e 20 69 6e 73 65 72 74 5f 61 20 2d 3e  a -> insert_a ->
3770: 20 75 70 64 61 74 65 5f 62 20 20 20 20 20 20 28   update_b      (
3780: 63 68 61 69 6e 20 32 29 0a 20 20 23 20 20 20 20  chain 2).  #    
3790: 20 20 20 20 2d 3e 20 69 6e 73 65 72 74 5f 61 20      -> insert_a 
37a0: 2d 3e 20 75 70 64 61 74 65 5f 62 20 2d 3e 20 69  -> update_b -> i
37b0: 6e 73 65 72 74 5f 62 20 2d 3e 20 75 70 64 61 74  nsert_b -> updat
37c0: 65 5f 61 20 20 20 20 20 20 28 63 68 61 69 6e 20  e_a      (chain 
37d0: 33 29 0a 20 20 23 20 20 20 20 20 20 20 20 20 20  3).  #          
37e0: 20 20 20 20 20 20 20 20 20 20 2d 3e 20 75 70 64            -> upd
37f0: 61 74 65 5f 61 20 2d 3e 20 69 6e 73 65 72 74 5f  ate_a -> insert_
3800: 62 20 2d 3e 20 75 70 64 61 74 65 5f 62 20 20 20  b -> update_b   
3810: 20 20 20 28 63 68 61 69 6e 20 34 29 0a 20 20 23     (chain 4).  #
3820: 0a 20 20 23 20 54 61 62 6c 65 20 73 74 61 72 74  .  # Table start
3830: 73 20 77 69 74 68 20 4e 20 72 6f 77 73 2e 0a 20  s with N rows.. 
3840: 20 23 0a 20 20 23 20 20 20 43 68 61 69 6e 20 31   #.  #   Chain 1
3850: 3a 20 69 6e 73 65 72 74 5f 62 20 28 75 70 64 61  : insert_b (upda
3860: 74 65 20 4e 20 72 6f 77 73 29 0a 20 20 23 20 20  te N rows).  #  
3870: 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 75              -> u
3880: 70 64 61 74 65 5f 62 20 28 69 6e 73 65 72 74 20  pdate_b (insert 
3890: 31 20 72 6f 77 73 29 0a 20 20 23 20 20 20 20 20  1 rows).  #     
38a0: 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 69 6e             -> in
38b0: 73 65 72 74 5f 61 20 28 75 70 64 61 74 65 20 4e  sert_a (update N
38c0: 20 72 6f 77 73 29 0a 20 20 23 20 20 20 20 20 20   rows).  #      
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 75              -> u
38e0: 70 64 61 74 65 5f 61 20 28 69 6e 73 65 72 74 20  pdate_a (insert 
38f0: 31 20 72 6f 77 73 29 0a 20 20 23 0a 20 20 23 20  1 rows).  #.  # 
3900: 63 68 61 69 6e 73 20 32 2c 20 33 20 61 6e 64 20  chains 2, 3 and 
3910: 34 20 61 72 65 20 73 69 6d 69 6c 61 72 2e 20 45  4 are similar. E
3920: 61 63 68 20 69 6e 73 65 72 74 73 20 6d 6f 72 65  ach inserts more
3930: 20 74 68 61 6e 20 4e 5e 32 20 72 6f 77 73 2c 20   than N^2 rows, 
3940: 77 68 65 72 65 0a 20 20 23 20 4e 20 69 73 20 74  where.  # N is t
3950: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  he number of row
3960: 73 20 61 74 20 74 68 65 20 63 6f 6e 63 6c 75 73  s at the conclus
3970: 69 6f 6e 20 6f 66 20 74 68 65 20 70 72 65 76 69  ion of the previ
3980: 6f 75 73 20 63 68 61 69 6e 2e 0a 20 20 23 0a 20  ous chain..  #. 
3990: 20 23 20 54 68 65 72 65 66 6f 72 65 2c 20 61 20   # Therefore, a 
39a0: 73 69 6e 67 6c 65 20 69 6e 73 65 72 74 20 61 64  single insert ad
39b0: 64 73 20 28 4e 5e 31 36 20 70 6c 75 73 20 73 6f  ds (N^16 plus so
39c0: 6d 65 29 20 72 6f 77 73 20 74 6f 20 74 68 65 20  me) rows to the 
39d0: 64 61 74 61 62 61 73 65 2e 0a 20 20 23 20 41 20  database..  # A 
39e0: 72 65 61 6c 6c 79 20 6c 6f 6e 67 20 6c 6f 6f 70  really long loop
39f0: 2e 2e 2e 0a 20 20 23 20 20 20 20 20 0a 20 20 65  ....  #     .  e
3a00: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
3a10: 41 54 45 20 54 52 49 47 47 45 52 20 75 70 64 61  ATE TRIGGER upda
3a20: 74 65 5f 62 20 42 45 46 4f 52 45 20 55 50 44 41  te_b BEFORE UPDA
3a30: 54 45 20 4f 4e 20 74 72 69 67 0a 20 20 20 20 20  TE ON trig.     
3a40: 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 42 45   FOR EACH ROW BE
3a50: 47 49 4e 0a 20 20 20 20 20 20 20 20 49 4e 53 45  GIN.        INSE
3a60: 52 54 20 49 4e 54 4f 20 74 72 69 67 20 56 41 4c  RT INTO trig VAL
3a70: 55 45 53 20 28 36 35 2c 20 27 75 70 64 61 74 65  UES (65, 'update
3a80: 5f 62 27 29 3b 0a 20 20 20 20 20 20 45 4e 44 3b  _b');.      END;
3a90: 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54 52 49  ..    CREATE TRI
3aa0: 47 47 45 52 20 75 70 64 61 74 65 5f 61 20 41 46  GGER update_a AF
3ab0: 54 45 52 20 55 50 44 41 54 45 20 4f 4e 20 74 72  TER UPDATE ON tr
3ac0: 69 67 0a 20 20 20 20 20 20 46 4f 52 20 45 41 43  ig.      FOR EAC
3ad0: 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20 20 20  H ROW BEGIN.    
3ae0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3af0: 74 72 69 67 20 56 41 4c 55 45 53 20 28 36 35 2c  trig VALUES (65,
3b00: 20 27 75 70 64 61 74 65 5f 61 27 29 3b 0a 20 20   'update_a');.  
3b10: 20 20 20 20 45 4e 44 3b 0a 0a 20 20 20 20 43 52      END;..    CR
3b20: 45 41 54 45 20 54 52 49 47 47 45 52 20 69 6e 73  EATE TRIGGER ins
3b30: 65 72 74 5f 62 20 42 45 46 4f 52 45 20 49 4e 53  ert_b BEFORE INS
3b40: 45 52 54 20 4f 4e 20 74 72 69 67 0a 20 20 20 20  ERT ON trig.    
3b50: 20 20 46 4f 52 20 45 41 43 48 20 52 4f 57 20 42    FOR EACH ROW B
3b60: 45 47 49 4e 0a 20 20 20 20 20 20 20 20 55 50 44  EGIN.        UPD
3b70: 41 54 45 20 74 72 69 67 20 53 45 54 20 61 20 3d  ATE trig SET a =
3b80: 20 31 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 0a   1;.      END;..
3b90: 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
3ba0: 45 52 20 69 6e 73 65 72 74 5f 61 20 41 46 54 45  ER insert_a AFTE
3bb0: 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 72 69 67  R INSERT ON trig
3bc0: 0a 20 20 20 20 20 20 46 4f 52 20 45 41 43 48 20  .      FOR EACH 
3bd0: 52 4f 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20  ROW BEGIN.      
3be0: 20 20 55 50 44 41 54 45 20 74 72 69 67 20 53 45    UPDATE trig SE
3bf0: 54 20 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 45  T a = 1;.      E
3c00: 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f  ND;.  }.} {}..do
3c10: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
3c20: 2d 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.3 {.  execsql
3c30: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
3c40: 54 4f 20 74 72 69 67 20 56 41 4c 55 45 53 20 28  TO trig VALUES (
3c50: 31 2c 31 29 3b 20 0a 20 20 7d 0a 7d 20 7b 7d 0a  1,1); .  }.} {}.
3c60: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
3c70: 74 73 31 2d 37 2e 34 20 7b 0a 20 20 65 78 65 63  ts1-7.4 {.  exec
3c80: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3c90: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74   COUNT(*) FROM t
3ca0: 72 69 67 3b 0a 20 20 7d 0a 7d 20 7b 37 7d 0a 0a  rig;.  }.} {7}..
3cb0: 23 20 54 68 69 73 20 74 72 69 65 73 20 74 6f 20  # This tries to 
3cc0: 69 6e 73 65 72 74 20 73 6f 20 6d 61 6e 79 20 72  insert so many r
3cd0: 6f 77 73 20 69 74 20 66 69 6c 6c 73 20 75 70 20  ows it fills up 
3ce0: 74 68 65 20 64 61 74 61 62 61 73 65 20 28 6c 69  the database (li
3cf0: 6d 69 74 65 64 0a 23 20 74 6f 20 31 4d 42 2c 20  mited.# to 1MB, 
3d00: 73 6f 20 6e 6f 74 20 74 68 61 74 20 6e 6f 74 65  so not that note
3d10: 77 6f 72 74 68 79 20 61 6e 20 61 63 68 69 65 76  worthy an achiev
3d20: 65 6d 65 6e 74 29 2e 0a 23 0a 64 6f 5f 74 65 73  ement)..#.do_tes
3d30: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 35  t sqllimits1-7.5
3d40: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3d50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
3d60: 74 72 69 67 20 56 41 4c 55 45 53 20 28 31 2c 31  trig VALUES (1,1
3d70: 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 64 61  0);.  }.} {1 {da
3d80: 74 61 62 61 73 65 20 6f 72 20 64 69 73 6b 20 69  tabase or disk i
3d90: 73 20 66 75 6c 6c 7d 7d 0a 0a 64 6f 5f 74 65 73  s full}}..do_tes
3da0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 36  t sqllimits1-7.6
3db0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
3dc0: 20 20 20 20 53 45 4c 45 43 54 20 43 4f 55 4e 54      SELECT COUNT
3dd0: 28 2a 29 20 46 52 4f 4d 20 74 72 69 67 3b 0a 20  (*) FROM trig;. 
3de0: 20 7d 0a 7d 20 7b 30 20 37 7d 0a 0a 23 20 4e 6f   }.} {0 7}..# No
3df0: 77 20 63 68 65 63 6b 20 74 68 65 20 72 65 73 70  w check the resp
3e00: 6f 6e 73 65 20 6f 66 20 74 68 65 20 6c 69 62 72  onse of the libr
3e10: 61 72 79 20 74 6f 20 6f 70 65 6e 69 6e 67 20 61  ary to opening a
3e20: 20 66 69 6c 65 20 6c 61 72 67 65 72 20 74 68 61   file larger tha
3e30: 6e 0a 23 20 74 68 65 20 63 75 72 72 65 6e 74 20  n.# the current 
3e40: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20 76  max_page_count v
3e50: 61 6c 75 65 2e 20 54 68 65 20 72 65 73 70 6f 6e  alue. The respon
3e60: 73 65 20 69 73 20 74 6f 20 63 68 61 6e 67 65 20  se is to change 
3e70: 74 68 65 0a 23 20 69 6e 74 65 72 6e 61 6c 20 6d  the.# internal m
3e80: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20 76 61  ax_page_count va
3e90: 6c 75 65 20 74 6f 20 6d 61 74 63 68 20 74 68 65  lue to match the
3ea0: 20 61 63 74 75 61 6c 20 73 69 7a 65 20 6f 66 20   actual size of 
3eb0: 74 68 65 20 66 69 6c 65 2e 0a 69 66 20 7b 5b 64  the file..if {[d
3ec0: 62 20 65 76 61 6c 20 7b 50 52 41 47 4d 41 20 61  b eval {PRAGMA a
3ed0: 75 74 6f 5f 76 61 63 75 75 6d 7d 5d 7d 20 7b 0a  uto_vacuum}]} {.
3ee0: 20 20 20 73 65 74 20 66 73 69 7a 65 20 31 37 30     set fsize 170
3ef0: 30 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 20 73 65  0.} else {.   se
3f00: 74 20 66 73 69 7a 65 20 31 36 39 31 0a 7d 0a 64  t fsize 1691.}.d
3f10: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
3f20: 31 2d 37 2e 37 2e 31 20 7b 0a 20 20 65 78 65 63  1-7.7.1 {.  exec
3f30: 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  sql {.    PRAGMA
3f40: 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20   max_page_count 
3f50: 3d 20 31 30 30 30 30 30 30 3b 0a 20 20 20 20 43  = 1000000;.    C
3f60: 52 45 41 54 45 20 54 41 42 4c 45 20 61 62 63 28  REATE TABLE abc(
3f70: 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49 4e  a, b, c);.    IN
3f80: 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 56 41  SERT INTO abc VA
3f90: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20  LUES(1, 2, 3);. 
3fa0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
3fb0: 62 63 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c  bc SELECT a||b||
3fc0: 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61  c, b||c||a, c||a
3fd0: 7c 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20  ||b FROM abc;.  
3fe0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
3ff0: 63 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63  c SELECT a||b||c
4000: 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c  , b||c||a, c||a|
4010: 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20  |b FROM abc;.   
4020: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
4030: 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c   SELECT a||b||c,
4040: 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c   b||c||a, c||a||
4050: 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20  b FROM abc;.    
4060: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20  INSERT INTO abc 
4070: 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c 20  SELECT a||b||c, 
4080: 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62  b||c||a, c||a||b
4090: 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49   FROM abc;.    I
40a0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53  NSERT INTO abc S
40b0: 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c 20 62  ELECT a||b||c, b
40c0: 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62 20  ||c||a, c||a||b 
40d0: 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49 4e  FROM abc;.    IN
40e0: 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53 45  SERT INTO abc SE
40f0: 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c 20 62 7c  LECT a||b||c, b|
4100: 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62 20 46  |c||a, c||a||b F
4110: 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49 4e 53  ROM abc;.    INS
4120: 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53 45 4c  ERT INTO abc SEL
4130: 45 43 54 20 61 7c 7c 62 7c 7c 63 2c 20 62 7c 7c  ECT a||b||c, b||
4140: 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62 20 46 52  c||a, c||a||b FR
4150: 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49 4e 53 45  OM abc;.    INSE
4160: 52 54 20 49 4e 54 4f 20 61 62 63 20 53 45 4c 45  RT INTO abc SELE
4170: 43 54 20 61 7c 7c 62 7c 7c 63 2c 20 62 7c 7c 63  CT a||b||c, b||c
4180: 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62 20 46 52 4f  ||a, c||a||b FRO
4190: 4d 20 61 62 63 3b 0a 20 20 20 20 49 4e 53 45 52  M abc;.    INSER
41a0: 54 20 49 4e 54 4f 20 61 62 63 20 53 45 4c 45 43  T INTO abc SELEC
41b0: 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 61  T a, b, c FROM a
41c0: 62 63 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  bc;.    INSERT I
41d0: 4e 54 4f 20 61 62 63 20 53 45 4c 45 43 54 20 62  NTO abc SELECT b
41e0: 2c 20 61 2c 20 63 20 46 52 4f 4d 20 61 62 63 3b  , a, c FROM abc;
41f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4200: 20 61 62 63 20 53 45 4c 45 43 54 20 63 2c 20 62   abc SELECT c, b
4210: 2c 20 61 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20  , a FROM abc;.  
4220: 7d 0a 20 20 65 78 70 72 20 5b 66 69 6c 65 20 73  }.  expr [file s
4230: 69 7a 65 20 74 65 73 74 2e 64 62 5d 20 2f 20 31  ize test.db] / 1
4240: 30 32 34 0a 7d 20 24 66 73 69 7a 65 0a 64 6f 5f  024.} $fsize.do_
4250: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
4260: 37 2e 37 2e 32 20 7b 0a 20 20 64 62 20 63 6c 6f  7.7.2 {.  db clo
4270: 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20  se.  sqlite3 db 
4280: 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71  test.db.  execsq
4290: 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 6d  l {.    PRAGMA m
42a0: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20 3d 20  ax_page_count = 
42b0: 31 30 30 30 3b 0a 20 20 7d 0a 20 20 65 78 65 63  1000;.  }.  exec
42c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
42d0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73   count(*) FROM s
42e0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20  qlite_master;.  
42f0: 7d 0a 7d 20 7b 36 7d 0a 64 6f 5f 74 65 73 74 20  }.} {6}.do_test 
4300: 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 37 2e 33  sqllimits1-7.7.3
4310: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4320: 20 20 20 50 52 41 47 4d 41 20 6d 61 78 5f 70 61     PRAGMA max_pa
4330: 67 65 5f 63 6f 75 6e 74 3b 0a 20 20 7d 0a 7d 20  ge_count;.  }.} 
4340: 24 66 73 69 7a 65 0a 64 6f 5f 74 65 73 74 20 73  $fsize.do_test s
4350: 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 37 2e 34 20  qllimits1-7.7.4 
4360: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4370: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 61 62 63    DROP TABLE abc
4380: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d  ;.  }.} {}..#---
4390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43d0: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73  -.# Test cases s
43e0: 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 2a 20 74 65  qllimits1-8.* te
43f0: 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  st the SQLITE_MA
4400: 58 5f 43 4f 4c 55 4d 4e 20 6c 69 6d 69 74 2e 0a  X_COLUMN limit..
4410: 23 0a 73 65 74 20 53 51 4c 49 54 45 5f 4c 49 4d  #.set SQLITE_LIM
4420: 49 54 5f 43 4f 4c 55 4d 4e 20 32 30 30 0a 73 71  IT_COLUMN 200.sq
4430: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
4440: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
4450: 4d 4e 20 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54  MN $SQLITE_LIMIT
4460: 5f 43 4f 4c 55 4d 4e 0a 64 6f 5f 74 65 73 74 20  _COLUMN.do_test 
4470: 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 31 20 7b  sqllimits1-8.1 {
4480: 0a 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69 6e 20  .  # Columns in 
4490: 61 20 74 61 62 6c 65 2e 0a 20 20 73 65 74 20 63  a table..  set c
44a0: 6f 6c 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  ols [list].  for
44b0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
44c0: 3d 20 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  = $SQLITE_LIMIT_
44d0: 43 4f 4c 55 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d  COLUMN} {incr i}
44e0: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63   {.    lappend c
44f0: 6f 6c 73 20 22 63 24 69 22 0a 20 20 7d 0a 20 20  ols "c$i".  }.  
4500: 63 61 74 63 68 73 71 6c 20 22 43 52 45 41 54 45  catchsql "CREATE
4510: 20 54 41 42 4c 45 20 74 28 5b 6a 6f 69 6e 20 24   TABLE t([join $
4520: 63 6f 6c 73 20 2c 5d 29 22 20 0a 7d 20 7b 31 20  cols ,])" .} {1 
4530: 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e  {too many column
4540: 73 20 6f 6e 20 74 7d 7d 0a 0a 64 6f 5f 74 65 73  s on t}}..do_tes
4550: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 32  t sqllimits1-8.2
4560: 20 7b 0a 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69   {.  # Columns i
4570: 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
4580: 20 6f 66 20 61 20 53 45 4c 45 43 54 2e 0a 20 20   of a SELECT..  
4590: 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73 74 5d 0a  set cols [list].
45a0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
45b0: 7b 24 69 20 3c 3d 20 24 53 51 4c 49 54 45 5f 4c  {$i <= $SQLITE_L
45c0: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20 7b 69 6e  IMIT_COLUMN} {in
45d0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c 61 70 70  cr i} {.    lapp
45e0: 65 6e 64 20 63 6f 6c 73 20 22 73 71 6c 20 41 53  end cols "sql AS
45f0: 20 73 71 6c 24 69 22 0a 20 20 7d 0a 20 20 63 61   sql$i".  }.  ca
4600: 74 63 68 73 71 6c 20 22 53 45 4c 45 43 54 20 5b  tchsql "SELECT [
4610: 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 20 46 52  join $cols ,] FR
4620: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
4630: 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79  ".} {1 {too many
4640: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 65 73 75   columns in resu
4650: 6c 74 20 73 65 74 7d 7d 0a 0a 64 6f 5f 74 65 73  lt set}}..do_tes
4660: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 33  t sqllimits1-8.3
4670: 20 7b 0a 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69   {.  # Columns i
4680: 6e 20 74 68 65 20 72 65 73 75 6c 74 2d 73 65 74  n the result-set
4690: 20 6f 66 20 61 20 73 75 62 2d 53 45 4c 45 43 54   of a sub-SELECT
46a0: 2e 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69  ..  set cols [li
46b0: 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  st].  for {set i
46c0: 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c 49   0} {$i <= $SQLI
46d0: 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d  TE_LIMIT_COLUMN}
46e0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
46f0: 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20 22 73 71  lappend cols "sq
4700: 6c 20 41 53 20 73 71 6c 24 69 22 0a 20 20 7d 0a  l AS sql$i".  }.
4710: 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45    catchsql "SELE
4720: 43 54 20 73 71 6c 34 20 46 52 4f 4d 20 28 53 45  CT sql4 FROM (SE
4730: 4c 45 43 54 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73  LECT [join $cols
4740: 20 2c 5d 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f   ,] FROM sqlite_
4750: 6d 61 73 74 65 72 29 22 0a 7d 20 7b 31 20 7b 74  master)".} {1 {t
4760: 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20  oo many columns 
4770: 69 6e 20 72 65 73 75 6c 74 20 73 65 74 7d 7d 0a  in result set}}.
4780: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
4790: 74 73 31 2d 38 2e 34 20 7b 0a 20 20 23 20 43 6f  ts1-8.4 {.  # Co
47a0: 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 69 6e 64 65  lumns in an inde
47b0: 78 2e 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c  x..  set cols [l
47c0: 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  ist].  for {set 
47d0: 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c  i 0} {$i <= $SQL
47e0: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
47f0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
4800: 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20 63 0a   lappend cols c.
4810: 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 31 20 22    }.  set sql1 "
4820: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
4830: 63 29 3b 22 0a 20 20 73 65 74 20 73 71 6c 32 20  c);".  set sql2 
4840: 22 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 31  "CREATE INDEX i1
4850: 20 4f 4e 20 74 31 28 5b 6a 6f 69 6e 20 24 63 6f   ON t1([join $co
4860: 6c 73 20 2c 5d 29 3b 22 0a 20 20 63 61 74 63 68  ls ,]);".  catch
4870: 73 71 6c 20 22 24 73 71 6c 31 20 3b 20 24 73 71  sql "$sql1 ; $sq
4880: 6c 32 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61  l2".} {1 {too ma
4890: 6e 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 69 6e  ny columns in in
48a0: 64 65 78 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73  dex}}..do_test s
48b0: 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 35 20 7b 0a  qllimits1-8.5 {.
48c0: 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69 6e 20 61    # Columns in a
48d0: 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65   GROUP BY clause
48e0: 2e 0a 20 20 63 61 74 63 68 73 71 6c 20 22 53 45  ..  catchsql "SE
48f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 47  LECT * FROM t1 G
4900: 52 4f 55 50 20 42 59 20 5b 6a 6f 69 6e 20 24 63  ROUP BY [join $c
4910: 6f 6c 73 20 2c 5d 22 0a 7d 20 7b 31 20 7b 74 6f  ols ,]".} {1 {to
4920: 6f 20 6d 61 6e 79 20 74 65 72 6d 73 20 69 6e 20  o many terms in 
4930: 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 7d  GROUP BY clause}
4940: 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  }..do_test sqlli
4950: 6d 69 74 73 31 2d 38 2e 36 20 7b 0a 20 20 23 20  mits1-8.6 {.  # 
4960: 43 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e 20 4f 52  Columns in an OR
4970: 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 20  DER BY clause.. 
4980: 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45 43   catchsql "SELEC
4990: 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T * FROM t1 ORDE
49a0: 52 20 42 59 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73  R BY [join $cols
49b0: 20 2c 5d 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d   ,]".} {1 {too m
49c0: 61 6e 79 20 74 65 72 6d 73 20 69 6e 20 4f 52 44  any terms in ORD
49d0: 45 52 20 42 59 20 63 6c 61 75 73 65 7d 7d 0a 0a  ER BY clause}}..
49e0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
49f0: 73 31 2d 38 2e 37 20 7b 0a 20 20 23 20 41 73 73  s1-8.7 {.  # Ass
4a00: 69 67 6e 6d 65 6e 74 73 20 69 6e 20 61 6e 20 55  ignments in an U
4a10: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
4a20: 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73  .  set cols [lis
4a30: 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  t].  for {set i 
4a40: 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c 49 54  0} {$i <= $SQLIT
4a50: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20  E_LIMIT_COLUMN} 
4a60: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c  {incr i} {.    l
4a70: 61 70 70 65 6e 64 20 63 6f 6c 73 20 22 63 20 3d  append cols "c =
4a80: 20 31 22 0a 20 20 7d 0a 20 20 63 61 74 63 68 73   1".  }.  catchs
4a90: 71 6c 20 22 55 50 44 41 54 45 20 74 31 20 53 45  ql "UPDATE t1 SE
4aa0: 54 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d  T [join $cols ,]
4ab0: 3b 22 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e  ;".} {1 {too man
4ac0: 79 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 73 65 74  y columns in set
4ad0: 20 6c 69 73 74 7d 7d 0a 0a 64 6f 5f 74 65 73 74   list}}..do_test
4ae0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 38 20   sqllimits1-8.8 
4af0: 7b 0a 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69 6e  {.  # Columns in
4b00: 20 61 20 76 69 65 77 20 64 65 66 69 6e 69 74 69   a view definiti
4b10: 6f 6e 3a 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b  on:.  set cols [
4b20: 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74  list].  for {set
4b30: 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51   i 0} {$i <= $SQ
4b40: 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
4b50: 4e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  N} {incr i} {.  
4b60: 20 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20 22    lappend cols "
4b70: 63 24 69 22 0a 20 20 7d 0a 20 20 63 61 74 63 68  c$i".  }.  catch
4b80: 73 71 6c 20 22 43 52 45 41 54 45 20 56 49 45 57  sql "CREATE VIEW
4b90: 20 76 31 20 41 53 20 53 45 4c 45 43 54 20 5b 6a   v1 AS SELECT [j
4ba0: 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 20 46 52 4f  oin $cols ,] FRO
4bb0: 4d 20 74 31 3b 22 0a 7d 20 7b 31 20 7b 74 6f 6f  M t1;".} {1 {too
4bc0: 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 69 6e   many columns in
4bd0: 20 72 65 73 75 6c 74 20 73 65 74 7d 7d 0a 0a 64   result set}}..d
4be0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
4bf0: 31 2d 38 2e 39 20 7b 0a 20 20 23 20 43 6f 6c 75  1-8.9 {.  # Colu
4c00: 6d 6e 73 20 69 6e 20 61 20 76 69 65 77 20 64 65  mns in a view de
4c10: 66 69 6e 69 74 69 6f 6e 20 28 74 65 73 74 69 6e  finition (testin
4c20: 67 20 2a 20 65 78 70 61 6e 73 69 6f 6e 29 3a 0a  g * expansion):.
4c30: 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73 74    set cols [list
4c40: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
4c50: 7d 20 7b 24 69 20 3c 20 24 53 51 4c 49 54 45 5f  } {$i < $SQLITE_
4c60: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20 7b 69  LIMIT_COLUMN} {i
4c70: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c 61 70  ncr i} {.    lap
4c80: 70 65 6e 64 20 63 6f 6c 73 20 22 63 24 69 22 0a  pend cols "c$i".
4c90: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 22    }.  catchsql "
4ca0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
4cb0: 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 29 22  [join $cols ,])"
4cc0: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 43 52 45  .  catchsql "CRE
4cd0: 41 54 45 20 56 49 45 57 20 76 31 20 41 53 20 53  ATE VIEW v1 AS S
4ce0: 45 4c 45 43 54 20 2a 2c 20 63 31 20 41 53 20 6f  ELECT *, c1 AS o
4cf0: 20 46 52 4f 4d 20 74 32 3b 22 0a 7d 20 7b 31 20   FROM t2;".} {1 
4d00: 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e  {too many column
4d10: 73 20 69 6e 20 72 65 73 75 6c 74 20 73 65 74 7d  s in result set}
4d20: 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  }.do_test sqllim
4d30: 69 74 73 31 2d 38 2e 31 30 20 7b 0a 20 20 23 20  its1-8.10 {.  # 
4d40: 4f 52 44 45 52 20 42 59 20 63 6f 6c 75 6d 6e 73  ORDER BY columns
4d50: 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73  .  set cols [lis
4d60: 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  t].  for {set i 
4d70: 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c 49 54  0} {$i <= $SQLIT
4d80: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20  E_LIMIT_COLUMN} 
4d90: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c  {incr i} {.    l
4da0: 61 70 70 65 6e 64 20 63 6f 6c 73 20 63 0a 20 20  append cols c.  
4db0: 7d 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c  }.  set sql "SEL
4dc0: 45 43 54 20 63 20 46 52 4f 4d 20 74 31 20 4f 52  ECT c FROM t1 OR
4dd0: 44 45 52 20 42 59 20 5b 6a 6f 69 6e 20 24 63 6f  DER BY [join $co
4de0: 6c 73 20 2c 5d 22 0a 20 20 63 61 74 63 68 73 71  ls ,]".  catchsq
4df0: 6c 20 24 73 71 6c 0a 7d 20 7b 31 20 7b 74 6f 6f  l $sql.} {1 {too
4e00: 20 6d 61 6e 79 20 74 65 72 6d 73 20 69 6e 20 4f   many terms in O
4e10: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 7d 7d  RDER BY clause}}
4e20: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
4e30: 74 73 31 2d 38 2e 31 31 20 7b 0a 20 20 23 20 4f  ts1-8.11 {.  # O
4e40: 52 44 45 52 20 42 59 20 63 6f 6c 75 6d 6e 73 0a  RDER BY columns.
4e50: 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73 74    set cols [list
4e60: 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30  ].  for {set i 0
4e70: 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c 49 54 45  } {$i <= $SQLITE
4e80: 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20 7b  _LIMIT_COLUMN} {
4e90: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c 61  incr i} {.    la
4ea0: 70 70 65 6e 64 20 63 6f 6c 73 20 5b 65 78 70 72  ppend cols [expr
4eb0: 20 7b 24 69 25 33 20 2b 20 31 7d 5d 0a 20 20 7d   {$i%3 + 1}].  }
4ec0: 0a 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45  .  set sql "SELE
4ed0: 43 54 20 63 2c 20 63 2b 31 2c 20 63 2b 32 20 46  CT c, c+1, c+2 F
4ee0: 52 4f 4d 20 74 31 20 55 4e 49 4f 4e 20 53 45 4c  ROM t1 UNION SEL
4ef0: 45 43 54 20 63 2d 31 2c 20 63 2d 32 2c 20 63 2d  ECT c-1, c-2, c-
4f00: 33 20 46 52 4f 4d 20 74 31 22 0a 20 20 61 70 70  3 FROM t1".  app
4f10: 65 6e 64 20 73 71 6c 20 22 20 4f 52 44 45 52 20  end sql " ORDER 
4f20: 42 59 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c  BY [join $cols ,
4f30: 5d 22 0a 20 20 63 61 74 63 68 73 71 6c 20 24 73  ]".  catchsql $s
4f40: 71 6c 0a 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e  ql.} {1 {too man
4f50: 79 20 74 65 72 6d 73 20 69 6e 20 4f 52 44 45 52  y terms in ORDER
4f60: 20 42 59 20 63 6c 61 75 73 65 7d 7d 0a 0a 0a 23   BY clause}}...#
4f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fb0: 2d 2d 2d 2d 0a 23 20 54 68 65 73 65 20 74 65 73  ----.# These tes
4fc0: 74 73 20 2d 20 73 71 6c 6c 69 6d 69 74 73 31 2d  ts - sqllimits1-
4fd0: 39 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20  9.* - test that 
4fe0: 74 68 65 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  the SQLITE_LIMIT
4ff0: 5f 45 58 50 52 5f 44 45 50 54 48 0a 23 20 6c 69  _EXPR_DEPTH.# li
5000: 6d 69 74 20 69 73 20 65 6e 66 6f 72 63 65 64 2e  mit is enforced.
5010: 20 54 68 65 20 6c 69 6d 69 74 20 72 65 66 65 72   The limit refer
5020: 73 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  s to the number 
5030: 6f 66 20 74 65 72 6d 73 20 69 6e 20 0a 23 20 74  of terms in .# t
5040: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 23  he expression..#
5050: 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58  .if {$SQLITE_MAX
5060: 5f 45 58 50 52 5f 44 45 50 54 48 3d 3d 30 7d 20  _EXPR_DEPTH==0} 
5070: 7b 0a 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c  {.  puts -nonewl
5080: 69 6e 65 20 73 74 64 65 72 72 20 22 57 41 52 4e  ine stderr "WARN
5090: 49 4e 47 3a 20 43 6f 6d 70 69 6c 65 20 77 69 74  ING: Compile wit
50a0: 68 20 2d 44 53 51 4c 49 54 45 5f 4d 41 58 5f 45  h -DSQLITE_MAX_E
50b0: 58 50 52 5f 44 45 50 54 48 20 74 6f 20 72 75 6e  XPR_DEPTH to run
50c0: 20 22 0a 20 20 70 75 74 73 20 73 74 64 65 72 72   ".  puts stderr
50d0: 20 22 74 65 73 74 73 20 73 71 6c 6c 69 6d 69 74   "tests sqllimit
50e0: 73 31 2d 39 2e 58 22 0a 7d 20 65 6c 73 65 20 7b  s1-9.X".} else {
50f0: 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .  do_test sqlli
5100: 6d 69 74 73 31 2d 39 2e 31 20 7b 0a 20 20 20 20  mits1-9.1 {.    
5110: 73 65 74 20 6d 61 78 20 24 3a 3a 53 51 4c 49 54  set max $::SQLIT
5120: 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
5130: 0a 20 20 20 20 73 65 74 20 65 78 70 72 20 22 28  .    set expr "(
5140: 31 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  1 [string repeat
5150: 20 7b 41 4e 44 20 31 20 7d 20 24 6d 61 78 5d 29   {AND 1 } $max])
5160: 22 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 5b  ".    catchsql [
5170: 73 75 62 73 74 20 7b 0a 20 20 20 20 20 20 53 45  subst {.      SE
5180: 4c 45 43 54 20 24 65 78 70 72 0a 20 20 20 20 7d  LECT $expr.    }
5190: 5d 0a 20 20 7d 20 22 31 20 7b 45 78 70 72 65 73  ].  } "1 {Expres
51a0: 73 69 6f 6e 20 74 72 65 65 20 69 73 20 74 6f 6f  sion tree is too
51b0: 20 6c 61 72 67 65 20 28 6d 61 78 69 6d 75 6d 20   large (maximum 
51c0: 64 65 70 74 68 20 24 3a 3a 53 51 4c 49 54 45 5f  depth $::SQLITE_
51d0: 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 29 7d  MAX_EXPR_DEPTH)}
51e0: 22 0a 20 20 0a 20 20 23 20 41 74 74 65 6d 70 74  ".  .  # Attempt
51f0: 69 6e 67 20 74 6f 20 62 65 61 74 20 74 68 65 20  ing to beat the 
5200: 65 78 70 72 65 73 73 69 6f 6e 20 64 65 70 74 68  expression depth
5210: 20 6c 69 6d 69 74 20 75 73 69 6e 67 20 6e 65 73   limit using nes
5220: 74 65 64 20 53 45 4c 45 43 54 0a 20 20 23 20 71  ted SELECT.  # q
5230: 75 65 72 69 65 73 20 63 61 75 73 65 73 20 61 20  ueries causes a 
5240: 70 61 72 73 65 72 20 73 74 61 63 6b 20 6f 76 65  parser stack ove
5250: 72 66 6c 6f 77 2e 20 0a 20 20 64 6f 5f 74 65 73  rflow. .  do_tes
5260: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 39 2e 32  t sqllimits1-9.2
5270: 20 7b 0a 20 20 20 20 73 65 74 20 6d 61 78 20 24   {.    set max $
5280: 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  ::SQLITE_MAX_EXP
5290: 52 5f 44 45 50 54 48 0a 20 20 20 20 73 65 74 20  R_DEPTH.    set 
52a0: 65 78 70 72 20 22 53 45 4c 45 43 54 20 31 22 0a  expr "SELECT 1".
52b0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
52c0: 7d 20 7b 24 69 20 3c 3d 20 24 6d 61 78 7d 20 7b  } {$i <= $max} {
52d0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20  incr i} {.      
52e0: 73 65 74 20 65 78 70 72 20 22 53 45 4c 45 43 54  set expr "SELECT
52f0: 20 28 24 65 78 70 72 29 22 0a 20 20 20 20 7d 0a   ($expr)".    }.
5300: 20 20 20 20 63 61 74 63 68 73 71 6c 20 5b 73 75      catchsql [su
5310: 62 73 74 20 7b 20 24 65 78 70 72 20 7d 5d 0a 20  bst { $expr }]. 
5320: 20 7d 20 22 31 20 7b 70 61 72 73 65 72 20 73 74   } "1 {parser st
5330: 61 63 6b 20 6f 76 65 72 66 6c 6f 77 7d 22 0a 20  ack overflow}". 
5340: 20 0a 69 66 20 30 20 7b 20 20 0a 20 20 64 6f 5f   .if 0 {  .  do_
5350: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
5360: 39 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73 71  9.3 {.    execsq
5370: 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d 41  l {.      PRAGMA
5380: 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 20   max_page_count 
5390: 3d 20 31 30 30 30 30 30 30 3b 20 20 2d 2d 20 31  = 1000000;  -- 1
53a0: 20 47 42 0a 20 20 20 20 20 20 43 52 45 41 54 45   GB.      CREATE
53b0: 20 54 41 42 4c 45 20 76 30 28 61 29 3b 0a 20 20   TABLE v0(a);.  
53c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
53d0: 76 30 20 56 41 4c 55 45 53 28 31 29 3b 0a 20 20  v0 VALUES(1);.  
53e0: 20 20 7d 0a 20 20 20 20 64 62 20 74 72 61 6e 73    }.    db trans
53f0: 61 63 74 69 6f 6e 20 7b 0a 20 20 20 20 20 20 66  action {.      f
5400: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
5410: 20 3c 20 32 30 30 7d 20 7b 69 6e 63 72 20 69 7d   < 200} {incr i}
5420: 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20 65   {.        set e
5430: 78 70 72 20 22 28 61 20 5b 73 74 72 69 6e 67 20  xpr "(a [string 
5440: 72 65 70 65 61 74 20 7b 41 4e 44 20 31 20 7d 20  repeat {AND 1 } 
5450: 35 30 5d 29 20 41 53 20 61 22 0a 20 20 20 20 20  50]) AS a".     
5460: 20 20 20 65 78 65 63 73 71 6c 20 5b 73 75 62 73     execsql [subs
5470: 74 20 7b 0a 20 20 20 20 20 20 20 20 20 20 43 52  t {.          CR
5480: 45 41 54 45 20 56 49 45 57 20 76 24 7b 69 7d 20  EATE VIEW v${i} 
5490: 41 53 20 53 45 4c 45 43 54 20 24 65 78 70 72 20  AS SELECT $expr 
54a0: 46 52 4f 4d 20 76 5b 65 78 70 72 20 7b 24 69 2d  FROM v[expr {$i-
54b0: 31 7d 5d 0a 20 20 20 20 20 20 20 20 7d 5d 0a 20  1}].        }]. 
54c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
54d0: 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74   {}.  .  do_test
54e0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 39 2e 34 20   sqllimits1-9.4 
54f0: 7b 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b  {.    catchsql {
5500: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 61 20  .      SELECT a 
5510: 46 52 4f 4d 20 76 31 39 39 0a 20 20 20 20 7d 0a  FROM v199.    }.
5520: 20 20 7d 20 22 31 20 7b 45 78 70 72 65 73 73 69    } "1 {Expressi
5530: 6f 6e 20 74 72 65 65 20 69 73 20 74 6f 6f 20 6c  on tree is too l
5540: 61 72 67 65 20 28 6d 61 78 69 6d 75 6d 20 64 65  arge (maximum de
5550: 70 74 68 20 24 3a 3a 53 51 4c 49 54 45 5f 4d 41  pth $::SQLITE_MA
5560: 58 5f 45 58 50 52 5f 44 45 50 54 48 29 7d 22 0a  X_EXPR_DEPTH)}".
5570: 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }.}..#----------
5580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
55a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
55b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
55c0: 74 20 63 61 73 65 73 20 73 71 6c 6c 69 6d 69 74  t cases sqllimit
55d0: 73 31 2d 31 30 2e 2a 20 74 65 73 74 20 74 68 61  s1-10.* test tha
55e0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 58  t the SQLITE_MAX
55f0: 5f 56 44 42 45 5f 4f 50 0a 23 20 6c 69 6d 69 74  _VDBE_OP.# limit
5600: 20 77 6f 72 6b 73 20 61 73 20 65 78 70 65 63 74   works as expect
5610: 65 64 2e 20 54 68 65 20 6c 69 6d 69 74 20 72 65  ed. The limit re
5620: 66 65 72 73 20 74 6f 20 74 68 65 20 6e 75 6d 62  fers to the numb
5630: 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 0a 23 20  er of opcodes.# 
5640: 69 6e 20 61 20 73 69 6e 67 6c 65 20 56 44 42 45  in a single VDBE
5650: 20 70 72 6f 67 72 61 6d 2e 0a 23 0a 23 20 54 4f   program..#.# TO
5660: 44 4f 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  DO..#-----------
5670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
56a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
56b0: 20 74 68 65 20 53 51 4c 49 54 45 5f 4c 49 4d 49   the SQLITE_LIMI
56c0: 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 20 6c  T_FUNCTION_ARG l
56d0: 69 6d 69 74 20 77 6f 72 6b 73 2e 20 54 65 73 74  imit works. Test
56e0: 20 63 61 73 65 20 6e 61 6d 65 73 0a 23 20 6d 61   case names.# ma
56f0: 74 63 68 20 74 68 65 20 70 61 74 74 65 72 6e 20  tch the pattern 
5700: 22 73 71 6c 6c 69 6d 69 74 73 31 2d 31 31 2e 2a  "sqllimits1-11.*
5710: 22 2e 0a 23 0a 66 6f 72 20 7b 73 65 74 20 6d 61  "..#.for {set ma
5720: 78 20 35 7d 20 7b 24 6d 61 78 3c 3d 24 53 51 4c  x 5} {$max<=$SQL
5730: 49 54 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e  ITE_MAX_FUNCTION
5740: 5f 41 52 47 7d 20 7b 69 6e 63 72 20 6d 61 78 7d  _ARG} {incr max}
5750: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c   {.  do_test sql
5760: 6c 69 6d 69 74 73 31 2d 31 31 2e 24 6d 61 78 2e  limits1-11.$max.
5770: 31 20 7b 0a 20 20 20 20 73 65 74 20 76 61 6c 73  1 {.    set vals
5780: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 73 71 6c 69   [list].    sqli
5790: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
57a0: 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49  ITE_LIMIT_FUNCTI
57b0: 4f 4e 5f 41 52 47 20 24 3a 3a 6d 61 78 0a 20 20  ON_ARG $::max.  
57c0: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
57d0: 7b 24 69 20 3c 20 24 3a 3a 6d 61 78 7d 20 7b 69  {$i < $::max} {i
57e0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 6c  ncr i} {.      l
57f0: 61 70 70 65 6e 64 20 76 61 6c 73 20 24 69 0a 20  append vals $i. 
5800: 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71     }.    catchsq
5810: 6c 20 22 53 45 4c 45 43 54 20 6d 61 78 28 5b 6a  l "SELECT max([j
5820: 6f 69 6e 20 24 76 61 6c 73 20 2c 5d 29 22 0a 20  oin $vals ,])". 
5830: 20 7d 20 22 30 20 5b 65 78 70 72 20 7b 24 3a 3a   } "0 [expr {$::
5840: 6d 61 78 20 2d 20 31 7d 5d 22 0a 20 20 64 6f 5f  max - 1}]".  do_
5850: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
5860: 31 31 2e 24 6d 61 78 2e 32 20 7b 0a 20 20 20 20  11.$max.2 {.    
5870: 73 65 74 20 76 61 6c 73 20 5b 6c 69 73 74 5d 0a  set vals [list].
5880: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
5890: 7d 20 7b 24 69 20 3c 3d 20 24 3a 3a 6d 61 78 7d  } {$i <= $::max}
58a0: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
58b0: 20 20 6c 61 70 70 65 6e 64 20 76 61 6c 73 20 24    lappend vals $
58c0: 69 0a 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63  i.    }.    catc
58d0: 68 73 71 6c 20 22 53 45 4c 45 43 54 20 6d 61 78  hsql "SELECT max
58e0: 28 5b 6a 6f 69 6e 20 24 76 61 6c 73 20 2c 5d 29  ([join $vals ,])
58f0: 22 0a 20 20 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61  ".  } {1 {too ma
5900: 6e 79 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20  ny arguments on 
5910: 66 75 6e 63 74 69 6f 6e 20 6d 61 78 7d 7d 0a 0a  function max}}..
5920: 20 20 23 20 54 65 73 74 20 74 68 61 74 20 69 74    # Test that it
5930: 20 69 73 20 53 51 4c 69 74 65 2c 20 61 6e 64 20   is SQLite, and 
5940: 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  not the implemen
5950: 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20  tation of the.  
5960: 23 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  # user function 
5970: 74 68 61 74 20 69 73 20 74 68 72 6f 77 69 6e 67  that is throwing
5980: 20 74 68 65 20 65 72 72 6f 72 2e 0a 20 20 70 72   the error..  pr
5990: 6f 63 20 6d 79 66 75 6e 63 20 7b 61 72 67 73 7d  oc myfunc {args}
59a0: 20 7b 65 72 72 6f 72 20 22 49 20 64 6f 6e 27 74   {error "I don't
59b0: 20 6c 69 6b 65 20 74 6f 20 62 65 20 63 61 6c 6c   like to be call
59c0: 65 64 21 22 7d 0a 20 20 64 6f 5f 74 65 73 74 20  ed!"}.  do_test 
59d0: 73 71 6c 6c 69 6d 69 74 73 31 2d 31 31 2e 24 6d  sqllimits1-11.$m
59e0: 61 78 2e 32 20 7b 0a 20 20 20 20 64 62 20 66 75  ax.2 {.    db fu
59f0: 6e 63 74 69 6f 6e 20 6d 79 66 75 6e 63 20 6d 79  nction myfunc my
5a00: 66 75 6e 63 0a 20 20 20 20 73 65 74 20 76 61 6c  func.    set val
5a10: 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72  s [list].    for
5a20: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
5a30: 3d 20 24 3a 3a 6d 61 78 7d 20 7b 69 6e 63 72 20  = $::max} {incr 
5a40: 69 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65  i} {.      lappe
5a50: 6e 64 20 76 61 6c 73 20 24 69 0a 20 20 20 20 7d  nd vals $i.    }
5a60: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 53  .    catchsql "S
5a70: 45 4c 45 43 54 20 6d 79 66 75 6e 63 28 5b 6a 6f  ELECT myfunc([jo
5a80: 69 6e 20 24 76 61 6c 73 20 2c 5d 29 22 0a 20 20  in $vals ,])".  
5a90: 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 61  } {1 {too many a
5aa0: 72 67 75 6d 65 6e 74 73 20 6f 6e 20 66 75 6e 63  rguments on func
5ab0: 74 69 6f 6e 20 6d 79 66 75 6e 63 7d 7d 0a 7d 0a  tion myfunc}}.}.
5ac0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
5ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b00: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
5b10: 73 65 73 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31  ses sqllimits1-1
5b20: 32 2e 2a 3a 20 54 65 73 74 20 74 68 65 20 53 51  2.*: Test the SQ
5b30: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
5b40: 44 20 6c 69 6d 69 74 2e 0a 23 0a 69 66 63 61 70  D limit..#.ifcap
5b50: 61 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20  able attach {.  
5b60: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
5b70: 73 31 2d 31 32 2e 31 20 7b 0a 20 20 20 20 73 65  s1-12.1 {.    se
5b80: 74 20 6d 61 78 20 24 3a 3a 53 51 4c 49 54 45 5f  t max $::SQLITE_
5b90: 4d 41 58 5f 41 54 54 41 43 48 45 44 0a 20 20 20  MAX_ATTACHED.   
5ba0: 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b   for {set i 0} {
5bb0: 24 69 20 3c 20 28 24 6d 61 78 29 7d 20 7b 69 6e  $i < ($max)} {in
5bc0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 66 6f  cr i} {.      fo
5bd0: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 24 7b  rcedelete test${
5be0: 69 7d 2e 64 62 20 74 65 73 74 24 7b 69 7d 2e 64  i}.db test${i}.d
5bf0: 62 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 7d 0a  b-journal.    }.
5c00: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30      for {set i 0
5c10: 7d 20 7b 24 69 20 3c 20 28 24 6d 61 78 29 7d 20  } {$i < ($max)} 
5c20: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20  {incr i} {.     
5c30: 20 65 78 65 63 73 71 6c 20 22 41 54 54 41 43 48   execsql "ATTACH
5c40: 20 27 74 65 73 74 24 7b 69 7d 2e 64 62 27 20 41   'test${i}.db' A
5c50: 53 20 61 75 78 24 7b 69 7d 22 0a 20 20 20 20 7d  S aux${i}".    }
5c60: 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 41  .    catchsql "A
5c70: 54 54 41 43 48 20 27 74 65 73 74 24 7b 69 7d 2e  TTACH 'test${i}.
5c80: 64 62 27 20 41 53 20 61 75 78 24 7b 69 7d 22 0a  db' AS aux${i}".
5c90: 20 20 7d 20 22 31 20 7b 74 6f 6f 20 6d 61 6e 79    } "1 {too many
5ca0: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
5cb0: 73 65 73 20 2d 20 6d 61 78 20 24 3a 3a 53 51 4c  ses - max $::SQL
5cc0: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
5cd0: 7d 22 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c  }".  do_test sql
5ce0: 6c 69 6d 69 74 73 31 2d 31 32 2e 32 20 7b 0a 20  limits1-12.2 {. 
5cf0: 20 20 20 73 65 74 20 6d 61 78 20 24 3a 3a 53 51     set max $::SQ
5d00: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
5d10: 44 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69  D.    for {set i
5d20: 20 30 7d 20 7b 24 69 20 3c 20 28 24 6d 61 78 29   0} {$i < ($max)
5d30: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
5d40: 20 20 20 65 78 65 63 73 71 6c 20 22 44 45 54 41     execsql "DETA
5d50: 43 48 20 61 75 78 24 7b 69 7d 22 0a 20 20 20 20  CH aux${i}".    
5d60: 7d 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 2d 2d 2d  }.  } {}.}..#---
5d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5db0: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73  -.# Test cases s
5dc0: 71 6c 6c 69 6d 69 74 73 31 2d 31 33 2e 2a 3a 20  qllimits1-13.*: 
5dd0: 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 53  Check that the S
5de0: 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
5df0: 4c 45 5f 4e 55 4d 42 45 52 20 0a 23 20 6c 69 6d  LE_NUMBER .# lim
5e00: 69 74 20 77 6f 72 6b 73 2e 0a 23 0a 64 6f 5f 74  it works..#.do_t
5e10: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31  est sqllimits1-1
5e20: 33 2e 31 20 7b 0a 20 20 73 65 74 20 6d 61 78 20  3.1 {.  set max 
5e30: 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  $::SQLITE_MAX_VA
5e40: 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 0a 20 20  RIABLE_NUMBER.  
5e50: 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45 43 54  catchsql "SELECT
5e60: 20 3f 5b 65 78 70 72 20 7b 24 6d 61 78 2b 31 7d   ?[expr {$max+1}
5e70: 5d 20 46 52 4f 4d 20 74 31 22 0a 7d 20 22 31 20  ] FROM t1".} "1 
5e80: 7b 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72  {variable number
5e90: 20 6d 75 73 74 20 62 65 20 62 65 74 77 65 65 6e   must be between
5ea0: 20 3f 31 20 61 6e 64 20 3f 24 3a 3a 53 51 4c 49   ?1 and ?$::SQLI
5eb0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
5ec0: 4e 55 4d 42 45 52 7d 22 0a 64 6f 5f 74 65 73 74  NUMBER}".do_test
5ed0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 33 2e 32   sqllimits1-13.2
5ee0: 20 7b 0a 20 20 73 65 74 20 6d 61 78 20 24 3a 3a   {.  set max $::
5ef0: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
5f00: 42 4c 45 5f 4e 55 4d 42 45 52 0a 20 20 73 65 74  BLE_NUMBER.  set
5f10: 20 76 61 6c 73 20 5b 6c 69 73 74 5d 0a 20 20 66   vals [list].  f
5f20: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
5f30: 20 3c 20 28 24 6d 61 78 2b 33 29 7d 20 7b 69 6e   < ($max+3)} {in
5f40: 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c 61 70 70  cr i} {.    lapp
5f50: 65 6e 64 20 76 61 6c 73 20 3f 0a 20 20 7d 0a 20  end vals ?.  }. 
5f60: 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45 43   catchsql "SELEC
5f70: 54 20 5b 6a 6f 69 6e 20 24 76 61 6c 73 20 2c 5d  T [join $vals ,]
5f80: 20 46 52 4f 4d 20 74 31 22 0a 7d 20 22 31 20 7b   FROM t1".} "1 {
5f90: 74 6f 6f 20 6d 61 6e 79 20 53 51 4c 20 76 61 72  too many SQL var
5fa0: 69 61 62 6c 65 73 7d 22 0a 0a 0a 23 2d 2d 2d 2d  iables}"...#----
5fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ff0: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73 71  .# Test cases sq
6000: 6c 6c 69 6d 69 74 73 31 2d 31 35 2e 2a 20 76 65  llimits1-15.* ve
6010: 72 69 66 79 20 74 68 61 74 20 74 68 65 20 0a 23  rify that the .#
6020: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45   SQLITE_MAX_LIKE
6030: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20  _PATTERN_LENGTH 
6040: 6c 69 6d 69 74 20 69 73 20 65 6e 66 6f 72 63 65  limit is enforce
6050: 64 2e 20 54 68 69 73 20 6c 69 6d 69 74 20 6f 6e  d. This limit on
6060: 6c 79 0a 23 20 61 70 70 6c 69 65 73 20 74 6f 20  ly.# applies to 
6070: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 4c 49 4b  the built-in LIK
6080: 45 20 6f 70 65 72 61 74 6f 72 2c 20 73 75 70 70  E operator, supp
6090: 6c 79 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  lying an externa
60a0: 6c 20 0a 23 20 69 6d 70 6c 65 6d 65 6e 74 61 74  l .# implementat
60b0: 69 6f 6e 20 62 79 20 6f 76 65 72 72 69 64 69 6e  ion by overridin
60c0: 67 20 74 68 65 20 6c 69 6b 65 28 29 20 73 63 61  g the like() sca
60d0: 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 62 79 70  lar function byp
60e0: 61 73 73 65 73 0a 23 20 74 68 69 73 20 6c 69 6d  asses.# this lim
60f0: 69 74 61 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 65  itation..#.# The
6100: 73 65 20 74 65 73 74 73 20 63 68 65 63 6b 20 74  se tests check t
6110: 68 61 74 20 74 68 65 20 6c 69 6d 69 74 20 69 73  hat the limit is
6120: 20 6e 6f 74 20 69 6e 63 6f 72 72 65 63 74 6c 79   not incorrectly
6130: 20 61 70 70 6c 69 65 64 20 74 6f 0a 23 20 74 68   applied to.# th
6140: 65 20 6c 65 66 74 2d 68 61 6e 64 2d 73 69 64 65  e left-hand-side
6150: 20 6f 66 20 74 68 65 20 4c 49 4b 45 20 6f 70 65   of the LIKE ope
6160: 72 61 74 6f 72 20 28 74 68 65 20 73 74 72 69 6e  rator (the strin
6170: 67 20 62 65 69 6e 67 20 74 65 73 74 65 64 0a 23  g being tested.#
6180: 20 61 67 61 69 6e 73 74 20 74 68 65 20 70 61 74   against the pat
6190: 74 65 72 6e 29 2e 0a 23 0a 73 65 74 20 53 51 4c  tern)..#.set SQL
61a0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50  ITE_LIMIT_LIKE_P
61b0: 41 54 54 45 52 4e 20 31 30 30 30 0a 73 71 6c 69  ATTERN 1000.sqli
61c0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
61d0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50  ITE_LIMIT_LIKE_P
61e0: 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20 24 53  ATTERN_LENGTH $S
61f0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45  QLITE_LIMIT_LIKE
6200: 5f 50 41 54 54 45 52 4e 0a 64 6f 5f 74 65 73 74  _PATTERN.do_test
6210: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 35 2e 31   sqllimits1-15.1
6220: 20 7b 0a 20 20 73 65 74 20 6d 61 78 20 24 3a 3a   {.  set max $::
6230: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
6240: 45 5f 50 41 54 54 45 52 4e 0a 20 20 73 65 74 20  E_PATTERN.  set 
6250: 3a 3a 70 61 74 74 65 72 6e 20 5b 73 74 72 69 6e  ::pattern [strin
6260: 67 20 72 65 70 65 61 74 20 22 41 25 22 20 5b 65  g repeat "A%" [e
6270: 78 70 72 20 24 6d 61 78 2f 32 5d 5d 0a 20 20 73  xpr $max/2]].  s
6280: 65 74 20 3a 3a 73 74 72 69 6e 67 20 20 5b 73 74  et ::string  [st
6290: 72 69 6e 67 20 72 65 70 65 61 74 20 22 41 22 20  ring repeat "A" 
62a0: 5b 65 78 70 72 20 7b 24 6d 61 78 2a 32 7d 5d 5d  [expr {$max*2}]]
62b0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
62c0: 20 53 45 4c 45 43 54 20 24 3a 3a 73 74 72 69 6e   SELECT $::strin
62d0: 67 20 4c 49 4b 45 20 24 3a 3a 70 61 74 74 65 72  g LIKE $::patter
62e0: 6e 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f  n;.  }.} {1}.do_
62f0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
6300: 31 35 2e 32 20 7b 0a 20 20 73 65 74 20 6d 61 78  15.2 {.  set max
6310: 20 24 3a 3a 53 51 4c 49 54 45 5f 4c 49 4d 49 54   $::SQLITE_LIMIT
6320: 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 0a 20 20  _LIKE_PATTERN.  
6330: 73 65 74 20 3a 3a 70 61 74 74 65 72 6e 20 5b 73  set ::pattern [s
6340: 74 72 69 6e 67 20 72 65 70 65 61 74 20 22 41 25  tring repeat "A%
6350: 22 20 5b 65 78 70 72 20 7b 28 24 6d 61 78 2f 32  " [expr {($max/2
6360: 29 20 2b 20 31 7d 5d 5d 0a 20 20 73 65 74 20 3a  ) + 1}]].  set :
6370: 3a 73 74 72 69 6e 67 20 20 5b 73 74 72 69 6e 67  :string  [string
6380: 20 72 65 70 65 61 74 20 22 41 22 20 5b 65 78 70   repeat "A" [exp
6390: 72 20 7b 24 6d 61 78 2a 32 7d 5d 5d 0a 20 20 63  r {$max*2}]].  c
63a0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
63b0: 4c 45 43 54 20 24 3a 3a 73 74 72 69 6e 67 20 4c  LECT $::string L
63c0: 49 4b 45 20 24 3a 3a 70 61 74 74 65 72 6e 3b 0a  IKE $::pattern;.
63d0: 20 20 7d 0a 7d 20 7b 31 20 7b 4c 49 4b 45 20 6f    }.} {1 {LIKE o
63e0: 72 20 47 4c 4f 42 20 70 61 74 74 65 72 6e 20 74  r GLOB pattern t
63f0: 6f 6f 20 63 6f 6d 70 6c 65 78 7d 7d 0a 0a 23 2d  oo complex}}..#-
6400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6440: 2d 2d 2d 0a 23 20 54 68 69 73 20 74 65 73 74 20  ---.# This test 
6450: 63 61 73 65 20 64 6f 65 73 6e 27 74 20 72 65 61  case doesn't rea
6460: 6c 6c 79 20 62 65 6c 6f 6e 67 20 77 69 74 68 20  lly belong with 
6470: 74 68 65 20 6f 74 68 65 72 20 6c 69 6d 69 74 73  the other limits
6480: 20 74 65 73 74 73 2e 0a 23 20 49 74 20 69 73 20   tests..# It is 
6490: 69 6e 20 74 68 69 73 20 66 69 6c 65 20 62 65 63  in this file bec
64a0: 61 75 73 65 20 69 74 20 69 73 20 74 61 78 69 6e  ause it is taxin
64b0: 67 20 74 6f 20 72 75 6e 2c 20 6c 69 6b 65 20 74  g to run, like t
64c0: 68 65 20 6c 69 6d 69 74 73 20 74 65 73 74 73 2e  he limits tests.
64d0: 0a 23 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .#.do_test sqlli
64e0: 6d 69 74 73 31 2d 31 36 2e 31 20 7b 0a 20 20 73  mits1-16.1 {.  s
64f0: 65 74 20 3a 3a 4e 20 5b 65 78 70 72 20 69 6e 74  et ::N [expr int
6500: 28 28 5b 65 78 70 72 20 70 6f 77 28 32 2c 33 32  (([expr pow(2,32
6510: 29 5d 2f 35 30 29 20 2b 20 31 29 5d 0a 20 20 65  )]/50) + 1)].  e
6520: 78 70 72 20 28 28 24 3a 3a 4e 2a 35 30 29 20 26  xpr (($::N*50) &
6530: 20 30 78 66 66 66 66 66 66 66 66 29 3c 35 35 0a   0xffffffff)<55.
6540: 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 73 71  } {1}.do_test sq
6550: 6c 6c 69 6d 69 74 73 31 2d 31 36 2e 32 20 7b 0a  llimits1-16.2 {.
6560: 20 20 73 65 74 20 3a 3a 66 6f 72 6d 61 74 20 22    set ::format "
6570: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 41  [string repeat A
6580: 20 36 30 5d 5b 73 74 72 69 6e 67 20 72 65 70 65   60][string repe
6590: 61 74 20 22 25 4a 22 20 24 3a 3a 4e 5d 22 0a 20  at "%J" $::N]". 
65a0: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
65b0: 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28  SELECT strftime(
65c0: 24 3a 3a 66 6f 72 6d 61 74 2c 20 31 29 3b 0a 20  $::format, 1);. 
65d0: 20 7d 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20   }.} {1 {string 
65e0: 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d  or blob too big}
65f0: 7d 0a 0a 0a 66 6f 72 65 61 63 68 20 7b 6b 65 79  }...foreach {key
6600: 20 76 61 6c 75 65 7d 20 5b 61 72 72 61 79 20 67   value} [array g
6610: 65 74 20 73 61 76 65 64 5d 20 7b 0a 20 20 63 61  et saved] {.  ca
6620: 74 63 68 20 7b 73 65 74 20 24 6b 65 79 20 24 76  tch {set $key $v
6630: 61 6c 75 65 7d 0a 7d 0a 66 69 6e 69 73 68 5f 74  alue}.}.finish_t
6640: 65 73 74 0a                                      est.