/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 89b3d5aad05b99f707ee3786bdd4416dccf83304:


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 64 6f 5f 74 65 73 74 20 73 71  UMBER.do_test sq
06a0: 6c 6c 69 6d 69 74 73 31 2d 31 2e 31 31 20 7b 0a  llimits1-1.11 {.
06b0: 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20    sqlite3_limit 
06c0: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
06d0: 54 52 49 47 47 45 52 5f 44 45 50 54 48 20 2d 31  TRIGGER_DEPTH -1
06e0: 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 54  .} $SQLITE_MAX_T
06f0: 52 49 47 47 45 52 5f 44 45 50 54 48 0a 64 6f 5f  RIGGER_DEPTH.do_
0700: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0710: 31 2e 31 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.12 {.  sqlite3
0720: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
0730: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
0740: 52 45 41 44 53 20 39 39 39 39 39 0a 20 20 73 71  READS 99999.  sq
0750: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
0760: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
0770: 45 52 5f 54 48 52 45 41 44 53 20 2d 31 0a 7d 20  ER_THREADS -1.} 
0780: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b  $SQLITE_MAX_WORK
0790: 45 52 5f 54 48 52 45 41 44 53 0a 0a 23 20 4c 69  ER_THREADS..# Li
07a0: 6d 69 74 20 70 61 72 61 6d 65 74 65 72 73 20 6f  mit parameters o
07b0: 75 74 20 6f 66 20 72 61 6e 67 65 2e 0a 23 0a 64  ut of range..#.d
07c0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
07d0: 31 2d 31 2e 32 30 20 7b 0a 20 20 73 71 6c 69 74  1-1.20 {.  sqlit
07e0: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
07f0: 54 45 5f 4c 49 4d 49 54 5f 54 4f 4f 53 4d 41 4c  TE_LIMIT_TOOSMAL
0800: 4c 20 31 32 33 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f  L 123.} {-1}.do_
0810: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
0820: 31 2e 32 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  1.21 {.  sqlite3
0830: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
0840: 5f 4c 49 4d 49 54 5f 54 4f 4f 53 4d 41 4c 4c 20  _LIMIT_TOOSMALL 
0850: 31 32 33 0a 7d 20 7b 2d 31 7d 0a 64 6f 5f 74 65  123.} {-1}.do_te
0860: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 2e  st sqllimits1-1.
0870: 32 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c  22 {.  sqlite3_l
0880: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
0890: 49 4d 49 54 5f 54 4f 4f 42 49 47 20 31 32 33 0a  IMIT_TOOBIG 123.
08a0: 7d 20 7b 2d 31 7d 0a 64 6f 5f 74 65 73 74 20 73  } {-1}.do_test s
08b0: 71 6c 6c 69 6d 69 74 73 31 2d 31 2e 32 33 20 7b  qllimits1-1.23 {
08c0: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
08d0: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
08e0: 5f 54 4f 4f 42 49 47 20 31 32 33 0a 7d 20 7b 2d  _TOOBIG 123.} {-
08f0: 31 7d 0a 0a 0a 23 20 44 65 63 72 65 61 73 65 20  1}...# Decrease 
0900: 61 6c 6c 20 6c 69 6d 69 74 73 20 62 79 20 68 61  all limits by ha
0910: 6c 66 2e 20 20 56 65 72 69 66 79 20 74 68 61 74  lf.  Verify that
0920: 20 74 68 65 20 6e 65 77 20 6c 69 6d 69 74 73 20   the new limits 
0930: 74 61 6b 65 2e 0a 23 0a 69 66 20 7b 24 53 51 4c  take..#.if {$SQL
0940: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 3e 3d  ITE_MAX_LENGTH>=
0950: 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  2} {.  do_test s
0960: 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 31 2e 31 20  qllimits1-2.1.1 
0970: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69  {.    sqlite3_li
0980: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
0990: 4d 49 54 5f 4c 45 4e 47 54 48 20 5c 0a 20 20 20  MIT_LENGTH \.   
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54   [expr {$::SQLIT
09c0: 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 2f 32 7d 5d  E_MAX_LENGTH/2}]
09d0: 0a 20 20 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58  .  } $SQLITE_MAX
09e0: 5f 4c 45 4e 47 54 48 0a 20 20 64 6f 5f 74 65 73  _LENGTH.  do_tes
09f0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 31  t sqllimits1-2.1
0a00: 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .2 {.    sqlite3
0a10: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
0a20: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2d 31  _LIMIT_LENGTH -1
0a30: 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c  .  } [expr {$SQL
0a40: 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 2f 32  ITE_MAX_LENGTH/2
0a50: 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45  }].}.if {$SQLITE
0a60: 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54 48 3e  _MAX_SQL_LENGTH>
0a70: 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  =2} {.  do_test 
0a80: 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 32 2e 31  sqllimits1-2.2.1
0a90: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   {.    sqlite3_l
0aa0: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
0ab0: 49 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20  IMIT_SQL_LENGTH 
0ac0: 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  \.              
0ad0: 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 3a 3a        [expr {$::
0ae0: 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c  SQLITE_MAX_SQL_L
0af0: 45 4e 47 54 48 2f 32 7d 5d 0a 20 20 7d 20 24 53  ENGTH/2}].  } $S
0b00: 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45  QLITE_MAX_SQL_LE
0b10: 4e 47 54 48 0a 20 20 64 6f 5f 74 65 73 74 20 73  NGTH.  do_test s
0b20: 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 32 2e 32 20  qllimits1-2.2.2 
0b30: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69  {.    sqlite3_li
0b40: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
0b50: 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 2d  MIT_SQL_LENGTH -
0b60: 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53 51  1.  } [expr {$SQ
0b70: 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e  LITE_MAX_SQL_LEN
0b80: 47 54 48 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53  GTH/2}].}.if {$S
0b90: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
0ba0: 3e 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74  >=2} {.  do_test
0bb0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 33 2e   sqllimits1-2.3.
0bc0: 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  1 {.    sqlite3_
0bd0: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
0be0: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 5c 0a 20  LIMIT_COLUMN \. 
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c00: 20 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c     [expr {$::SQL
0c10: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2f 32  ITE_MAX_COLUMN/2
0c20: 7d 5d 0a 20 20 7d 20 24 53 51 4c 49 54 45 5f 4d  }].  } $SQLITE_M
0c30: 41 58 5f 43 4f 4c 55 4d 4e 0a 20 20 64 6f 5f 74  AX_COLUMN.  do_t
0c40: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32  est sqllimits1-2
0c50: 2e 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  .3.2 {.    sqlit
0c60: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
0c70: 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
0c80: 2d 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53  -1.  } [expr {$S
0c90: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
0ca0: 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49  /2}].}.if {$SQLI
0cb0: 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54  TE_MAX_EXPR_DEPT
0cc0: 48 3e 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73  H>=2} {.  do_tes
0cd0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 34  t sqllimits1-2.4
0ce0: 2e 31 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  .1 {.    sqlite3
0cf0: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
0d00: 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54  _LIMIT_EXPR_DEPT
0d10: 48 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20  H \.            
0d20: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24          [expr {$
0d30: 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50  ::SQLITE_MAX_EXP
0d40: 52 5f 44 45 50 54 48 2f 32 7d 5d 0a 20 20 7d 20  R_DEPTH/2}].  } 
0d50: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52  $SQLITE_MAX_EXPR
0d60: 5f 44 45 50 54 48 0a 20 20 64 6f 5f 74 65 73 74  _DEPTH.  do_test
0d70: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 34 2e   sqllimits1-2.4.
0d80: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
0d90: 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f  limit db SQLITE_
0da0: 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48  LIMIT_EXPR_DEPTH
0db0: 20 2d 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24   -1.  } [expr {$
0dc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
0dd0: 44 45 50 54 48 2f 32 7d 5d 0a 7d 0a 69 66 20 7b  DEPTH/2}].}.if {
0de0: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50  $SQLITE_MAX_COMP
0df0: 4f 55 4e 44 5f 53 45 4c 45 43 54 3e 3d 32 7d 20  OUND_SELECT>=2} 
0e00: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c  {.  do_test sqll
0e10: 69 6d 69 74 73 31 2d 32 2e 35 2e 31 20 7b 0a 20  imits1-2.5.1 {. 
0e20: 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
0e30: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
0e40: 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54  _COMPOUND_SELECT
0e50: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
0e60: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 3a         [expr {$:
0e70: 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50  :SQLITE_MAX_COMP
0e80: 4f 55 4e 44 5f 53 45 4c 45 43 54 2f 32 7d 5d 0a  OUND_SELECT/2}].
0e90: 20 20 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f    } $SQLITE_MAX_
0ea0: 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 0a  COMPOUND_SELECT.
0eb0: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
0ec0: 69 74 73 31 2d 32 2e 35 2e 32 20 7b 0a 20 20 20  its1-2.5.2 {.   
0ed0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
0ee0: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43  b SQLITE_LIMIT_C
0ef0: 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43 54 20 2d  OMPOUND_SELECT -
0f00: 31 0a 20 20 7d 20 5b 65 78 70 72 20 7b 24 53 51  1.  } [expr {$SQ
0f10: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e  LITE_MAX_COMPOUN
0f20: 44 5f 53 45 4c 45 43 54 2f 32 7d 5d 0a 7d 0a 69  D_SELECT/2}].}.i
0f30: 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 56  f {$SQLITE_MAX_V
0f40: 44 42 45 5f 4f 50 3e 3d 32 7d 20 7b 0a 20 20 64  DBE_OP>=2} {.  d
0f50: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
0f60: 31 2d 32 2e 36 2e 31 20 7b 0a 20 20 20 20 73 71  1-2.6.1 {.    sq
0f70: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
0f80: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44 42 45  QLITE_LIMIT_VDBE
0f90: 5f 4f 50 20 5c 0a 20 20 20 20 20 20 20 20 20 20  _OP \.          
0fa0: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr 
0fb0: 7b 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 56  {$::SQLITE_MAX_V
0fc0: 44 42 45 5f 4f 50 2f 32 7d 5d 0a 20 20 7d 20 24  DBE_OP/2}].  } $
0fd0: 53 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f  SQLITE_MAX_VDBE_
0fe0: 4f 50 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c  OP.  do_test sql
0ff0: 6c 69 6d 69 74 73 31 2d 32 2e 36 2e 32 20 7b 0a  limits1-2.6.2 {.
1000: 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69      sqlite3_limi
1010: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
1020: 54 5f 56 44 42 45 5f 4f 50 20 2d 31 0a 20 20 7d  T_VDBE_OP -1.  }
1030: 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f   [expr {$SQLITE_
1040: 4d 41 58 5f 56 44 42 45 5f 4f 50 2f 32 7d 5d 0a  MAX_VDBE_OP/2}].
1050: 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d 41  }.if {$SQLITE_MA
1060: 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 3e 3d  X_FUNCTION_ARG>=
1070: 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  2} {.  do_test s
1080: 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 37 2e 31 20  qllimits1-2.7.1 
1090: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69  {.    sqlite3_li
10a0: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
10b0: 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47  MIT_FUNCTION_ARG
10c0: 20 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   \.             
10d0: 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 3a         [expr {$:
10e0: 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43  :SQLITE_MAX_FUNC
10f0: 54 49 4f 4e 5f 41 52 47 2f 32 7d 5d 0a 20 20 7d  TION_ARG/2}].  }
1100: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e   $SQLITE_MAX_FUN
1110: 43 54 49 4f 4e 5f 41 52 47 0a 20 20 64 6f 5f 74  CTION_ARG.  do_t
1120: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 32  est sqllimits1-2
1130: 2e 37 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74  .7.2 {.    sqlit
1140: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
1150: 54 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f  TE_LIMIT_FUNCTIO
1160: 4e 5f 41 52 47 20 2d 31 0a 20 20 7d 20 5b 65 78  N_ARG -1.  } [ex
1170: 70 72 20 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f  pr {$SQLITE_MAX_
1180: 46 55 4e 43 54 49 4f 4e 5f 41 52 47 2f 32 7d 5d  FUNCTION_ARG/2}]
1190: 0a 7d 0a 69 66 20 7b 24 53 51 4c 49 54 45 5f 4d  .}.if {$SQLITE_M
11a0: 41 58 5f 41 54 54 41 43 48 45 44 3e 3d 32 7d 20  AX_ATTACHED>=2} 
11b0: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c  {.  do_test sqll
11c0: 69 6d 69 74 73 31 2d 32 2e 38 2e 31 20 7b 0a 20  imits1-2.8.1 {. 
11d0: 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
11e0: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
11f0: 5f 41 54 54 41 43 48 45 44 20 5c 0a 20 20 20 20  _ATTACHED \.    
1200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1210: 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54 45  [expr {$::SQLITE
1220: 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 2f 32 7d  _MAX_ATTACHED/2}
1230: 5d 0a 20 20 7d 20 24 53 51 4c 49 54 45 5f 4d 41  ].  } $SQLITE_MA
1240: 58 5f 41 54 54 41 43 48 45 44 0a 20 20 64 6f 5f  X_ATTACHED.  do_
1250: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
1260: 32 2e 38 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69  2.8.2 {.    sqli
1270: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
1280: 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43 48  ITE_LIMIT_ATTACH
1290: 45 44 20 2d 31 0a 20 20 7d 20 5b 65 78 70 72 20  ED -1.  } [expr 
12a0: 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  {$SQLITE_MAX_ATT
12b0: 41 43 48 45 44 2f 32 7d 5d 0a 7d 0a 69 66 20 7b  ACHED/2}].}.if {
12c0: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45  $SQLITE_MAX_LIKE
12d0: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 3e  _PATTERN_LENGTH>
12e0: 3d 32 7d 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  =2} {.  do_test 
12f0: 73 71 6c 6c 69 6d 69 74 73 31 2d 32 2e 39 2e 31  sqllimits1-2.9.1
1300: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c   {.    sqlite3_l
1310: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
1320: 49 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52  IMIT_LIKE_PATTER
1330: 4e 5f 4c 45 4e 47 54 48 20 5c 0a 20 20 20 20 20  N_LENGTH \.     
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1350: 65 78 70 72 20 7b 24 3a 3a 53 51 4c 49 54 45 5f  expr {$::SQLITE_
1360: 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MAX_LIKE_PATTERN
1370: 5f 4c 45 4e 47 54 48 2f 32 7d 5d 0a 20 20 7d 20  _LENGTH/2}].  } 
1380: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b 45  $SQLITE_MAX_LIKE
1390: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 0a  _PATTERN_LENGTH.
13a0: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
13b0: 69 74 73 31 2d 32 2e 39 2e 32 20 7b 0a 20 20 20  its1-2.9.2 {.   
13c0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
13d0: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  b SQLITE_LIMIT_L
13e0: 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47  IKE_PATTERN_LENG
13f0: 54 48 20 2d 31 0a 20 20 7d 20 5b 65 78 70 72 20  TH -1.  } [expr 
1400: 7b 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 49 4b  {$SQLITE_MAX_LIK
1410: 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
1420: 2f 32 7d 5d 0a 7d 0a 69 66 20 7b 24 53 51 4c 49  /2}].}.if {$SQLI
1430: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
1440: 4e 55 4d 42 45 52 3e 3d 32 7d 20 7b 0a 20 20 64  NUMBER>=2} {.  d
1450: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
1460: 31 2d 32 2e 31 30 2e 31 20 7b 0a 20 20 20 20 73  1-2.10.1 {.    s
1470: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
1480: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52  SQLITE_LIMIT_VAR
1490: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 5c 0a 20  IABLE_NUMBER \. 
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 20 20 20 5b 65 78 70 72 20 7b 24 3a 3a 53 51 4c     [expr {$::SQL
14c0: 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
14d0: 5f 4e 55 4d 42 45 52 2f 32 7d 5d 0a 20 20 7d 20  _NUMBER/2}].  } 
14e0: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49  $SQLITE_MAX_VARI
14f0: 41 42 4c 45 5f 4e 55 4d 42 45 52 0a 20 20 64 6f  ABLE_NUMBER.  do
1500: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
1510: 2d 32 2e 31 30 2e 32 20 7b 0a 20 20 20 20 73 71  -2.10.2 {.    sq
1520: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1530: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
1540: 41 42 4c 45 5f 4e 55 4d 42 45 52 20 2d 31 0a 20  ABLE_NUMBER -1. 
1550: 20 7d 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54   } [expr {$SQLIT
1560: 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e  E_MAX_VARIABLE_N
1570: 55 4d 42 45 52 2f 32 7d 5d 0a 7d 0a 0a 23 20 49  UMBER/2}].}..# I
1580: 6e 20 61 20 73 65 70 61 72 61 74 65 20 64 61 74  n a separate dat
1590: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
15a0: 2c 20 76 65 72 69 66 79 20 74 68 61 74 20 74 68  , verify that th
15b0: 65 20 6c 69 6d 69 74 73 20 61 72 65 20 75 6e 63  e limits are unc
15c0: 68 61 6e 67 65 64 2e 0a 23 0a 64 6f 5f 74 65 73  hanged..#.do_tes
15d0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 31  t sqllimits1-3.1
15e0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d   {.  sqlite3_lim
15f0: 69 74 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49  it db2 SQLITE_LI
1600: 4d 49 54 5f 4c 45 4e 47 54 48 20 2d 31 0a 7d 20  MIT_LENGTH -1.} 
1610: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47  $SQLITE_MAX_LENG
1620: 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  TH.do_test sqlli
1630: 6d 69 74 73 31 2d 33 2e 32 20 7b 0a 20 20 73 71  mits1-3.2 {.  sq
1640: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 32 20  lite3_limit db2 
1650: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c  SQLITE_LIMIT_SQL
1660: 5f 4c 45 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51  _LENGTH -1.} $SQ
1670: 4c 49 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e  LITE_MAX_SQL_LEN
1680: 47 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  GTH.do_test sqll
1690: 69 6d 69 74 73 31 2d 33 2e 33 20 7b 0a 20 20 73  imits1-3.3 {.  s
16a0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 32  qlite3_limit db2
16b0: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f   SQLITE_LIMIT_CO
16c0: 4c 55 4d 4e 20 2d 31 0a 7d 20 24 53 51 4c 49 54  LUMN -1.} $SQLIT
16d0: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 0a 64 6f 5f  E_MAX_COLUMN.do_
16e0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
16f0: 33 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.4 {.  sqlite3_
1700: 6c 69 6d 69 74 20 64 62 32 20 53 51 4c 49 54 45  limit db2 SQLITE
1710: 5f 4c 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54  _LIMIT_EXPR_DEPT
1720: 48 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d  H -1.} $SQLITE_M
1730: 41 58 5f 45 58 50 52 5f 44 45 50 54 48 0a 64 6f  AX_EXPR_DEPTH.do
1740: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
1750: 2d 33 2e 35 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.5 {.  sqlite3
1760: 5f 6c 69 6d 69 74 20 64 62 32 20 53 51 4c 49 54  _limit db2 SQLIT
1770: 45 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44  E_LIMIT_COMPOUND
1780: 5f 53 45 4c 45 43 54 20 2d 31 0a 7d 20 24 53 51  _SELECT -1.} $SQ
1790: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4d 50 4f 55 4e  LITE_MAX_COMPOUN
17a0: 44 5f 53 45 4c 45 43 54 0a 64 6f 5f 74 65 73 74  D_SELECT.do_test
17b0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 36 20   sqllimits1-3.6 
17c0: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
17d0: 74 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49 4d  t db2 SQLITE_LIM
17e0: 49 54 5f 56 44 42 45 5f 4f 50 20 2d 31 0a 7d 20  IT_VDBE_OP -1.} 
17f0: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45  $SQLITE_MAX_VDBE
1800: 5f 4f 50 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  _OP.do_test sqll
1810: 69 6d 69 74 73 31 2d 33 2e 37 20 7b 0a 20 20 73  imits1-3.7 {.  s
1820: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 32  qlite3_limit db2
1830: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55   SQLITE_LIMIT_FU
1840: 4e 43 54 49 4f 4e 5f 41 52 47 20 2d 31 0a 7d 20  NCTION_ARG -1.} 
1850: 24 53 51 4c 49 54 45 5f 4d 41 58 5f 46 55 4e 43  $SQLITE_MAX_FUNC
1860: 54 49 4f 4e 5f 41 52 47 0a 64 6f 5f 74 65 73 74  TION_ARG.do_test
1870: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 38 20   sqllimits1-3.8 
1880: 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  {.  sqlite3_limi
1890: 74 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49 4d  t db2 SQLITE_LIM
18a0: 49 54 5f 41 54 54 41 43 48 45 44 20 2d 31 0a 7d  IT_ATTACHED -1.}
18b0: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54   $SQLITE_MAX_ATT
18c0: 41 43 48 45 44 0a 64 6f 5f 74 65 73 74 20 73 71  ACHED.do_test sq
18d0: 6c 6c 69 6d 69 74 73 31 2d 33 2e 39 20 7b 0a 20  llimits1-3.9 {. 
18e0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
18f0: 62 32 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b2 SQLITE_LIMIT_
1900: 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e  LIKE_PATTERN_LEN
1910: 47 54 48 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45  GTH -1.} $SQLITE
1920: 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54 54 45 52  _MAX_LIKE_PATTER
1930: 4e 5f 4c 45 4e 47 54 48 0a 64 6f 5f 74 65 73 74  N_LENGTH.do_test
1940: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 33 2e 31 30   sqllimits1-3.10
1950: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d   {.  sqlite3_lim
1960: 69 74 20 64 62 32 20 53 51 4c 49 54 45 5f 4c 49  it db2 SQLITE_LI
1970: 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d  MIT_VARIABLE_NUM
1980: 42 45 52 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45  BER -1.} $SQLITE
1990: 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55  _MAX_VARIABLE_NU
19a0: 4d 42 45 52 0a 64 62 32 20 63 6c 6f 73 65 0a 0a  MBER.db2 close..
19b0: 23 20 41 74 74 65 6d 70 74 20 74 6f 20 73 65 74  # Attempt to set
19c0: 20 61 6c 6c 20 6c 69 6d 69 74 73 20 74 6f 20 74   all limits to t
19d0: 68 65 20 6d 61 78 69 6d 75 6d 20 33 32 2d 62 69  he maximum 32-bi
19e0: 74 20 69 6e 74 65 67 65 72 2e 20 20 56 65 72 69  t integer.  Veri
19f0: 66 79 0a 23 20 74 68 61 74 20 74 68 65 20 6c 69  fy.# that the li
1a00: 6d 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 63  mit does not exc
1a10: 65 65 64 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  eed the compile-
1a20: 74 69 6d 65 20 75 70 70 65 72 20 62 6f 75 6e 64  time upper bound
1a30: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  ..#.do_test sqll
1a40: 69 6d 69 74 73 31 2d 34 2e 31 2e 31 20 7b 0a 20  imits1-4.1.1 {. 
1a50: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
1a60: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  b SQLITE_LIMIT_L
1a70: 45 4e 47 54 48 20 30 78 37 66 66 66 66 66 66 66  ENGTH 0x7fffffff
1a80: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
1a90: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
1aa0: 5f 4c 45 4e 47 54 48 20 2d 31 0a 7d 20 24 53 51  _LENGTH -1.} $SQ
1ab0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
1ac0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
1ad0: 73 31 2d 34 2e 32 2e 31 20 7b 0a 20 20 73 71 6c  s1-4.2.1 {.  sql
1ae0: 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51  ite3_limit db SQ
1af0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c  LITE_LIMIT_SQL_L
1b00: 45 4e 47 54 48 20 30 78 37 66 66 66 66 66 66 66  ENGTH 0x7fffffff
1b10: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
1b20: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
1b30: 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 2d 31 0a 7d  _SQL_LENGTH -1.}
1b40: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 53 51 4c   $SQLITE_MAX_SQL
1b50: 5f 4c 45 4e 47 54 48 0a 64 6f 5f 74 65 73 74 20  _LENGTH.do_test 
1b60: 73 71 6c 6c 69 6d 69 74 73 31 2d 34 2e 33 2e 31  sqllimits1-4.3.1
1b70: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d   {.  sqlite3_lim
1b80: 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d  it db SQLITE_LIM
1b90: 49 54 5f 43 4f 4c 55 4d 4e 20 30 78 37 66 66 66  IT_COLUMN 0x7fff
1ba0: 66 66 66 66 0a 20 20 73 71 6c 69 74 65 33 5f 6c  ffff.  sqlite3_l
1bb0: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
1bc0: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 2d 31 0a 7d  IMIT_COLUMN -1.}
1bd0: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c   $SQLITE_MAX_COL
1be0: 55 4d 4e 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  UMN.do_test sqll
1bf0: 69 6d 69 74 73 31 2d 34 2e 34 2e 31 20 7b 0a 20  imits1-4.4.1 {. 
1c00: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
1c10: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 45  b SQLITE_LIMIT_E
1c20: 58 50 52 5f 44 45 50 54 48 20 30 78 37 66 66 66  XPR_DEPTH 0x7fff
1c30: 66 66 66 66 0a 20 20 73 71 6c 69 74 65 33 5f 6c  ffff.  sqlite3_l
1c40: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
1c50: 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 20  IMIT_EXPR_DEPTH 
1c60: 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58  -1.} $SQLITE_MAX
1c70: 5f 45 58 50 52 5f 44 45 50 54 48 0a 64 6f 5f 74  _EXPR_DEPTH.do_t
1c80: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 34  est sqllimits1-4
1c90: 2e 35 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33  .5.1 {.  sqlite3
1ca0: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
1cb0: 5f 4c 49 4d 49 54 5f 43 4f 4d 50 4f 55 4e 44 5f  _LIMIT_COMPOUND_
1cc0: 53 45 4c 45 43 54 20 30 78 37 66 66 66 66 66 66  SELECT 0x7ffffff
1cd0: 66 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  f.  sqlite3_limi
1ce0: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
1cf0: 54 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45 43  T_COMPOUND_SELEC
1d00: 54 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d  T -1.} $SQLITE_M
1d10: 41 58 5f 43 4f 4d 50 4f 55 4e 44 5f 53 45 4c 45  AX_COMPOUND_SELE
1d20: 43 54 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  CT.do_test sqlli
1d30: 6d 69 74 73 31 2d 34 2e 36 2e 31 20 7b 0a 20 20  mits1-4.6.1 {.  
1d40: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
1d50: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 44   SQLITE_LIMIT_VD
1d60: 42 45 5f 4f 50 20 30 78 37 66 66 66 66 66 66 66  BE_OP 0x7fffffff
1d70: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
1d80: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
1d90: 5f 56 44 42 45 5f 4f 50 20 2d 31 0a 7d 20 24 53  _VDBE_OP -1.} $S
1da0: 51 4c 49 54 45 5f 4d 41 58 5f 56 44 42 45 5f 4f  QLITE_MAX_VDBE_O
1db0: 50 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  P.do_test sqllim
1dc0: 69 74 73 31 2d 34 2e 37 2e 31 20 7b 0a 20 20 73  its1-4.7.1 {.  s
1dd0: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
1de0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 46 55 4e  SQLITE_LIMIT_FUN
1df0: 43 54 49 4f 4e 5f 41 52 47 20 30 78 37 66 66 66  CTION_ARG 0x7fff
1e00: 66 66 66 66 0a 20 20 73 71 6c 69 74 65 33 5f 6c  ffff.  sqlite3_l
1e10: 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c  imit db SQLITE_L
1e20: 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52  IMIT_FUNCTION_AR
1e30: 47 20 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d  G -1.} $SQLITE_M
1e40: 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 0a  AX_FUNCTION_ARG.
1e50: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
1e60: 73 31 2d 34 2e 38 2e 31 20 7b 0a 20 20 73 71 6c  s1-4.8.1 {.  sql
1e70: 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51  ite3_limit db SQ
1e80: 4c 49 54 45 5f 4c 49 4d 49 54 5f 41 54 54 41 43  LITE_LIMIT_ATTAC
1e90: 48 45 44 20 30 78 37 66 66 66 66 66 66 66 0a 20  HED 0x7fffffff. 
1ea0: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64   sqlite3_limit d
1eb0: 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 41  b SQLITE_LIMIT_A
1ec0: 54 54 41 43 48 45 44 20 2d 31 0a 7d 20 24 53 51  TTACHED -1.} $SQ
1ed0: 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
1ee0: 44 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  D.do_test sqllim
1ef0: 69 74 73 31 2d 34 2e 39 2e 31 20 7b 0a 20 20 73  its1-4.9.1 {.  s
1f00: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
1f10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b  SQLITE_LIMIT_LIK
1f20: 45 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48  E_PATTERN_LENGTH
1f30: 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73 71   0x7fffffff.  sq
1f40: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
1f50: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45  QLITE_LIMIT_LIKE
1f60: 5f 50 41 54 54 45 52 4e 5f 4c 45 4e 47 54 48 20  _PATTERN_LENGTH 
1f70: 2d 31 0a 7d 20 24 53 51 4c 49 54 45 5f 4d 41 58  -1.} $SQLITE_MAX
1f80: 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
1f90: 4e 47 54 48 0a 64 6f 5f 74 65 73 74 20 73 71 6c  NGTH.do_test sql
1fa0: 6c 69 6d 69 74 73 31 2d 34 2e 31 30 2e 31 20 7b  limits1-4.10.1 {
1fb0: 0a 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  .  sqlite3_limit
1fc0: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
1fd0: 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52  _VARIABLE_NUMBER
1fe0: 20 30 78 37 66 66 66 66 66 66 66 0a 20 20 73 71   0x7fffffff.  sq
1ff0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
2000: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 56 41 52 49  QLITE_LIMIT_VARI
2010: 41 42 4c 45 5f 4e 55 4d 42 45 52 20 2d 31 0a 7d  ABLE_NUMBER -1.}
2020: 20 24 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52   $SQLITE_MAX_VAR
2030: 49 41 42 4c 45 5f 4e 55 4d 42 45 52 0a 0a 23 2d  IABLE_NUMBER..#-
2040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2080: 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73  ---.# Test cases
2090: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 2a 20   sqllimits1-5.* 
20a0: 74 65 73 74 20 74 68 61 74 20 74 68 65 20 53 51  test that the SQ
20b0: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
20c0: 6c 69 6d 69 74 0a 23 20 69 73 20 65 6e 66 6f 72  limit.# is enfor
20d0: 63 65 64 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  ced..#.# EVIDENC
20e0: 45 2d 4f 46 3a 20 52 2d 36 31 39 38 37 2d 30 30  E-OF: R-61987-00
20f0: 35 34 31 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  541 SQLITE_LIMIT
2100: 5f 4c 45 4e 47 54 48 20 54 68 65 20 6d 61 78 69  _LENGTH The maxi
2110: 6d 75 6d 20 73 69 7a 65 20 6f 66 20 61 6e 79 0a  mum size of any.
2120: 23 20 73 74 72 69 6e 67 20 6f 72 20 42 4c 4f 42  # string or BLOB
2130: 20 6f 72 20 74 61 62 6c 65 20 72 6f 77 2c 20 69   or table row, i
2140: 6e 20 62 79 74 65 73 2e 0a 23 0a 64 62 20 63 6c  n bytes..#.db cl
2150: 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62 20 74  ose.sqlite3 db t
2160: 65 73 74 2e 64 62 0a 73 65 74 20 4c 41 52 47 45  est.db.set LARGE
2170: 53 49 5a 45 20 39 39 39 39 39 0a 73 65 74 20 53  SIZE 99999.set S
2180: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
2190: 54 48 20 31 30 30 30 30 30 0a 73 71 6c 69 74 65  TH 100000.sqlite
21a0: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
21b0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 24  E_LIMIT_LENGTH $
21c0: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
21d0: 47 54 48 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c  GTH..do_test sql
21e0: 6c 69 6d 69 74 73 31 2d 35 2e 31 2e 31 20 7b 0a  limits1-5.1.1 {.
21f0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45 4c    catchsql { SEL
2200: 45 43 54 20 72 61 6e 64 6f 6d 62 6c 6f 62 28 32  ECT randomblob(2
2210: 31 34 37 34 38 33 36 34 37 29 20 7d 0a 7d 20 7b  147483647) }.} {
2220: 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f  1 {string or blo
2230: 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 64 6f 5f 74  b too big}}.do_t
2240: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35  est sqllimits1-5
2250: 2e 31 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71  .1.2 {.  catchsq
2260: 6c 20 7b 20 53 45 4c 45 43 54 20 7a 65 72 6f 62  l { SELECT zerob
2270: 6c 6f 62 28 32 31 34 37 34 38 33 36 34 37 29 20  lob(2147483647) 
2280: 7d 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f  }.} {1 {string o
2290: 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d  r blob too big}}
22a0: 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  ..do_test sqllim
22b0: 69 74 73 31 2d 35 2e 32 20 7b 0a 20 20 63 61 74  its1-5.2 {.  cat
22c0: 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 4c  chsql { SELECT L
22d0: 45 4e 47 54 48 28 72 61 6e 64 6f 6d 62 6c 6f 62  ENGTH(randomblob
22e0: 28 24 3a 3a 4c 41 52 47 45 53 49 5a 45 29 29 20  ($::LARGESIZE)) 
22f0: 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 24 4c 41 52  }.} [list 0 $LAR
2300: 47 45 53 49 5a 45 5d 0a 0a 64 6f 5f 74 65 73 74  GESIZE]..do_test
2310: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 33 20   sqllimits1-5.3 
2320: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53  {.  catchsql { S
2330: 45 4c 45 43 54 20 71 75 6f 74 65 28 72 61 6e 64  ELECT quote(rand
2340: 6f 6d 62 6c 6f 62 28 24 3a 3a 4c 41 52 47 45 53  omblob($::LARGES
2350: 49 5a 45 29 29 20 7d 0a 7d 20 7b 31 20 7b 73 74  IZE)) }.} {1 {st
2360: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
2370: 20 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20   big}}..do_test 
2380: 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 34 20 7b  sqllimits1-5.4 {
2390: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 53 45  .  catchsql { SE
23a0: 4c 45 43 54 20 4c 45 4e 47 54 48 28 7a 65 72 6f  LECT LENGTH(zero
23b0: 62 6c 6f 62 28 24 3a 3a 4c 41 52 47 45 53 49 5a  blob($::LARGESIZ
23c0: 45 29 29 20 7d 0a 7d 20 5b 6c 69 73 74 20 30 20  E)) }.} [list 0 
23d0: 24 4c 41 52 47 45 53 49 5a 45 5d 0a 0a 64 6f 5f  $LARGESIZE]..do_
23e0: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
23f0: 35 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c  5.5 {.  catchsql
2400: 20 7b 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28   { SELECT quote(
2410: 7a 65 72 6f 62 6c 6f 62 28 24 3a 3a 4c 41 52 47  zeroblob($::LARG
2420: 45 53 49 5a 45 29 29 20 7d 0a 7d 20 7b 31 20 7b  ESIZE)) }.} {1 {
2430: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
2440: 6f 6f 20 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73  oo big}}..do_tes
2450: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 36  t sqllimits1-5.6
2460: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20   {.  catchsql { 
2470: 53 45 4c 45 43 54 20 7a 65 72 6f 62 6c 6f 62 28  SELECT zeroblob(
2480: 2d 31 29 20 7d 0a 7d 20 7b 30 20 7b 7b 7d 7d 7d  -1) }.} {0 {{}}}
2490: 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  ..do_test sqllim
24a0: 69 74 73 31 2d 35 2e 39 20 7b 0a 20 20 73 65 74  its1-5.9 {.  set
24b0: 20 3a 3a 73 74 72 20 5b 73 74 72 69 6e 67 20 72   ::str [string r
24c0: 65 70 65 61 74 20 41 20 36 35 35 33 37 5d 0a 20  epeat A 65537]. 
24d0: 20 73 65 74 20 3a 3a 72 65 70 20 5b 73 74 72 69   set ::rep [stri
24e0: 6e 67 20 72 65 70 65 61 74 20 42 20 36 35 35 33  ng repeat B 6553
24f0: 37 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20  7].  catchsql { 
2500: 53 45 4c 45 43 54 20 72 65 70 6c 61 63 65 28 24  SELECT replace($
2510: 3a 3a 73 74 72 2c 20 27 41 27 2c 20 24 3a 3a 72  ::str, 'A', $::r
2520: 65 70 29 20 7d 0a 7d 20 7b 31 20 7b 73 74 72 69  ep) }.} {1 {stri
2530: 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
2540: 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71  ig}}..do_test sq
2550: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 30 20 7b 0a  llimits1-5.10 {.
2560: 20 20 73 65 74 20 3a 3a 73 74 72 20 5b 73 74 72    set ::str [str
2570: 69 6e 67 20 72 65 70 65 61 74 20 25 4a 20 32 31  ing repeat %J 21
2580: 30 30 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  00].  catchsql {
2590: 20 53 45 4c 45 43 54 20 73 74 72 66 74 69 6d 65   SELECT strftime
25a0: 28 24 3a 3a 73 74 72 2c 20 27 32 30 30 33 2d 31  ($::str, '2003-1
25b0: 30 2d 33 31 27 29 20 7d 0a 7d 20 7b 31 20 7b 73  0-31') }.} {1 {s
25c0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
25d0: 6f 20 62 69 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74  o big}}..do_test
25e0: 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 31   sqllimits1-5.11
25f0: 20 7b 0a 20 20 73 65 74 20 3a 3a 73 74 72 31 20   {.  set ::str1 
2600: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 41  [string repeat A
2610: 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54 45 5f   [expr {$SQLITE_
2620: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2d 20 31  LIMIT_LENGTH - 1
2630: 30 7d 5d 5d 0a 20 20 73 65 74 20 3a 3a 73 74 72  0}]].  set ::str
2640: 32 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  2 [string repeat
2650: 20 42 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54   B [expr {$SQLIT
2660: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2d  E_LIMIT_LENGTH -
2670: 20 31 30 7d 5d 5d 0a 20 20 63 61 74 63 68 73 71   10}]].  catchsq
2680: 6c 20 7b 20 53 45 4c 45 43 54 20 24 3a 3a 73 74  l { SELECT $::st
2690: 72 31 20 7c 7c 20 24 3a 3a 73 74 72 32 20 7d 0a  r1 || $::str2 }.
26a0: 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20  } {1 {string or 
26b0: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a  blob too big}}..
26c0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
26d0: 73 31 2d 35 2e 31 32 20 7b 0a 20 20 73 65 74 20  s1-5.12 {.  set 
26e0: 3a 3a 73 74 72 31 20 5b 73 74 72 69 6e 67 20 72  ::str1 [string r
26f0: 65 70 65 61 74 20 27 20 5b 65 78 70 72 20 7b 24  epeat ' [expr {$
2700: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
2710: 47 54 48 20 2d 20 31 30 7d 5d 5d 0a 20 20 63 61  GTH - 10}]].  ca
2720: 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  tchsql { SELECT 
2730: 71 75 6f 74 65 28 24 3a 3a 73 74 72 31 29 20 7d  quote($::str1) }
2740: 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72  .} {1 {string or
2750: 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a   blob too big}}.
2760: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
2770: 74 73 31 2d 35 2e 31 33 20 7b 0a 20 20 73 65 74  ts1-5.13 {.  set
2780: 20 3a 3a 73 74 72 31 20 5b 73 74 72 69 6e 67 20   ::str1 [string 
2790: 72 65 70 65 61 74 20 27 20 5b 65 78 70 72 20 7b  repeat ' [expr {
27a0: 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  $SQLITE_LIMIT_LE
27b0: 4e 47 54 48 20 2d 20 31 30 7d 5d 5d 0a 20 20 63  NGTH - 10}]].  c
27c0: 61 74 63 68 73 71 6c 20 7b 20 53 45 4c 45 43 54  atchsql { SELECT
27d0: 20 68 65 78 28 24 3a 3a 73 74 72 31 29 20 7d 0a   hex($::str1) }.
27e0: 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20  } {1 {string or 
27f0: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 0a  blob too big}}..
2800: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
2810: 73 31 2d 35 2e 31 34 2e 31 20 7b 0a 20 20 73 65  s1-5.14.1 {.  se
2820: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
2830: 33 5f 70 72 65 70 61 72 65 20 64 62 20 22 53 45  3_prepare db "SE
2840: 4c 45 43 54 20 3f 22 20 2d 31 20 54 41 49 4c 5d  LECT ?" -1 TAIL]
2850: 0a 20 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  .  sqlite3_bind_
2860: 7a 65 72 6f 62 6c 6f 62 20 24 3a 3a 53 54 4d 54  zeroblob $::STMT
2870: 20 31 20 5b 65 78 70 72 20 7b 24 53 51 4c 49 54   1 [expr {$SQLIT
2880: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 2b  E_LIMIT_LENGTH +
2890: 20 31 7d 5d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73   1}].} {}.do_tes
28a0: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31  t sqllimits1-5.1
28b0: 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.2 {.  sqlite3_
28c0: 73 74 65 70 20 24 3a 3a 53 54 4d 54 20 0a 7d 20  step $::STMT .} 
28d0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
28e0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
28f0: 31 2d 35 2e 31 34 2e 33 20 7b 0a 20 20 73 71 6c  1-5.14.3 {.  sql
2900: 69 74 65 33 5f 72 65 73 65 74 20 24 3a 3a 53 54  ite3_reset $::ST
2910: 4d 54 20 0a 7d 20 7b 53 51 4c 49 54 45 5f 54 4f  MT .} {SQLITE_TO
2920: 4f 42 49 47 7d 0a 64 6f 5f 74 65 73 74 20 73 71  OBIG}.do_test sq
2930: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e 34 20  llimits1-5.14.4 
2940: 7b 0a 20 20 73 65 74 20 6e 70 31 20 5b 65 78 70  {.  set np1 [exp
2950: 72 20 7b 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54  r {$SQLITE_LIMIT
2960: 5f 4c 45 4e 47 54 48 20 2b 20 31 7d 5d 0a 20 20  _LENGTH + 1}].  
2970: 73 65 74 20 3a 3a 73 74 72 31 20 5b 73 74 72 69  set ::str1 [stri
2980: 6e 67 20 72 65 70 65 61 74 20 41 20 24 6e 70 31  ng repeat A $np1
2990: 5d 0a 20 20 63 61 74 63 68 20 7b 73 71 6c 69 74  ].  catch {sqlit
29a0: 65 33 5f 62 69 6e 64 5f 74 65 78 74 20 24 3a 3a  e3_bind_text $::
29b0: 53 54 4d 54 20 31 20 24 3a 3a 73 74 72 31 20 2d  STMT 1 $::str1 -
29c0: 31 7d 20 72 65 73 0a 20 20 73 65 74 20 72 65 73  1} res.  set res
29d0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 54 4f 4f 42 49  .} {SQLITE_TOOBI
29e0: 47 7d 0a 69 66 63 61 70 61 62 6c 65 20 75 74 66  G}.ifcapable utf
29f0: 31 36 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  16 {.  do_test s
2a00: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 34 2e 35  qllimits1-5.14.5
2a10: 20 7b 0a 20 20 20 20 63 61 74 63 68 20 7b 73 71   {.    catch {sq
2a20: 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78 74 31  lite3_bind_text1
2a30: 36 20 24 3a 3a 53 54 4d 54 20 31 20 24 3a 3a 73  6 $::STMT 1 $::s
2a40: 74 72 31 20 2d 31 7d 20 72 65 73 0a 20 20 20 20  tr1 -1} res.    
2a50: 73 65 74 20 72 65 73 0a 20 20 7d 20 7b 53 51 4c  set res.  } {SQL
2a60: 49 54 45 5f 54 4f 4f 42 49 47 7d 0a 7d 0a 64 6f  ITE_TOOBIG}.}.do
2a70: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
2a80: 2d 35 2e 31 34 2e 36 20 7b 0a 20 20 63 61 74 63  -5.14.6 {.  catc
2a90: 68 20 7b 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  h {sqlite3_bind_
2aa0: 74 65 78 74 20 24 3a 3a 53 54 4d 54 20 31 20 24  text $::STMT 1 $
2ab0: 3a 3a 73 74 72 31 20 24 6e 70 31 7d 20 72 65 73  ::str1 $np1} res
2ac0: 0a 20 20 73 65 74 20 72 65 73 0a 7d 20 7b 53 51  .  set res.} {SQ
2ad0: 4c 49 54 45 5f 54 4f 4f 42 49 47 7d 0a 69 66 63  LITE_TOOBIG}.ifc
2ae0: 61 70 61 62 6c 65 20 75 74 66 31 36 20 7b 0a 20  apable utf16 {. 
2af0: 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69   do_test sqllimi
2b00: 74 73 31 2d 35 2e 31 34 2e 37 20 7b 0a 20 20 20  ts1-5.14.7 {.   
2b10: 20 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f   catch {sqlite3_
2b20: 62 69 6e 64 5f 74 65 78 74 31 36 20 24 3a 3a 53  bind_text16 $::S
2b30: 54 4d 54 20 31 20 24 3a 3a 73 74 72 31 20 24 6e  TMT 1 $::str1 $n
2b40: 70 31 7d 20 72 65 73 0a 20 20 20 20 73 65 74 20  p1} res.    set 
2b50: 72 65 73 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f  res.  } {SQLITE_
2b60: 54 4f 4f 42 49 47 7d 0a 7d 0a 64 6f 5f 74 65 73  TOOBIG}.}.do_tes
2b70: 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31  t sqllimits1-5.1
2b80: 34 2e 38 20 7b 0a 20 20 73 65 74 20 6e 20 5b 65  4.8 {.  set n [e
2b90: 78 70 72 20 7b 24 6e 70 31 2d 31 7d 5d 0a 20 20  xpr {$np1-1}].  
2ba0: 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 62  catch {sqlite3_b
2bb0: 69 6e 64 5f 74 65 78 74 20 24 3a 3a 53 54 4d 54  ind_text $::STMT
2bc0: 20 31 20 24 3a 3a 73 74 72 31 20 24 6e 7d 20 72   1 $::str1 $n} r
2bd0: 65 73 0a 20 20 73 65 74 20 72 65 73 0a 7d 20 7b  es.  set res.} {
2be0: 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  }.do_test sqllim
2bf0: 69 74 73 31 2d 35 2e 31 34 2e 39 20 7b 0a 20 20  its1-5.14.9 {.  
2c00: 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f 62  catch {sqlite3_b
2c10: 69 6e 64 5f 74 65 78 74 31 36 20 24 3a 3a 53 54  ind_text16 $::ST
2c20: 4d 54 20 31 20 24 3a 3a 73 74 72 31 20 24 6e 7d  MT 1 $::str1 $n}
2c30: 20 72 65 73 0a 20 20 73 65 74 20 72 65 73 0a 7d   res.  set res.}
2c40: 20 7b 7d 0a 73 71 6c 69 74 65 33 5f 66 69 6e 61   {}.sqlite3_fina
2c50: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 20 0a 0a 64  lize $::STMT ..d
2c60: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
2c70: 31 2d 35 2e 31 35 20 7b 0a 20 20 65 78 65 63 73  1-5.15 {.  execs
2c80: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
2c90: 54 41 42 4c 45 20 74 34 28 78 29 3b 0a 20 20 20  TABLE t4(x);.   
2ca0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
2cb0: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49  VALUES(1);.    I
2cc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
2cd0: 4c 55 45 53 28 32 29 3b 0a 20 20 20 20 49 4e 53  LUES(2);.    INS
2ce0: 45 52 54 20 49 4e 54 4f 20 74 34 20 53 45 4c 45  ERT INTO t4 SELE
2cf0: 43 54 20 32 2b 78 20 46 52 4f 4d 20 74 34 3b 0a  CT 2+x FROM t4;.
2d00: 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 7b    }.  catchsql {
2d10: 0a 20 20 20 20 53 45 4c 45 43 54 20 67 72 6f 75  .    SELECT grou
2d20: 70 5f 63 6f 6e 63 61 74 28 68 65 78 28 72 61 6e  p_concat(hex(ran
2d30: 64 6f 6d 62 6c 6f 62 28 32 30 30 30 30 29 29 29  domblob(20000)))
2d40: 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a 7d 20   FROM t4;.  }.} 
2d50: 7b 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c  {1 {string or bl
2d60: 6f 62 20 74 6f 6f 20 62 69 67 7d 7d 0a 64 62 20  ob too big}}.db 
2d70: 65 76 61 6c 20 7b 44 52 4f 50 20 54 41 42 4c 45  eval {DROP TABLE
2d80: 20 74 34 7d 0a 0a 73 71 6c 69 74 65 33 5f 6c 69   t4}..sqlite3_li
2d90: 6d 69 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49  mit db SQLITE_LI
2da0: 4d 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 30  MIT_SQL_LENGTH 0
2db0: 78 37 66 66 66 66 66 66 66 0a 73 65 74 20 73 74  x7fffffff.set st
2dc0: 72 76 61 6c 75 65 20 5b 73 74 72 69 6e 67 20 72  rvalue [string r
2dd0: 65 70 65 61 74 20 41 20 24 3a 3a 53 51 4c 49 54  epeat A $::SQLIT
2de0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 0a  E_LIMIT_LENGTH].
2df0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
2e00: 73 31 2d 35 2e 31 36 20 7b 0a 20 20 63 61 74 63  s1-5.16 {.  catc
2e10: 68 73 71 6c 20 22 53 45 4c 45 43 54 20 27 24 73  hsql "SELECT '$s
2e20: 74 72 76 61 6c 75 65 27 22 0a 7d 20 5b 6c 69 73  trvalue'".} [lis
2e30: 74 20 30 20 24 73 74 72 76 61 6c 75 65 5d 0a 64  t 0 $strvalue].d
2e40: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
2e50: 31 2d 35 2e 31 37 2e 31 20 7b 0a 20 20 63 61 74  1-5.17.1 {.  cat
2e60: 63 68 73 71 6c 20 22 53 45 4c 45 43 54 20 27 41  chsql "SELECT 'A
2e70: 24 73 74 72 76 61 6c 75 65 27 22 0a 7d 20 5b 6c  $strvalue'".} [l
2e80: 69 73 74 20 31 20 7b 73 74 72 69 6e 67 20 6f 72  ist 1 {string or
2e90: 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 5d 0a   blob too big}].
2ea0: 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74  do_test sqllimit
2eb0: 73 31 2d 35 2e 31 37 2e 32 20 7b 0a 20 20 73 71  s1-5.17.2 {.  sq
2ec0: 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53  lite3_limit db S
2ed0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
2ee0: 54 48 20 30 78 37 66 66 66 66 66 66 66 0a 20 20  TH 0x7fffffff.  
2ef0: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
2f00: 20 27 41 27 20 7c 7c 20 24 3a 3a 73 74 72 76 61   'A' || $::strva
2f10: 6c 75 65 7d 0a 7d 20 5b 6c 69 73 74 20 30 20 41  lue}.} [list 0 A
2f20: 24 73 74 72 76 61 6c 75 65 5d 0a 64 6f 5f 74 65  $strvalue].do_te
2f30: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 35 2e  st sqllimits1-5.
2f40: 31 37 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33  17.3 {.  sqlite3
2f50: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
2f60: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 24 53  _LIMIT_LENGTH $S
2f70: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
2f80: 54 48 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 53  TH.  catchsql {S
2f90: 45 4c 45 43 54 20 27 41 27 20 7c 7c 20 24 3a 3a  ELECT 'A' || $::
2fa0: 73 74 72 76 61 6c 75 65 7d 0a 7d 20 5b 6c 69 73  strvalue}.} [lis
2fb0: 74 20 31 20 7b 73 74 72 69 6e 67 20 6f 72 20 62  t 1 {string or b
2fc0: 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 5d 0a 73 65  lob too big}].se
2fd0: 74 20 62 6c 6f 62 76 61 6c 75 65 20 5b 73 74 72  t blobvalue [str
2fe0: 69 6e 67 20 72 65 70 65 61 74 20 34 31 20 24 3a  ing repeat 41 $:
2ff0: 3a 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  :SQLITE_LIMIT_LE
3000: 4e 47 54 48 5d 0a 64 6f 5f 74 65 73 74 20 73 71  NGTH].do_test sq
3010: 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 38 20 7b 0a  llimits1-5.18 {.
3020: 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45    catchsql "SELE
3030: 43 54 20 78 27 24 62 6c 6f 62 76 61 6c 75 65 27  CT x'$blobvalue'
3040: 22 0a 7d 20 5b 6c 69 73 74 20 30 20 24 73 74 72  ".} [list 0 $str
3050: 76 61 6c 75 65 5d 0a 64 6f 5f 74 65 73 74 20 73  value].do_test s
3060: 71 6c 6c 69 6d 69 74 73 31 2d 35 2e 31 39 20 7b  qllimits1-5.19 {
3070: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c  .  catchsql "SEL
3080: 45 43 54 20 27 34 31 24 62 6c 6f 62 76 61 6c 75  ECT '41$blobvalu
3090: 65 27 22 0a 7d 20 5b 6c 69 73 74 20 31 20 7b 73  e'".} [list 1 {s
30a0: 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f  tring or blob to
30b0: 6f 20 62 69 67 7d 5d 0a 75 6e 73 65 74 20 62 6c  o big}].unset bl
30c0: 6f 62 76 61 6c 75 65 0a 0a 69 66 63 61 70 61 62  obvalue..ifcapab
30d0: 6c 65 20 64 61 74 65 74 69 6d 65 20 7b 0a 20 20  le datetime {.  
30e0: 73 65 74 20 73 74 72 76 61 6c 75 65 20 5b 73 74  set strvalue [st
30f0: 72 69 6e 67 20 72 65 70 65 61 74 20 44 20 5b 65  ring repeat D [e
3100: 78 70 72 20 7b 24 53 51 4c 49 54 45 5f 4c 49 4d  xpr {$SQLITE_LIM
3110: 49 54 5f 4c 45 4e 47 54 48 2d 31 32 7d 5d 5d 0a  IT_LENGTH-12}]].
3120: 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d    do_test sqllim
3130: 69 74 73 31 2d 35 2e 32 30 20 7b 0a 20 20 20 20  its1-5.20 {.    
3140: 63 61 74 63 68 73 71 6c 20 7b 53 45 4c 45 43 54  catchsql {SELECT
3150: 20 73 74 72 66 74 69 6d 65 28 27 25 59 20 27 20   strftime('%Y ' 
3160: 7c 7c 20 24 3a 3a 73 74 72 76 61 6c 75 65 2c 20  || $::strvalue, 
3170: 27 32 30 30 38 2d 30 31 2d 30 32 27 29 7d 0a 20  '2008-01-02')}. 
3180: 20 7d 20 5b 6c 69 73 74 20 30 20 5b 6c 69 73 74   } [list 0 [list
3190: 20 22 32 30 30 38 20 24 73 74 72 76 61 6c 75 65   "2008 $strvalue
31a0: 22 5d 5d 0a 20 20 64 6f 5f 74 65 73 74 20 73 71  "]].  do_test sq
31b0: 6c 6c 69 6d 69 74 73 31 2d 35 2e 32 31 20 7b 0a  llimits1-5.21 {.
31c0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 7b 53 45      catchsql {SE
31d0: 4c 45 43 54 20 73 74 72 66 74 69 6d 65 28 27 25  LECT strftime('%
31e0: 59 2d 25 6d 2d 25 64 20 27 20 7c 7c 20 24 3a 3a  Y-%m-%d ' || $::
31f0: 73 74 72 76 61 6c 75 65 2c 20 27 32 30 30 38 2d  strvalue, '2008-
3200: 30 31 2d 30 32 27 29 7d 0a 20 20 7d 20 7b 31 20  01-02')}.  } {1 
3210: 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  {string or blob 
3220: 74 6f 6f 20 62 69 67 7d 7d 0a 7d 0a 75 6e 73 65  too big}}.}.unse
3230: 74 20 73 74 72 76 61 6c 75 65 0a 0a 23 2d 2d 2d  t strvalue..#---
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3280: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73  -.# Test cases s
3290: 71 6c 6c 69 6d 69 74 73 31 2d 36 2e 2a 20 74 65  qllimits1-6.* te
32a0: 73 74 20 74 68 61 74 20 74 68 65 20 53 51 4c 49  st that the SQLI
32b0: 54 45 5f 4d 41 58 5f 53 51 4c 5f 4c 45 4e 47 54  TE_MAX_SQL_LENGT
32c0: 48 20 6c 69 6d 69 74 0a 23 20 69 73 20 65 6e 66  H limit.# is enf
32d0: 6f 72 63 65 64 2e 0a 23 0a 23 20 45 56 49 44 45  orced..#.# EVIDE
32e0: 4e 43 45 2d 4f 46 3a 20 52 2d 30 39 38 30 38 2d  NCE-OF: R-09808-
32f0: 31 37 35 35 34 20 53 51 4c 49 54 45 5f 4c 49 4d  17554 SQLITE_LIM
3300: 49 54 5f 53 51 4c 5f 4c 45 4e 47 54 48 20 54 68  IT_SQL_LENGTH Th
3310: 65 20 6d 61 78 69 6d 75 6d 20 6c 65 6e 67 74 68  e maximum length
3320: 0a 23 20 6f 66 20 61 6e 20 53 51 4c 20 73 74 61  .# of an SQL sta
3330: 74 65 6d 65 6e 74 2c 20 69 6e 20 62 79 74 65 73  tement, in bytes
3340: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c  ..#.do_test sqll
3350: 69 6d 69 74 73 31 2d 36 2e 31 20 7b 0a 20 20 73  imits1-6.1 {.  s
3360: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62 20  qlite3_limit db 
3370: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c  SQLITE_LIMIT_SQL
3380: 5f 4c 45 4e 47 54 48 20 35 30 30 30 30 0a 20 20  _LENGTH 50000.  
3390: 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20  set sql "SELECT 
33a0: 31 20 57 48 45 52 45 20 31 3d 3d 31 22 0a 20 20  1 WHERE 1==1".  
33b0: 73 65 74 20 74 61 69 6c 20 22 20 2f 2a 20 41 20  set tail " /* A 
33c0: 63 6f 6d 6d 65 6e 74 20 74 6f 20 74 61 6b 65 20  comment to take 
33d0: 75 70 20 73 70 61 63 65 20 69 6e 20 6f 72 64 65  up space in orde
33e0: 72 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 73 74  r to make the st
33f0: 72 69 6e 67 5c 0a 20 20 20 20 20 20 20 20 20 20  ring\.          
3400: 20 20 20 20 20 20 6c 6f 6e 67 65 72 20 77 69 74        longer wit
3410: 68 6f 75 74 20 69 6e 63 72 65 61 73 69 6e 67 20  hout increasing 
3420: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 64  the expression d
3430: 65 70 74 68 20 2a 2f 5c 0a 20 20 20 20 20 20 20  epth */\.       
3440: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 31           AND   1
3450: 20 20 3d 3d 20 20 31 22 0a 20 20 73 65 74 20 4e    ==  1".  set N
3460: 20 5b 65 78 70 72 20 7b 28 35 30 30 30 30 20 2f   [expr {(50000 /
3470: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length 
3480: 24 74 61 69 6c 5d 29 2b 31 7d 5d 0a 20 20 61 70  $tail])+1}].  ap
3490: 70 65 6e 64 20 73 71 6c 20 5b 73 74 72 69 6e 67  pend sql [string
34a0: 20 72 65 70 65 61 74 20 24 74 61 69 6c 20 24 4e   repeat $tail $N
34b0: 5d 0a 20 20 63 61 74 63 68 73 71 6c 20 24 73 71  ].  catchsql $sq
34c0: 6c 0a 7d 20 7b 31 20 7b 73 74 72 69 6e 67 20 6f  l.} {1 {string o
34d0: 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 7d 7d  r blob too big}}
34e0: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
34f0: 74 73 31 2d 36 2e 33 20 7b 0a 20 20 73 71 6c 69  ts1-6.3 {.  sqli
3500: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
3510: 49 54 45 5f 4c 49 4d 49 54 5f 53 51 4c 5f 4c 45  ITE_LIMIT_SQL_LE
3520: 4e 47 54 48 20 35 30 30 30 30 0a 20 20 73 65 74  NGTH 50000.  set
3530: 20 73 71 6c 20 22 53 45 4c 45 43 54 20 31 20 57   sql "SELECT 1 W
3540: 48 45 52 45 20 31 3d 3d 31 22 0a 20 20 73 65 74  HERE 1==1".  set
3550: 20 74 61 69 6c 20 22 20 2f 2a 20 41 20 63 6f 6d   tail " /* A com
3560: 6d 65 6e 74 20 74 6f 20 74 61 6b 65 20 75 70 20  ment to take up 
3570: 73 70 61 63 65 20 69 6e 20 6f 72 64 65 72 20 74  space in order t
3580: 6f 20 6d 61 6b 65 20 74 68 65 20 73 74 72 69 6e  o make the strin
3590: 67 5c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g\.             
35a0: 20 20 20 6c 6f 6e 67 65 72 20 77 69 74 68 6f 75     longer withou
35b0: 74 20 69 6e 63 72 65 61 73 69 6e 67 20 74 68 65  t increasing the
35c0: 20 65 78 70 72 65 73 73 69 6f 6e 20 64 65 70 74   expression dept
35d0: 68 20 2a 2f 5c 0a 20 20 20 20 20 20 20 20 20 20  h */\.          
35e0: 20 20 20 20 20 20 41 4e 44 20 20 20 31 20 20 3d        AND   1  =
35f0: 3d 20 20 31 22 0a 20 20 73 65 74 20 4e 20 5b 65  =  1".  set N [e
3600: 78 70 72 20 7b 28 35 30 30 30 30 20 2f 20 5b 73  xpr {(50000 / [s
3610: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74 61  tring length $ta
3620: 69 6c 5d 29 2b 31 7d 5d 0a 20 20 61 70 70 65 6e  il])+1}].  appen
3630: 64 20 73 71 6c 20 5b 73 74 72 69 6e 67 20 72 65  d sql [string re
3640: 70 65 61 74 20 24 74 61 69 6c 20 24 4e 5d 0a 20  peat $tail $N]. 
3650: 20 73 65 74 20 6e 62 79 74 65 73 20 5b 73 74 72   set nbytes [str
3660: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 71 6c 5d  ing length $sql]
3670: 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 7b 20  .  append sql { 
3680: 41 4e 44 20 30 7d 0a 20 20 73 65 74 20 72 63 20  AND 0}.  set rc 
3690: 5b 63 61 74 63 68 20 7b 73 71 6c 69 74 65 33 5f  [catch {sqlite3_
36a0: 70 72 65 70 61 72 65 20 64 62 20 24 73 71 6c 20  prepare db $sql 
36b0: 24 6e 62 79 74 65 73 20 54 41 49 4c 7d 20 53 54  $nbytes TAIL} ST
36c0: 4d 54 5d 0a 20 20 6c 61 70 70 65 6e 64 20 72 63  MT].  lappend rc
36d0: 20 24 53 54 4d 54 0a 7d 20 7b 31 20 7b 28 31 38   $STMT.} {1 {(18
36e0: 29 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 6f 20  ) statement too 
36f0: 6c 6f 6e 67 7d 7d 0a 64 6f 5f 74 65 73 74 20 73  long}}.do_test s
3700: 71 6c 6c 69 6d 69 74 73 31 2d 36 2e 34 20 7b 0a  qllimits1-6.4 {.
3710: 20 20 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67    sqlite3_errmsg
3720: 20 64 62 0a 7d 20 7b 73 74 61 74 65 6d 65 6e 74   db.} {statement
3730: 20 74 6f 6f 20 6c 6f 6e 67 7d 0a 0a 23 2d 2d 2d   too long}..#---
3740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3780: 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73  -.# Test cases s
3790: 71 6c 6c 69 6d 69 74 73 31 2d 37 2e 2a 20 74 65  qllimits1-7.* te
37a0: 73 74 20 74 68 61 74 20 74 68 65 20 6c 69 6d 69  st that the limi
37b0: 74 20 73 65 74 20 75 73 69 6e 67 20 74 68 65 0a  t set using the.
37c0: 23 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74  # max_page_count
37d0: 20 70 72 61 67 6d 61 2e 0a 23 0a 64 6f 5f 74 65   pragma..#.do_te
37e0: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e  st sqllimits1-7.
37f0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
3800: 20 20 20 20 50 52 41 47 4d 41 20 6d 61 78 5f 70      PRAGMA max_p
3810: 61 67 65 5f 63 6f 75 6e 74 20 3d 20 31 30 30 30  age_count = 1000
3820: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 30 7d 0a 64  ;.  }.} {1000}.d
3830: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
3840: 31 2d 37 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  1-7.2 {.  execsq
3850: 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  l { CREATE TABLE
3860: 20 74 72 69 67 20 28 61 20 49 4e 54 45 47 45 52   trig (a INTEGER
3870: 2c 20 62 20 49 4e 54 45 47 45 52 29 3b 20 7d 0a  , b INTEGER); }.
3880: 0a 20 20 23 20 53 65 74 20 75 70 20 61 20 74 72  .  # Set up a tr
3890: 65 65 20 6f 66 20 74 72 69 67 67 65 72 73 20 74  ee of triggers t
38a0: 6f 20 66 69 72 65 20 77 68 65 6e 20 61 20 72 6f  o fire when a ro
38b0: 77 20 69 73 20 69 6e 73 65 72 74 65 64 0a 20 20  w is inserted.  
38c0: 23 20 69 6e 74 6f 20 74 61 62 6c 65 20 22 74 72  # into table "tr
38d0: 69 67 22 2e 0a 20 20 23 0a 20 20 23 20 49 4e 53  ig"..  #.  # INS
38e0: 45 52 54 20 2d 3e 20 69 6e 73 65 72 74 5f 62 20  ERT -> insert_b 
38f0: 2d 3e 20 75 70 64 61 74 65 5f 62 20 2d 3e 20 69  -> update_b -> i
3900: 6e 73 65 72 74 5f 61 20 2d 3e 20 75 70 64 61 74  nsert_a -> updat
3910: 65 5f 61 20 20 20 20 20 20 28 63 68 61 69 6e 20  e_a      (chain 
3920: 31 29 0a 20 20 23 20 20 20 20 20 20 20 20 20 20  1).  #          
3930: 20 20 20 20 20 20 20 20 20 20 2d 3e 20 75 70 64            -> upd
3940: 61 74 65 5f 61 20 2d 3e 20 69 6e 73 65 72 74 5f  ate_a -> insert_
3950: 61 20 2d 3e 20 75 70 64 61 74 65 5f 62 20 20 20  a -> update_b   
3960: 20 20 20 28 63 68 61 69 6e 20 32 29 0a 20 20 23     (chain 2).  #
3970: 20 20 20 20 20 20 20 20 2d 3e 20 69 6e 73 65 72          -> inser
3980: 74 5f 61 20 2d 3e 20 75 70 64 61 74 65 5f 62 20  t_a -> update_b 
3990: 2d 3e 20 69 6e 73 65 72 74 5f 62 20 2d 3e 20 75  -> insert_b -> u
39a0: 70 64 61 74 65 5f 61 20 20 20 20 20 20 28 63 68  pdate_a      (ch
39b0: 61 69 6e 20 33 29 0a 20 20 23 20 20 20 20 20 20  ain 3).  #      
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e                ->
39d0: 20 75 70 64 61 74 65 5f 61 20 2d 3e 20 69 6e 73   update_a -> ins
39e0: 65 72 74 5f 62 20 2d 3e 20 75 70 64 61 74 65 5f  ert_b -> update_
39f0: 62 20 20 20 20 20 20 28 63 68 61 69 6e 20 34 29  b      (chain 4)
3a00: 0a 20 20 23 0a 20 20 23 20 54 61 62 6c 65 20 73  .  #.  # Table s
3a10: 74 61 72 74 73 20 77 69 74 68 20 4e 20 72 6f 77  tarts with N row
3a20: 73 2e 0a 20 20 23 0a 20 20 23 20 20 20 43 68 61  s..  #.  #   Cha
3a30: 69 6e 20 31 3a 20 69 6e 73 65 72 74 5f 62 20 28  in 1: insert_b (
3a40: 75 70 64 61 74 65 20 4e 20 72 6f 77 73 29 0a 20  update N rows). 
3a50: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
3a60: 2d 3e 20 75 70 64 61 74 65 5f 62 20 28 69 6e 73  -> update_b (ins
3a70: 65 72 74 20 31 20 72 6f 77 73 29 0a 20 20 23 20  ert 1 rows).  # 
3a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d                 -
3a90: 3e 20 69 6e 73 65 72 74 5f 61 20 28 75 70 64 61  > insert_a (upda
3aa0: 74 65 20 4e 20 72 6f 77 73 29 0a 20 20 23 20 20  te N rows).  #  
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 2d 3e 20 75 70 64 61 74 65 5f 61 20 28 69 6e 73  -> update_a (ins
3ad0: 65 72 74 20 31 20 72 6f 77 73 29 0a 20 20 23 0a  ert 1 rows).  #.
3ae0: 20 20 23 20 63 68 61 69 6e 73 20 32 2c 20 33 20    # chains 2, 3 
3af0: 61 6e 64 20 34 20 61 72 65 20 73 69 6d 69 6c 61  and 4 are simila
3b00: 72 2e 20 45 61 63 68 20 69 6e 73 65 72 74 73 20  r. Each inserts 
3b10: 6d 6f 72 65 20 74 68 61 6e 20 4e 5e 32 20 72 6f  more than N^2 ro
3b20: 77 73 2c 20 77 68 65 72 65 0a 20 20 23 20 4e 20  ws, where.  # N 
3b30: 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
3b40: 20 72 6f 77 73 20 61 74 20 74 68 65 20 63 6f 6e   rows at the con
3b50: 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 20 70  clusion of the p
3b60: 72 65 76 69 6f 75 73 20 63 68 61 69 6e 2e 0a 20  revious chain.. 
3b70: 20 23 0a 20 20 23 20 54 68 65 72 65 66 6f 72 65   #.  # Therefore
3b80: 2c 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 65 72  , a single inser
3b90: 74 20 61 64 64 73 20 28 4e 5e 31 36 20 70 6c 75  t adds (N^16 plu
3ba0: 73 20 73 6f 6d 65 29 20 72 6f 77 73 20 74 6f 20  s some) rows to 
3bb0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
3bc0: 23 20 41 20 72 65 61 6c 6c 79 20 6c 6f 6e 67 20  # A really long 
3bd0: 6c 6f 6f 70 2e 2e 2e 0a 20 20 23 20 20 20 20 20  loop....  #     
3be0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3bf0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
3c00: 75 70 64 61 74 65 5f 62 20 42 45 46 4f 52 45 20  update_b BEFORE 
3c10: 55 50 44 41 54 45 20 4f 4e 20 74 72 69 67 0a 20  UPDATE ON trig. 
3c20: 20 20 20 20 20 46 4f 52 20 45 41 43 48 20 52 4f       FOR EACH RO
3c30: 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20 20  W BEGIN.        
3c40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 72 69 67  INSERT INTO trig
3c50: 20 56 41 4c 55 45 53 20 28 36 35 2c 20 27 75 70   VALUES (65, 'up
3c60: 64 61 74 65 5f 62 27 29 3b 0a 20 20 20 20 20 20  date_b');.      
3c70: 45 4e 44 3b 0a 0a 20 20 20 20 43 52 45 41 54 45  END;..    CREATE
3c80: 20 54 52 49 47 47 45 52 20 75 70 64 61 74 65 5f   TRIGGER update_
3c90: 61 20 41 46 54 45 52 20 55 50 44 41 54 45 20 4f  a AFTER UPDATE O
3ca0: 4e 20 74 72 69 67 0a 20 20 20 20 20 20 46 4f 52  N trig.      FOR
3cb0: 20 45 41 43 48 20 52 4f 57 20 42 45 47 49 4e 0a   EACH ROW BEGIN.
3cc0: 20 20 20 20 20 20 20 20 49 4e 53 45 52 54 20 49          INSERT I
3cd0: 4e 54 4f 20 74 72 69 67 20 56 41 4c 55 45 53 20  NTO trig VALUES 
3ce0: 28 36 35 2c 20 27 75 70 64 61 74 65 5f 61 27 29  (65, 'update_a')
3cf0: 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 0a 20 20  ;.      END;..  
3d00: 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52    CREATE TRIGGER
3d10: 20 69 6e 73 65 72 74 5f 62 20 42 45 46 4f 52 45   insert_b BEFORE
3d20: 20 49 4e 53 45 52 54 20 4f 4e 20 74 72 69 67 0a   INSERT ON trig.
3d30: 20 20 20 20 20 20 46 4f 52 20 45 41 43 48 20 52        FOR EACH R
3d40: 4f 57 20 42 45 47 49 4e 0a 20 20 20 20 20 20 20  OW BEGIN.       
3d50: 20 55 50 44 41 54 45 20 74 72 69 67 20 53 45 54   UPDATE trig SET
3d60: 20 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 45 4e   a = 1;.      EN
3d70: 44 3b 0a 0a 20 20 20 20 43 52 45 41 54 45 20 54  D;..    CREATE T
3d80: 52 49 47 47 45 52 20 69 6e 73 65 72 74 5f 61 20  RIGGER insert_a 
3d90: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
3da0: 74 72 69 67 0a 20 20 20 20 20 20 46 4f 52 20 45  trig.      FOR E
3db0: 41 43 48 20 52 4f 57 20 42 45 47 49 4e 0a 20 20  ACH ROW BEGIN.  
3dc0: 20 20 20 20 20 20 55 50 44 41 54 45 20 74 72 69        UPDATE tri
3dd0: 67 20 53 45 54 20 61 20 3d 20 31 3b 0a 20 20 20  g SET a = 1;.   
3de0: 20 20 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7d     END;.  }.} {}
3df0: 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d  ..do_test sqllim
3e00: 69 74 73 31 2d 37 2e 33 20 7b 0a 20 20 65 78 65  its1-7.3 {.  exe
3e10: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
3e20: 54 20 49 4e 54 4f 20 74 72 69 67 20 56 41 4c 55  T INTO trig VALU
3e30: 45 53 20 28 31 2c 31 29 3b 20 0a 20 20 7d 0a 7d  ES (1,1); .  }.}
3e40: 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c   {}..do_test sql
3e50: 6c 69 6d 69 74 73 31 2d 37 2e 34 20 7b 0a 20 20  limits1-7.4 {.  
3e60: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
3e70: 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
3e80: 4f 4d 20 74 72 69 67 3b 0a 20 20 7d 0a 7d 20 7b  OM trig;.  }.} {
3e90: 37 7d 0a 0a 23 20 54 68 69 73 20 74 72 69 65 73  7}..# This tries
3ea0: 20 74 6f 20 69 6e 73 65 72 74 20 73 6f 20 6d 61   to insert so ma
3eb0: 6e 79 20 72 6f 77 73 20 69 74 20 66 69 6c 6c 73  ny rows it fills
3ec0: 20 75 70 20 74 68 65 20 64 61 74 61 62 61 73 65   up the database
3ed0: 20 28 6c 69 6d 69 74 65 64 0a 23 20 74 6f 20 31   (limited.# to 1
3ee0: 4d 42 2c 20 73 6f 20 6e 6f 74 20 74 68 61 74 20  MB, so not that 
3ef0: 6e 6f 74 65 77 6f 72 74 68 79 20 61 6e 20 61 63  noteworthy an ac
3f00: 68 69 65 76 65 6d 65 6e 74 29 2e 0a 23 0a 64 6f  hievement)..#.do
3f10: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
3f20: 2d 37 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71  -7.5 {.  catchsq
3f30: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
3f40: 4e 54 4f 20 74 72 69 67 20 56 41 4c 55 45 53 20  NTO trig VALUES 
3f50: 28 31 2c 31 30 29 3b 0a 20 20 7d 0a 7d 20 7b 31  (1,10);.  }.} {1
3f60: 20 7b 64 61 74 61 62 61 73 65 20 6f 72 20 64 69   {database or di
3f70: 73 6b 20 69 73 20 66 75 6c 6c 7d 7d 0a 0a 64 6f  sk is full}}..do
3f80: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
3f90: 2d 37 2e 36 20 7b 0a 20 20 63 61 74 63 68 73 71  -7.6 {.  catchsq
3fa0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 43  l {.    SELECT C
3fb0: 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 74 72 69  OUNT(*) FROM tri
3fc0: 67 3b 0a 20 20 7d 0a 7d 20 7b 30 20 37 7d 0a 0a  g;.  }.} {0 7}..
3fd0: 23 20 4e 6f 77 20 63 68 65 63 6b 20 74 68 65 20  # Now check the 
3fe0: 72 65 73 70 6f 6e 73 65 20 6f 66 20 74 68 65 20  response of the 
3ff0: 6c 69 62 72 61 72 79 20 74 6f 20 6f 70 65 6e 69  library to openi
4000: 6e 67 20 61 20 66 69 6c 65 20 6c 61 72 67 65 72  ng a file larger
4010: 20 74 68 61 6e 0a 23 20 74 68 65 20 63 75 72 72   than.# the curr
4020: 65 6e 74 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75  ent max_page_cou
4030: 6e 74 20 76 61 6c 75 65 2e 20 54 68 65 20 72 65  nt value. The re
4040: 73 70 6f 6e 73 65 20 69 73 20 74 6f 20 63 68 61  sponse is to cha
4050: 6e 67 65 20 74 68 65 0a 23 20 69 6e 74 65 72 6e  nge the.# intern
4060: 61 6c 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  al max_page_coun
4070: 74 20 76 61 6c 75 65 20 74 6f 20 6d 61 74 63 68  t value to match
4080: 20 74 68 65 20 61 63 74 75 61 6c 20 73 69 7a 65   the actual size
4090: 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 69 66   of the file..if
40a0: 20 7b 5b 64 62 20 65 76 61 6c 20 7b 50 52 41 47   {[db eval {PRAG
40b0: 4d 41 20 61 75 74 6f 5f 76 61 63 75 75 6d 7d 5d  MA auto_vacuum}]
40c0: 7d 20 7b 0a 20 20 20 73 65 74 20 66 73 69 7a 65  } {.   set fsize
40d0: 20 31 37 30 30 0a 7d 20 65 6c 73 65 20 7b 0a 20   1700.} else {. 
40e0: 20 20 73 65 74 20 66 73 69 7a 65 20 31 36 39 31    set fsize 1691
40f0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .}.do_test sqlli
4100: 6d 69 74 73 31 2d 37 2e 37 2e 31 20 7b 0a 20 20  mits1-7.7.1 {.  
4110: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52  execsql {.    PR
4120: 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f  AGMA max_page_co
4130: 75 6e 74 20 3d 20 31 30 30 30 30 30 30 3b 0a 20  unt = 1000000;. 
4140: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4150: 61 62 63 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20  abc(a, b, c);.  
4160: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
4170: 63 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33  c VALUES(1, 2, 3
4180: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4190: 54 4f 20 61 62 63 20 53 45 4c 45 43 54 20 61 7c  TO abc SELECT a|
41a0: 7c 62 7c 7c 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20  |b||c, b||c||a, 
41b0: 63 7c 7c 61 7c 7c 62 20 46 52 4f 4d 20 61 62 63  c||a||b FROM abc
41c0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
41d0: 4f 20 61 62 63 20 53 45 4c 45 43 54 20 61 7c 7c  O abc SELECT a||
41e0: 62 7c 7c 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63  b||c, b||c||a, c
41f0: 7c 7c 61 7c 7c 62 20 46 52 4f 4d 20 61 62 63 3b  ||a||b FROM abc;
4200: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
4210: 20 61 62 63 20 53 45 4c 45 43 54 20 61 7c 7c 62   abc SELECT a||b
4220: 7c 7c 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c  ||c, b||c||a, c|
4230: 7c 61 7c 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a  |a||b FROM abc;.
4240: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
4250: 61 62 63 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c  abc SELECT a||b|
4260: 7c 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c  |c, b||c||a, c||
4270: 61 7c 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20  a||b FROM abc;. 
4280: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61     INSERT INTO a
4290: 62 63 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c  bc SELECT a||b||
42a0: 63 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61  c, b||c||a, c||a
42b0: 7c 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20  ||b FROM abc;.  
42c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62    INSERT INTO ab
42d0: 63 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63  c SELECT a||b||c
42e0: 2c 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c  , b||c||a, c||a|
42f0: 7c 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20  |b FROM abc;.   
4300: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63   INSERT INTO abc
4310: 20 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c   SELECT a||b||c,
4320: 20 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c   b||c||a, c||a||
4330: 62 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20  b FROM abc;.    
4340: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20  INSERT INTO abc 
4350: 53 45 4c 45 43 54 20 61 7c 7c 62 7c 7c 63 2c 20  SELECT a||b||c, 
4360: 62 7c 7c 63 7c 7c 61 2c 20 63 7c 7c 61 7c 7c 62  b||c||a, c||a||b
4370: 20 46 52 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49   FROM abc;.    I
4380: 4e 53 45 52 54 20 49 4e 54 4f 20 61 62 63 20 53  NSERT INTO abc S
4390: 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52  ELECT a, b, c FR
43a0: 4f 4d 20 61 62 63 3b 0a 20 20 20 20 49 4e 53 45  OM abc;.    INSE
43b0: 52 54 20 49 4e 54 4f 20 61 62 63 20 53 45 4c 45  RT INTO abc SELE
43c0: 43 54 20 62 2c 20 61 2c 20 63 20 46 52 4f 4d 20  CT b, a, c FROM 
43d0: 61 62 63 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  abc;.    INSERT 
43e0: 49 4e 54 4f 20 61 62 63 20 53 45 4c 45 43 54 20  INTO abc SELECT 
43f0: 63 2c 20 62 2c 20 61 20 46 52 4f 4d 20 61 62 63  c, b, a FROM abc
4400: 3b 0a 20 20 7d 0a 20 20 65 78 70 72 20 5b 66 69  ;.  }.  expr [fi
4410: 6c 65 20 73 69 7a 65 20 74 65 73 74 2e 64 62 5d  le size test.db]
4420: 20 2f 20 31 30 32 34 0a 7d 20 24 66 73 69 7a 65   / 1024.} $fsize
4430: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
4440: 74 73 31 2d 37 2e 37 2e 32 20 7b 0a 20 20 64 62  ts1-7.7.2 {.  db
4450: 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33   close.  sqlite3
4460: 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 65 78   db test.db.  ex
4470: 65 63 73 71 6c 20 7b 0a 20 20 20 20 50 52 41 47  ecsql {.    PRAG
4480: 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  MA max_page_coun
4490: 74 20 3d 20 31 30 30 30 3b 0a 20 20 7d 0a 20 20  t = 1000;.  }.  
44a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
44b0: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
44c0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
44d0: 3b 0a 20 20 7d 0a 7d 20 7b 36 7d 0a 64 6f 5f 74  ;.  }.} {6}.do_t
44e0: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37  est sqllimits1-7
44f0: 2e 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .7.3 {.  execsql
4500: 20 7b 0a 20 20 20 20 50 52 41 47 4d 41 20 6d 61   {.    PRAGMA ma
4510: 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3b 0a 20 20  x_page_count;.  
4520: 7d 0a 7d 20 24 66 73 69 7a 65 0a 64 6f 5f 74 65  }.} $fsize.do_te
4530: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 37 2e  st sqllimits1-7.
4540: 37 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.4 {.  execsql 
4550: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
4560: 20 61 62 63 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a   abc;.  }.} {}..
4570: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
4580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45b0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
45c0: 65 73 20 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e  es sqllimits1-8.
45d0: 2a 20 74 65 73 74 20 74 68 65 20 53 51 4c 49 54  * test the SQLIT
45e0: 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 20 6c 69 6d  E_MAX_COLUMN lim
45f0: 69 74 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45  it..#.# EVIDENCE
4600: 2d 4f 46 3a 20 52 2d 34 33 39 39 36 2d 32 39 34  -OF: R-43996-294
4610: 37 31 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  71 SQLITE_LIMIT_
4620: 43 4f 4c 55 4d 4e 20 54 68 65 20 6d 61 78 69 6d  COLUMN The maxim
4630: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 23 20 63  um number of.# c
4640: 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c  olumns in a tabl
4650: 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 72 20  e definition or 
4660: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
4670: 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72  t of a SELECT or
4680: 20 74 68 65 0a 23 20 6d 61 78 69 6d 75 6d 20 6e   the.# maximum n
4690: 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
46a0: 20 69 6e 20 61 6e 20 69 6e 64 65 78 20 6f 72 20   in an index or 
46b0: 69 6e 20 61 6e 20 4f 52 44 45 52 20 42 59 20 6f  in an ORDER BY o
46c0: 72 20 47 52 4f 55 50 20 42 59 0a 23 20 63 6c 61  r GROUP BY.# cla
46d0: 75 73 65 2e 0a 23 0a 73 65 74 20 53 51 4c 49 54  use..#.set SQLIT
46e0: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 32  E_LIMIT_COLUMN 2
46f0: 30 30 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  00.sqlite3_limit
4700: 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54   db SQLITE_LIMIT
4710: 5f 43 4f 4c 55 4d 4e 20 24 53 51 4c 49 54 45 5f  _COLUMN $SQLITE_
4720: 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 0a 64 6f 5f  LIMIT_COLUMN.do_
4730: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
4740: 38 2e 31 20 7b 0a 20 20 23 20 43 6f 6c 75 6d 6e  8.1 {.  # Column
4750: 73 20 69 6e 20 61 20 74 61 62 6c 65 2e 0a 20 20  s in a table..  
4760: 73 65 74 20 63 6f 6c 73 20 5b 6c 69 73 74 5d 0a  set cols [list].
4770: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
4780: 7b 24 69 20 3c 3d 20 24 53 51 4c 49 54 45 5f 4c  {$i <= $SQLITE_L
4790: 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20 7b 69 6e  IMIT_COLUMN} {in
47a0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c 61 70 70  cr i} {.    lapp
47b0: 65 6e 64 20 63 6f 6c 73 20 22 63 24 69 22 0a 20  end cols "c$i". 
47c0: 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20 22 43   }.  catchsql "C
47d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 5b 6a  REATE TABLE t([j
47e0: 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 29 22 20 0a  oin $cols ,])" .
47f0: 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 63  } {1 {too many c
4800: 6f 6c 75 6d 6e 73 20 6f 6e 20 74 7d 7d 0a 0a 64  olumns on t}}..d
4810: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
4820: 31 2d 38 2e 32 20 7b 0a 20 20 23 20 43 6f 6c 75  1-8.2 {.  # Colu
4830: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
4840: 74 2d 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43  t-set of a SELEC
4850: 54 2e 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c  T..  set cols [l
4860: 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20  ist].  for {set 
4870: 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51 4c  i 0} {$i <= $SQL
4880: 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e  ITE_LIMIT_COLUMN
4890: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
48a0: 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20 22 73   lappend cols "s
48b0: 71 6c 20 41 53 20 73 71 6c 24 69 22 0a 20 20 7d  ql AS sql$i".  }
48c0: 0a 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c  .  catchsql "SEL
48d0: 45 43 54 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20  ECT [join $cols 
48e0: 2c 5d 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  ,] FROM sqlite_m
48f0: 61 73 74 65 72 22 0a 7d 20 7b 31 20 7b 74 6f 6f  aster".} {1 {too
4900: 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 69 6e   many columns in
4910: 20 72 65 73 75 6c 74 20 73 65 74 7d 7d 0a 0a 64   result set}}..d
4920: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
4930: 31 2d 38 2e 33 20 7b 0a 20 20 23 20 43 6f 6c 75  1-8.3 {.  # Colu
4940: 6d 6e 73 20 69 6e 20 74 68 65 20 72 65 73 75 6c  mns in the resul
4950: 74 2d 73 65 74 20 6f 66 20 61 20 73 75 62 2d 53  t-set of a sub-S
4960: 45 4c 45 43 54 2e 0a 20 20 73 65 74 20 63 6f 6c  ELECT..  set col
4970: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b  s [list].  for {
4980: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20  set i 0} {$i <= 
4990: 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f  $SQLITE_LIMIT_CO
49a0: 4c 55 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b  LUMN} {incr i} {
49b0: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6c  .    lappend col
49c0: 73 20 22 73 71 6c 20 41 53 20 73 71 6c 24 69 22  s "sql AS sql$i"
49d0: 0a 20 20 7d 0a 20 20 63 61 74 63 68 73 71 6c 20  .  }.  catchsql 
49e0: 22 53 45 4c 45 43 54 20 73 71 6c 34 20 46 52 4f  "SELECT sql4 FRO
49f0: 4d 20 28 53 45 4c 45 43 54 20 5b 6a 6f 69 6e 20  M (SELECT [join 
4a00: 24 63 6f 6c 73 20 2c 5d 20 46 52 4f 4d 20 73 71  $cols ,] FROM sq
4a10: 6c 69 74 65 5f 6d 61 73 74 65 72 29 22 0a 7d 20  lite_master)".} 
4a20: 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c  {1 {too many col
4a30: 75 6d 6e 73 20 69 6e 20 72 65 73 75 6c 74 20 73  umns in result s
4a40: 65 74 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71  et}}..do_test sq
4a50: 6c 6c 69 6d 69 74 73 31 2d 38 2e 34 20 7b 0a 20  llimits1-8.4 {. 
4a60: 20 23 20 43 6f 6c 75 6d 6e 73 20 69 6e 20 61 6e   # Columns in an
4a70: 20 69 6e 64 65 78 2e 0a 20 20 73 65 74 20 63 6f   index..  set co
4a80: 6c 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20  ls [list].  for 
4a90: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 3d  {set i 0} {$i <=
4aa0: 20 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43   $SQLITE_LIMIT_C
4ab0: 4f 4c 55 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d 20  OLUMN} {incr i} 
4ac0: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f  {.    lappend co
4ad0: 6c 73 20 63 0a 20 20 7d 0a 20 20 73 65 74 20 73  ls c.  }.  set s
4ae0: 71 6c 31 20 22 43 52 45 41 54 45 20 54 41 42 4c  ql1 "CREATE TABL
4af0: 45 20 74 31 28 63 29 3b 22 0a 20 20 73 65 74 20  E t1(c);".  set 
4b00: 73 71 6c 32 20 22 43 52 45 41 54 45 20 49 4e 44  sql2 "CREATE IND
4b10: 45 58 20 69 31 20 4f 4e 20 74 31 28 5b 6a 6f 69  EX i1 ON t1([joi
4b20: 6e 20 24 63 6f 6c 73 20 2c 5d 29 3b 22 0a 20 20  n $cols ,]);".  
4b30: 63 61 74 63 68 73 71 6c 20 22 24 73 71 6c 31 20  catchsql "$sql1 
4b40: 3b 20 24 73 71 6c 32 22 0a 7d 20 7b 31 20 7b 74  ; $sql2".} {1 {t
4b50: 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20  oo many columns 
4b60: 69 6e 20 69 6e 64 65 78 7d 7d 0a 0a 64 6f 5f 74  in index}}..do_t
4b70: 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 38  est sqllimits1-8
4b80: 2e 35 20 7b 0a 20 20 23 20 43 6f 6c 75 6d 6e 73  .5 {.  # Columns
4b90: 20 69 6e 20 61 20 47 52 4f 55 50 20 42 59 20 63   in a GROUP BY c
4ba0: 6c 61 75 73 65 2e 0a 20 20 63 61 74 63 68 73 71  lause..  catchsq
4bb0: 6c 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  l "SELECT * FROM
4bc0: 20 74 31 20 47 52 4f 55 50 20 42 59 20 5b 6a 6f   t1 GROUP BY [jo
4bd0: 69 6e 20 24 63 6f 6c 73 20 2c 5d 22 0a 7d 20 7b  in $cols ,]".} {
4be0: 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 74 65 72 6d  1 {too many term
4bf0: 73 20 69 6e 20 47 52 4f 55 50 20 42 59 20 63 6c  s in GROUP BY cl
4c00: 61 75 73 65 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  ause}}..do_test 
4c10: 73 71 6c 6c 69 6d 69 74 73 31 2d 38 2e 36 20 7b  sqllimits1-8.6 {
4c20: 0a 20 20 23 20 43 6f 6c 75 6d 6e 73 20 69 6e 20  .  # Columns in 
4c30: 61 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  an ORDER BY clau
4c40: 73 65 2e 0a 20 20 63 61 74 63 68 73 71 6c 20 22  se..  catchsql "
4c50: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
4c60: 20 4f 52 44 45 52 20 42 59 20 5b 6a 6f 69 6e 20   ORDER BY [join 
4c70: 24 63 6f 6c 73 20 2c 5d 22 0a 7d 20 7b 31 20 7b  $cols ,]".} {1 {
4c80: 74 6f 6f 20 6d 61 6e 79 20 74 65 72 6d 73 20 69  too many terms i
4c90: 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  n ORDER BY claus
4ca0: 65 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71 6c  e}}..do_test sql
4cb0: 6c 69 6d 69 74 73 31 2d 38 2e 37 20 7b 0a 20 20  limits1-8.7 {.  
4cc0: 23 20 41 73 73 69 67 6e 6d 65 6e 74 73 20 69 6e  # Assignments in
4cd0: 20 61 6e 20 55 50 44 41 54 45 20 73 74 61 74 65   an UPDATE state
4ce0: 6d 65 6e 74 2e 0a 20 20 73 65 74 20 63 6f 6c 73  ment..  set cols
4cf0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73   [list].  for {s
4d00: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24  et i 0} {$i <= $
4d10: 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c  SQLITE_LIMIT_COL
4d20: 55 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  UMN} {incr i} {.
4d30: 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73      lappend cols
4d40: 20 22 63 20 3d 20 31 22 0a 20 20 7d 0a 20 20 63   "c = 1".  }.  c
4d50: 61 74 63 68 73 71 6c 20 22 55 50 44 41 54 45 20  atchsql "UPDATE 
4d60: 74 31 20 53 45 54 20 5b 6a 6f 69 6e 20 24 63 6f  t1 SET [join $co
4d70: 6c 73 20 2c 5d 3b 22 0a 7d 20 7b 31 20 7b 74 6f  ls ,];".} {1 {to
4d80: 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 69  o many columns i
4d90: 6e 20 73 65 74 20 6c 69 73 74 7d 7d 0a 0a 64 6f  n set list}}..do
4da0: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
4db0: 2d 38 2e 38 20 7b 0a 20 20 23 20 43 6f 6c 75 6d  -8.8 {.  # Colum
4dc0: 6e 73 20 69 6e 20 61 20 76 69 65 77 20 64 65 66  ns in a view def
4dd0: 69 6e 69 74 69 6f 6e 3a 0a 20 20 73 65 74 20 63  inition:.  set c
4de0: 6f 6c 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72  ols [list].  for
4df0: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
4e00: 3d 20 24 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  = $SQLITE_LIMIT_
4e10: 43 4f 4c 55 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d  COLUMN} {incr i}
4e20: 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 63   {.    lappend c
4e30: 6f 6c 73 20 22 63 24 69 22 0a 20 20 7d 0a 20 20  ols "c$i".  }.  
4e40: 65 78 65 63 73 71 6c 20 22 43 52 45 41 54 45 20  execsql "CREATE 
4e50: 56 49 45 57 20 76 31 20 41 53 20 53 45 4c 45 43  VIEW v1 AS SELEC
4e60: 54 20 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d  T [join $cols ,]
4e70: 20 46 52 4f 4d 20 74 31 3b 22 0a 20 20 63 61 74   FROM t1;".  cat
4e80: 63 68 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20  chsql {SELECT * 
4e90: 46 52 4f 4d 20 76 31 7d 0a 7d 20 7b 31 20 7b 74  FROM v1}.} {1 {t
4ea0: 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20  oo many columns 
4eb0: 69 6e 20 72 65 73 75 6c 74 20 73 65 74 7d 7d 0a  in result set}}.
4ec0: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
4ed0: 74 73 31 2d 38 2e 39 20 7b 0a 20 20 23 20 43 6f  ts1-8.9 {.  # Co
4ee0: 6c 75 6d 6e 73 20 69 6e 20 61 20 76 69 65 77 20  lumns in a view 
4ef0: 64 65 66 69 6e 69 74 69 6f 6e 20 28 74 65 73 74  definition (test
4f00: 69 6e 67 20 2a 20 65 78 70 61 6e 73 69 6f 6e 29  ing * expansion)
4f10: 3a 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b 6c 69  :.  set cols [li
4f20: 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  st].  for {set i
4f30: 20 30 7d 20 7b 24 69 20 3c 20 24 53 51 4c 49 54   0} {$i < $SQLIT
4f40: 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 7d 20  E_LIMIT_COLUMN} 
4f50: 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 6c  {incr i} {.    l
4f60: 61 70 70 65 6e 64 20 63 6f 6c 73 20 22 63 24 69  append cols "c$i
4f70: 22 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c 20  ".  }.  execsql 
4f80: 7b 44 52 4f 50 20 56 49 45 57 20 49 46 20 45 58  {DROP VIEW IF EX
4f90: 49 53 54 53 20 76 31 7d 0a 20 20 63 61 74 63 68  ISTS v1}.  catch
4fa0: 73 71 6c 20 22 43 52 45 41 54 45 20 54 41 42 4c  sql "CREATE TABL
4fb0: 45 20 74 32 28 5b 6a 6f 69 6e 20 24 63 6f 6c 73  E t2([join $cols
4fc0: 20 2c 5d 29 22 0a 20 20 63 61 74 63 68 73 71 6c   ,])".  catchsql
4fd0: 20 22 43 52 45 41 54 45 20 56 49 45 57 20 76 31   "CREATE VIEW v1
4fe0: 20 41 53 20 53 45 4c 45 43 54 20 2a 2c 20 63 31   AS SELECT *, c1
4ff0: 20 41 53 20 6f 20 46 52 4f 4d 20 74 32 3b 22 0a   AS o FROM t2;".
5000: 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c 45    catchsql "SELE
5010: 43 54 20 2a 20 46 52 4f 4d 20 76 31 22 0a 7d 20  CT * FROM v1".} 
5020: 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c  {1 {too many col
5030: 75 6d 6e 73 20 69 6e 20 72 65 73 75 6c 74 20 73  umns in result s
5040: 65 74 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 71  et}}..do_test sq
5050: 6c 6c 69 6d 69 74 73 31 2d 38 2e 31 30 20 7b 0a  llimits1-8.10 {.
5060: 20 20 23 20 4f 52 44 45 52 20 42 59 20 63 6f 6c    # ORDER BY col
5070: 75 6d 6e 73 0a 20 20 73 65 74 20 63 6f 6c 73 20  umns.  set cols 
5080: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65  [list].  for {se
5090: 74 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53  t i 0} {$i <= $S
50a0: 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55  QLITE_LIMIT_COLU
50b0: 4d 4e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  MN} {incr i} {. 
50c0: 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20     lappend cols 
50d0: 63 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  c.  }.  set sql 
50e0: 22 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 74  "SELECT c FROM t
50f0: 31 20 4f 52 44 45 52 20 42 59 20 5b 6a 6f 69 6e  1 ORDER BY [join
5100: 20 24 63 6f 6c 73 20 2c 5d 22 0a 20 20 63 61 74   $cols ,]".  cat
5110: 63 68 73 71 6c 20 24 73 71 6c 0a 7d 20 7b 31 20  chsql $sql.} {1 
5120: 7b 74 6f 6f 20 6d 61 6e 79 20 74 65 72 6d 73 20  {too many terms 
5130: 69 6e 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  in ORDER BY clau
5140: 73 65 7d 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c  se}}.do_test sql
5150: 6c 69 6d 69 74 73 31 2d 38 2e 31 31 20 7b 0a 20  limits1-8.11 {. 
5160: 20 23 20 4f 52 44 45 52 20 42 59 20 63 6f 6c 75   # ORDER BY colu
5170: 6d 6e 73 0a 20 20 73 65 74 20 63 6f 6c 73 20 5b  mns.  set cols [
5180: 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74  list].  for {set
5190: 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 53 51   i 0} {$i <= $SQ
51a0: 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d  LITE_LIMIT_COLUM
51b0: 4e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  N} {incr i} {.  
51c0: 20 20 6c 61 70 70 65 6e 64 20 63 6f 6c 73 20 5b    lappend cols [
51d0: 65 78 70 72 20 7b 24 69 25 33 20 2b 20 31 7d 5d  expr {$i%3 + 1}]
51e0: 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20 22  .  }.  set sql "
51f0: 53 45 4c 45 43 54 20 63 2c 20 63 2b 31 2c 20 63  SELECT c, c+1, c
5200: 2b 32 20 46 52 4f 4d 20 74 31 20 55 4e 49 4f 4e  +2 FROM t1 UNION
5210: 20 53 45 4c 45 43 54 20 63 2d 31 2c 20 63 2d 32   SELECT c-1, c-2
5220: 2c 20 63 2d 33 20 46 52 4f 4d 20 74 31 22 0a 20  , c-3 FROM t1". 
5230: 20 61 70 70 65 6e 64 20 73 71 6c 20 22 20 4f 52   append sql " OR
5240: 44 45 52 20 42 59 20 5b 6a 6f 69 6e 20 24 63 6f  DER BY [join $co
5250: 6c 73 20 2c 5d 22 0a 20 20 63 61 74 63 68 73 71  ls ,]".  catchsq
5260: 6c 20 24 73 71 6c 0a 7d 20 7b 31 20 7b 74 6f 6f  l $sql.} {1 {too
5270: 20 6d 61 6e 79 20 74 65 72 6d 73 20 69 6e 20 4f   many terms in O
5280: 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 7d 7d  RDER BY clause}}
5290: 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ...#------------
52a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
52b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
52c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
52d0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 73 65  --------.# These
52e0: 20 74 65 73 74 73 20 2d 20 73 71 6c 6c 69 6d 69   tests - sqllimi
52f0: 74 73 31 2d 39 2e 2a 20 2d 20 74 65 73 74 20 74  ts1-9.* - test t
5300: 68 61 74 20 74 68 65 20 53 51 4c 49 54 45 5f 4c  hat the SQLITE_L
5310: 49 4d 49 54 5f 45 58 50 52 5f 44 45 50 54 48 0a  IMIT_EXPR_DEPTH.
5320: 23 20 6c 69 6d 69 74 20 69 73 20 65 6e 66 6f 72  # limit is enfor
5330: 63 65 64 2e 20 54 68 65 20 6c 69 6d 69 74 20 72  ced. The limit r
5340: 65 66 65 72 73 20 74 6f 20 74 68 65 20 6e 75 6d  efers to the num
5350: 62 65 72 20 6f 66 20 74 65 72 6d 73 20 69 6e 20  ber of terms in 
5360: 0a 23 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  .# the expressio
5370: 6e 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d  n..#.# EVIDENCE-
5380: 4f 46 3a 20 52 2d 31 32 37 32 33 2d 30 38 35 32  OF: R-12723-0852
5390: 36 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 45  6 SQLITE_LIMIT_E
53a0: 58 50 52 5f 44 45 50 54 48 20 54 68 65 20 6d 61  XPR_DEPTH The ma
53b0: 78 69 6d 75 6d 20 64 65 70 74 68 0a 23 20 6f 66  ximum depth.# of
53c0: 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
53d0: 6f 6e 20 61 6e 79 20 65 78 70 72 65 73 73 69 6f  on any expressio
53e0: 6e 2e 0a 23 0a 69 66 20 7b 24 53 51 4c 49 54 45  n..#.if {$SQLITE
53f0: 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3d  _MAX_EXPR_DEPTH=
5400: 3d 30 7d 20 7b 0a 20 20 70 75 74 73 20 2d 6e 6f  =0} {.  puts -no
5410: 6e 65 77 6c 69 6e 65 20 73 74 64 65 72 72 20 22  newline stderr "
5420: 57 41 52 4e 49 4e 47 3a 20 43 6f 6d 70 69 6c 65  WARNING: Compile
5430: 20 77 69 74 68 20 2d 44 53 51 4c 49 54 45 5f 4d   with -DSQLITE_M
5440: 41 58 5f 45 58 50 52 5f 44 45 50 54 48 20 74 6f  AX_EXPR_DEPTH to
5450: 20 72 75 6e 20 22 0a 20 20 70 75 74 73 20 73 74   run ".  puts st
5460: 64 65 72 72 20 22 74 65 73 74 73 20 73 71 6c 6c  derr "tests sqll
5470: 69 6d 69 74 73 31 2d 39 2e 58 22 0a 7d 20 65 6c  imits1-9.X".} el
5480: 73 65 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  se {.  do_test s
5490: 71 6c 6c 69 6d 69 74 73 31 2d 39 2e 31 20 7b 0a  qllimits1-9.1 {.
54a0: 20 20 20 20 73 65 74 20 6d 61 78 20 24 3a 3a 53      set max $::S
54b0: 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
54c0: 45 50 54 48 0a 20 20 20 20 73 65 74 20 65 78 70  EPTH.    set exp
54d0: 72 20 22 28 31 20 5b 73 74 72 69 6e 67 20 72 65  r "(1 [string re
54e0: 70 65 61 74 20 7b 41 4e 44 20 31 20 7d 20 24 6d  peat {AND 1 } $m
54f0: 61 78 5d 29 22 0a 20 20 20 20 63 61 74 63 68 73  ax])".    catchs
5500: 71 6c 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20  ql [subst {.    
5510: 20 20 53 45 4c 45 43 54 20 24 65 78 70 72 0a 20    SELECT $expr. 
5520: 20 20 20 7d 5d 0a 20 20 7d 20 22 31 20 7b 45 78     }].  } "1 {Ex
5530: 70 72 65 73 73 69 6f 6e 20 74 72 65 65 20 69 73  pression tree is
5540: 20 74 6f 6f 20 6c 61 72 67 65 20 28 6d 61 78 69   too large (maxi
5550: 6d 75 6d 20 64 65 70 74 68 20 24 3a 3a 53 51 4c  mum depth $::SQL
5560: 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
5570: 54 48 29 7d 22 0a 20 20 0a 20 20 23 20 41 74 74  TH)}".  .  # Att
5580: 65 6d 70 74 69 6e 67 20 74 6f 20 62 65 61 74 20  empting to beat 
5590: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 64  the expression d
55a0: 65 70 74 68 20 6c 69 6d 69 74 20 75 73 69 6e 67  epth limit using
55b0: 20 6e 65 73 74 65 64 20 53 45 4c 45 43 54 0a 20   nested SELECT. 
55c0: 20 23 20 71 75 65 72 69 65 73 20 63 61 75 73 65   # queries cause
55d0: 73 20 61 20 70 61 72 73 65 72 20 73 74 61 63 6b  s a parser stack
55e0: 20 6f 76 65 72 66 6c 6f 77 2e 20 0a 20 20 64 6f   overflow. .  do
55f0: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
5600: 2d 39 2e 32 20 7b 0a 20 20 20 20 73 65 74 20 6d  -9.2 {.    set m
5610: 61 78 20 24 3a 3a 53 51 4c 49 54 45 5f 4d 41 58  ax $::SQLITE_MAX
5620: 5f 45 58 50 52 5f 44 45 50 54 48 0a 20 20 20 20  _EXPR_DEPTH.    
5630: 73 65 74 20 65 78 70 72 20 22 53 45 4c 45 43 54  set expr "SELECT
5640: 20 31 22 0a 20 20 20 20 66 6f 72 20 7b 73 65 74   1".    for {set
5650: 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20 24 6d 61   i 0} {$i <= $ma
5660: 78 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  x} {incr i} {.  
5670: 20 20 20 20 73 65 74 20 65 78 70 72 20 22 53 45      set expr "SE
5680: 4c 45 43 54 20 28 24 65 78 70 72 29 22 0a 20 20  LECT ($expr)".  
5690: 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c    }.    catchsql
56a0: 20 5b 73 75 62 73 74 20 7b 20 24 65 78 70 72 20   [subst { $expr 
56b0: 7d 5d 0a 20 20 7d 20 22 31 20 7b 70 61 72 73 65  }].  } "1 {parse
56c0: 72 20 73 74 61 63 6b 20 6f 76 65 72 66 6c 6f 77  r stack overflow
56d0: 7d 22 0a 20 20 0a 69 66 20 30 20 7b 20 20 0a 20  }".  .if 0 {  . 
56e0: 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69   do_test sqllimi
56f0: 74 73 31 2d 39 2e 33 20 7b 0a 20 20 20 20 65 78  ts1-9.3 {.    ex
5700: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 50 52  ecsql {.      PR
5710: 41 47 4d 41 20 6d 61 78 5f 70 61 67 65 5f 63 6f  AGMA max_page_co
5720: 75 6e 74 20 3d 20 31 30 30 30 30 30 30 3b 20 20  unt = 1000000;  
5730: 2d 2d 20 31 20 47 42 0a 20 20 20 20 20 20 43 52  -- 1 GB.      CR
5740: 45 41 54 45 20 54 41 42 4c 45 20 76 30 28 61 29  EATE TABLE v0(a)
5750: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
5760: 4e 54 4f 20 76 30 20 56 41 4c 55 45 53 28 31 29  NTO v0 VALUES(1)
5770: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 20 74  ;.    }.    db t
5780: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 20 20 20  ransaction {.   
5790: 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d     for {set i 1}
57a0: 20 7b 24 69 20 3c 20 32 30 30 7d 20 7b 69 6e 63   {$i < 200} {inc
57b0: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 20 20 73  r i} {.        s
57c0: 65 74 20 65 78 70 72 20 22 28 61 20 5b 73 74 72  et expr "(a [str
57d0: 69 6e 67 20 72 65 70 65 61 74 20 7b 41 4e 44 20  ing repeat {AND 
57e0: 31 20 7d 20 35 30 5d 29 20 41 53 20 61 22 0a 20  1 } 50]) AS a". 
57f0: 20 20 20 20 20 20 20 65 78 65 63 73 71 6c 20 5b         execsql [
5800: 73 75 62 73 74 20 7b 0a 20 20 20 20 20 20 20 20  subst {.        
5810: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76 24    CREATE VIEW v$
5820: 7b 69 7d 20 41 53 20 53 45 4c 45 43 54 20 24 65  {i} AS SELECT $e
5830: 78 70 72 20 46 52 4f 4d 20 76 5b 65 78 70 72 20  xpr FROM v[expr 
5840: 7b 24 69 2d 31 7d 5d 0a 20 20 20 20 20 20 20 20  {$i-1}].        
5850: 7d 5d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  }].      }.    }
5860: 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f  .  } {}.  .  do_
5870: 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d  test sqllimits1-
5880: 39 2e 34 20 7b 0a 20 20 20 20 63 61 74 63 68 73  9.4 {.    catchs
5890: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
58a0: 54 20 61 20 46 52 4f 4d 20 76 31 39 39 0a 20 20  T a FROM v199.  
58b0: 20 20 7d 0a 20 20 7d 20 22 31 20 7b 45 78 70 72    }.  } "1 {Expr
58c0: 65 73 73 69 6f 6e 20 74 72 65 65 20 69 73 20 74  ession tree is t
58d0: 6f 6f 20 6c 61 72 67 65 20 28 6d 61 78 69 6d 75  oo large (maximu
58e0: 6d 20 64 65 70 74 68 20 24 3a 3a 53 51 4c 49 54  m depth $::SQLIT
58f0: 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48  E_MAX_EXPR_DEPTH
5900: 29 7d 22 0a 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  )}".}.}..#------
5910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
5950: 20 54 65 73 74 20 63 61 73 65 73 20 73 71 6c 6c   Test cases sqll
5960: 69 6d 69 74 73 31 2d 31 30 2e 2a 20 74 65 73 74  imits1-10.* test
5970: 20 74 68 61 74 20 74 68 65 20 53 51 4c 49 54 45   that the SQLITE
5980: 5f 4d 41 58 5f 56 44 42 45 5f 4f 50 0a 23 20 6c  _MAX_VDBE_OP.# l
5990: 69 6d 69 74 20 77 6f 72 6b 73 20 61 73 20 65 78  imit works as ex
59a0: 70 65 63 74 65 64 2e 20 54 68 65 20 6c 69 6d 69  pected. The limi
59b0: 74 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  t refers to the 
59c0: 6e 75 6d 62 65 72 20 6f 66 20 6f 70 63 6f 64 65  number of opcode
59d0: 73 0a 23 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  s.# in a single 
59e0: 56 44 42 45 20 70 72 6f 67 72 61 6d 2e 0a 23 0a  VDBE program..#.
59f0: 23 20 54 4f 44 4f 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  # TODO..#-------
5a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
5a40: 54 65 73 74 20 74 68 65 20 53 51 4c 49 54 45 5f  Test the SQLITE_
5a50: 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41  LIMIT_FUNCTION_A
5a60: 52 47 20 6c 69 6d 69 74 20 77 6f 72 6b 73 2e 20  RG limit works. 
5a70: 54 65 73 74 20 63 61 73 65 20 6e 61 6d 65 73 0a  Test case names.
5a80: 23 20 6d 61 74 63 68 20 74 68 65 20 70 61 74 74  # match the patt
5a90: 65 72 6e 20 22 73 71 6c 6c 69 6d 69 74 73 31 2d  ern "sqllimits1-
5aa0: 31 31 2e 2a 22 2e 0a 23 0a 23 20 45 56 49 44 45  11.*"..#.# EVIDE
5ab0: 4e 43 45 2d 4f 46 3a 20 52 2d 35 39 30 30 31 2d  NCE-OF: R-59001-
5ac0: 34 35 32 37 38 20 53 51 4c 49 54 45 5f 4c 49 4d  45278 SQLITE_LIM
5ad0: 49 54 5f 46 55 4e 43 54 49 4f 4e 5f 41 52 47 20  IT_FUNCTION_ARG 
5ae0: 54 68 65 20 6d 61 78 69 6d 75 6d 0a 23 20 6e 75  The maximum.# nu
5af0: 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
5b00: 73 20 6f 6e 20 61 20 66 75 6e 63 74 69 6f 6e 2e  s on a function.
5b10: 0a 23 0a 66 6f 72 20 7b 73 65 74 20 6d 61 78 20  .#.for {set max 
5b20: 35 7d 20 7b 24 6d 61 78 3c 3d 24 53 51 4c 49 54  5} {$max<=$SQLIT
5b30: 45 5f 4d 41 58 5f 46 55 4e 43 54 49 4f 4e 5f 41  E_MAX_FUNCTION_A
5b40: 52 47 7d 20 7b 69 6e 63 72 20 6d 61 78 7d 20 7b  RG} {incr max} {
5b50: 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69  .  do_test sqlli
5b60: 6d 69 74 73 31 2d 31 31 2e 24 6d 61 78 2e 31 20  mits1-11.$max.1 
5b70: 7b 0a 20 20 20 20 73 65 74 20 76 61 6c 73 20 5b  {.    set vals [
5b80: 6c 69 73 74 5d 0a 20 20 20 20 73 71 6c 69 74 65  list].    sqlite
5b90: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
5ba0: 45 5f 4c 49 4d 49 54 5f 46 55 4e 43 54 49 4f 4e  E_LIMIT_FUNCTION
5bb0: 5f 41 52 47 20 24 3a 3a 6d 61 78 0a 20 20 20 20  _ARG $::max.    
5bc0: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
5bd0: 69 20 3c 20 24 3a 3a 6d 61 78 7d 20 7b 69 6e 63  i < $::max} {inc
5be0: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70  r i} {.      lap
5bf0: 70 65 6e 64 20 76 61 6c 73 20 24 69 0a 20 20 20  pend vals $i.   
5c00: 20 7d 0a 20 20 20 20 63 61 74 63 68 73 71 6c 20   }.    catchsql 
5c10: 22 53 45 4c 45 43 54 20 6d 61 78 28 5b 6a 6f 69  "SELECT max([joi
5c20: 6e 20 24 76 61 6c 73 20 2c 5d 29 22 0a 20 20 7d  n $vals ,])".  }
5c30: 20 22 30 20 5b 65 78 70 72 20 7b 24 3a 3a 6d 61   "0 [expr {$::ma
5c40: 78 20 2d 20 31 7d 5d 22 0a 20 20 64 6f 5f 74 65  x - 1}]".  do_te
5c50: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 31  st sqllimits1-11
5c60: 2e 24 6d 61 78 2e 32 20 7b 0a 20 20 20 20 73 65  .$max.2 {.    se
5c70: 74 20 76 61 6c 73 20 5b 6c 69 73 74 5d 0a 20 20  t vals [list].  
5c80: 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20    for {set i 0} 
5c90: 7b 24 69 20 3c 3d 20 24 3a 3a 6d 61 78 7d 20 7b  {$i <= $::max} {
5ca0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20  incr i} {.      
5cb0: 6c 61 70 70 65 6e 64 20 76 61 6c 73 20 24 69 0a  lappend vals $i.
5cc0: 20 20 20 20 7d 0a 20 20 20 20 63 61 74 63 68 73      }.    catchs
5cd0: 71 6c 20 22 53 45 4c 45 43 54 20 6d 61 78 28 5b  ql "SELECT max([
5ce0: 6a 6f 69 6e 20 24 76 61 6c 73 20 2c 5d 29 22 0a  join $vals ,])".
5cf0: 20 20 7d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79    } {1 {too many
5d00: 20 61 72 67 75 6d 65 6e 74 73 20 6f 6e 20 66 75   arguments on fu
5d10: 6e 63 74 69 6f 6e 20 6d 61 78 7d 7d 0a 0a 20 20  nction max}}..  
5d20: 23 20 54 65 73 74 20 74 68 61 74 20 69 74 20 69  # Test that it i
5d30: 73 20 53 51 4c 69 74 65 2c 20 61 6e 64 20 6e 6f  s SQLite, and no
5d40: 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  t the implementa
5d50: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 20 20 23 20  tion of the.  # 
5d60: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 74 68  user function th
5d70: 61 74 20 69 73 20 74 68 72 6f 77 69 6e 67 20 74  at is throwing t
5d80: 68 65 20 65 72 72 6f 72 2e 0a 20 20 70 72 6f 63  he error..  proc
5d90: 20 6d 79 66 75 6e 63 20 7b 61 72 67 73 7d 20 7b   myfunc {args} {
5da0: 65 72 72 6f 72 20 22 49 20 64 6f 6e 27 74 20 6c  error "I don't l
5db0: 69 6b 65 20 74 6f 20 62 65 20 63 61 6c 6c 65 64  ike to be called
5dc0: 21 22 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73 71  !"}.  do_test sq
5dd0: 6c 6c 69 6d 69 74 73 31 2d 31 31 2e 24 6d 61 78  llimits1-11.$max
5de0: 2e 32 20 7b 0a 20 20 20 20 64 62 20 66 75 6e 63  .2 {.    db func
5df0: 74 69 6f 6e 20 6d 79 66 75 6e 63 20 6d 79 66 75  tion myfunc myfu
5e00: 6e 63 0a 20 20 20 20 73 65 74 20 76 61 6c 73 20  nc.    set vals 
5e10: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 20 7b  [list].    for {
5e20: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 3d 20  set i 0} {$i <= 
5e30: 24 3a 3a 6d 61 78 7d 20 7b 69 6e 63 72 20 69 7d  $::max} {incr i}
5e40: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
5e50: 20 76 61 6c 73 20 24 69 0a 20 20 20 20 7d 0a 20   vals $i.    }. 
5e60: 20 20 20 63 61 74 63 68 73 71 6c 20 22 53 45 4c     catchsql "SEL
5e70: 45 43 54 20 6d 79 66 75 6e 63 28 5b 6a 6f 69 6e  ECT myfunc([join
5e80: 20 24 76 61 6c 73 20 2c 5d 29 22 0a 20 20 7d 20   $vals ,])".  } 
5e90: 7b 31 20 7b 74 6f 6f 20 6d 61 6e 79 20 61 72 67  {1 {too many arg
5ea0: 75 6d 65 6e 74 73 20 6f 6e 20 66 75 6e 63 74 69  uments on functi
5eb0: 6f 6e 20 6d 79 66 75 6e 63 7d 7d 0a 7d 0a 0a 23  on myfunc}}.}..#
5ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f00: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
5f10: 73 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 32 2e  s sqllimits1-12.
5f20: 2a 3a 20 54 65 73 74 20 74 68 65 20 53 51 4c 49  *: Test the SQLI
5f30: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 20  TE_MAX_ATTACHED 
5f40: 6c 69 6d 69 74 2e 0a 23 0a 23 20 45 56 49 44 45  limit..#.# EVIDE
5f50: 4e 43 45 2d 4f 46 3a 20 52 2d 34 31 37 37 38 2d  NCE-OF: R-41778-
5f60: 32 36 32 30 33 20 53 51 4c 49 54 45 5f 4c 49 4d  26203 SQLITE_LIM
5f70: 49 54 5f 41 54 54 41 43 48 45 44 20 54 68 65 20  IT_ATTACHED The 
5f80: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
5f90: 66 0a 23 20 61 74 74 61 63 68 65 64 20 64 61 74  f.# attached dat
5fa0: 61 62 61 73 65 73 2e 0a 23 0a 69 66 63 61 70 61  abases..#.ifcapa
5fb0: 62 6c 65 20 61 74 74 61 63 68 20 7b 0a 20 20 64  ble attach {.  d
5fc0: 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73  o_test sqllimits
5fd0: 31 2d 31 32 2e 31 20 7b 0a 20 20 20 20 73 65 74  1-12.1 {.    set
5fe0: 20 6d 61 78 20 24 3a 3a 53 51 4c 49 54 45 5f 4d   max $::SQLITE_M
5ff0: 41 58 5f 41 54 54 41 43 48 45 44 0a 20 20 20 20  AX_ATTACHED.    
6000: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
6010: 69 20 3c 20 28 24 6d 61 78 29 7d 20 7b 69 6e 63  i < ($max)} {inc
6020: 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 66 6f 72  r i} {.      for
6030: 63 65 64 65 6c 65 74 65 20 74 65 73 74 24 7b 69  cedelete test${i
6040: 7d 2e 64 62 20 74 65 73 74 24 7b 69 7d 2e 64 62  }.db test${i}.db
6050: 2d 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 7d 0a 20  -journal.    }. 
6060: 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d     for {set i 0}
6070: 20 7b 24 69 20 3c 20 28 24 6d 61 78 29 7d 20 7b   {$i < ($max)} {
6080: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20  incr i} {.      
6090: 65 78 65 63 73 71 6c 20 22 41 54 54 41 43 48 20  execsql "ATTACH 
60a0: 27 74 65 73 74 24 7b 69 7d 2e 64 62 27 20 41 53  'test${i}.db' AS
60b0: 20 61 75 78 24 7b 69 7d 22 0a 20 20 20 20 7d 0a   aux${i}".    }.
60c0: 20 20 20 20 63 61 74 63 68 73 71 6c 20 22 41 54      catchsql "AT
60d0: 54 41 43 48 20 27 74 65 73 74 24 7b 69 7d 2e 64  TACH 'test${i}.d
60e0: 62 27 20 41 53 20 61 75 78 24 7b 69 7d 22 0a 20  b' AS aux${i}". 
60f0: 20 7d 20 22 31 20 7b 74 6f 6f 20 6d 61 6e 79 20   } "1 {too many 
6100: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
6110: 65 73 20 2d 20 6d 61 78 20 24 3a 3a 53 51 4c 49  es - max $::SQLI
6120: 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 7d  TE_MAX_ATTACHED}
6130: 22 0a 20 20 64 6f 5f 74 65 73 74 20 73 71 6c 6c  ".  do_test sqll
6140: 69 6d 69 74 73 31 2d 31 32 2e 32 20 7b 0a 20 20  imits1-12.2 {.  
6150: 20 20 73 65 74 20 6d 61 78 20 24 3a 3a 53 51 4c    set max $::SQL
6160: 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
6170: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20  .    for {set i 
6180: 30 7d 20 7b 24 69 20 3c 20 28 24 6d 61 78 29 7d  0} {$i < ($max)}
6190: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
61a0: 20 20 65 78 65 63 73 71 6c 20 22 44 45 54 41 43    execsql "DETAC
61b0: 48 20 61 75 78 24 7b 69 7d 22 0a 20 20 20 20 7d  H aux${i}".    }
61c0: 0a 20 20 7d 20 7b 7d 0a 7d 0a 0a 23 2d 2d 2d 2d  .  } {}.}..#----
61d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
61e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
61f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6210: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 73 71  .# Test cases sq
6220: 6c 6c 69 6d 69 74 73 31 2d 31 33 2e 2a 3a 20 43  llimits1-13.*: C
6230: 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 53 51  heck that the SQ
6240: 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c  LITE_MAX_VARIABL
6250: 45 5f 4e 55 4d 42 45 52 20 0a 23 20 6c 69 6d 69  E_NUMBER .# limi
6260: 74 20 77 6f 72 6b 73 2e 0a 23 0a 23 20 45 56 49  t works..#.# EVI
6270: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 32 33 36  DENCE-OF: R-4236
6280: 33 2d 32 39 31 30 34 20 53 51 4c 49 54 45 5f 4c  3-29104 SQLITE_L
6290: 49 4d 49 54 5f 56 41 52 49 41 42 4c 45 5f 4e 55  IMIT_VARIABLE_NU
62a0: 4d 42 45 52 20 54 68 65 20 6d 61 78 69 6d 75 6d  MBER The maximum
62b0: 0a 23 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20  .# index number 
62c0: 6f 66 20 61 6e 79 20 70 61 72 61 6d 65 74 65 72  of any parameter
62d0: 20 69 6e 20 61 6e 20 53 51 4c 20 73 74 61 74 65   in an SQL state
62e0: 6d 65 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ment..#.do_test 
62f0: 73 71 6c 6c 69 6d 69 74 73 31 2d 31 33 2e 31 20  sqllimits1-13.1 
6300: 7b 0a 20 20 73 65 74 20 6d 61 78 20 24 3a 3a 53  {.  set max $::S
6310: 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
6320: 4c 45 5f 4e 55 4d 42 45 52 0a 20 20 63 61 74 63  LE_NUMBER.  catc
6330: 68 73 71 6c 20 22 53 45 4c 45 43 54 20 3f 5b 65  hsql "SELECT ?[e
6340: 78 70 72 20 7b 24 6d 61 78 2b 31 7d 5d 20 46 52  xpr {$max+1}] FR
6350: 4f 4d 20 74 31 22 0a 7d 20 22 31 20 7b 76 61 72  OM t1".} "1 {var
6360: 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 6d 75 73  iable number mus
6370: 74 20 62 65 20 62 65 74 77 65 65 6e 20 3f 31 20  t be between ?1 
6380: 61 6e 64 20 3f 24 3a 3a 53 51 4c 49 54 45 5f 4d  and ?$::SQLITE_M
6390: 41 58 5f 56 41 52 49 41 42 4c 45 5f 4e 55 4d 42  AX_VARIABLE_NUMB
63a0: 45 52 7d 22 0a 64 6f 5f 74 65 73 74 20 73 71 6c  ER}".do_test sql
63b0: 6c 69 6d 69 74 73 31 2d 31 33 2e 32 20 7b 0a 20  limits1-13.2 {. 
63c0: 20 73 65 74 20 6d 61 78 20 24 3a 3a 53 51 4c 49   set max $::SQLI
63d0: 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45 5f  TE_MAX_VARIABLE_
63e0: 4e 55 4d 42 45 52 0a 20 20 73 65 74 20 76 61 6c  NUMBER.  set val
63f0: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b  s [list].  for {
6400: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 28  set i 0} {$i < (
6410: 24 6d 61 78 2b 33 29 7d 20 7b 69 6e 63 72 20 69  $max+3)} {incr i
6420: 7d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20  } {.    lappend 
6430: 76 61 6c 73 20 3f 0a 20 20 7d 0a 20 20 63 61 74  vals ?.  }.  cat
6440: 63 68 73 71 6c 20 22 53 45 4c 45 43 54 20 5b 6a  chsql "SELECT [j
6450: 6f 69 6e 20 24 76 61 6c 73 20 2c 5d 20 46 52 4f  oin $vals ,] FRO
6460: 4d 20 74 31 22 0a 7d 20 22 31 20 7b 74 6f 6f 20  M t1".} "1 {too 
6470: 6d 61 6e 79 20 53 51 4c 20 76 61 72 69 61 62 6c  many SQL variabl
6480: 65 73 7d 22 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  es}"...#--------
6490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
64c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
64d0: 65 73 74 20 63 61 73 65 73 20 73 71 6c 6c 69 6d  est cases sqllim
64e0: 69 74 73 31 2d 31 35 2e 2a 20 76 65 72 69 66 79  its1-15.* verify
64f0: 20 74 68 61 74 20 74 68 65 20 0a 23 20 53 51 4c   that the .# SQL
6500: 49 54 45 5f 4d 41 58 5f 4c 49 4b 45 5f 50 41 54  ITE_MAX_LIKE_PAT
6510: 54 45 52 4e 5f 4c 45 4e 47 54 48 20 6c 69 6d 69  TERN_LENGTH limi
6520: 74 20 69 73 20 65 6e 66 6f 72 63 65 64 2e 20 54  t is enforced. T
6530: 68 69 73 20 6c 69 6d 69 74 20 6f 6e 6c 79 0a 23  his limit only.#
6540: 20 61 70 70 6c 69 65 73 20 74 6f 20 74 68 65 20   applies to the 
6550: 62 75 69 6c 74 2d 69 6e 20 4c 49 4b 45 20 6f 70  built-in LIKE op
6560: 65 72 61 74 6f 72 2c 20 73 75 70 70 6c 79 69 6e  erator, supplyin
6570: 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 0a 23  g an external .#
6580: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6590: 62 79 20 6f 76 65 72 72 69 64 69 6e 67 20 74 68  by overriding th
65a0: 65 20 6c 69 6b 65 28 29 20 73 63 61 6c 61 72 20  e like() scalar 
65b0: 66 75 6e 63 74 69 6f 6e 20 62 79 70 61 73 73 65  function bypasse
65c0: 73 0a 23 20 74 68 69 73 20 6c 69 6d 69 74 61 74  s.# this limitat
65d0: 69 6f 6e 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  ion..#.# EVIDENC
65e0: 45 2d 4f 46 3a 20 52 2d 31 32 39 34 30 2d 33 37  E-OF: R-12940-37
65f0: 30 35 32 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54  052 SQLITE_LIMIT
6600: 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c 45  _LIKE_PATTERN_LE
6610: 4e 47 54 48 20 54 68 65 0a 23 20 6d 61 78 69 6d  NGTH The.# maxim
6620: 75 6d 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  um length of the
6630: 20 70 61 74 74 65 72 6e 20 61 72 67 75 6d 65 6e   pattern argumen
6640: 74 20 74 6f 20 74 68 65 20 4c 49 4b 45 20 6f 72  t to the LIKE or
6650: 20 47 4c 4f 42 20 6f 70 65 72 61 74 6f 72 73 2e   GLOB operators.
6660: 0a 23 0a 23 20 54 68 65 73 65 20 74 65 73 74 73  .#.# These tests
6670: 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   check that the 
6680: 6c 69 6d 69 74 20 69 73 20 6e 6f 74 20 69 6e 63  limit is not inc
6690: 6f 72 72 65 63 74 6c 79 20 61 70 70 6c 69 65 64  orrectly applied
66a0: 20 74 6f 0a 23 20 74 68 65 20 6c 65 66 74 2d 68   to.# the left-h
66b0: 61 6e 64 2d 73 69 64 65 20 6f 66 20 74 68 65 20  and-side of the 
66c0: 4c 49 4b 45 20 6f 70 65 72 61 74 6f 72 20 28 74  LIKE operator (t
66d0: 68 65 20 73 74 72 69 6e 67 20 62 65 69 6e 67 20  he string being 
66e0: 74 65 73 74 65 64 0a 23 20 61 67 61 69 6e 73 74  tested.# against
66f0: 20 74 68 65 20 70 61 74 74 65 72 6e 29 2e 0a 23   the pattern)..#
6700: 0a 73 65 74 20 53 51 4c 49 54 45 5f 4c 49 4d 49  .set SQLITE_LIMI
6710: 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 20 31  T_LIKE_PATTERN 1
6720: 30 30 30 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69  000.sqlite3_limi
6730: 74 20 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49  t db SQLITE_LIMI
6740: 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e 5f 4c  T_LIKE_PATTERN_L
6750: 45 4e 47 54 48 20 24 53 51 4c 49 54 45 5f 4c 49  ENGTH $SQLITE_LI
6760: 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52 4e  MIT_LIKE_PATTERN
6770: 0a 64 6f 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69  .do_test sqllimi
6780: 74 73 31 2d 31 35 2e 31 20 7b 0a 20 20 73 65 74  ts1-15.1 {.  set
6790: 20 6d 61 78 20 24 3a 3a 53 51 4c 49 54 45 5f 4c   max $::SQLITE_L
67a0: 49 4d 49 54 5f 4c 49 4b 45 5f 50 41 54 54 45 52  IMIT_LIKE_PATTER
67b0: 4e 0a 20 20 73 65 74 20 3a 3a 70 61 74 74 65 72  N.  set ::patter
67c0: 6e 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  n [string repeat
67d0: 20 22 41 25 22 20 5b 65 78 70 72 20 24 6d 61 78   "A%" [expr $max
67e0: 2f 32 5d 5d 0a 20 20 73 65 74 20 3a 3a 73 74 72  /2]].  set ::str
67f0: 69 6e 67 20 20 5b 73 74 72 69 6e 67 20 72 65 70  ing  [string rep
6800: 65 61 74 20 22 41 22 20 5b 65 78 70 72 20 7b 24  eat "A" [expr {$
6810: 6d 61 78 2a 32 7d 5d 5d 0a 20 20 65 78 65 63 73  max*2}]].  execs
6820: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
6830: 24 3a 3a 73 74 72 69 6e 67 20 4c 49 4b 45 20 24  $::string LIKE $
6840: 3a 3a 70 61 74 74 65 72 6e 3b 0a 20 20 7d 0a 7d  ::pattern;.  }.}
6850: 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 73 71 6c   {1}.do_test sql
6860: 6c 69 6d 69 74 73 31 2d 31 35 2e 32 20 7b 0a 20  limits1-15.2 {. 
6870: 20 73 65 74 20 6d 61 78 20 24 3a 3a 53 51 4c 49   set max $::SQLI
6880: 54 45 5f 4c 49 4d 49 54 5f 4c 49 4b 45 5f 50 41  TE_LIMIT_LIKE_PA
6890: 54 54 45 52 4e 0a 20 20 73 65 74 20 3a 3a 70 61  TTERN.  set ::pa
68a0: 74 74 65 72 6e 20 5b 73 74 72 69 6e 67 20 72 65  ttern [string re
68b0: 70 65 61 74 20 22 41 25 22 20 5b 65 78 70 72 20  peat "A%" [expr 
68c0: 7b 28 24 6d 61 78 2f 32 29 20 2b 20 31 7d 5d 5d  {($max/2) + 1}]]
68d0: 0a 20 20 73 65 74 20 3a 3a 73 74 72 69 6e 67 20  .  set ::string 
68e0: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20   [string repeat 
68f0: 22 41 22 20 5b 65 78 70 72 20 7b 24 6d 61 78 2a  "A" [expr {$max*
6900: 32 7d 5d 5d 0a 20 20 63 61 74 63 68 73 71 6c 20  2}]].  catchsql 
6910: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 24 3a 3a  {.    SELECT $::
6920: 73 74 72 69 6e 67 20 4c 49 4b 45 20 24 3a 3a 70  string LIKE $::p
6930: 61 74 74 65 72 6e 3b 0a 20 20 7d 0a 7d 20 7b 31  attern;.  }.} {1
6940: 20 7b 4c 49 4b 45 20 6f 72 20 47 4c 4f 42 20 70   {LIKE or GLOB p
6950: 61 74 74 65 72 6e 20 74 6f 6f 20 63 6f 6d 70 6c  attern too compl
6960: 65 78 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  ex}}..#---------
6970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
69a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68  -----------.# Th
69b0: 69 73 20 74 65 73 74 20 63 61 73 65 20 64 6f 65  is test case doe
69c0: 73 6e 27 74 20 72 65 61 6c 6c 79 20 62 65 6c 6f  sn't really belo
69d0: 6e 67 20 77 69 74 68 20 74 68 65 20 6f 74 68 65  ng with the othe
69e0: 72 20 6c 69 6d 69 74 73 20 74 65 73 74 73 2e 0a  r limits tests..
69f0: 23 20 49 74 20 69 73 20 69 6e 20 74 68 69 73 20  # It is in this 
6a00: 66 69 6c 65 20 62 65 63 61 75 73 65 20 69 74 20  file because it 
6a10: 69 73 20 74 61 78 69 6e 67 20 74 6f 20 72 75 6e  is taxing to run
6a20: 2c 20 6c 69 6b 65 20 74 68 65 20 6c 69 6d 69 74  , like the limit
6a30: 73 20 74 65 73 74 73 2e 0a 23 0a 64 6f 5f 74 65  s tests..#.do_te
6a40: 73 74 20 73 71 6c 6c 69 6d 69 74 73 31 2d 31 36  st sqllimits1-16
6a50: 2e 31 20 7b 0a 20 20 73 65 74 20 3a 3a 4e 20 5b  .1 {.  set ::N [
6a60: 65 78 70 72 20 69 6e 74 28 28 5b 65 78 70 72 20  expr int(([expr 
6a70: 70 6f 77 28 32 2c 33 32 29 5d 2f 35 30 29 20 2b  pow(2,32)]/50) +
6a80: 20 31 29 5d 0a 20 20 65 78 70 72 20 28 28 24 3a   1)].  expr (($:
6a90: 3a 4e 2a 35 30 29 20 26 20 30 78 66 66 66 66 66  :N*50) & 0xfffff
6aa0: 66 66 66 29 3c 35 35 0a 7d 20 7b 31 7d 0a 64 6f  fff)<55.} {1}.do
6ab0: 5f 74 65 73 74 20 73 71 6c 6c 69 6d 69 74 73 31  _test sqllimits1
6ac0: 2d 31 36 2e 32 20 7b 0a 20 20 73 65 74 20 3a 3a  -16.2 {.  set ::
6ad0: 66 6f 72 6d 61 74 20 22 5b 73 74 72 69 6e 67 20  format "[string 
6ae0: 72 65 70 65 61 74 20 41 20 36 30 5d 5b 73 74 72  repeat A 60][str
6af0: 69 6e 67 20 72 65 70 65 61 74 20 22 25 4a 22 20  ing repeat "%J" 
6b00: 24 3a 3a 4e 5d 22 0a 20 20 63 61 74 63 68 73 71  $::N]".  catchsq
6b10: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73  l {.    SELECT s
6b20: 74 72 66 74 69 6d 65 28 24 3a 3a 66 6f 72 6d 61  trftime($::forma
6b30: 74 2c 20 31 29 3b 0a 20 20 7d 0a 7d 20 7b 31 20  t, 1);.  }.} {1 
6b40: 7b 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20  {string or blob 
6b50: 74 6f 6f 20 62 69 67 7d 7d 0a 0a 0a 66 6f 72 65  too big}}...fore
6b60: 61 63 68 20 7b 6b 65 79 20 76 61 6c 75 65 7d 20  ach {key value} 
6b70: 5b 61 72 72 61 79 20 67 65 74 20 73 61 76 65 64  [array get saved
6b80: 5d 20 7b 0a 20 20 63 61 74 63 68 20 7b 73 65 74  ] {.  catch {set
6b90: 20 24 6b 65 79 20 24 76 61 6c 75 65 7d 0a 7d 0a   $key $value}.}.
6ba0: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.