/ Hex Artifact Content
Login

Artifact b530f141413b587c9eb78ff734de6bb79bc3515c335096108c12c01bddbadcec:


0000: 23 20 32 30 31 37 2d 31 30 2d 31 31 0a 23 0a 73  # 2017-10-11.#.s
0010: 65 74 20 74 65 73 74 70 72 65 66 69 78 20 63 68  et testprefix ch
0020: 65 63 6b 69 6e 64 65 78 0a 0a 64 6f 5f 65 78 65  eckindex..do_exe
0030: 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a  csql_test 1.0 {.
0040: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
0050: 31 28 61 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  1(a, b);.  CREAT
0060: 45 20 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31  E INDEX i1 ON t1
0070: 28 61 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  (a);.  INSERT IN
0080: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e  TO t1 VALUES('on
0090: 65 27 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54  e', 2);.  INSERT
00a0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
00b0: 27 74 77 6f 27 2c 20 34 29 3b 0a 20 20 49 4e 53  'two', 4);.  INS
00c0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
00d0: 45 53 28 27 74 68 72 65 65 27 2c 20 36 29 3b 0a  ES('three', 6);.
00e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
00f0: 20 56 41 4c 55 45 53 28 27 66 6f 75 72 27 2c 20   VALUES('four', 
0100: 38 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  8);.  INSERT INT
0110: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 66 69 76  O t1 VALUES('fiv
0120: 65 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52 45 41  e', 10);..  CREA
0130: 54 45 20 49 4e 44 45 58 20 69 32 20 4f 4e 20 74  TE INDEX i2 ON t
0140: 31 28 61 20 44 45 53 43 29 3b 0a 7d 20 7b 7d 0a  1(a DESC);.} {}.
0150: 0a 70 72 6f 63 20 69 6e 63 72 5f 69 6e 64 65 78  .proc incr_index
0160: 5f 63 68 65 63 6b 20 7b 69 64 78 20 6e 53 74 65  _check {idx nSte
0170: 70 7d 20 7b 0a 20 20 73 65 74 20 51 20 7b 0a 20  p} {.  set Q {. 
0180: 20 20 20 53 45 4c 45 43 54 20 65 72 72 6d 73 67     SELECT errmsg
0190: 2c 20 63 75 72 72 65 6e 74 5f 6b 65 79 20 46 52  , current_key FR
01a0: 4f 4d 20 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 69  OM incremental_i
01b0: 6e 64 65 78 5f 63 68 65 63 6b 28 24 69 64 78 2c  ndex_check($idx,
01c0: 20 24 61 66 74 65 72 29 0a 20 20 20 20 4c 49 4d   $after).    LIM
01d0: 49 54 20 24 6e 53 74 65 70 0a 20 20 7d 0a 0a 20  IT $nStep.  }.. 
01e0: 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a   set res [list].
01f0: 20 20 77 68 69 6c 65 20 7b 31 7d 20 7b 0a 20 20    while {1} {.  
0200: 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
0210: 61 69 6e 20 63 75 72 72 65 6e 74 5f 6b 65 79 0a  ain current_key.
0220: 20 20 20 20 73 65 74 20 72 65 73 31 20 5b 64 62      set res1 [db
0230: 20 65 76 61 6c 20 24 51 5d 0a 20 20 20 20 69 66   eval $Q].    if
0240: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 31   {[llength $res1
0250: 5d 3d 3d 30 7d 20 62 72 65 61 6b 0a 20 20 20 20  ]==0} break.    
0260: 73 65 74 20 72 65 73 20 5b 63 6f 6e 63 61 74 20  set res [concat 
0270: 24 72 65 73 20 24 72 65 73 31 5d 0a 20 20 20 20  $res $res1].    
0280: 73 65 74 20 61 66 74 65 72 20 5b 6c 69 6e 64 65  set after [linde
0290: 78 20 24 72 65 73 20 65 6e 64 5d 0a 20 20 7d 0a  x $res end].  }.
02a0: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 7d  .  return $res.}
02b0: 0a 0a 70 72 6f 63 20 64 6f 5f 69 6e 64 65 78 5f  ..proc do_index_
02c0: 63 68 65 63 6b 5f 74 65 73 74 20 7b 74 6e 20 69  check_test {tn i
02d0: 64 78 20 72 65 73 7d 20 7b 0a 20 20 75 70 6c 65  dx res} {.  uple
02e0: 76 65 6c 20 5b 6c 69 73 74 20 64 6f 5f 65 78 65  vel [list do_exe
02f0: 63 73 71 6c 5f 74 65 73 74 20 24 74 6e 2e 31 20  csql_test $tn.1 
0300: 22 0a 20 20 20 20 53 45 4c 45 43 54 20 65 72 72  ".    SELECT err
0310: 6d 73 67 2c 20 63 75 72 72 65 6e 74 5f 6b 65 79  msg, current_key
0320: 20 46 52 4f 4d 20 69 6e 63 72 65 6d 65 6e 74 61   FROM incrementa
0330: 6c 5f 69 6e 64 65 78 5f 63 68 65 63 6b 28 27 24  l_index_check('$
0340: 69 64 78 27 29 3b 0a 20 20 22 20 24 72 65 73 5d  idx');.  " $res]
0350: 0a 0a 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73  ..  uplevel [lis
0360: 74 20 64 6f 5f 74 65 73 74 20 24 74 6e 2e 32 20  t do_test $tn.2 
0370: 22 69 6e 63 72 5f 69 6e 64 65 78 5f 63 68 65 63  "incr_index_chec
0380: 6b 20 24 69 64 78 20 31 22 20 5b 6c 69 73 74 20  k $idx 1" [list 
0390: 7b 2a 7d 24 72 65 73 5d 5d 0a 20 20 75 70 6c 65  {*}$res]].  uple
03a0: 76 65 6c 20 5b 6c 69 73 74 20 64 6f 5f 74 65 73  vel [list do_tes
03b0: 74 20 24 74 6e 2e 33 20 22 69 6e 63 72 5f 69 6e  t $tn.3 "incr_in
03c0: 64 65 78 5f 63 68 65 63 6b 20 24 69 64 78 20 32  dex_check $idx 2
03d0: 22 20 5b 6c 69 73 74 20 7b 2a 7d 24 72 65 73 5d  " [list {*}$res]
03e0: 5d 0a 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73  ].  uplevel [lis
03f0: 74 20 64 6f 5f 74 65 73 74 20 24 74 6e 2e 34 20  t do_test $tn.4 
0400: 22 69 6e 63 72 5f 69 6e 64 65 78 5f 63 68 65 63  "incr_index_chec
0410: 6b 20 24 69 64 78 20 35 22 20 5b 6c 69 73 74 20  k $idx 5" [list 
0420: 7b 2a 7d 24 72 65 73 5d 5d 0a 7d 0a 0a 0a 64 6f  {*}$res]].}...do
0430: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
0440: 32 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 72  2.1 {.  SELECT r
0450: 6f 77 69 64 2c 20 65 72 72 6d 73 67 20 49 53 20  owid, errmsg IS 
0460: 4e 55 4c 4c 2c 20 63 75 72 72 65 6e 74 5f 6b 65  NULL, current_ke
0470: 79 20 46 52 4f 4d 20 69 6e 63 72 65 6d 65 6e 74  y FROM increment
0480: 61 6c 5f 69 6e 64 65 78 5f 63 68 65 63 6b 28 27  al_index_check('
0490: 69 31 27 29 3b 0a 7d 20 7b 0a 20 20 31 20 31 20  i1');.} {.  1 1 
04a0: 27 66 69 76 65 27 2c 35 0a 20 20 32 20 31 20 27  'five',5.  2 1 '
04b0: 66 6f 75 72 27 2c 34 0a 20 20 33 20 31 20 27 6f  four',4.  3 1 'o
04c0: 6e 65 27 2c 31 0a 20 20 34 20 31 20 27 74 68 72  ne',1.  4 1 'thr
04d0: 65 65 27 2c 33 0a 20 20 35 20 31 20 27 74 77 6f  ee',3.  5 1 'two
04e0: 27 2c 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  ',2.}.do_execsql
04f0: 5f 74 65 73 74 20 31 2e 32 2e 32 20 7b 0a 20 20  _test 1.2.2 {.  
0500: 53 45 4c 45 43 54 20 65 72 72 6d 73 67 20 49 53  SELECT errmsg IS
0510: 20 4e 55 4c 4c 2c 20 63 75 72 72 65 6e 74 5f 6b   NULL, current_k
0520: 65 79 2c 20 69 6e 64 65 78 5f 6e 61 6d 65 2c 20  ey, index_name, 
0530: 61 66 74 65 72 5f 6b 65 79 2c 20 73 63 61 6e 6e  after_key, scann
0540: 65 72 5f 73 71 6c 0a 20 20 20 20 46 52 4f 4d 20  er_sql.    FROM 
0550: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 69 6e 64 65  incremental_inde
0560: 78 5f 63 68 65 63 6b 28 27 69 31 27 29 20 4c 49  x_check('i1') LI
0570: 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 0a 20  MIT 1;.} {.  1. 
0580: 20 27 66 69 76 65 27 2c 35 0a 20 20 69 31 0a 20   'five',5.  i1. 
0590: 20 7b 7d 0a 20 20 7b 53 45 4c 45 43 54 20 28 53   {}.  {SELECT (S
05a0: 45 4c 45 43 54 20 61 20 49 53 20 69 2e 69 30 20  ELECT a IS i.i0 
05b0: 46 52 4f 4d 20 27 74 31 27 20 41 53 20 74 20 57  FROM 't1' AS t W
05c0: 48 45 52 45 20 22 72 6f 77 69 64 22 20 43 4f 4c  HERE "rowid" COL
05d0: 4c 41 54 45 20 42 49 4e 41 52 59 20 49 53 20 69  LATE BINARY IS i
05e0: 2e 69 31 29 2c 20 71 75 6f 74 65 28 69 30 29 7c  .i1), quote(i0)|
05f0: 7c 27 2c 27 7c 7c 71 75 6f 74 65 28 69 31 29 20  |','||quote(i1) 
0600: 46 52 4f 4d 20 28 53 45 4c 45 43 54 20 28 61 29  FROM (SELECT (a)
0610: 20 41 53 20 69 30 2c 20 28 22 72 6f 77 69 64 22   AS i0, ("rowid"
0620: 20 43 4f 4c 4c 41 54 45 20 42 49 4e 41 52 59 29   COLLATE BINARY)
0630: 20 41 53 20 69 31 20 46 52 4f 4d 20 27 74 31 27   AS i1 FROM 't1'
0640: 20 49 4e 44 45 58 45 44 20 42 59 20 27 69 31 27   INDEXED BY 'i1'
0650: 20 4f 52 44 45 52 20 42 59 20 31 2c 32 29 20 41   ORDER BY 1,2) A
0660: 53 20 69 7d 0a 7d 0a 0a 64 6f 5f 69 6e 64 65 78  S i}.}..do_index
0670: 5f 63 68 65 63 6b 5f 74 65 73 74 20 31 2e 33 20  _check_test 1.3 
0680: 69 31 20 7b 0a 20 20 7b 7d 20 27 66 69 76 65 27  i1 {.  {} 'five'
0690: 2c 35 0a 20 20 7b 7d 20 27 66 6f 75 72 27 2c 34  ,5.  {} 'four',4
06a0: 0a 20 20 7b 7d 20 27 6f 6e 65 27 2c 31 0a 20 20  .  {} 'one',1.  
06b0: 7b 7d 20 27 74 68 72 65 65 27 2c 33 0a 20 20 7b  {} 'three',3.  {
06c0: 7d 20 27 74 77 6f 27 2c 32 0a 7d 0a 0a 64 6f 5f  } 'two',2.}..do_
06d0: 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74  index_check_test
06e0: 20 31 2e 34 20 69 32 20 7b 0a 20 20 7b 7d 20 27   1.4 i2 {.  {} '
06f0: 74 77 6f 27 2c 32 0a 20 20 7b 7d 20 27 74 68 72  two',2.  {} 'thr
0700: 65 65 27 2c 33 0a 20 20 7b 7d 20 27 6f 6e 65 27  ee',3.  {} 'one'
0710: 2c 31 0a 20 20 7b 7d 20 27 66 6f 75 72 27 2c 34  ,1.  {} 'four',4
0720: 0a 20 20 7b 7d 20 27 66 69 76 65 27 2c 35 0a 7d  .  {} 'five',5.}
0730: 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 35 20 7b 0a  ..do_test 1.5 {.
0740: 20 20 73 65 74 20 74 62 6c 72 6f 6f 74 20 5b 64    set tblroot [d
0750: 62 20 6f 6e 65 20 7b 20 53 45 4c 45 43 54 20 72  b one { SELECT r
0760: 6f 6f 74 70 61 67 65 20 46 52 4f 4d 20 73 71 6c  ootpage FROM sql
0770: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0780: 20 6e 61 6d 65 3d 27 74 31 27 20 7d 5d 0a 20 20   name='t1' }].  
0790: 73 71 6c 69 74 65 33 5f 69 6d 70 6f 73 74 65 72  sqlite3_imposter
07a0: 20 64 62 20 6d 61 69 6e 20 24 74 62 6c 72 6f 6f   db main $tblroo
07b0: 74 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20  t {CREATE TABLE 
07c0: 78 74 31 28 61 2c 62 29 7d 0a 20 20 64 62 20 65  xt1(a,b)}.  db e
07d0: 76 61 6c 20 7b 0a 20 20 20 20 55 50 44 41 54 45  val {.    UPDATE
07e0: 20 78 74 31 20 53 45 54 20 61 3d 27 73 69 78 27   xt1 SET a='six'
07f0: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 33 3b 0a   WHERE rowid=3;.
0800: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20      DELETE FROM 
0810: 78 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20  xt1 WHERE rowid 
0820: 3d 20 35 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  = 5;.  }.  sqlit
0830: 65 33 5f 69 6d 70 6f 73 74 65 72 20 64 62 20 6d  e3_imposter db m
0840: 61 69 6e 0a 7d 20 7b 7d 0a 0a 64 6f 5f 69 6e 64  ain.} {}..do_ind
0850: 65 78 5f 63 68 65 63 6b 5f 74 65 73 74 20 31 2e  ex_check_test 1.
0860: 36 20 69 31 20 7b 0a 20 20 7b 72 6f 77 20 6d 69  6 i1 {.  {row mi
0870: 73 73 69 6e 67 7d 20 27 66 69 76 65 27 2c 35 0a  ssing} 'five',5.
0880: 20 20 7b 7d 20 27 66 6f 75 72 27 2c 34 0a 20 20    {} 'four',4.  
0890: 7b 7d 20 27 6f 6e 65 27 2c 31 0a 20 20 7b 72 6f  {} 'one',1.  {ro
08a0: 77 20 64 61 74 61 20 6d 69 73 6d 61 74 63 68 7d  w data mismatch}
08b0: 20 27 74 68 72 65 65 27 2c 33 0a 20 20 7b 7d 20   'three',3.  {} 
08c0: 27 74 77 6f 27 2c 32 0a 7d 0a 0a 64 6f 5f 69 6e  'two',2.}..do_in
08d0: 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74 20 31  dex_check_test 1
08e0: 2e 37 20 69 32 20 7b 0a 20 20 7b 7d 20 27 74 77  .7 i2 {.  {} 'tw
08f0: 6f 27 2c 32 0a 20 20 7b 72 6f 77 20 64 61 74 61  o',2.  {row data
0900: 20 6d 69 73 6d 61 74 63 68 7d 20 27 74 68 72 65   mismatch} 'thre
0910: 65 27 2c 33 0a 20 20 7b 7d 20 27 6f 6e 65 27 2c  e',3.  {} 'one',
0920: 31 0a 20 20 7b 7d 20 27 66 6f 75 72 27 2c 34 0a  1.  {} 'four',4.
0930: 20 20 7b 72 6f 77 20 6d 69 73 73 69 6e 67 7d 20    {row missing} 
0940: 27 66 69 76 65 27 2c 35 0a 7d 0a 0a 23 2d 2d 2d  'five',5.}..#---
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0990: 2d 2d 2d 2d 2d 2d 2d 0a 64 6f 5f 65 78 65 63 73  -------.do_execs
09a0: 71 6c 5f 74 65 73 74 20 32 2e 30 20 7b 0a 0a 20  ql_test 2.0 {.. 
09b0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
09c0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
09d0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 64 29  RY KEY, b, c, d)
09e0: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
09f0: 20 74 32 20 56 41 4c 55 45 53 28 31 2c 20 4e 55   t2 VALUES(1, NU
0a00: 4c 4c 2c 20 31 2c 20 31 29 3b 0a 20 20 49 4e 53  LL, 1, 1);.  INS
0a10: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0a20: 45 53 28 32 2c 20 31 2c 20 4e 55 4c 4c 2c 20 31  ES(2, 1, NULL, 1
0a30: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0a40: 20 74 32 20 56 41 4c 55 45 53 28 33 2c 20 31 2c   t2 VALUES(3, 1,
0a50: 20 31 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49 4e   1, NULL);..  IN
0a60: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0a70: 55 45 53 28 34 2c 20 32 2c 20 32 2c 20 31 29 3b  UES(4, 2, 2, 1);
0a80: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0a90: 32 20 56 41 4c 55 45 53 28 35 2c 20 32 2c 20 32  2 VALUES(5, 2, 2
0aa0: 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 2);.  INSERT I
0ab0: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 36 2c  NTO t2 VALUES(6,
0ac0: 20 32 2c 20 32 2c 20 33 29 3b 0a 0a 20 20 49 4e   2, 2, 3);..  IN
0ad0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
0ae0: 55 45 53 28 37 2c 20 32 2c 20 32 2c 20 31 29 3b  UES(7, 2, 2, 1);
0af0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0b00: 32 20 56 41 4c 55 45 53 28 38 2c 20 32 2c 20 32  2 VALUES(8, 2, 2
0b10: 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , 2);.  INSERT I
0b20: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 39 2c  NTO t2 VALUES(9,
0b30: 20 32 2c 20 32 2c 20 33 29 3b 0a 0a 20 20 43 52   2, 2, 3);..  CR
0b40: 45 41 54 45 20 49 4e 44 45 58 20 69 33 20 4f 4e  EATE INDEX i3 ON
0b50: 20 74 32 28 62 2c 20 63 2c 20 64 29 3b 0a 20 20   t2(b, c, d);.  
0b60: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 34 20  CREATE INDEX i4 
0b70: 4f 4e 20 74 32 28 62 20 44 45 53 43 2c 20 63 20  ON t2(b DESC, c 
0b80: 44 45 53 43 2c 20 64 20 44 45 53 43 29 3b 0a 20  DESC, d DESC);. 
0b90: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 35   CREATE INDEX i5
0ba0: 20 4f 4e 20 74 32 28 64 2c 20 63 20 44 45 53 43   ON t2(d, c DESC
0bb0: 2c 20 62 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 69  , b);.} {}..do_i
0bc0: 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74 20  ndex_check_test 
0bd0: 32 2e 31 20 69 33 20 7b 0a 20 20 7b 7d 20 4e 55  2.1 i3 {.  {} NU
0be0: 4c 4c 2c 31 2c 31 2c 31 20 0a 20 20 7b 7d 20 31  LL,1,1,1 .  {} 1
0bf0: 2c 4e 55 4c 4c 2c 31 2c 32 20 0a 20 20 7b 7d 20  ,NULL,1,2 .  {} 
0c00: 31 2c 31 2c 4e 55 4c 4c 2c 33 20 0a 20 20 7b 7d  1,1,NULL,3 .  {}
0c10: 20 32 2c 32 2c 31 2c 34 20 0a 20 20 7b 7d 20 32   2,2,1,4 .  {} 2
0c20: 2c 32 2c 31 2c 37 20 0a 20 20 7b 7d 20 32 2c 32  ,2,1,7 .  {} 2,2
0c30: 2c 32 2c 35 0a 20 20 7b 7d 20 32 2c 32 2c 32 2c  ,2,5.  {} 2,2,2,
0c40: 38 20 0a 20 20 7b 7d 20 32 2c 32 2c 33 2c 36 20  8 .  {} 2,2,3,6 
0c50: 0a 20 20 7b 7d 20 32 2c 32 2c 33 2c 39 0a 7d 0a  .  {} 2,2,3,9.}.
0c60: 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f  .do_index_check_
0c70: 74 65 73 74 20 32 2e 32 20 69 34 20 7b 0a 20 20  test 2.2 i4 {.  
0c80: 7b 7d 20 32 2c 32 2c 33 2c 36 20 0a 20 20 7b 7d  {} 2,2,3,6 .  {}
0c90: 20 32 2c 32 2c 33 2c 39 0a 20 20 7b 7d 20 32 2c   2,2,3,9.  {} 2,
0ca0: 32 2c 32 2c 35 0a 20 20 7b 7d 20 32 2c 32 2c 32  2,2,5.  {} 2,2,2
0cb0: 2c 38 20 0a 20 20 7b 7d 20 32 2c 32 2c 31 2c 34  ,8 .  {} 2,2,1,4
0cc0: 20 0a 20 20 7b 7d 20 32 2c 32 2c 31 2c 37 20 0a   .  {} 2,2,1,7 .
0cd0: 20 20 7b 7d 20 31 2c 31 2c 4e 55 4c 4c 2c 33 20    {} 1,1,NULL,3 
0ce0: 0a 20 20 7b 7d 20 31 2c 4e 55 4c 4c 2c 31 2c 32  .  {} 1,NULL,1,2
0cf0: 20 0a 20 20 7b 7d 20 4e 55 4c 4c 2c 31 2c 31 2c   .  {} NULL,1,1,
0d00: 31 20 0a 7d 0a 0a 64 6f 5f 69 6e 64 65 78 5f 63  1 .}..do_index_c
0d10: 68 65 63 6b 5f 74 65 73 74 20 32 2e 33 20 69 35  heck_test 2.3 i5
0d20: 20 7b 0a 20 20 7b 7d 20 4e 55 4c 4c 2c 31 2c 31   {.  {} NULL,1,1
0d30: 2c 33 20 0a 20 20 7b 7d 20 31 2c 32 2c 32 2c 34  ,3 .  {} 1,2,2,4
0d40: 20 0a 20 20 7b 7d 20 31 2c 32 2c 32 2c 37 20 0a   .  {} 1,2,2,7 .
0d50: 20 20 7b 7d 20 31 2c 31 2c 4e 55 4c 4c 2c 31 20    {} 1,1,NULL,1 
0d60: 0a 20 20 7b 7d 20 31 2c 4e 55 4c 4c 2c 31 2c 32  .  {} 1,NULL,1,2
0d70: 20 0a 20 20 7b 7d 20 32 2c 32 2c 32 2c 35 20 0a   .  {} 2,2,2,5 .
0d80: 20 20 7b 7d 20 32 2c 32 2c 32 2c 38 20 0a 20 20    {} 2,2,2,8 .  
0d90: 7b 7d 20 33 2c 32 2c 32 2c 36 20 0a 20 20 7b 7d  {} 3,2,2,6 .  {}
0da0: 20 33 2c 32 2c 32 2c 39 0a 7d 0a 0a 23 2d 2d 2d   3,2,2,9.}..#---
0db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0df0: 2d 2d 2d 2d 2d 2d 2d 0a 64 6f 5f 65 78 65 63 73  -------.do_execs
0e00: 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b 0a 0a 20  ql_test 3.0 {.. 
0e10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33   CREATE TABLE t3
0e20: 28 77 2c 20 78 2c 20 79 2c 20 7a 20 50 52 49 4d  (w, x, y, z PRIM
0e30: 41 52 59 20 4b 45 59 29 20 57 49 54 48 4f 55 54  ARY KEY) WITHOUT
0e40: 20 52 4f 57 49 44 3b 0a 20 20 43 52 45 41 54 45   ROWID;.  CREATE
0e50: 20 49 4e 44 45 58 20 74 33 77 78 79 20 4f 4e 20   INDEX t3wxy ON 
0e60: 74 33 28 77 2c 20 78 2c 20 79 29 3b 0a 20 20 43  t3(w, x, y);.  C
0e70: 52 45 41 54 45 20 49 4e 44 45 58 20 74 33 77 78  REATE INDEX t3wx
0e80: 79 32 20 4f 4e 20 74 33 28 77 20 44 45 53 43 2c  y2 ON t3(w DESC,
0e90: 20 78 20 44 45 53 43 2c 20 79 20 44 45 53 43 29   x DESC, y DESC)
0ea0: 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  ;..  INSERT INTO
0eb0: 20 74 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t3 VALUES(NULL,
0ec0: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 31 29 3b   NULL, NULL, 1);
0ed0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0ee0: 33 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e  3 VALUES(NULL, N
0ef0: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 32 29 3b 0a 20  ULL, NULL, 2);. 
0f00: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
0f10: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c  VALUES(NULL, NUL
0f20: 4c 2c 20 4e 55 4c 4c 2c 20 33 29 3b 0a 0a 20 20  L, NULL, 3);..  
0f30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
0f40: 41 4c 55 45 53 28 27 61 27 2c 20 4e 55 4c 4c 2c  ALUES('a', NULL,
0f50: 20 4e 55 4c 4c 2c 20 34 29 3b 0a 20 20 49 4e 53   NULL, 4);.  INS
0f60: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
0f70: 45 53 28 27 61 27 2c 20 4e 55 4c 4c 2c 20 4e 55  ES('a', NULL, NU
0f80: 4c 4c 2c 20 35 29 3b 0a 20 20 49 4e 53 45 52 54  LL, 5);.  INSERT
0f90: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
0fa0: 27 61 27 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c  'a', NULL, NULL,
0fb0: 20 36 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49   6);..  INSERT I
0fc0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 61  NTO t3 VALUES('a
0fd0: 27 2c 20 27 62 27 2c 20 4e 55 4c 4c 2c 20 37 29  ', 'b', NULL, 7)
0fe0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0ff0: 74 33 20 56 41 4c 55 45 53 28 27 61 27 2c 20 27  t3 VALUES('a', '
1000: 62 27 2c 20 4e 55 4c 4c 2c 20 38 29 3b 0a 20 20  b', NULL, 8);.  
1010: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
1020: 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27 2c 20  ALUES('a', 'b', 
1030: 4e 55 4c 4c 2c 20 39 29 3b 0a 0a 7d 20 7b 7d 0a  NULL, 9);..} {}.
1040: 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f  .do_index_check_
1050: 74 65 73 74 20 33 2e 31 20 74 33 77 78 79 20 7b  test 3.1 t3wxy {
1060: 0a 20 20 7b 7d 20 4e 55 4c 4c 2c 4e 55 4c 4c 2c  .  {} NULL,NULL,
1070: 4e 55 4c 4c 2c 31 20 7b 7d 20 4e 55 4c 4c 2c 4e  NULL,1 {} NULL,N
1080: 55 4c 4c 2c 4e 55 4c 4c 2c 32 20 7b 7d 20 4e 55  ULL,NULL,2 {} NU
1090: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 33 20 0a  LL,NULL,NULL,3 .
10a0: 20 20 7b 7d 20 27 61 27 2c 4e 55 4c 4c 2c 4e 55    {} 'a',NULL,NU
10b0: 4c 4c 2c 34 20 20 7b 7d 20 27 61 27 2c 4e 55 4c  LL,4  {} 'a',NUL
10c0: 4c 2c 4e 55 4c 4c 2c 35 20 20 7b 7d 20 27 61 27  L,NULL,5  {} 'a'
10d0: 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 36 20 0a 20 20  ,NULL,NULL,6 .  
10e0: 7b 7d 20 27 61 27 2c 27 62 27 2c 4e 55 4c 4c 2c  {} 'a','b',NULL,
10f0: 37 20 20 20 7b 7d 20 27 61 27 2c 27 62 27 2c 4e  7   {} 'a','b',N
1100: 55 4c 4c 2c 38 20 20 20 7b 7d 20 27 61 27 2c 27  ULL,8   {} 'a','
1110: 62 27 2c 4e 55 4c 4c 2c 39 20 0a 7d 0a 64 6f 5f  b',NULL,9 .}.do_
1120: 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74  index_check_test
1130: 20 33 2e 32 20 74 33 77 78 79 32 20 7b 0a 20 20   3.2 t3wxy2 {.  
1140: 7b 7d 20 27 61 27 2c 27 62 27 2c 4e 55 4c 4c 2c  {} 'a','b',NULL,
1150: 37 20 20 20 7b 7d 20 27 61 27 2c 27 62 27 2c 4e  7   {} 'a','b',N
1160: 55 4c 4c 2c 38 20 20 20 7b 7d 20 27 61 27 2c 27  ULL,8   {} 'a','
1170: 62 27 2c 4e 55 4c 4c 2c 39 20 0a 20 20 7b 7d 20  b',NULL,9 .  {} 
1180: 27 61 27 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 34 20  'a',NULL,NULL,4 
1190: 20 7b 7d 20 27 61 27 2c 4e 55 4c 4c 2c 4e 55 4c   {} 'a',NULL,NUL
11a0: 4c 2c 35 20 20 7b 7d 20 27 61 27 2c 4e 55 4c 4c  L,5  {} 'a',NULL
11b0: 2c 4e 55 4c 4c 2c 36 20 0a 20 20 7b 7d 20 4e 55  ,NULL,6 .  {} NU
11c0: 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c 2c 31 20 7b  LL,NULL,NULL,1 {
11d0: 7d 20 4e 55 4c 4c 2c 4e 55 4c 4c 2c 4e 55 4c 4c  } NULL,NULL,NULL
11e0: 2c 32 20 7b 7d 20 4e 55 4c 4c 2c 4e 55 4c 4c 2c  ,2 {} NULL,NULL,
11f0: 4e 55 4c 4c 2c 33 20 0a 7d 0a 0a 23 2d 2d 2d 2d  NULL,3 .}..#----
1200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1240: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 77 69  ------.# Test wi
1250: 74 68 20 61 6e 20 69 6e 64 65 78 20 74 68 61 74  th an index that
1260: 20 75 73 65 73 20 6e 6f 6e 2d 64 65 66 61 75 6c   uses non-defaul
1270: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
1280: 65 6e 63 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  ences..#.do_exec
1290: 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a 20  sql_test 4.0 {. 
12a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
12b0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
12c0: 52 59 20 4b 45 59 2c 20 63 31 20 54 45 58 54 2c  RY KEY, c1 TEXT,
12d0: 20 63 32 20 54 45 58 54 29 3b 0a 20 20 49 4e 53   c2 TEXT);.  INS
12e0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
12f0: 45 53 28 31 2c 20 27 61 61 61 27 2c 20 27 62 62  ES(1, 'aaa', 'bb
1300: 62 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  b');.  INSERT IN
1310: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 32 2c 20  TO t4 VALUES(2, 
1320: 27 41 41 41 27 2c 20 27 43 43 43 27 29 3b 0a 20  'AAA', 'CCC');. 
1330: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
1340: 56 41 4c 55 45 53 28 33 2c 20 27 61 61 62 27 2c  VALUES(3, 'aab',
1350: 20 27 64 64 64 27 29 3b 0a 20 20 49 4e 53 45 52   'ddd');.  INSER
1360: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1370: 28 34 2c 20 27 41 41 42 27 2c 20 27 45 45 45 27  (4, 'AAB', 'EEE'
1380: 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 49 4e 44  );..  CREATE IND
1390: 45 58 20 74 34 63 63 20 4f 4e 20 74 34 28 63 31  EX t4cc ON t4(c1
13a0: 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 2c   COLLATE nocase,
13b0: 20 63 32 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61   c2 COLLATE noca
13c0: 73 65 29 3b 0a 7d 0a 0a 64 6f 5f 69 6e 64 65 78  se);.}..do_index
13d0: 5f 63 68 65 63 6b 5f 74 65 73 74 20 34 2e 31 20  _check_test 4.1 
13e0: 74 34 63 63 20 7b 0a 20 20 7b 7d 20 27 61 61 61  t4cc {.  {} 'aaa
13f0: 27 2c 27 62 62 62 27 2c 31 20 0a 20 20 7b 7d 20  ','bbb',1 .  {} 
1400: 27 41 41 41 27 2c 27 43 43 43 27 2c 32 20 0a 20  'AAA','CCC',2 . 
1410: 20 7b 7d 20 27 61 61 62 27 2c 27 64 64 64 27 2c   {} 'aab','ddd',
1420: 33 20 0a 20 20 7b 7d 20 27 41 41 42 27 2c 27 45  3 .  {} 'AAB','E
1430: 45 45 27 2c 34 0a 7d 0a 0a 64 6f 5f 74 65 73 74  EE',4.}..do_test
1440: 20 34 2e 32 20 7b 0a 20 20 73 65 74 20 74 62 6c   4.2 {.  set tbl
1450: 72 6f 6f 74 20 5b 64 62 20 6f 6e 65 20 7b 20 53  root [db one { S
1460: 45 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46  ELECT rootpage F
1470: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
1480: 72 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 34  r WHERE name='t4
1490: 27 20 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 69  ' }].  sqlite3_i
14a0: 6d 70 6f 73 74 65 72 20 64 62 20 6d 61 69 6e 20  mposter db main 
14b0: 24 74 62 6c 72 6f 6f 74 20 5c 0a 20 20 20 20 20  $tblroot \.     
14c0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 74  {CREATE TABLE xt
14d0: 34 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  4(a INTEGER PRIM
14e0: 41 52 59 20 4b 45 59 2c 20 63 31 20 54 45 58 54  ARY KEY, c1 TEXT
14f0: 2c 20 63 32 20 54 45 58 54 29 7d 0a 0a 20 20 64  , c2 TEXT)}..  d
1500: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 55 50 44  b eval {.    UPD
1510: 41 54 45 20 78 74 34 20 53 45 54 20 63 31 3d 27  ATE xt4 SET c1='
1520: 68 65 6c 6c 6f 27 20 57 48 45 52 45 20 72 6f 77  hello' WHERE row
1530: 69 64 3d 32 3b 0a 20 20 20 20 44 45 4c 45 54 45  id=2;.    DELETE
1540: 20 46 52 4f 4d 20 78 74 34 20 57 48 45 52 45 20   FROM xt4 WHERE 
1550: 72 6f 77 69 64 20 3d 20 33 3b 0a 20 20 7d 0a 20  rowid = 3;.  }. 
1560: 20 73 71 6c 69 74 65 33 5f 69 6d 70 6f 73 74 65   sqlite3_imposte
1570: 72 20 64 62 20 6d 61 69 6e 0a 7d 20 7b 7d 0a 0a  r db main.} {}..
1580: 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74  do_index_check_t
1590: 65 73 74 20 34 2e 33 20 74 34 63 63 20 7b 0a 20  est 4.3 t4cc {. 
15a0: 20 7b 7d 20 27 61 61 61 27 2c 27 62 62 62 27 2c   {} 'aaa','bbb',
15b0: 31 20 0a 20 20 7b 72 6f 77 20 64 61 74 61 20 6d  1 .  {row data m
15c0: 69 73 6d 61 74 63 68 7d 20 27 41 41 41 27 2c 27  ismatch} 'AAA','
15d0: 43 43 43 27 2c 32 20 0a 20 20 7b 72 6f 77 20 6d  CCC',2 .  {row m
15e0: 69 73 73 69 6e 67 7d 20 27 61 61 62 27 2c 27 64  issing} 'aab','d
15f0: 64 64 27 2c 33 20 0a 20 20 7b 7d 20 27 41 41 42  dd',3 .  {} 'AAB
1600: 27 2c 27 45 45 45 27 2c 34 0a 7d 0a 0a 23 2d 2d  ','EEE',4.}..#--
1610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1650: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
1660: 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 6e 20 65  an index on an e
1670: 78 70 72 65 73 73 69 6f 6e 2e 0a 23 0a 64 6f 5f  xpression..#.do_
1680: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 30  execsql_test 5.0
1690: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
16a0: 45 20 74 35 28 78 20 49 4e 54 45 47 45 52 20 50  E t5(x INTEGER P
16b0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 20 54 45  RIMARY KEY, y TE
16c0: 58 54 2c 20 55 4e 49 51 55 45 28 79 29 29 3b 0a  XT, UNIQUE(y));.
16d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
16e0: 20 56 41 4c 55 45 53 28 31 2c 20 27 7b 22 78 22   VALUES(1, '{"x"
16f0: 3a 31 2c 20 22 79 22 3a 31 7d 27 29 3b 0a 20 20  :1, "y":1}');.  
1700: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56  INSERT INTO t5 V
1710: 41 4c 55 45 53 28 32 2c 20 27 7b 22 78 22 3a 32  ALUES(2, '{"x":2
1720: 2c 20 22 79 22 3a 32 7d 27 29 3b 0a 20 20 49 4e  , "y":2}');.  IN
1730: 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c  SERT INTO t5 VAL
1740: 55 45 53 28 33 2c 20 27 7b 22 78 22 3a 33 2c 20  UES(3, '{"x":3, 
1750: 22 79 22 3a 33 7d 27 29 3b 0a 20 20 49 4e 53 45  "y":3}');.  INSE
1760: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
1770: 53 28 34 2c 20 27 7b 22 77 22 3a 34 2c 20 22 7a  S(4, '{"w":4, "z
1780: 22 3a 34 7d 27 29 3b 0a 20 20 49 4e 53 45 52 54  ":4}');.  INSERT
1790: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
17a0: 35 2c 20 27 7b 22 78 22 3a 35 2c 20 22 79 22 3a  5, '{"x":5, "y":
17b0: 35 7d 27 29 3b 0a 0a 20 20 43 52 45 41 54 45 20  5}');..  CREATE 
17c0: 49 4e 44 45 58 20 74 35 78 20 4f 4e 20 74 35 28  INDEX t5x ON t5(
17d0: 20 6a 73 6f 6e 5f 65 78 74 72 61 63 74 28 79 2c   json_extract(y,
17e0: 20 27 24 2e 78 27 29 20 29 3b 0a 20 20 43 52 45   '$.x') );.  CRE
17f0: 41 54 45 20 49 4e 44 45 58 20 74 35 79 20 4f 4e  ATE INDEX t5y ON
1800: 20 74 35 28 20 6a 73 6f 6e 5f 65 78 74 72 61 63   t5( json_extrac
1810: 74 28 79 2c 20 27 24 2e 79 27 29 20 44 45 53 43  t(y, '$.y') DESC
1820: 20 29 3b 0a 7d 0a 0a 64 6f 5f 69 6e 64 65 78 5f   );.}..do_index_
1830: 63 68 65 63 6b 5f 74 65 73 74 20 35 2e 31 2e 31  check_test 5.1.1
1840: 20 74 35 78 20 7b 0a 20 20 7b 7d 20 4e 55 4c 4c   t5x {.  {} NULL
1850: 2c 34 20 7b 7d 20 31 2c 31 20 7b 7d 20 32 2c 32  ,4 {} 1,1 {} 2,2
1860: 20 7b 7d 20 33 2c 33 20 7b 7d 20 35 2c 35 0a 7d   {} 3,3 {} 5,5.}
1870: 0a 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b  ..do_index_check
1880: 5f 74 65 73 74 20 35 2e 31 2e 32 20 74 35 79 20  _test 5.1.2 t5y 
1890: 7b 0a 20 20 7b 7d 20 35 2c 35 20 7b 7d 20 33 2c  {.  {} 5,5 {} 3,
18a0: 33 20 7b 7d 20 32 2c 32 20 7b 7d 20 31 2c 31 20  3 {} 2,2 {} 1,1 
18b0: 7b 7d 20 4e 55 4c 4c 2c 34 0a 7d 0a 0a 64 6f 5f  {} NULL,4.}..do_
18c0: 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74  index_check_test
18d0: 20 35 2e 31 2e 33 20 73 71 6c 69 74 65 5f 61 75   5.1.3 sqlite_au
18e0: 74 6f 69 6e 64 65 78 5f 74 35 5f 31 20 7b 0a 20  toindex_t5_1 {. 
18f0: 20 7b 7d 20 7b 27 7b 22 77 22 3a 34 2c 20 22 7a   {} {'{"w":4, "z
1900: 22 3a 34 7d 27 2c 34 7d 20 0a 20 20 7b 7d 20 7b  ":4}',4} .  {} {
1910: 27 7b 22 78 22 3a 31 2c 20 22 79 22 3a 31 7d 27  '{"x":1, "y":1}'
1920: 2c 31 7d 20 0a 20 20 7b 7d 20 7b 27 7b 22 78 22  ,1} .  {} {'{"x"
1930: 3a 32 2c 20 22 79 22 3a 32 7d 27 2c 32 7d 20 0a  :2, "y":2}',2} .
1940: 20 20 7b 7d 20 7b 27 7b 22 78 22 3a 33 2c 20 22    {} {'{"x":3, "
1950: 79 22 3a 33 7d 27 2c 33 7d 20 0a 20 20 7b 7d 20  y":3}',3} .  {} 
1960: 7b 27 7b 22 78 22 3a 35 2c 20 22 79 22 3a 35 7d  {'{"x":5, "y":5}
1970: 27 2c 35 7d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  ',5}.}..do_test 
1980: 35 2e 32 20 7b 0a 20 20 73 65 74 20 74 62 6c 72  5.2 {.  set tblr
1990: 6f 6f 74 20 5b 64 62 20 6f 6e 65 20 7b 20 53 45  oot [db one { SE
19a0: 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52  LECT rootpage FR
19b0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
19c0: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 35 27   WHERE name='t5'
19d0: 20 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 69 6d   }].  sqlite3_im
19e0: 70 6f 73 74 65 72 20 64 62 20 6d 61 69 6e 20 24  poster db main $
19f0: 74 62 6c 72 6f 6f 74 20 5c 0a 20 20 20 20 20 20  tblroot \.      
1a00: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 74  {CREATE TABLE xt
1a10: 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  5(a INTEGER PRIM
1a20: 41 52 59 20 4b 45 59 2c 20 63 31 20 54 45 58 54  ARY KEY, c1 TEXT
1a30: 29 3b 7d 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a  );}.  db eval {.
1a40: 20 20 20 20 55 50 44 41 54 45 20 78 74 35 20 53      UPDATE xt5 S
1a50: 45 54 20 63 31 3d 27 7b 22 78 22 3a 32 32 2c 20  ET c1='{"x":22, 
1a60: 22 79 22 3a 31 31 7d 27 20 57 48 45 52 45 20 72  "y":11}' WHERE r
1a70: 6f 77 69 64 3d 31 3b 0a 20 20 20 20 44 45 4c 45  owid=1;.    DELE
1a80: 54 45 20 46 52 4f 4d 20 78 74 35 20 57 48 45 52  TE FROM xt5 WHER
1a90: 45 20 72 6f 77 69 64 20 3d 20 34 3b 0a 20 20 7d  E rowid = 4;.  }
1aa0: 0a 20 20 73 71 6c 69 74 65 33 5f 69 6d 70 6f 73  .  sqlite3_impos
1ab0: 74 65 72 20 64 62 20 6d 61 69 6e 0a 7d 20 7b 7d  ter db main.} {}
1ac0: 0a 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b  ..do_index_check
1ad0: 5f 74 65 73 74 20 35 2e 33 2e 31 20 74 35 78 20  _test 5.3.1 t5x 
1ae0: 7b 0a 20 20 7b 72 6f 77 20 6d 69 73 73 69 6e 67  {.  {row missing
1af0: 7d 20 4e 55 4c 4c 2c 34 20 0a 20 20 7b 72 6f 77  } NULL,4 .  {row
1b00: 20 64 61 74 61 20 6d 69 73 6d 61 74 63 68 7d 20   data mismatch} 
1b10: 31 2c 31 20 0a 20 20 7b 7d 20 32 2c 32 20 0a 20  1,1 .  {} 2,2 . 
1b20: 20 7b 7d 20 33 2c 33 20 0a 20 20 7b 7d 20 35 2c   {} 3,3 .  {} 5,
1b30: 35 0a 7d 0a 0a 64 6f 5f 69 6e 64 65 78 5f 63 68  5.}..do_index_ch
1b40: 65 63 6b 5f 74 65 73 74 20 35 2e 33 2e 32 20 73  eck_test 5.3.2 s
1b50: 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f  qlite_autoindex_
1b60: 74 35 5f 31 20 7b 0a 20 20 7b 72 6f 77 20 6d 69  t5_1 {.  {row mi
1b70: 73 73 69 6e 67 7d 20 7b 27 7b 22 77 22 3a 34 2c  ssing} {'{"w":4,
1b80: 20 22 7a 22 3a 34 7d 27 2c 34 7d 20 0a 20 20 7b   "z":4}',4} .  {
1b90: 72 6f 77 20 64 61 74 61 20 6d 69 73 6d 61 74 63  row data mismatc
1ba0: 68 7d 20 7b 27 7b 22 78 22 3a 31 2c 20 22 79 22  h} {'{"x":1, "y"
1bb0: 3a 31 7d 27 2c 31 7d 20 0a 20 20 7b 7d 20 7b 27  :1}',1} .  {} {'
1bc0: 7b 22 78 22 3a 32 2c 20 22 79 22 3a 32 7d 27 2c  {"x":2, "y":2}',
1bd0: 32 7d 20 0a 20 20 7b 7d 20 7b 27 7b 22 78 22 3a  2} .  {} {'{"x":
1be0: 33 2c 20 22 79 22 3a 33 7d 27 2c 33 7d 20 0a 20  3, "y":3}',3} . 
1bf0: 20 7b 7d 20 7b 27 7b 22 78 22 3a 35 2c 20 22 79   {} {'{"x":5, "y
1c00: 22 3a 35 7d 27 2c 35 7d 0a 7d 0a 0a 23 2d 2d 2d  ":5}',5}.}..#---
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c50: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65 78 65 63  ------.#.do_exec
1c60: 73 71 6c 5f 74 65 73 74 20 36 2e 30 20 7b 0a 20  sql_test 6.0 {. 
1c70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 36   CREATE TABLE t6
1c80: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
1c90: 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20  RY KEY, y, z);. 
1ca0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 36   CREATE INDEX t6
1cb0: 78 31 20 4f 4e 20 74 36 28 79 2c 20 2f 2a 20 6f  x1 ON t6(y, /* o
1cc0: 6e 65 2c 74 77 6f 2c 74 68 72 65 65 20 2a 2f 20  ne,two,three */ 
1cd0: 7a 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  z);.  CREATE IND
1ce0: 45 58 20 74 36 78 32 20 4f 4e 20 74 36 28 7a 2c  EX t6x2 ON t6(z,
1cf0: 20 2d 2d 20 68 65 6c 6c 6f 2c 77 6f 72 6c 64 2c   -- hello,world,
1d00: 0a 20 20 79 29 3b 0a 0a 20 20 43 52 45 41 54 45  .  y);..  CREATE
1d10: 20 49 4e 44 45 58 20 74 36 78 33 20 4f 4e 20 74   INDEX t6x3 ON t
1d20: 36 28 7a 20 2d 2d 20 68 65 6c 6c 6f 2c 77 6f 72  6(z -- hello,wor
1d30: 6c 64 0a 20 20 2c 20 79 29 3b 0a 0a 20 20 49 4e  ld.  , y);..  IN
1d40: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
1d50: 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 20 20  UES(1, 2, 3);.  
1d60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
1d70: 41 4c 55 45 53 28 34 2c 20 35 2c 20 36 29 3b 0a  ALUES(4, 5, 6);.
1d80: 7d 0a 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63  }..do_index_chec
1d90: 6b 5f 74 65 73 74 20 36 2e 31 20 74 36 78 31 20  k_test 6.1 t6x1 
1da0: 7b 0a 20 20 7b 7d 20 32 2c 33 2c 31 20 0a 20 20  {.  {} 2,3,1 .  
1db0: 7b 7d 20 35 2c 36 2c 34 0a 7d 0a 64 6f 5f 69 6e  {} 5,6,4.}.do_in
1dc0: 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74 20 36  dex_check_test 6
1dd0: 2e 32 20 74 36 78 32 20 7b 0a 20 20 7b 7d 20 33  .2 t6x2 {.  {} 3
1de0: 2c 32 2c 31 20 0a 20 20 7b 7d 20 36 2c 35 2c 34  ,2,1 .  {} 6,5,4
1df0: 0a 7d 0a 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63  .}.do_index_chec
1e00: 6b 5f 74 65 73 74 20 36 2e 32 20 74 36 78 33 20  k_test 6.2 t6x3 
1e10: 7b 0a 20 20 7b 7d 20 33 2c 32 2c 31 20 0a 20 20  {.  {} 3,2,1 .  
1e20: 7b 7d 20 36 2c 35 2c 34 0a 7d 0a 0a 23 2d 2d 2d  {} 6,5,4.}..#---
1e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1e70: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65 78 65 63  ------.#.do_exec
1e80: 73 71 6c 5f 74 65 73 74 20 37 2e 30 20 7b 0a 20  sql_test 7.0 {. 
1e90: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 37   CREATE TABLE t7
1ea0: 28 78 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (x INTEGER PRIMA
1eb0: 52 59 20 4b 45 59 2c 20 79 2c 20 7a 29 3b 0a 20  RY KEY, y, z);. 
1ec0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
1ed0: 56 41 4c 55 45 53 28 31 2c 20 31 2c 20 31 29 3b  VALUES(1, 1, 1);
1ee0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1ef0: 37 20 56 41 4c 55 45 53 28 32 2c 20 32 2c 20 30  7 VALUES(2, 2, 0
1f00: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1f10: 20 74 37 20 56 41 4c 55 45 53 28 33 2c 20 33 2c   t7 VALUES(3, 3,
1f20: 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   1);.  INSERT IN
1f30: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 34 2c 20  TO t7 VALUES(4, 
1f40: 34 2c 20 30 29 3b 0a 0a 20 20 43 52 45 41 54 45  4, 0);..  CREATE
1f50: 20 49 4e 44 45 58 20 74 37 69 31 20 4f 4e 20 74   INDEX t7i1 ON t
1f60: 37 28 79 29 20 57 48 45 52 45 20 7a 3d 31 3b 0a  7(y) WHERE z=1;.
1f70: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74    CREATE INDEX t
1f80: 37 69 32 20 4f 4e 20 74 37 28 79 29 20 2f 2a 20  7i2 ON t7(y) /* 
1f90: 68 65 6c 6c 6f 2c 77 6f 72 6c 64 20 2a 2f 20 57  hello,world */ W
1fa0: 48 45 52 45 20 7a 3d 31 3b 0a 20 20 43 52 45 41  HERE z=1;.  CREA
1fb0: 54 45 20 49 4e 44 45 58 20 74 37 69 33 20 4f 4e  TE INDEX t7i3 ON
1fc0: 20 74 37 28 79 29 20 57 48 45 52 45 20 2d 2d 20   t7(y) WHERE -- 
1fd0: 79 65 70 20 0a 20 20 7a 3d 31 3b 0a 20 20 43 52  yep .  z=1;.  CR
1fe0: 45 41 54 45 20 49 4e 44 45 58 20 74 37 69 34 20  EATE INDEX t7i4 
1ff0: 4f 4e 20 74 37 28 79 29 20 57 48 45 52 45 20 7a  ON t7(y) WHERE z
2000: 3d 31 20 2d 2d 20 79 65 70 3b 0a 7d 0a 64 6f 5f  =1 -- yep;.}.do_
2010: 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73 74  index_check_test
2020: 20 37 2e 31 20 74 37 69 31 20 7b 0a 20 20 7b 7d   7.1 t7i1 {.  {}
2030: 20 31 2c 31 20 7b 7d 20 33 2c 33 0a 7d 0a 64 6f   1,1 {} 3,3.}.do
2040: 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65 73  _index_check_tes
2050: 74 20 37 2e 32 20 74 37 69 32 20 7b 0a 20 20 7b  t 7.2 t7i2 {.  {
2060: 7d 20 31 2c 31 20 7b 7d 20 33 2c 33 0a 7d 0a 64  } 1,1 {} 3,3.}.d
2070: 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74 65  o_index_check_te
2080: 73 74 20 37 2e 33 20 74 37 69 33 20 7b 0a 20 20  st 7.3 t7i3 {.  
2090: 7b 7d 20 31 2c 31 20 7b 7d 20 33 2c 33 0a 7d 0a  {} 1,1 {} 3,3.}.
20a0: 64 6f 5f 69 6e 64 65 78 5f 63 68 65 63 6b 5f 74  do_index_check_t
20b0: 65 73 74 20 37 2e 34 20 74 37 69 34 20 7b 0a 20  est 7.4 t7i4 {. 
20c0: 20 7b 7d 20 31 2c 31 20 7b 7d 20 33 2c 33 0a 7d   {} 1,1 {} 3,3.}
20d0: 0a                                               .