/ Hex Artifact Content
Login

Artifact 4546eb710d979db023bfcc16b0c108b1557fcb43:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 73  is testing the s
01d0: 71 6c 69 74 65 5f 65 78 65 63 5f 70 72 69 6e 74  qlite_exec_print
01e0: 66 28 29 20 61 6e 64 0a 23 20 73 71 6c 69 74 65  f() and.# sqlite
01f0: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
0200: 66 28 29 20 41 50 49 73 2e 0a 23 0a 23 20 24 49  f() APIs..#.# $I
0210: 64 3a 20 74 61 62 6c 65 61 70 69 2e 74 65 73 74  d: tableapi.test
0220: 2c 76 20 31 2e 31 35 20 32 30 30 38 2f 30 31 2f  ,v 1.15 2008/01/
0230: 32 33 20 31 34 3a 35 31 3a 35 30 20 64 72 68 20  23 14:51:50 drh 
0240: 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73 74 64  Exp $..set testd
0250: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0260: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0270: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0280: 74 63 6c 0a 0a 64 6f 5f 74 65 73 74 20 74 61 62  tcl..do_test tab
0290: 6c 65 61 70 69 2d 31 2e 30 20 7b 0a 20 20 73 65  leapi-1.0 {.  se
02a0: 74 20 3a 3a 64 62 78 20 5b 73 71 6c 69 74 65 33  t ::dbx [sqlite3
02b0: 5f 6f 70 65 6e 20 74 65 73 74 2e 64 62 5d 0a 20  _open test.db]. 
02c0: 20 63 61 74 63 68 20 7b 73 71 6c 69 74 65 5f 65   catch {sqlite_e
02d0: 78 65 63 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62  xec_printf $::db
02e0: 78 20 7b 44 52 4f 50 20 54 41 42 4c 45 20 78 79  x {DROP TABLE xy
02f0: 7a 7d 20 7b 7d 7d 0a 20 20 73 71 6c 69 74 65 33  z} {}}.  sqlite3
0300: 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 24 3a 3a  _exec_printf $::
0310: 64 62 78 20 7b 43 52 45 41 54 45 20 54 41 42 4c  dbx {CREATE TABL
0320: 45 20 25 73 28 61 20 69 6e 74 2c 20 62 20 74 65  E %s(a int, b te
0330: 78 74 29 7d 20 78 79 7a 0a 7d 20 7b 30 20 7b 7d  xt)} xyz.} {0 {}
0340: 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 61  }.do_test tablea
0350: 70 69 2d 31 2e 31 20 7b 0a 20 20 73 71 6c 69 74  pi-1.1 {.  sqlit
0360: 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 20 24  e3_exec_printf $
0370: 3a 3a 64 62 78 20 7b 0a 20 20 20 20 49 4e 53 45  ::dbx {.    INSE
0380: 52 54 20 49 4e 54 4f 20 78 79 7a 20 56 41 4c 55  RT INTO xyz VALU
0390: 45 53 28 31 2c 27 25 71 27 29 0a 20 20 7d 20 7b  ES(1,'%q').  } {
03a0: 48 69 20 59 27 61 6c 6c 7d 0a 7d 20 7b 30 20 7b  Hi Y'all}.} {0 {
03b0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65  }}.do_test table
03c0: 61 70 69 2d 31 2e 32 20 7b 0a 20 20 73 71 6c 69  api-1.2 {.  sqli
03d0: 74 65 33 5f 65 78 65 63 5f 70 72 69 6e 74 66 20  te3_exec_printf 
03e0: 24 3a 3a 64 62 78 20 7b 53 45 4c 45 43 54 20 2a  $::dbx {SELECT *
03f0: 20 46 52 4f 4d 20 78 79 7a 7d 20 7b 7d 0a 7d 20   FROM xyz} {}.} 
0400: 7b 30 20 7b 61 20 62 20 31 20 7b 48 69 20 59 27  {0 {a b 1 {Hi Y'
0410: 61 6c 6c 7d 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20  all}}}..do_test 
0420: 74 61 62 6c 65 61 70 69 2d 32 2e 31 20 7b 0a 20  tableapi-2.1 {. 
0430: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
0440: 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78  le_printf $::dbx
0450: 20 7b 0a 20 20 20 20 42 45 47 49 4e 20 54 52 41   {.    BEGIN TRA
0460: 4e 53 41 43 54 49 4f 4e 3b 0a 20 20 20 20 53 45  NSACTION;.    SE
0470: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 79 7a 20  LECT * FROM xyz 
0480: 57 48 45 52 45 20 62 3d 27 25 71 27 0a 20 20 7d  WHERE b='%q'.  }
0490: 20 7b 48 69 20 59 27 61 6c 6c 7d 0a 7d 20 7b 30   {Hi Y'all}.} {0
04a0: 20 31 20 32 20 61 20 62 20 31 20 7b 48 69 20 59   1 2 a b 1 {Hi Y
04b0: 27 61 6c 6c 7d 7d 0a 64 6f 5f 74 65 73 74 20 74  'all}}.do_test t
04c0: 61 62 6c 65 61 70 69 2d 32 2e 32 20 7b 0a 20 20  ableapi-2.2 {.  
04d0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
04e0: 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20  e_printf $::dbx 
04f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
0500: 52 4f 4d 20 78 79 7a 0a 20 20 7d 20 7b 7d 0a 7d  ROM xyz.  } {}.}
0510: 20 7b 30 20 31 20 32 20 61 20 62 20 31 20 7b 48   {0 1 2 a b 1 {H
0520: 69 20 59 27 61 6c 6c 7d 7d 0a 64 6f 5f 74 65 73  i Y'all}}.do_tes
0530: 74 20 74 61 62 6c 65 61 70 69 2d 32 2e 33 20 7b  t tableapi-2.3 {
0540: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32 7d  .  for {set i 2}
0550: 20 7b 24 69 3c 3d 35 30 7d 20 7b 69 6e 63 72 20   {$i<=50} {incr 
0560: 69 7d 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  i} {.    sqlite3
0570: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
0580: 66 20 24 3a 3a 64 62 78 20 5c 0a 20 20 20 20 20  f $::dbx \.     
0590: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78    "INSERT INTO x
05a0: 79 7a 20 56 41 4c 55 45 53 28 24 69 2c 27 28 25  yz VALUES($i,'(%
05b0: 73 29 27 29 22 20 24 69 0a 20 20 7d 0a 20 20 73  s)')" $i.  }.  s
05c0: 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65  qlite3_get_table
05d0: 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b  _printf $::dbx {
05e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
05f0: 4f 4d 20 78 79 7a 20 4f 52 44 45 52 20 42 59 20  OM xyz ORDER BY 
0600: 61 0a 20 20 7d 20 7b 7d 0a 7d 20 7b 30 20 35 30  a.  } {}.} {0 50
0610: 20 32 20 61 20 62 20 31 20 7b 48 69 20 59 27 61   2 a b 1 {Hi Y'a
0620: 6c 6c 7d 20 32 20 28 32 29 20 33 20 28 33 29 20  ll} 2 (2) 3 (3) 
0630: 34 20 28 34 29 20 35 20 28 35 29 20 36 20 28 36  4 (4) 5 (5) 6 (6
0640: 29 20 37 20 28 37 29 20 38 20 28 38 29 20 39 20  ) 7 (7) 8 (8) 9 
0650: 28 39 29 20 31 30 20 28 31 30 29 20 31 31 20 28  (9) 10 (10) 11 (
0660: 31 31 29 20 31 32 20 28 31 32 29 20 31 33 20 28  11) 12 (12) 13 (
0670: 31 33 29 20 31 34 20 28 31 34 29 20 31 35 20 28  13) 14 (14) 15 (
0680: 31 35 29 20 31 36 20 28 31 36 29 20 31 37 20 28  15) 16 (16) 17 (
0690: 31 37 29 20 31 38 20 28 31 38 29 20 31 39 20 28  17) 18 (18) 19 (
06a0: 31 39 29 20 32 30 20 28 32 30 29 20 32 31 20 28  19) 20 (20) 21 (
06b0: 32 31 29 20 32 32 20 28 32 32 29 20 32 33 20 28  21) 22 (22) 23 (
06c0: 32 33 29 20 32 34 20 28 32 34 29 20 32 35 20 28  23) 24 (24) 25 (
06d0: 32 35 29 20 32 36 20 28 32 36 29 20 32 37 20 28  25) 26 (26) 27 (
06e0: 32 37 29 20 32 38 20 28 32 38 29 20 32 39 20 28  27) 28 (28) 29 (
06f0: 32 39 29 20 33 30 20 28 33 30 29 20 33 31 20 28  29) 30 (30) 31 (
0700: 33 31 29 20 33 32 20 28 33 32 29 20 33 33 20 28  31) 32 (32) 33 (
0710: 33 33 29 20 33 34 20 28 33 34 29 20 33 35 20 28  33) 34 (34) 35 (
0720: 33 35 29 20 33 36 20 28 33 36 29 20 33 37 20 28  35) 36 (36) 37 (
0730: 33 37 29 20 33 38 20 28 33 38 29 20 33 39 20 28  37) 38 (38) 39 (
0740: 33 39 29 20 34 30 20 28 34 30 29 20 34 31 20 28  39) 40 (40) 41 (
0750: 34 31 29 20 34 32 20 28 34 32 29 20 34 33 20 28  41) 42 (42) 43 (
0760: 34 33 29 20 34 34 20 28 34 34 29 20 34 35 20 28  43) 44 (44) 45 (
0770: 34 35 29 20 34 36 20 28 34 36 29 20 34 37 20 28  45) 46 (46) 47 (
0780: 34 37 29 20 34 38 20 28 34 38 29 20 34 39 20 28  47) 48 (48) 49 (
0790: 34 39 29 20 35 30 20 28 35 30 29 7d 0a 64 6f 5f  49) 50 (50)}.do_
07a0: 74 65 73 74 20 74 61 62 6c 65 61 70 69 2d 32 2e  test tableapi-2.
07b0: 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  3.1 {.  sqlite3_
07c0: 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
07d0: 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20 20 53 45   $::dbx {.    SE
07e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 79 7a 20  LECT * FROM xyz 
07f0: 20 57 48 45 52 45 20 61 3e 34 39 20 4f 52 44 45   WHERE a>49 ORDE
0800: 52 20 42 59 20 61 0a 20 20 7d 20 7b 7d 0a 7d 20  R BY a.  } {}.} 
0810: 7b 30 20 31 20 32 20 61 20 62 20 35 30 20 28 35  {0 1 2 a b 50 (5
0820: 30 29 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c  0)}.do_test tabl
0830: 65 61 70 69 2d 32 2e 33 2e 32 20 7b 0a 20 20 73  eapi-2.3.2 {.  s
0840: 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65  qlite3_get_table
0850: 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b  _printf $::dbx {
0860: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0870: 4f 4d 20 78 79 7a 20 57 48 45 52 45 20 61 3e 34  OM xyz WHERE a>4
0880: 37 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d  7 ORDER BY a.  }
0890: 20 7b 7d 0a 7d 20 7b 30 20 33 20 32 20 61 20 62   {}.} {0 3 2 a b
08a0: 20 34 38 20 28 34 38 29 20 34 39 20 28 34 39 29   48 (48) 49 (49)
08b0: 20 35 30 20 28 35 30 29 7d 0a 64 6f 5f 74 65 73   50 (50)}.do_tes
08c0: 74 20 74 61 62 6c 65 61 70 69 2d 32 2e 33 2e 33  t tableapi-2.3.3
08d0: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
08e0: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a  _table_printf $:
08f0: 3a 64 62 78 20 7b 0a 20 20 20 20 53 45 4c 45 43  :dbx {.    SELEC
0900: 54 20 2a 20 46 52 4f 4d 20 78 79 7a 20 57 48 45  T * FROM xyz WHE
0910: 52 45 20 61 3e 34 37 20 4f 52 44 45 52 20 42 59  RE a>47 ORDER BY
0920: 20 61 3b 20 69 6e 76 61 6c 69 64 0a 20 20 7d 20   a; invalid.  } 
0930: 7b 7d 0a 7d 20 7b 31 20 7b 6e 65 61 72 20 22 69  {}.} {1 {near "i
0940: 6e 76 61 6c 69 64 22 3a 20 73 79 6e 74 61 78 20  nvalid": syntax 
0950: 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20  error}}.do_test 
0960: 74 61 62 6c 65 61 70 69 2d 32 2e 33 2e 34 20 7b  tableapi-2.3.4 {
0970: 0a 62 72 65 61 6b 70 6f 69 6e 74 0a 20 20 73 71  .breakpoint.  sq
0980: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
0990: 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a  printf $::dbx {.
09a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
09b0: 4d 20 78 79 7a 20 57 48 45 52 45 20 61 3e 34 37  M xyz WHERE a>47
09c0: 20 4f 52 44 45 52 20 42 59 20 61 0a 20 20 7d 20   ORDER BY a.  } 
09d0: 7b 7d 20 38 0a 7d 20 7b 30 20 61 20 62 20 34 38  {} 8.} {0 a b 48
09e0: 20 28 34 38 29 20 34 39 20 28 34 39 29 20 35 30   (48) 49 (49) 50
09f0: 20 28 35 30 29 7d 0a 64 6f 5f 74 65 73 74 20 74   (50)}.do_test t
0a00: 61 62 6c 65 61 70 69 2d 32 2e 34 20 7b 0a 20 20  ableapi-2.4 {.  
0a10: 73 65 74 20 6d 61 6e 79 71 75 6f 74 65 20 27 27  set manyquote ''
0a20: 27 27 27 27 27 27 0a 20 20 61 70 70 65 6e 64 20  ''''''.  append 
0a30: 6d 61 6e 79 71 75 6f 74 65 20 24 6d 61 6e 79 71  manyquote $manyq
0a40: 75 6f 74 65 0a 20 20 61 70 70 65 6e 64 20 6d 61  uote.  append ma
0a50: 6e 79 71 75 6f 74 65 20 24 6d 61 6e 79 71 75 6f  nyquote $manyquo
0a60: 74 65 0a 20 20 61 70 70 65 6e 64 20 6d 61 6e 79  te.  append many
0a70: 71 75 6f 74 65 20 24 6d 61 6e 79 71 75 6f 74 65  quote $manyquote
0a80: 0a 20 20 61 70 70 65 6e 64 20 6d 61 6e 79 71 75  .  append manyqu
0a90: 6f 74 65 20 24 6d 61 6e 79 71 75 6f 74 65 0a 20  ote $manyquote. 
0aa0: 20 61 70 70 65 6e 64 20 6d 61 6e 79 71 75 6f 74   append manyquot
0ab0: 65 20 24 6d 61 6e 79 71 75 6f 74 65 0a 20 20 61  e $manyquote.  a
0ac0: 70 70 65 6e 64 20 6d 61 6e 79 71 75 6f 74 65 20  ppend manyquote 
0ad0: 24 6d 61 6e 79 71 75 6f 74 65 0a 20 20 73 65 74  $manyquote.  set
0ae0: 20 3a 3a 62 69 67 5f 73 74 72 20 22 24 6d 61 6e   ::big_str "$man
0af0: 79 71 75 6f 74 65 20 48 65 6c 6c 6f 20 24 6d 61  yquote Hello $ma
0b00: 6e 79 71 75 6f 74 65 22 0a 20 20 73 71 6c 69 74  nyquote".  sqlit
0b10: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
0b20: 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20  ntf $::dbx {.   
0b30: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 79 7a   INSERT INTO xyz
0b40: 20 56 41 4c 55 45 53 28 35 31 2c 27 25 71 27 29   VALUES(51,'%q')
0b50: 0a 20 20 7d 20 24 3a 3a 62 69 67 5f 73 74 72 0a  .  } $::big_str.
0b60: 7d 20 7b 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73  } {0 0 0}.do_tes
0b70: 74 20 74 61 62 6c 65 61 70 69 2d 32 2e 35 20 7b  t tableapi-2.5 {
0b80: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  .  sqlite3_get_t
0b90: 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64  able_printf $::d
0ba0: 62 78 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  bx {.    SELECT 
0bb0: 2a 20 46 52 4f 4d 20 78 79 7a 20 57 48 45 52 45  * FROM xyz WHERE
0bc0: 20 61 3e 34 39 20 4f 52 44 45 52 20 42 59 20 61   a>49 ORDER BY a
0bd0: 3b 0a 20 20 7d 20 7b 7d 0a 7d 20 22 30 20 32 20  ;.  } {}.} "0 2 
0be0: 32 20 61 20 62 20 35 30 20 28 35 30 29 20 35 31  2 a b 50 (50) 51
0bf0: 20 5c 31 37 33 24 3a 3a 62 69 67 5f 73 74 72 5c   \173$::big_str\
0c00: 31 37 35 22 0a 64 6f 5f 74 65 73 74 20 74 61 62  175".do_test tab
0c10: 6c 65 61 70 69 2d 32 2e 36 20 7b 0a 20 20 73 71  leapi-2.6 {.  sq
0c20: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
0c30: 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a  printf $::dbx {.
0c40: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c50: 78 79 7a 20 56 41 4c 55 45 53 28 35 32 2c 4e 55  xyz VALUES(52,NU
0c60: 4c 4c 29 0a 20 20 7d 20 7b 7d 0a 20 20 69 66 63  LL).  } {}.  ifc
0c70: 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20  apable subquery 
0c80: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 67 65  {.    sqlite3_ge
0c90: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 24  t_table_printf $
0ca0: 3a 3a 64 62 78 20 7b 0a 20 20 20 20 20 20 53 45  ::dbx {.      SE
0cb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 79 7a 20  LECT * FROM xyz 
0cc0: 57 48 45 52 45 20 61 20 49 4e 20 28 34 32 2c 35  WHERE a IN (42,5
0cd0: 30 2c 35 32 29 20 4f 52 44 45 52 20 42 59 20 61  0,52) ORDER BY a
0ce0: 20 44 45 53 43 0a 20 20 20 20 7d 20 7b 7d 0a 20   DESC.    } {}. 
0cf0: 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73 71   } else {.    sq
0d00: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
0d10: 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a  printf $::dbx {.
0d20: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
0d30: 52 4f 4d 20 78 79 7a 20 57 48 45 52 45 20 61 3d  ROM xyz WHERE a=
0d40: 34 32 20 4f 52 20 61 3d 35 30 20 4f 52 20 61 3d  42 OR a=50 OR a=
0d50: 35 32 20 4f 52 44 45 52 20 42 59 20 61 20 44 45  52 ORDER BY a DE
0d60: 53 43 0a 20 20 20 20 7d 20 7b 7d 0a 20 20 7d 0a  SC.    } {}.  }.
0d70: 7d 20 7b 30 20 33 20 32 20 61 20 62 20 35 32 20  } {0 3 2 a b 52 
0d80: 4e 55 4c 4c 20 35 30 20 28 35 30 29 20 34 32 20  NULL 50 (50) 42 
0d90: 28 34 32 29 7d 0a 64 6f 5f 74 65 73 74 20 74 61  (42)}.do_test ta
0da0: 62 6c 65 61 70 69 2d 32 2e 37 20 7b 0a 20 20 73  bleapi-2.7 {.  s
0db0: 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65  qlite3_get_table
0dc0: 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b  _printf $::dbx {
0dd0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0de0: 4f 4d 20 78 79 7a 20 57 48 45 52 45 20 61 3e 31  OM xyz WHERE a>1
0df0: 30 30 30 0a 20 20 7d 20 7b 7d 0a 7d 20 7b 30 20  000.  } {}.} {0 
0e00: 30 20 30 7d 0a 0a 23 20 52 65 70 65 61 74 20 61  0 0}..# Repeat a
0e10: 6c 6c 20 74 65 73 74 73 20 77 69 74 68 20 74 68  ll tests with th
0e20: 65 20 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63  e empty_result_c
0e30: 61 6c 6c 62 61 63 6b 73 20 70 72 61 67 6d 61 20  allbacks pragma 
0e40: 74 75 72 6e 65 64 20 6f 6e 0a 23 0a 64 6f 5f 74  turned on.#.do_t
0e50: 65 73 74 20 74 61 62 6c 65 61 70 69 2d 33 2e 31  est tableapi-3.1
0e60: 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74   {.  sqlite3_get
0e70: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a  _table_printf $:
0e80: 3a 64 62 78 20 7b 0a 20 20 20 20 52 4f 4c 4c 42  :dbx {.    ROLLB
0e90: 41 43 4b 3b 0a 20 20 20 20 50 52 41 47 4d 41 20  ACK;.    PRAGMA 
0ea0: 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c  empty_result_cal
0eb0: 6c 62 61 63 6b 73 20 3d 20 4f 4e 3b 0a 20 20 20  lbacks = ON;.   
0ec0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78   SELECT * FROM x
0ed0: 79 7a 20 57 48 45 52 45 20 62 3d 27 25 71 27 0a  yz WHERE b='%q'.
0ee0: 20 20 7d 20 7b 48 69 20 59 27 61 6c 6c 7d 0a 7d    } {Hi Y'all}.}
0ef0: 20 7b 30 20 31 20 32 20 61 20 62 20 31 20 7b 48   {0 1 2 a b 1 {H
0f00: 69 20 59 27 61 6c 6c 7d 7d 0a 64 6f 5f 74 65 73  i Y'all}}.do_tes
0f10: 74 20 74 61 62 6c 65 61 70 69 2d 33 2e 32 20 7b  t tableapi-3.2 {
0f20: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  .  sqlite3_get_t
0f30: 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64  able_printf $::d
0f40: 62 78 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  bx {.    SELECT 
0f50: 2a 20 46 52 4f 4d 20 78 79 7a 0a 20 20 7d 20 7b  * FROM xyz.  } {
0f60: 7d 0a 7d 20 7b 30 20 31 20 32 20 61 20 62 20 31  }.} {0 1 2 a b 1
0f70: 20 7b 48 69 20 59 27 61 6c 6c 7d 7d 0a 64 6f 5f   {Hi Y'all}}.do_
0f80: 74 65 73 74 20 74 61 62 6c 65 61 70 69 2d 33 2e  test tableapi-3.
0f90: 33 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  3 {.  for {set i
0fa0: 20 32 7d 20 7b 24 69 3c 3d 35 30 7d 20 7b 69 6e   2} {$i<=50} {in
0fb0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 71 6c 69  cr i} {.    sqli
0fc0: 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72  te3_get_table_pr
0fd0: 69 6e 74 66 20 24 3a 3a 64 62 78 20 5c 0a 20 20  intf $::dbx \.  
0fe0: 20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54       "INSERT INT
0ff0: 4f 20 78 79 7a 20 56 41 4c 55 45 53 28 24 69 2c  O xyz VALUES($i,
1000: 27 28 25 73 29 27 29 22 20 24 69 0a 20 20 7d 0a  '(%s)')" $i.  }.
1010: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61    sqlite3_get_ta
1020: 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62  ble_printf $::db
1030: 78 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  x {.    SELECT *
1040: 20 46 52 4f 4d 20 78 79 7a 20 4f 52 44 45 52 20   FROM xyz ORDER 
1050: 42 59 20 61 0a 20 20 7d 20 7b 7d 0a 7d 20 7b 30  BY a.  } {}.} {0
1060: 20 35 30 20 32 20 61 20 62 20 31 20 7b 48 69 20   50 2 a b 1 {Hi 
1070: 59 27 61 6c 6c 7d 20 32 20 28 32 29 20 33 20 28  Y'all} 2 (2) 3 (
1080: 33 29 20 34 20 28 34 29 20 35 20 28 35 29 20 36  3) 4 (4) 5 (5) 6
1090: 20 28 36 29 20 37 20 28 37 29 20 38 20 28 38 29   (6) 7 (7) 8 (8)
10a0: 20 39 20 28 39 29 20 31 30 20 28 31 30 29 20 31   9 (9) 10 (10) 1
10b0: 31 20 28 31 31 29 20 31 32 20 28 31 32 29 20 31  1 (11) 12 (12) 1
10c0: 33 20 28 31 33 29 20 31 34 20 28 31 34 29 20 31  3 (13) 14 (14) 1
10d0: 35 20 28 31 35 29 20 31 36 20 28 31 36 29 20 31  5 (15) 16 (16) 1
10e0: 37 20 28 31 37 29 20 31 38 20 28 31 38 29 20 31  7 (17) 18 (18) 1
10f0: 39 20 28 31 39 29 20 32 30 20 28 32 30 29 20 32  9 (19) 20 (20) 2
1100: 31 20 28 32 31 29 20 32 32 20 28 32 32 29 20 32  1 (21) 22 (22) 2
1110: 33 20 28 32 33 29 20 32 34 20 28 32 34 29 20 32  3 (23) 24 (24) 2
1120: 35 20 28 32 35 29 20 32 36 20 28 32 36 29 20 32  5 (25) 26 (26) 2
1130: 37 20 28 32 37 29 20 32 38 20 28 32 38 29 20 32  7 (27) 28 (28) 2
1140: 39 20 28 32 39 29 20 33 30 20 28 33 30 29 20 33  9 (29) 30 (30) 3
1150: 31 20 28 33 31 29 20 33 32 20 28 33 32 29 20 33  1 (31) 32 (32) 3
1160: 33 20 28 33 33 29 20 33 34 20 28 33 34 29 20 33  3 (33) 34 (34) 3
1170: 35 20 28 33 35 29 20 33 36 20 28 33 36 29 20 33  5 (35) 36 (36) 3
1180: 37 20 28 33 37 29 20 33 38 20 28 33 38 29 20 33  7 (37) 38 (38) 3
1190: 39 20 28 33 39 29 20 34 30 20 28 34 30 29 20 34  9 (39) 40 (40) 4
11a0: 31 20 28 34 31 29 20 34 32 20 28 34 32 29 20 34  1 (41) 42 (42) 4
11b0: 33 20 28 34 33 29 20 34 34 20 28 34 34 29 20 34  3 (43) 44 (44) 4
11c0: 35 20 28 34 35 29 20 34 36 20 28 34 36 29 20 34  5 (45) 46 (46) 4
11d0: 37 20 28 34 37 29 20 34 38 20 28 34 38 29 20 34  7 (47) 48 (48) 4
11e0: 39 20 28 34 39 29 20 35 30 20 28 35 30 29 7d 0a  9 (49) 50 (50)}.
11f0: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 61 70 69  do_test tableapi
1200: 2d 33 2e 33 2e 31 20 7b 0a 20 20 73 71 6c 69 74  -3.3.1 {.  sqlit
1210: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
1220: 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20  ntf $::dbx {.   
1230: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78   SELECT * FROM x
1240: 79 7a 20 20 57 48 45 52 45 20 61 3e 34 39 20 4f  yz  WHERE a>49 O
1250: 52 44 45 52 20 42 59 20 61 0a 20 20 7d 20 7b 7d  RDER BY a.  } {}
1260: 0a 7d 20 7b 30 20 31 20 32 20 61 20 62 20 35 30  .} {0 1 2 a b 50
1270: 20 28 35 30 29 7d 0a 64 6f 5f 74 65 73 74 20 74   (50)}.do_test t
1280: 61 62 6c 65 61 70 69 2d 33 2e 33 2e 32 20 7b 0a  ableapi-3.3.2 {.
1290: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61    sqlite3_get_ta
12a0: 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62  ble_printf $::db
12b0: 78 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  x {.    SELECT *
12c0: 20 46 52 4f 4d 20 78 79 7a 20 57 48 45 52 45 20   FROM xyz WHERE 
12d0: 61 3e 34 37 20 4f 52 44 45 52 20 42 59 20 61 0a  a>47 ORDER BY a.
12e0: 20 20 7d 20 7b 7d 0a 7d 20 7b 30 20 33 20 32 20    } {}.} {0 3 2 
12f0: 61 20 62 20 34 38 20 28 34 38 29 20 34 39 20 28  a b 48 (48) 49 (
1300: 34 39 29 20 35 30 20 28 35 30 29 7d 0a 64 6f 5f  49) 50 (50)}.do_
1310: 74 65 73 74 20 74 61 62 6c 65 61 70 69 2d 33 2e  test tableapi-3.
1320: 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 67 65  4 {.  sqlite3_ge
1330: 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 24  t_table_printf $
1340: 3a 3a 64 62 78 20 7b 0a 20 20 20 20 49 4e 53 45  ::dbx {.    INSE
1350: 52 54 20 49 4e 54 4f 20 78 79 7a 20 56 41 4c 55  RT INTO xyz VALU
1360: 45 53 28 35 31 2c 27 25 71 27 29 0a 20 20 7d 20  ES(51,'%q').  } 
1370: 24 3a 3a 62 69 67 5f 73 74 72 0a 7d 20 7b 30 20  $::big_str.} {0 
1380: 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 74 61 62  0 0}.do_test tab
1390: 6c 65 61 70 69 2d 33 2e 35 20 7b 0a 20 20 73 71  leapi-3.5 {.  sq
13a0: 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f  lite3_get_table_
13b0: 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b 0a  printf $::dbx {.
13c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
13d0: 4d 20 78 79 7a 20 57 48 45 52 45 20 61 3e 34 39  M xyz WHERE a>49
13e0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d   ORDER BY a;.  }
13f0: 20 7b 7d 0a 7d 20 22 30 20 32 20 32 20 61 20 62   {}.} "0 2 2 a b
1400: 20 35 30 20 28 35 30 29 20 35 31 20 5c 31 37 33   50 (50) 51 \173
1410: 24 3a 3a 62 69 67 5f 73 74 72 5c 31 37 35 22 0a  $::big_str\175".
1420: 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 61 70 69  do_test tableapi
1430: 2d 33 2e 36 20 7b 0a 20 20 73 71 6c 69 74 65 33  -3.6 {.  sqlite3
1440: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
1450: 66 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20 20 49  f $::dbx {.    I
1460: 4e 53 45 52 54 20 49 4e 54 4f 20 78 79 7a 20 56  NSERT INTO xyz V
1470: 41 4c 55 45 53 28 35 32 2c 4e 55 4c 4c 29 0a 20  ALUES(52,NULL). 
1480: 20 7d 20 7b 7d 0a 20 20 69 66 63 61 70 61 62 6c   } {}.  ifcapabl
1490: 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 20  e subquery {.   
14a0: 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62   sqlite3_get_tab
14b0: 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78  le_printf $::dbx
14c0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
14d0: 2a 20 46 52 4f 4d 20 78 79 7a 20 57 48 45 52 45  * FROM xyz WHERE
14e0: 20 61 20 49 4e 20 28 34 32 2c 35 30 2c 35 32 29   a IN (42,50,52)
14f0: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
1500: 0a 20 20 20 20 7d 20 7b 7d 0a 20 20 7d 20 65 6c  .    } {}.  } el
1510: 73 65 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  se {.    sqlite3
1520: 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74  _get_table_print
1530: 66 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20 20 20  f $::dbx {.     
1540: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78   SELECT * FROM x
1550: 79 7a 20 57 48 45 52 45 20 61 3d 34 32 20 4f 52  yz WHERE a=42 OR
1560: 20 61 3d 35 30 20 4f 52 20 61 3d 35 32 20 4f 52   a=50 OR a=52 OR
1570: 44 45 52 20 42 59 20 61 20 44 45 53 43 0a 20 20  DER BY a DESC.  
1580: 20 20 7d 20 7b 7d 0a 20 20 7d 0a 7d 20 7b 30 20    } {}.  }.} {0 
1590: 33 20 32 20 61 20 62 20 35 32 20 4e 55 4c 4c 20  3 2 a b 52 NULL 
15a0: 35 30 20 28 35 30 29 20 34 32 20 28 34 32 29 7d  50 (50) 42 (42)}
15b0: 0a 64 6f 5f 74 65 73 74 20 74 61 62 6c 65 61 70  .do_test tableap
15c0: 69 2d 33 2e 37 20 7b 0a 20 20 73 71 6c 69 74 65  i-3.7 {.  sqlite
15d0: 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e  3_get_table_prin
15e0: 74 66 20 24 3a 3a 64 62 78 20 7b 0a 20 20 20 20  tf $::dbx {.    
15f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 79  SELECT * FROM xy
1600: 7a 20 57 48 45 52 45 20 61 3e 31 30 30 30 0a 20  z WHERE a>1000. 
1610: 20 7d 20 7b 7d 0a 7d 20 7b 30 20 30 20 32 20 61   } {}.} {0 0 2 a
1620: 20 62 7d 0a 0a 64 6f 5f 74 65 73 74 20 74 61 62   b}..do_test tab
1630: 6c 65 61 70 69 2d 34 2e 31 20 7b 0a 20 20 73 65  leapi-4.1 {.  se
1640: 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20 20  t rc [catch {.  
1650: 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61    sqlite3_get_ta
1660: 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62  ble_printf $::db
1670: 78 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  x {.      SELECT
1680: 20 2a 20 46 52 4f 4d 20 78 79 7a 3b 20 20 53 45   * FROM xyz;  SE
1690: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
16a0: 74 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 7d 20  te_master.    } 
16b0: 7b 7d 0a 20 20 7d 20 6d 73 67 5d 0a 20 20 63 6f  {}.  } msg].  co
16c0: 6e 63 61 74 20 24 72 63 20 24 6d 73 67 0a 7d 20  ncat $rc $msg.} 
16d0: 7b 30 20 31 20 7b 73 71 6c 69 74 65 33 5f 67 65  {0 1 {sqlite3_ge
16e0: 74 5f 74 61 62 6c 65 28 29 20 63 61 6c 6c 65 64  t_table() called
16f0: 20 77 69 74 68 20 74 77 6f 20 6f 72 20 6d 6f 72   with two or mor
1700: 65 20 69 6e 63 6f 6d 70 61 74 69 62 6c 65 20 71  e incompatible q
1710: 75 65 72 69 65 73 7d 7d 0a 0a 23 20 41 20 72 65  ueries}}..# A re
1720: 70 6f 72 74 20 6f 6e 20 74 68 65 20 6d 61 69 6c  port on the mail
1730: 69 6e 67 20 6c 69 73 74 20 73 61 79 73 20 74 68  ing list says th
1740: 61 74 20 74 68 65 20 73 71 6c 69 74 65 5f 67 65  at the sqlite_ge
1750: 74 5f 74 61 62 6c 65 28 29 20 61 70 69 20 66 61  t_table() api fa
1760: 69 6c 73 0a 23 20 6f 6e 20 71 75 65 72 69 65 73  ils.# on queries
1770: 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 6f 72 65 20   involving more 
1780: 74 68 61 6e 20 34 30 20 63 6f 6c 75 6d 6e 73 2e  than 40 columns.
1790: 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
17a0: 63 6f 64 65 20 61 74 74 65 6d 70 74 73 0a 23 20  code attempts.# 
17b0: 74 6f 20 74 65 73 74 20 74 68 61 74 20 63 6f 6d  to test that com
17c0: 70 6c 61 69 6e 74 0a 23 0a 64 6f 5f 74 65 73 74  plaint.#.do_test
17d0: 20 74 61 62 6c 65 61 70 69 2d 35 2e 31 20 7b 0a   tableapi-5.1 {.
17e0: 20 20 73 65 74 20 73 71 6c 20 22 43 52 45 41 54    set sql "CREAT
17f0: 45 20 54 41 42 4c 45 20 74 32 28 22 0a 20 20 73  E TABLE t2(".  s
1800: 65 74 20 73 65 70 20 22 22 0a 20 20 66 6f 72 20  et sep "".  for 
1810: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31  {set i 1} {$i<=1
1820: 30 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  00} {incr i} {. 
1830: 20 20 20 61 70 70 65 6e 64 20 73 71 6c 20 24 7b     append sql ${
1840: 73 65 70 7d 78 24 69 0a 20 20 20 20 73 65 74 20  sep}x$i.    set 
1850: 73 65 70 20 2c 0a 20 20 7d 0a 20 20 61 70 70 65  sep ,.  }.  appe
1860: 6e 64 20 73 71 6c 20 29 0a 20 20 73 71 6c 69 74  nd sql ).  sqlit
1870: 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69  e3_get_table_pri
1880: 6e 74 66 20 24 3a 3a 64 62 78 20 24 73 71 6c 20  ntf $::dbx $sql 
1890: 7b 7d 0a 20 20 73 65 74 20 73 71 6c 20 22 49 4e  {}.  set sql "IN
18a0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
18b0: 55 45 53 28 22 0a 20 20 73 65 74 20 73 65 70 20  UES(".  set sep 
18c0: 22 22 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  "".  for {set i 
18d0: 31 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e  1} {$i<=100} {in
18e0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 61 70 70 65  cr i} {.    appe
18f0: 6e 64 20 73 71 6c 20 24 7b 73 65 70 7d 24 69 0a  nd sql ${sep}$i.
1900: 20 20 20 20 73 65 74 20 73 65 70 20 2c 0a 20 20      set sep ,.  
1910: 7d 0a 20 20 61 70 70 65 6e 64 20 73 71 6c 20 29  }.  append sql )
1920: 0a 20 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 74  .  sqlite3_get_t
1930: 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64  able_printf $::d
1940: 62 78 20 24 73 71 6c 20 7b 7d 0a 20 20 73 71 6c  bx $sql {}.  sql
1950: 69 74 65 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70  ite3_get_table_p
1960: 72 69 6e 74 66 20 24 3a 3a 64 62 78 20 7b 53 45  rintf $::dbx {SE
1970: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20  LECT * FROM t2} 
1980: 7b 7d 0a 7d 20 7b 30 20 31 20 31 30 30 20 78 31  {}.} {0 1 100 x1
1990: 20 78 32 20 78 33 20 78 34 20 78 35 20 78 36 20   x2 x3 x4 x5 x6 
19a0: 78 37 20 78 38 20 78 39 20 78 31 30 20 78 31 31  x7 x8 x9 x10 x11
19b0: 20 78 31 32 20 78 31 33 20 78 31 34 20 78 31 35   x12 x13 x14 x15
19c0: 20 78 31 36 20 78 31 37 20 78 31 38 20 78 31 39   x16 x17 x18 x19
19d0: 20 78 32 30 20 78 32 31 20 78 32 32 20 78 32 33   x20 x21 x22 x23
19e0: 20 78 32 34 20 78 32 35 20 78 32 36 20 78 32 37   x24 x25 x26 x27
19f0: 20 78 32 38 20 78 32 39 20 78 33 30 20 78 33 31   x28 x29 x30 x31
1a00: 20 78 33 32 20 78 33 33 20 78 33 34 20 78 33 35   x32 x33 x34 x35
1a10: 20 78 33 36 20 78 33 37 20 78 33 38 20 78 33 39   x36 x37 x38 x39
1a20: 20 78 34 30 20 78 34 31 20 78 34 32 20 78 34 33   x40 x41 x42 x43
1a30: 20 78 34 34 20 78 34 35 20 78 34 36 20 78 34 37   x44 x45 x46 x47
1a40: 20 78 34 38 20 78 34 39 20 78 35 30 20 78 35 31   x48 x49 x50 x51
1a50: 20 78 35 32 20 78 35 33 20 78 35 34 20 78 35 35   x52 x53 x54 x55
1a60: 20 78 35 36 20 78 35 37 20 78 35 38 20 78 35 39   x56 x57 x58 x59
1a70: 20 78 36 30 20 78 36 31 20 78 36 32 20 78 36 33   x60 x61 x62 x63
1a80: 20 78 36 34 20 78 36 35 20 78 36 36 20 78 36 37   x64 x65 x66 x67
1a90: 20 78 36 38 20 78 36 39 20 78 37 30 20 78 37 31   x68 x69 x70 x71
1aa0: 20 78 37 32 20 78 37 33 20 78 37 34 20 78 37 35   x72 x73 x74 x75
1ab0: 20 78 37 36 20 78 37 37 20 78 37 38 20 78 37 39   x76 x77 x78 x79
1ac0: 20 78 38 30 20 78 38 31 20 78 38 32 20 78 38 33   x80 x81 x82 x83
1ad0: 20 78 38 34 20 78 38 35 20 78 38 36 20 78 38 37   x84 x85 x86 x87
1ae0: 20 78 38 38 20 78 38 39 20 78 39 30 20 78 39 31   x88 x89 x90 x91
1af0: 20 78 39 32 20 78 39 33 20 78 39 34 20 78 39 35   x92 x93 x94 x95
1b00: 20 78 39 36 20 78 39 37 20 78 39 38 20 78 39 39   x96 x97 x98 x99
1b10: 20 78 31 30 30 20 31 20 32 20 33 20 34 20 35 20   x100 1 2 3 4 5 
1b20: 36 20 37 20 38 20 39 20 31 30 20 31 31 20 31 32  6 7 8 9 10 11 12
1b30: 20 31 33 20 31 34 20 31 35 20 31 36 20 31 37 20   13 14 15 16 17 
1b40: 31 38 20 31 39 20 32 30 20 32 31 20 32 32 20 32  18 19 20 21 22 2
1b50: 33 20 32 34 20 32 35 20 32 36 20 32 37 20 32 38  3 24 25 26 27 28
1b60: 20 32 39 20 33 30 20 33 31 20 33 32 20 33 33 20   29 30 31 32 33 
1b70: 33 34 20 33 35 20 33 36 20 33 37 20 33 38 20 33  34 35 36 37 38 3
1b80: 39 20 34 30 20 34 31 20 34 32 20 34 33 20 34 34  9 40 41 42 43 44
1b90: 20 34 35 20 34 36 20 34 37 20 34 38 20 34 39 20   45 46 47 48 49 
1ba0: 35 30 20 35 31 20 35 32 20 35 33 20 35 34 20 35  50 51 52 53 54 5
1bb0: 35 20 35 36 20 35 37 20 35 38 20 35 39 20 36 30  5 56 57 58 59 60
1bc0: 20 36 31 20 36 32 20 36 33 20 36 34 20 36 35 20   61 62 63 64 65 
1bd0: 36 36 20 36 37 20 36 38 20 36 39 20 37 30 20 37  66 67 68 69 70 7
1be0: 31 20 37 32 20 37 33 20 37 34 20 37 35 20 37 36  1 72 73 74 75 76
1bf0: 20 37 37 20 37 38 20 37 39 20 38 30 20 38 31 20   77 78 79 80 81 
1c00: 38 32 20 38 33 20 38 34 20 38 35 20 38 36 20 38  82 83 84 85 86 8
1c10: 37 20 38 38 20 38 39 20 39 30 20 39 31 20 39 32  7 88 89 90 91 92
1c20: 20 39 33 20 39 34 20 39 35 20 39 36 20 39 37 20   93 94 95 96 97 
1c30: 39 38 20 39 39 20 31 30 30 7d 0a 64 6f 5f 74 65  98 99 100}.do_te
1c40: 73 74 20 74 61 62 6c 65 61 70 69 2d 35 2e 32 20  st tableapi-5.2 
1c50: 7b 0a 20 20 73 65 74 20 73 71 6c 20 22 49 4e 53  {.  set sql "INS
1c60: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1c70: 45 53 28 22 0a 20 20 73 65 74 20 73 65 70 20 22  ES(".  set sep "
1c80: 22 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  ".  for {set i 1
1c90: 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e 63  } {$i<=100} {inc
1ca0: 72 20 69 7d 20 7b 0a 20 20 20 20 61 70 70 65 6e  r i} {.    appen
1cb0: 64 20 73 71 6c 20 24 7b 73 65 70 7d 5b 65 78 70  d sql ${sep}[exp
1cc0: 72 20 7b 24 69 2b 31 30 30 30 7d 5d 0a 20 20 20  r {$i+1000}].   
1cd0: 20 73 65 74 20 73 65 70 20 2c 0a 20 20 7d 0a 20   set sep ,.  }. 
1ce0: 20 61 70 70 65 6e 64 20 73 71 6c 20 29 0a 20 20   append sql ).  
1cf0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 74 61 62 6c  sqlite3_get_tabl
1d00: 65 5f 70 72 69 6e 74 66 20 24 3a 3a 64 62 78 20  e_printf $::dbx 
1d10: 24 73 71 6c 20 7b 7d 0a 20 20 73 71 6c 69 74 65  $sql {}.  sqlite
1d20: 33 5f 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e  3_get_table_prin
1d30: 74 66 20 24 3a 3a 64 62 78 20 7b 53 45 4c 45 43  tf $::dbx {SELEC
1d40: 54 20 2a 20 46 52 4f 4d 20 74 32 7d 20 7b 7d 0a  T * FROM t2} {}.
1d50: 7d 20 7b 30 20 32 20 31 30 30 20 78 31 20 78 32  } {0 2 100 x1 x2
1d60: 20 78 33 20 78 34 20 78 35 20 78 36 20 78 37 20   x3 x4 x5 x6 x7 
1d70: 78 38 20 78 39 20 78 31 30 20 78 31 31 20 78 31  x8 x9 x10 x11 x1
1d80: 32 20 78 31 33 20 78 31 34 20 78 31 35 20 78 31  2 x13 x14 x15 x1
1d90: 36 20 78 31 37 20 78 31 38 20 78 31 39 20 78 32  6 x17 x18 x19 x2
1da0: 30 20 78 32 31 20 78 32 32 20 78 32 33 20 78 32  0 x21 x22 x23 x2
1db0: 34 20 78 32 35 20 78 32 36 20 78 32 37 20 78 32  4 x25 x26 x27 x2
1dc0: 38 20 78 32 39 20 78 33 30 20 78 33 31 20 78 33  8 x29 x30 x31 x3
1dd0: 32 20 78 33 33 20 78 33 34 20 78 33 35 20 78 33  2 x33 x34 x35 x3
1de0: 36 20 78 33 37 20 78 33 38 20 78 33 39 20 78 34  6 x37 x38 x39 x4
1df0: 30 20 78 34 31 20 78 34 32 20 78 34 33 20 78 34  0 x41 x42 x43 x4
1e00: 34 20 78 34 35 20 78 34 36 20 78 34 37 20 78 34  4 x45 x46 x47 x4
1e10: 38 20 78 34 39 20 78 35 30 20 78 35 31 20 78 35  8 x49 x50 x51 x5
1e20: 32 20 78 35 33 20 78 35 34 20 78 35 35 20 78 35  2 x53 x54 x55 x5
1e30: 36 20 78 35 37 20 78 35 38 20 78 35 39 20 78 36  6 x57 x58 x59 x6
1e40: 30 20 78 36 31 20 78 36 32 20 78 36 33 20 78 36  0 x61 x62 x63 x6
1e50: 34 20 78 36 35 20 78 36 36 20 78 36 37 20 78 36  4 x65 x66 x67 x6
1e60: 38 20 78 36 39 20 78 37 30 20 78 37 31 20 78 37  8 x69 x70 x71 x7
1e70: 32 20 78 37 33 20 78 37 34 20 78 37 35 20 78 37  2 x73 x74 x75 x7
1e80: 36 20 78 37 37 20 78 37 38 20 78 37 39 20 78 38  6 x77 x78 x79 x8
1e90: 30 20 78 38 31 20 78 38 32 20 78 38 33 20 78 38  0 x81 x82 x83 x8
1ea0: 34 20 78 38 35 20 78 38 36 20 78 38 37 20 78 38  4 x85 x86 x87 x8
1eb0: 38 20 78 38 39 20 78 39 30 20 78 39 31 20 78 39  8 x89 x90 x91 x9
1ec0: 32 20 78 39 33 20 78 39 34 20 78 39 35 20 78 39  2 x93 x94 x95 x9
1ed0: 36 20 78 39 37 20 78 39 38 20 78 39 39 20 78 31  6 x97 x98 x99 x1
1ee0: 30 30 20 31 20 32 20 33 20 34 20 35 20 36 20 37  00 1 2 3 4 5 6 7
1ef0: 20 38 20 39 20 31 30 20 31 31 20 31 32 20 31 33   8 9 10 11 12 13
1f00: 20 31 34 20 31 35 20 31 36 20 31 37 20 31 38 20   14 15 16 17 18 
1f10: 31 39 20 32 30 20 32 31 20 32 32 20 32 33 20 32  19 20 21 22 23 2
1f20: 34 20 32 35 20 32 36 20 32 37 20 32 38 20 32 39  4 25 26 27 28 29
1f30: 20 33 30 20 33 31 20 33 32 20 33 33 20 33 34 20   30 31 32 33 34 
1f40: 33 35 20 33 36 20 33 37 20 33 38 20 33 39 20 34  35 36 37 38 39 4
1f50: 30 20 34 31 20 34 32 20 34 33 20 34 34 20 34 35  0 41 42 43 44 45
1f60: 20 34 36 20 34 37 20 34 38 20 34 39 20 35 30 20   46 47 48 49 50 
1f70: 35 31 20 35 32 20 35 33 20 35 34 20 35 35 20 35  51 52 53 54 55 5
1f80: 36 20 35 37 20 35 38 20 35 39 20 36 30 20 36 31  6 57 58 59 60 61
1f90: 20 36 32 20 36 33 20 36 34 20 36 35 20 36 36 20   62 63 64 65 66 
1fa0: 36 37 20 36 38 20 36 39 20 37 30 20 37 31 20 37  67 68 69 70 71 7
1fb0: 32 20 37 33 20 37 34 20 37 35 20 37 36 20 37 37  2 73 74 75 76 77
1fc0: 20 37 38 20 37 39 20 38 30 20 38 31 20 38 32 20   78 79 80 81 82 
1fd0: 38 33 20 38 34 20 38 35 20 38 36 20 38 37 20 38  83 84 85 86 87 8
1fe0: 38 20 38 39 20 39 30 20 39 31 20 39 32 20 39 33  8 89 90 91 92 93
1ff0: 20 39 34 20 39 35 20 39 36 20 39 37 20 39 38 20   94 95 96 97 98 
2000: 39 39 20 31 30 30 20 31 30 30 31 20 31 30 30 32  99 100 1001 1002
2010: 20 31 30 30 33 20 31 30 30 34 20 31 30 30 35 20   1003 1004 1005 
2020: 31 30 30 36 20 31 30 30 37 20 31 30 30 38 20 31  1006 1007 1008 1
2030: 30 30 39 20 31 30 31 30 20 31 30 31 31 20 31 30  009 1010 1011 10
2040: 31 32 20 31 30 31 33 20 31 30 31 34 20 31 30 31  12 1013 1014 101
2050: 35 20 31 30 31 36 20 31 30 31 37 20 31 30 31 38  5 1016 1017 1018
2060: 20 31 30 31 39 20 31 30 32 30 20 31 30 32 31 20   1019 1020 1021 
2070: 31 30 32 32 20 31 30 32 33 20 31 30 32 34 20 31  1022 1023 1024 1
2080: 30 32 35 20 31 30 32 36 20 31 30 32 37 20 31 30  025 1026 1027 10
2090: 32 38 20 31 30 32 39 20 31 30 33 30 20 31 30 33  28 1029 1030 103
20a0: 31 20 31 30 33 32 20 31 30 33 33 20 31 30 33 34  1 1032 1033 1034
20b0: 20 31 30 33 35 20 31 30 33 36 20 31 30 33 37 20   1035 1036 1037 
20c0: 31 30 33 38 20 31 30 33 39 20 31 30 34 30 20 31  1038 1039 1040 1
20d0: 30 34 31 20 31 30 34 32 20 31 30 34 33 20 31 30  041 1042 1043 10
20e0: 34 34 20 31 30 34 35 20 31 30 34 36 20 31 30 34  44 1045 1046 104
20f0: 37 20 31 30 34 38 20 31 30 34 39 20 31 30 35 30  7 1048 1049 1050
2100: 20 31 30 35 31 20 31 30 35 32 20 31 30 35 33 20   1051 1052 1053 
2110: 31 30 35 34 20 31 30 35 35 20 31 30 35 36 20 31  1054 1055 1056 1
2120: 30 35 37 20 31 30 35 38 20 31 30 35 39 20 31 30  057 1058 1059 10
2130: 36 30 20 31 30 36 31 20 31 30 36 32 20 31 30 36  60 1061 1062 106
2140: 33 20 31 30 36 34 20 31 30 36 35 20 31 30 36 36  3 1064 1065 1066
2150: 20 31 30 36 37 20 31 30 36 38 20 31 30 36 39 20   1067 1068 1069 
2160: 31 30 37 30 20 31 30 37 31 20 31 30 37 32 20 31  1070 1071 1072 1
2170: 30 37 33 20 31 30 37 34 20 31 30 37 35 20 31 30  073 1074 1075 10
2180: 37 36 20 31 30 37 37 20 31 30 37 38 20 31 30 37  76 1077 1078 107
2190: 39 20 31 30 38 30 20 31 30 38 31 20 31 30 38 32  9 1080 1081 1082
21a0: 20 31 30 38 33 20 31 30 38 34 20 31 30 38 35 20   1083 1084 1085 
21b0: 31 30 38 36 20 31 30 38 37 20 31 30 38 38 20 31  1086 1087 1088 1
21c0: 30 38 39 20 31 30 39 30 20 31 30 39 31 20 31 30  089 1090 1091 10
21d0: 39 32 20 31 30 39 33 20 31 30 39 34 20 31 30 39  92 1093 1094 109
21e0: 35 20 31 30 39 36 20 31 30 39 37 20 31 30 39 38  5 1096 1097 1098
21f0: 20 31 30 39 39 20 31 31 30 30 7d 0a 0a 69 66 63   1099 1100}..ifc
2200: 61 70 61 62 6c 65 20 73 63 68 65 6d 61 5f 70 72  apable schema_pr
2210: 61 67 6d 61 73 20 7b 0a 20 20 64 6f 5f 74 65 73  agmas {.  do_tes
2220: 74 20 74 61 62 6c 65 61 70 69 2d 36 2e 31 20 7b  t tableapi-6.1 {
2230: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 67 65 74  .    sqlite3_get
2240: 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66 20 24 3a  _table_printf $:
2250: 3a 64 62 78 20 7b 50 52 41 47 4d 41 20 75 73 65  :dbx {PRAGMA use
2260: 72 5f 76 65 72 73 69 6f 6e 7d 20 7b 7d 0a 20 20  r_version} {}.  
2270: 7d 20 7b 30 20 31 20 31 20 75 73 65 72 5f 76 65  } {0 1 1 user_ve
2280: 72 73 69 6f 6e 20 30 7d 0a 7d 0a 0a 69 66 63 61  rsion 0}.}..ifca
2290: 70 61 62 6c 65 20 6d 65 6d 64 65 62 75 67 20 7b  pable memdebug {
22a0: 0a 20 20 73 6f 75 72 63 65 20 24 74 65 73 74 64  .  source $testd
22b0: 69 72 2f 6d 61 6c 6c 6f 63 5f 63 6f 6d 6d 6f 6e  ir/malloc_common
22c0: 2e 74 63 6c 0a 20 20 64 6f 5f 6d 61 6c 6c 6f 63  .tcl.  do_malloc
22d0: 5f 74 65 73 74 20 74 61 62 6c 65 61 70 69 2d 37  _test tableapi-7
22e0: 20 2d 73 71 6c 70 72 65 70 20 7b 0a 20 20 20 20   -sqlprep {.    
22f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2300: 61 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  a,b);.    INSERT
2310: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2320: 31 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  1,2);.    INSERT
2330: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
2340: 33 2c 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  3,4);.    INSERT
2350: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
2360: 61 2b 34 2c 20 62 2b 34 20 46 52 4f 4d 20 74 31  a+4, b+4 FROM t1
2370: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2380: 4f 20 74 31 20 53 45 4c 45 43 54 20 61 2b 38 2c  O t1 SELECT a+8,
2390: 20 62 2b 38 20 46 52 4f 4d 20 74 31 3b 0a 20 20   b+8 FROM t1;.  
23a0: 7d 20 2d 74 63 6c 62 6f 64 79 20 7b 0a 20 20 20  } -tclbody {.   
23b0: 20 73 65 74 20 72 20 5b 73 71 6c 69 74 65 33 5f   set r [sqlite3_
23c0: 67 65 74 5f 74 61 62 6c 65 5f 70 72 69 6e 74 66  get_table_printf
23d0: 20 64 62 20 7b 53 45 4c 45 43 54 20 72 6f 77 69   db {SELECT rowi
23e0: 64 2c 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 7d  d, a, b FROM t1}
23f0: 20 7b 7d 5d 0a 20 20 20 20 69 66 20 7b 5b 6c 6c   {}].    if {[ll
2400: 65 6e 67 74 68 20 24 72 5d 3c 32 36 7d 20 7b 65  ength $r]<26} {e
2410: 72 72 6f 72 20 22 6f 75 74 20 6f 66 20 6d 65 6d  rror "out of mem
2420: 6f 72 79 22 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  ory"}.  }.}..do_
2430: 74 65 73 74 20 74 61 62 6c 65 61 70 69 2d 39 39  test tableapi-99
2440: 2e 30 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 63  .0 {.  sqlite3_c
2450: 6c 6f 73 65 20 24 3a 3a 64 62 78 0a 7d 20 7b 53  lose $::dbx.} {S
2460: 51 4c 49 54 45 5f 4f 4b 7d 0a 0a 66 69 6e 69 73  QLITE_OK}..finis
2470: 68 5f 74 65 73 74 0a                             h_test.