/ Hex Artifact Content
Login

Artifact 962175290996d5f06dc4402ca218bbfc7df4cb20:


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 49 4e 53 45 52  " .    "-- INSER
0ba0: 54 20 49 4e 54 4f 20 27 6d 61 69 6e 27 2e 27 78  T INTO 'main'.'x
0bb0: 31 5f 63 6f 6e 74 65 6e 74 27 20 56 41 4c 55 45  1_content' VALUE
0bc0: 53 28 3f 2c 28 3f 29 29 22 20 0a 20 20 20 20 22  S(?,(?))" .    "
0bd0: 2d 2d 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20  -- REPLACE INTO 
0be0: 27 6d 61 69 6e 27 2e 27 78 31 5f 64 6f 63 73 69  'main'.'x1_docsi
0bf0: 7a 65 27 20 56 41 4c 55 45 53 28 3f 2c 3f 29 22  ze' VALUES(?,?)"
0c00: 20 0a 20 20 20 20 22 2d 2d 20 53 45 4c 45 43 54   .    "-- SELECT
0c10: 20 76 61 6c 75 65 20 46 52 4f 4d 20 27 6d 61 69   value FROM 'mai
0c20: 6e 27 2e 27 78 31 5f 73 74 61 74 27 20 57 48 45  n'.'x1_stat' WHE
0c30: 52 45 20 69 64 3d 30 22 20 0a 20 20 20 20 22 2d  RE id=0" .    "-
0c40: 2d 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 27  - REPLACE INTO '
0c50: 6d 61 69 6e 27 2e 27 78 31 5f 73 74 61 74 27 20  main'.'x1_stat' 
0c60: 56 41 4c 55 45 53 28 30 2c 3f 29 22 20 0a 20 20  VALUES(0,?)" .  
0c70: 20 20 22 2d 2d 20 53 45 4c 45 43 54 20 28 53 45    "-- SELECT (SE
0c80: 4c 45 43 54 20 6d 61 78 28 69 64 78 29 20 46 52  LECT max(idx) FR
0c90: 4f 4d 20 27 6d 61 69 6e 27 2e 27 78 31 5f 73 65  OM 'main'.'x1_se
0ca0: 67 64 69 72 27 20 57 48 45 52 45 20 6c 65 76 65  gdir' WHERE leve
0cb0: 6c 20 3d 20 3f 29 20 2b 20 31 22 20 0a 20 20 20  l = ?) + 1" .   
0cc0: 20 22 2d 2d 20 53 45 4c 45 43 54 20 63 6f 61 6c   "-- SELECT coal
0cd0: 65 73 63 65 28 28 53 45 4c 45 43 54 20 6d 61 78  esce((SELECT max
0ce0: 28 62 6c 6f 63 6b 69 64 29 20 46 52 4f 4d 20 27  (blockid) FROM '
0cf0: 6d 61 69 6e 27 2e 27 78 31 5f 73 65 67 6d 65 6e  main'.'x1_segmen
0d00: 74 73 27 29 20 2b 20 31 2c 20 31 29 22 0a 20 20  ts') + 1, 1)".  
0d10: 20 20 22 2d 2d 20 49 4e 53 45 52 54 20 49 4e 54    "-- INSERT INT
0d20: 4f 20 27 6d 61 69 6e 27 2e 27 78 31 5f 73 65 67  O 'main'.'x1_seg
0d30: 64 69 72 27 20 56 41 4c 55 45 53 28 3f 2c 3f 2c  dir' VALUES(?,?,
0d40: 3f 2c 3f 2c 3f 2c 3f 29 22 0a 20 20 7d 0a 0a 20  ?,?,?,?)".  }.. 
0d50: 20 64 6f 5f 74 72 61 63 65 5f 74 65 73 74 20 32   do_trace_test 2
0d60: 2e 33 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20  .3 {.    INSERT 
0d70: 49 4e 54 4f 20 78 31 28 78 31 29 20 56 41 4c 55  INTO x1(x1) VALU
0d80: 45 53 28 27 6f 70 74 69 6d 69 7a 65 27 29 3b 0a  ES('optimize');.
0d90: 20 20 7d 20 7b 0a 20 20 20 20 22 49 4e 53 45 52    } {.    "INSER
0da0: 54 20 49 4e 54 4f 20 78 31 28 78 31 29 20 56 41  T INTO x1(x1) VA
0db0: 4c 55 45 53 28 27 6f 70 74 69 6d 69 7a 65 27 29  LUES('optimize')
0dc0: 3b 22 0a 20 20 20 20 22 2d 2d 20 53 45 4c 45 43  ;".    "-- SELEC
0dd0: 54 20 69 64 78 2c 20 73 74 61 72 74 5f 62 6c 6f  T idx, start_blo
0de0: 63 6b 2c 20 6c 65 61 76 65 73 5f 65 6e 64 5f 62  ck, leaves_end_b
0df0: 6c 6f 63 6b 2c 20 65 6e 64 5f 62 6c 6f 63 6b 2c  lock, end_block,
0e00: 20 72 6f 6f 74 20 46 52 4f 4d 20 27 6d 61 69 6e   root FROM 'main
0e10: 27 2e 27 78 31 5f 73 65 67 64 69 72 27 20 57 48  '.'x1_segdir' WH
0e20: 45 52 45 20 6c 65 76 65 6c 20 42 45 54 57 45 45  ERE level BETWEE
0e30: 4e 20 3f 20 41 4e 44 20 3f 4f 52 44 45 52 20 42  N ? AND ?ORDER B
0e40: 59 20 6c 65 76 65 6c 20 44 45 53 43 2c 20 69 64  Y level DESC, id
0e50: 78 20 41 53 43 22 0a 20 20 20 20 22 2d 2d 20 53  x ASC".    "-- S
0e60: 45 4c 45 43 54 20 6d 61 78 28 6c 65 76 65 6c 29  ELECT max(level)
0e70: 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27 78 31   FROM 'main'.'x1
0e80: 5f 73 65 67 64 69 72 27 20 57 48 45 52 45 20 6c  _segdir' WHERE l
0e90: 65 76 65 6c 20 42 45 54 57 45 45 4e 20 3f 20 41  evel BETWEEN ? A
0ea0: 4e 44 20 3f 22 0a 20 20 20 20 22 2d 2d 20 53 45  ND ?".    "-- SE
0eb0: 4c 45 43 54 20 63 6f 61 6c 65 73 63 65 28 28 53  LECT coalesce((S
0ec0: 45 4c 45 43 54 20 6d 61 78 28 62 6c 6f 63 6b 69  ELECT max(blocki
0ed0: 64 29 20 46 52 4f 4d 20 27 6d 61 69 6e 27 2e 27  d) FROM 'main'.'
0ee0: 78 31 5f 73 65 67 6d 65 6e 74 73 27 29 20 2b 20  x1_segments') + 
0ef0: 31 2c 20 31 29 22 0a 20 20 20 20 22 2d 2d 20 44  1, 1)".    "-- D
0f00: 45 4c 45 54 45 20 46 52 4f 4d 20 27 6d 61 69 6e  ELETE FROM 'main
0f10: 27 2e 27 78 31 5f 73 65 67 64 69 72 27 20 57 48  '.'x1_segdir' WH
0f20: 45 52 45 20 6c 65 76 65 6c 20 42 45 54 57 45 45  ERE level BETWEE
0f30: 4e 20 3f 20 41 4e 44 20 3f 22 0a 20 20 20 20 22  N ? AND ?".    "
0f40: 2d 2d 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 27  -- INSERT INTO '
0f50: 6d 61 69 6e 27 2e 27 78 31 5f 73 65 67 64 69 72  main'.'x1_segdir
0f60: 27 20 56 41 4c 55 45 53 28 3f 2c 3f 2c 3f 2c 3f  ' VALUES(?,?,?,?
0f70: 2c 3f 2c 3f 29 22 0a 20 20 7d 0a 7d 0a 0a 66 69  ,?,?)".  }.}..fi
0f80: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.