/ Hex Artifact Content
Login

Artifact e7a988fdd982cdec62f1f1f34b0360e6476d01a0:


0000: 23 20 32 30 31 31 20 4a 61 6e 20 32 31 0a 23 0a  # 2011 Jan 21.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou 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 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20  ***.# This file 
0170: 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65  implements regre
0180: 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20  ssion tests for 
0190: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
01a0: 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69 6d  #.# This file im
01b0: 70 6c 65 6d 65 6e 74 73 20 74 65 73 74 73 20 66  plements tests f
01c0: 6f 72 20 74 68 65 20 22 73 71 6c 69 74 65 33 5f  or the "sqlite3_
01d0: 74 72 61 63 65 28 29 22 20 41 50 49 2e 20 53 70  trace()" API. Sp
01e0: 65 63 69 66 69 63 61 6c 6c 79 2c 0a 23 20 69 74  ecifically,.# it
01f0: 20 74 65 73 74 73 20 74 68 65 20 73 70 65 63 69   tests the speci
0200: 61 6c 20 68 61 6e 64 6c 69 6e 67 20 6f 66 20 6e  al handling of n
0210: 65 73 74 65 64 20 53 51 4c 20 73 74 61 74 65 6d  ested SQL statem
0220: 65 6e 74 73 20 28 74 68 6f 73 65 20 65 78 65 63  ents (those exec
0230: 75 74 65 64 0a 23 20 62 79 20 76 69 72 74 75 61  uted.# by virtua
0240: 6c 20 74 61 62 6c 65 20 6f 72 20 75 73 65 72 20  l table or user 
0250: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 62 61 63  function callbac
0260: 6b 73 29 2e 20 54 68 65 73 65 20 73 74 61 74 65  ks). These state
0270: 6d 65 6e 74 73 20 61 72 65 20 74 72 65 61 74 65  ments are treate
0280: 64 0a 23 20 64 69 66 66 65 72 65 6e 74 6c 79 20  d.# differently 
0290: 69 6e 20 74 77 6f 20 72 65 73 70 65 63 74 73 3a  in two respects:
02a0: 0a 23 0a 23 20 20 20 31 2e 20 45 61 63 68 20 6c  .#.#   1. Each l
02b0: 69 6e 65 20 6f 66 20 74 68 65 20 73 74 61 74 65  ine of the state
02c0: 6d 65 6e 74 20 69 73 20 70 72 65 66 69 78 65 64  ment is prefixed
02d0: 20 77 69 74 68 20 22 2d 2d 20 22 20 74 6f 20 74   with "-- " to t
02e0: 75 72 6e 20 69 74 20 69 6e 74 6f 0a 23 20 20 20  urn it into.#   
02f0: 20 20 20 61 6e 20 53 51 4c 20 63 6f 6d 6d 65 6e     an SQL commen
0300: 74 2e 0a 23 0a 23 20 20 20 32 2e 20 50 61 72 61  t..#.#   2. Para
0310: 6d 65 74 65 72 20 65 78 70 61 6e 73 69 6f 6e 20  meter expansion 
0320: 69 73 20 6e 6f 74 20 70 65 72 66 6f 72 6d 65 64  is not performed
0330: 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72  ..#..set testdir
0340: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24   [file dirname $
0350: 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74  argv0].source $t
0360: 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63  estdir/tester.tc
0370: 6c 0a 69 66 63 61 70 61 62 6c 65 20 21 74 72 61  l.ifcapable !tra
0380: 63 65 20 7b 20 66 69 6e 69 73 68 5f 74 65 73 74  ce { finish_test
0390: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 73 65 74 20   ; return }.set 
03a0: 3a 3a 74 65 73 74 70 72 65 66 69 78 20 74 72 61  ::testprefix tra
03b0: 63 65 32 0a 0a 70 72 6f 63 20 73 71 6c 20 7b 7a  ce2..proc sql {z
03c0: 53 71 6c 7d 20 7b 20 64 62 20 6f 6e 65 20 24 7a  Sql} { db one $z
03d0: 53 71 6c 20 7d 0a 70 72 6f 63 20 74 72 61 63 65  Sql }.proc trace
03e0: 20 7b 7a 53 71 6c 7d 20 7b 20 6c 61 70 70 65 6e   {zSql} { lappen
03f0: 64 20 3a 3a 74 72 61 63 65 20 24 7a 53 71 6c 20  d ::trace $zSql 
0400: 7d 0a 0a 64 62 20 66 75 6e 63 20 73 71 6c 20 73  }..db func sql s
0410: 71 6c 0a 64 62 20 74 72 61 63 65 20 74 72 61 63  ql.db trace trac
0420: 65 0a 0a 70 72 6f 63 20 64 6f 5f 74 72 61 63 65  e..proc do_trace
0430: 5f 74 65 73 74 20 7b 74 6e 20 73 71 6c 20 65 78  _test {tn sql ex
0440: 70 65 63 74 65 64 7d 20 7b 0a 20 20 23 20 54 65  pected} {.  # Te
0450: 73 74 20 74 68 61 74 20 74 68 65 20 6c 69 73 74  st that the list
0460: 20 6f 66 20 73 74 72 69 6e 67 20 70 61 73 73 65   of string passe
0470: 64 20 74 6f 20 74 68 65 20 74 72 61 63 65 20 63  d to the trace c
0480: 61 6c 6c 62 61 63 6b 20 77 68 65 6e 20 24 73 71  allback when $sq
0490: 6c 0a 20 20 23 20 69 73 20 65 78 65 63 75 74 65  l.  # is execute
04a0: 64 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 20  d is equivalent 
04b0: 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 73  to the list of s
04c0: 74 72 69 6e 67 73 20 69 6e 20 24 65 78 70 65 63  trings in $expec
04d0: 74 65 64 2e 0a 20 20 23 0a 20 20 73 65 74 20 3a  ted..  #.  set :
04e0: 3a 74 72 61 63 65 20 5b 6c 69 73 74 5d 0a 20 20  :trace [list].  
04f0: 65 78 65 63 73 71 6c 20 24 73 71 6c 0a 20 20 75  execsql $sql.  u
0500: 70 6c 65 76 65 6c 20 64 6f 5f 74 65 73 74 20 24  plevel do_test $
0510: 74 6e 20 5b 6c 69 73 74 20 7b 73 65 74 20 3a 3a  tn [list {set ::
0520: 74 72 61 63 65 7d 5d 20 5b 6c 69 73 74 20 5b 6c  trace}] [list [l
0530: 69 73 74 20 7b 2a 7d 24 65 78 70 65 63 74 65 64  ist {*}$expected
0540: 5d 5d 0a 7d 0a 0a 70 72 6f 63 20 64 6f 5f 74 72  ]].}..proc do_tr
0550: 61 63 65 5f 73 65 6c 65 63 74 5f 74 65 73 74 20  ace_select_test 
0560: 7b 74 6e 20 73 71 6c 20 65 78 70 65 63 74 65 64  {tn sql expected
0570: 7d 20 7b 0a 0a 20 20 75 70 6c 65 76 65 6c 20 5b  } {..  uplevel [
0580: 6c 69 73 74 20 64 6f 5f 74 72 61 63 65 5f 74 65  list do_trace_te
0590: 73 74 20 24 7b 74 6e 7d 2e 61 20 24 73 71 6c 20  st ${tn}.a $sql 
05a0: 24 65 78 70 65 63 74 65 64 5d 0a 0a 20 20 23 20  $expected]..  # 
05b0: 4e 6f 77 20 65 78 65 63 75 74 65 20 65 61 63 68  Now execute each
05c0: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 70   SQL statement p
05d0: 61 73 73 65 64 20 74 6f 20 74 68 65 20 74 72 61  assed to the tra
05e0: 63 65 20 63 61 6c 6c 62 61 63 6b 20 69 6e 20 74  ce callback in t
05f0: 68 65 0a 20 20 23 20 62 6c 6f 63 6b 20 61 62 6f  he.  # block abo
0600: 76 65 2e 20 43 68 65 63 6b 20 74 68 61 74 20 74  ve. Check that t
0610: 68 69 73 20 63 61 75 73 65 73 20 74 68 65 20 73  his causes the s
0620: 61 6d 65 20 73 65 74 20 6f 66 20 73 74 72 69 6e  ame set of strin
0630: 67 73 20 74 6f 20 62 65 0a 20 20 23 20 70 61 73  gs to be.  # pas
0640: 73 65 64 20 74 6f 20 74 68 65 20 74 72 61 63 65  sed to the trace
0650: 20 63 61 6c 6c 62 61 63 6b 20 61 67 61 69 6e 2e   callback again.
0660: 20 69 2e 65 2e 20 74 68 61 74 20 65 78 65 63 75   i.e. that execu
0670: 74 69 6e 67 20 74 68 65 20 6f 75 74 70 75 74 0a  ting the output.
0680: 20 20 23 20 6f 66 20 74 68 65 20 74 72 61 63 65    # of the trace
0690: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 65 71 75   callback is equ
06a0: 69 76 61 6c 65 6e 74 20 74 6f 20 74 68 65 20 53  ivalent to the S
06b0: 51 4c 20 73 63 72 69 70 74 20 69 6e 20 24 73 71  QL script in $sq
06c0: 6c 2e 0a 20 20 23 0a 20 20 73 65 74 20 73 71 6c  l..  #.  set sql
06d0: 6c 69 73 74 20 24 3a 3a 74 72 61 63 65 0a 20 20  list $::trace.  
06e0: 73 65 74 20 3a 3a 74 72 61 63 65 20 5b 6c 69 73  set ::trace [lis
06f0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 69 74 65  t].  foreach ite
0700: 6d 20 24 73 71 6c 6c 69 73 74 20 7b 20 65 78 65  m $sqllist { exe
0710: 63 73 71 6c 20 24 69 74 65 6d 20 7d 0a 20 20 75  csql $item }.  u
0720: 70 6c 65 76 65 6c 20 64 6f 5f 74 65 73 74 20 24  plevel do_test $
0730: 74 6e 2e 62 20 5b 6c 69 73 74 20 7b 73 65 74 20  tn.b [list {set 
0740: 3a 3a 74 72 61 63 65 7d 5d 20 5b 6c 69 73 74 20  ::trace}] [list 
0750: 24 73 71 6c 6c 69 73 74 5d 0a 7d 0a 0a 64 6f 5f  $sqllist].}..do_
0760: 74 72 61 63 65 5f 73 65 6c 65 63 74 5f 74 65 73  trace_select_tes
0770: 74 20 31 2e 31 20 20 7b 0a 20 20 53 45 4c 45 43  t 1.1  {.  SELEC
0780: 54 20 31 2c 20 32 2c 20 33 3b 0a 7d 20 7b 0a 20  T 1, 2, 3;.} {. 
0790: 20 22 53 45 4c 45 43 54 20 31 2c 20 32 2c 20 33   "SELECT 1, 2, 3
07a0: 3b 22 0a 7d 0a 0a 64 6f 5f 74 72 61 63 65 5f 73  ;".}..do_trace_s
07b0: 65 6c 65 63 74 5f 74 65 73 74 20 31 2e 32 20 20  elect_test 1.2  
07c0: 7b 0a 20 20 53 45 4c 45 43 54 20 73 71 6c 28 27  {.  SELECT sql('
07d0: 53 45 4c 45 43 54 20 31 2c 20 32 2c 20 33 27 29  SELECT 1, 2, 3')
07e0: 3b 0a 7d 20 7b 0a 20 20 22 53 45 4c 45 43 54 20  ;.} {.  "SELECT 
07f0: 73 71 6c 28 27 53 45 4c 45 43 54 20 31 2c 20 32  sql('SELECT 1, 2
0800: 2c 20 33 27 29 3b 22 0a 20 20 22 2d 2d 20 53 45  , 3');".  "-- SE
0810: 4c 45 43 54 20 31 2c 20 32 2c 20 33 22 0a 7d 0a  LECT 1, 2, 3".}.
0820: 0a 64 6f 5f 74 72 61 63 65 5f 73 65 6c 65 63 74  .do_trace_select
0830: 5f 74 65 73 74 20 31 2e 33 20 20 7b 0a 20 20 53  _test 1.3  {.  S
0840: 45 4c 45 43 54 20 73 71 6c 28 27 53 45 4c 45 43  ELECT sql('SELEC
0850: 54 20 31 2c 20 0a 20 20 20 20 32 2c 20 0a 20 20  T 1, .    2, .  
0860: 20 20 33 27 0a 20 20 29 3b 0a 7d 20 7b 0a 20 20    3'.  );.} {.  
0870: 22 53 45 4c 45 43 54 20 73 71 6c 28 27 53 45 4c  "SELECT sql('SEL
0880: 45 43 54 20 31 2c 20 0a 20 20 20 20 32 2c 20 0a  ECT 1, .    2, .
0890: 20 20 20 20 33 27 0a 20 20 29 3b 22 0a 20 20 22      3'.  );".  "
08a0: 2d 2d 20 53 45 4c 45 43 54 20 31 2c 20 0a 2d 2d  -- SELECT 1, .--
08b0: 20 20 20 20 20 32 2c 20 0a 2d 2d 20 20 20 20 20       2, .--     
08c0: 33 22 0a 7d 0a 0a 64 6f 5f 74 72 61 63 65 5f 73  3".}..do_trace_s
08d0: 65 6c 65 63 74 5f 74 65 73 74 20 31 2e 34 20 20  elect_test 1.4  
08e0: 7b 0a 20 20 53 45 4c 45 43 54 20 73 71 6c 28 27  {.  SELECT sql('
08f0: 53 45 4c 45 43 54 20 31 2c 20 0a 0a 0a 20 20 20  SELECT 1, ...   
0900: 20 33 27 0a 20 20 29 3b 0a 7d 20 7b 0a 20 20 22   3'.  );.} {.  "
0910: 53 45 4c 45 43 54 20 73 71 6c 28 27 53 45 4c 45  SELECT sql('SELE
0920: 43 54 20 31 2c 20 0a 0a 0a 20 20 20 20 33 27 0a  CT 1, ...    3'.
0930: 20 20 29 3b 22 0a 20 20 22 2d 2d 20 53 45 4c 45    );".  "-- SELE
0940: 43 54 20 31 2c 20 0a 2d 2d 20 0a 2d 2d 20 0a 2d  CT 1, .-- .-- .-
0950: 2d 20 20 20 20 20 33 22 0a 7d 0a 0a 64 6f 5f 74  -     3".}..do_t
0960: 72 61 63 65 5f 73 65 6c 65 63 74 5f 74 65 73 74  race_select_test
0970: 20 31 2e 35 20 20 7b 0a 20 20 53 45 4c 45 43 54   1.5  {.  SELECT
0980: 20 24 76 61 72 2c 20 73 71 6c 28 27 53 45 4c 45   $var, sql('SELE
0990: 43 54 20 31 2c 20 0a 20 20 20 20 24 76 61 72 2c  CT 1, .    $var,
09a0: 20 0a 20 20 20 20 33 27 0a 20 20 29 3b 0a 7d 20   .    3'.  );.} 
09b0: 7b 0a 20 20 22 53 45 4c 45 43 54 20 4e 55 4c 4c  {.  "SELECT NULL
09c0: 2c 20 73 71 6c 28 27 53 45 4c 45 43 54 20 31 2c  , sql('SELECT 1,
09d0: 20 0a 20 20 20 20 24 76 61 72 2c 20 0a 20 20 20   .    $var, .   
09e0: 20 33 27 0a 20 20 29 3b 22 0a 20 20 22 2d 2d 20   3'.  );".  "-- 
09f0: 53 45 4c 45 43 54 20 31 2c 20 0a 2d 2d 20 20 20  SELECT 1, .--   
0a00: 20 20 24 76 61 72 2c 20 0a 2d 2d 20 20 20 20 20    $var, .--     
0a10: 33 22 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  3".}..ifcapable 
0a20: 66 74 73 33 20 7b 0a 20 20 64 6f 5f 65 78 65 63  fts3 {.  do_exec
0a30: 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20  sql_test 2.1 {. 
0a40: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
0a50: 4c 20 54 41 42 4c 45 20 78 31 20 55 53 49 4e 47  L TABLE x1 USING
0a60: 20 66 74 73 34 3b 0a 20 20 20 20 49 4e 53 45 52   fts4;.    INSER
0a70: 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53  T INTO x1 VALUES
0a80: 28 27 43 6c 6f 75 64 79 2c 20 77 69 74 68 20 61  ('Cloudy, with a
0a90: 20 68 69 67 68 20 6e 65 61 72 20 31 36 27 29 3b   high near 16');
0aa0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0ab0: 20 78 31 20 56 41 4c 55 45 53 28 27 57 69 6e 64   x1 VALUES('Wind
0ac0: 20 63 68 69 6c 6c 20 76 61 6c 75 65 73 20 61 73   chill values as
0ad0: 20 6c 6f 77 20 61 73 20 2d 31 33 27 29 3b 0a 20   low as -13');. 
0ae0: 20 7d 0a 0a 20 20 64 6f 5f 74 72 61 63 65 5f 74   }..  do_trace_t
0af0: 65 73 74 20 32 2e 32 20 7b 0a 20 20 20 20 49 4e  est 2.2 {.    IN
0b00: 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c  SERT INTO x1 VAL
0b10: 55 45 53 28 27 4e 6f 72 74 68 20 6e 6f 72 74 68  UES('North north
0b20: 77 65 73 74 20 77 69 6e 64 20 62 65 74 77 65 65  west wind betwee
0b30: 6e 20 38 20 61 6e 64 20 31 34 20 6d 70 68 27 29  n 8 and 14 mph')
0b40: 3b 0a 20 20 7d 20 7b 0a 20 20 20 20 22 49 4e 53  ;.  } {.    "INS
0b50: 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55  ERT INTO x1 VALU
0b60: 45 53 28 27 4e 6f 72 74 68 20 6e 6f 72 74 68 77  ES('North northw
0b70: 65 73 74 20 77 69 6e 64 20 62 65 74 77 65 65 6e  est wind between
0b80: 20 38 20 61 6e 64 20 31 34 20 6d 70 68 27 29 3b   8 and 14 mph');
0b90: 22 20 0a 20 20 20 20 22 2d 2d 20 44 45 4c 45 54  " .    "-- DELET
0ba0: 45 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27 78  E FROM 'main'.'x
0bb0: 31 5f 73 65 67 64 69 72 27 20 57 48 45 52 45 20  1_segdir' WHERE 
0bc0: 6c 65 76 65 6c 20 3d 20 3f 22 0a 20 20 20 20 22  level = ?".    "
0bd0: 2d 2d 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 27  -- INSERT INTO '
0be0: 6d 61 69 6e 27 2e 27 78 31 5f 63 6f 6e 74 65 6e  main'.'x1_conten
0bf0: 74 27 20 56 41 4c 55 45 53 28 3f 2c 28 3f 29 29  t' VALUES(?,(?))
0c00: 22 20 0a 20 20 20 20 22 2d 2d 20 52 45 50 4c 41  " .    "-- REPLA
0c10: 43 45 20 49 4e 54 4f 20 27 6d 61 69 6e 27 2e 27  CE INTO 'main'.'
0c20: 78 31 5f 64 6f 63 73 69 7a 65 27 20 56 41 4c 55  x1_docsize' VALU
0c30: 45 53 28 3f 2c 3f 29 22 20 0a 20 20 20 20 22 2d  ES(?,?)" .    "-
0c40: 2d 20 53 45 4c 45 43 54 20 76 61 6c 75 65 20 46  - SELECT value F
0c50: 52 4f 4d 20 27 6d 61 69 6e 27 2e 27 78 31 5f 73  ROM 'main'.'x1_s
0c60: 74 61 74 27 20 57 48 45 52 45 20 69 64 3d 3f 22  tat' WHERE id=?"
0c70: 20 0a 20 20 20 20 22 2d 2d 20 52 45 50 4c 41 43   .    "-- REPLAC
0c80: 45 20 49 4e 54 4f 20 27 6d 61 69 6e 27 2e 27 78  E INTO 'main'.'x
0c90: 31 5f 73 74 61 74 27 20 56 41 4c 55 45 53 28 3f  1_stat' VALUES(?
0ca0: 2c 3f 29 22 20 0a 20 20 20 20 22 2d 2d 20 53 45  ,?)" .    "-- SE
0cb0: 4c 45 43 54 20 28 53 45 4c 45 43 54 20 6d 61 78  LECT (SELECT max
0cc0: 28 69 64 78 29 20 46 52 4f 4d 20 27 6d 61 69 6e  (idx) FROM 'main
0cd0: 27 2e 27 78 31 5f 73 65 67 64 69 72 27 20 57 48  '.'x1_segdir' WH
0ce0: 45 52 45 20 6c 65 76 65 6c 20 3d 20 3f 29 20 2b  ERE level = ?) +
0cf0: 20 31 22 20 0a 20 20 20 20 22 2d 2d 20 53 45 4c   1" .    "-- SEL
0d00: 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 53 45  ECT coalesce((SE
0d10: 4c 45 43 54 20 6d 61 78 28 62 6c 6f 63 6b 69 64  LECT max(blockid
0d20: 29 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27 78  ) FROM 'main'.'x
0d30: 31 5f 73 65 67 6d 65 6e 74 73 27 29 20 2b 20 31  1_segments') + 1
0d40: 2c 20 31 29 22 0a 20 20 20 20 22 2d 2d 20 52 45  , 1)".    "-- RE
0d50: 50 4c 41 43 45 20 49 4e 54 4f 20 27 6d 61 69 6e  PLACE INTO 'main
0d60: 27 2e 27 78 31 5f 73 65 67 64 69 72 27 20 56 41  '.'x1_segdir' VA
0d70: 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f  LUES(?,?,?,?,?,?
0d80: 29 22 0a 20 20 7d 0a 0a 20 20 64 6f 5f 74 72 61  )".  }..  do_tra
0d90: 63 65 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20  ce_test 2.3 {.  
0da0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31    INSERT INTO x1
0db0: 28 78 31 29 20 56 41 4c 55 45 53 28 27 6f 70 74  (x1) VALUES('opt
0dc0: 69 6d 69 7a 65 27 29 3b 0a 20 20 7d 20 7b 0a 20  imize');.  } {. 
0dd0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
0de0: 78 31 28 78 31 29 20 56 41 4c 55 45 53 28 27 6f  x1(x1) VALUES('o
0df0: 70 74 69 6d 69 7a 65 27 29 3b 22 0a 20 20 20 20  ptimize');".    
0e00: 22 2d 2d 20 53 45 4c 45 43 54 20 44 49 53 54 49  "-- SELECT DISTI
0e10: 4e 43 54 20 6c 65 76 65 6c 20 2f 20 28 31 30 32  NCT level / (102
0e20: 34 20 2a 20 3f 29 20 46 52 4f 4d 20 27 6d 61 69  4 * ?) FROM 'mai
0e30: 6e 27 2e 27 78 31 5f 73 65 67 64 69 72 27 22 0a  n'.'x1_segdir'".
0e40: 20 20 20 20 22 2d 2d 20 53 45 4c 45 43 54 20 69      "-- SELECT i
0e50: 64 78 2c 20 73 74 61 72 74 5f 62 6c 6f 63 6b 2c  dx, start_block,
0e60: 20 6c 65 61 76 65 73 5f 65 6e 64 5f 62 6c 6f 63   leaves_end_bloc
0e70: 6b 2c 20 65 6e 64 5f 62 6c 6f 63 6b 2c 20 72 6f  k, end_block, ro
0e80: 6f 74 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27  ot FROM 'main'.'
0e90: 78 31 5f 73 65 67 64 69 72 27 20 57 48 45 52 45  x1_segdir' WHERE
0ea0: 20 6c 65 76 65 6c 20 42 45 54 57 45 45 4e 20 3f   level BETWEEN ?
0eb0: 20 41 4e 44 20 3f 4f 52 44 45 52 20 42 59 20 6c   AND ?ORDER BY l
0ec0: 65 76 65 6c 20 44 45 53 43 2c 20 69 64 78 20 41  evel DESC, idx A
0ed0: 53 43 22 0a 20 20 20 20 22 2d 2d 20 53 45 4c 45  SC".    "-- SELE
0ee0: 43 54 20 6d 61 78 28 6c 65 76 65 6c 29 20 46 52  CT max(level) FR
0ef0: 4f 4d 20 27 6d 61 69 6e 27 2e 27 78 31 5f 73 65  OM 'main'.'x1_se
0f00: 67 64 69 72 27 20 57 48 45 52 45 20 6c 65 76 65  gdir' WHERE leve
0f10: 6c 20 42 45 54 57 45 45 4e 20 3f 20 41 4e 44 20  l BETWEEN ? AND 
0f20: 3f 22 0a 20 20 20 20 22 2d 2d 20 53 45 4c 45 43  ?".    "-- SELEC
0f30: 54 20 63 6f 61 6c 65 73 63 65 28 28 53 45 4c 45  T coalesce((SELE
0f40: 43 54 20 6d 61 78 28 62 6c 6f 63 6b 69 64 29 20  CT max(blockid) 
0f50: 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27 78 31 5f  FROM 'main'.'x1_
0f60: 73 65 67 6d 65 6e 74 73 27 29 20 2b 20 31 2c 20  segments') + 1, 
0f70: 31 29 22 0a 20 20 20 20 22 2d 2d 20 44 45 4c 45  1)".    "-- DELE
0f80: 54 45 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27  TE FROM 'main'.'
0f90: 78 31 5f 73 65 67 64 69 72 27 20 57 48 45 52 45  x1_segdir' WHERE
0fa0: 20 6c 65 76 65 6c 20 42 45 54 57 45 45 4e 20 3f   level BETWEEN ?
0fb0: 20 41 4e 44 20 3f 22 0a 20 20 20 20 22 2d 2d 20   AND ?".    "-- 
0fc0: 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 27 6d 61  REPLACE INTO 'ma
0fd0: 69 6e 27 2e 27 78 31 5f 73 65 67 64 69 72 27 20  in'.'x1_segdir' 
0fe0: 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f 2c 3f  VALUES(?,?,?,?,?
0ff0: 2c 3f 29 22 0a 20 20 7d 0a 7d 0a 0a 66 69 6e 69  ,?)".  }.}..fini
1000: 73 68 5f 74 65 73 74 0a                          sh_test.