/ Hex Artifact Content
Login

Artifact 105a721e6aad0ae3c5946d7615d1e4d03f6145b8:


0000: 23 20 32 30 31 30 20 44 65 63 65 6d 62 65 72 20  # 2010 December 
0010: 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  6.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you 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 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66  *******.# This f
0170: 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72  ile implements r
0180: 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20  egression tests 
0190: 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61  for SQLite libra
01a0: 72 79 2e 20 53 70 65 63 69 66 69 63 61 6c 6c 79  ry. Specifically
01b0: 2c 0a 23 20 69 74 20 74 65 73 74 73 20 74 68 61  ,.# it tests tha
01c0: 74 20 74 69 63 6b 65 74 20 5b 38 30 62 61 32 30  t ticket [80ba20
01d0: 31 30 37 39 65 61 36 30 38 30 37 31 64 32 32 61  1079ea608071d22a
01e0: 35 37 38 35 36 62 39 34 30 65 61 33 61 63 35 33  57856b940ea3ac53
01f0: 63 65 5d 20 69 73 0a 23 20 72 65 73 6f 6c 76 65  ce] is.# resolve
0200: 64 2e 20 20 54 68 61 74 20 74 69 63 6b 65 74 20  d.  That ticket 
0210: 69 73 20 61 62 6f 75 74 20 61 6e 20 69 6e 63 6f  is about an inco
0220: 72 72 65 63 74 20 72 65 73 75 6c 74 20 74 68 61  rrect result tha
0230: 74 20 61 70 70 65 61 72 73 20 77 68 65 6e 0a 23  t appears when.#
0240: 20 61 6e 20 69 6e 64 65 78 20 69 73 20 61 64 64   an index is add
0250: 65 64 2e 20 20 54 68 65 20 72 6f 6f 74 20 63 61  ed.  The root ca
0260: 75 73 65 20 69 73 20 74 68 61 74 20 61 20 63 6f  use is that a co
0270: 6e 73 74 61 6e 74 20 69 73 20 62 65 69 6e 67 20  nstant is being 
0280: 75 73 65 64 0a 23 20 77 69 74 68 6f 75 74 20 69  used.# without i
0290: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 77 68  nitialization wh
02a0: 65 6e 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  en the OR optimi
02b0: 7a 61 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 69  zation applies i
02c0: 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75  n the WHERE clau
02d0: 73 65 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  se..#..set testd
02e0: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
02f0: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0300: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0310: 74 63 6c 0a 73 65 74 20 3a 3a 74 65 73 74 70 72  tcl.set ::testpr
0320: 65 66 69 78 20 74 6b 74 2d 38 30 62 61 32 30 31  efix tkt-80ba201
0330: 30 37 39 0a 0a 64 6f 5f 74 65 73 74 20 74 6b 74  079..do_test tkt
0340: 2d 38 30 62 61 32 2d 31 30 30 20 7b 0a 20 20 64  -80ba2-100 {.  d
0350: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45  b eval {.    CRE
0360: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 29 3b  ATE TABLE t1(a);
0370: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0380: 20 74 31 20 56 41 4c 55 45 53 28 27 41 27 29 3b   t1 VALUES('A');
0390: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
03a0: 45 20 74 32 28 62 29 3b 0a 20 20 20 20 49 4e 53  E t2(b);.    INS
03b0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
03c0: 45 53 28 27 42 27 29 3b 0a 20 20 20 20 43 52 45  ES('B');.    CRE
03d0: 41 54 45 20 54 41 42 4c 45 20 74 33 28 63 29 3b  ATE TABLE t3(c);
03e0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
03f0: 20 74 33 20 56 41 4c 55 45 53 28 27 43 27 29 3b   t3 VALUES('C');
0400: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0410: 4f 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 20 57  OM t1, t2.     W
0420: 48 45 52 45 20 28 61 3d 27 41 27 20 41 4e 44 20  HERE (a='A' AND 
0430: 62 3d 27 58 27 29 0a 20 20 20 20 20 20 20 20 4f  b='X').        O
0440: 52 20 28 61 3d 27 41 27 20 41 4e 44 20 45 58 49  R (a='A' AND EXI
0450: 53 54 53 20 28 53 45 4c 45 43 54 20 2a 20 46 52  STS (SELECT * FR
0460: 4f 4d 20 74 33 20 57 48 45 52 45 20 63 3d 27 43  OM t3 WHERE c='C
0470: 27 29 29 3b 0a 20 20 7d 0a 7d 20 7b 41 20 42 7d  '));.  }.} {A B}
0480: 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d 38 30 62  .do_test tkt-80b
0490: 61 32 2d 31 30 31 20 7b 0a 20 20 64 62 20 65 76  a2-101 {.  db ev
04a0: 61 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  al {.    CREATE 
04b0: 49 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 61  INDEX i1 ON t1(a
04c0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
04d0: 46 52 4f 4d 20 74 31 2c 20 74 32 0a 20 20 20 20  FROM t1, t2.    
04e0: 20 57 48 45 52 45 20 28 61 3d 27 41 27 20 41 4e   WHERE (a='A' AN
04f0: 44 20 62 3d 27 58 27 29 0a 20 20 20 20 20 20 20  D b='X').       
0500: 20 4f 52 20 28 61 3d 27 41 27 20 41 4e 44 20 45   OR (a='A' AND E
0510: 58 49 53 54 53 20 28 53 45 4c 45 43 54 20 2a 20  XISTS (SELECT * 
0520: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 63 3d  FROM t3 WHERE c=
0530: 27 43 27 29 29 3b 0a 20 20 7d 0a 7d 20 7b 41 20  'C'));.  }.} {A 
0540: 42 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d 38  B}.do_test tkt-8
0550: 30 62 61 32 2d 31 30 32 20 7b 0a 20 20 6f 70 74  0ba2-102 {.  opt
0560: 69 6d 69 7a 61 74 69 6f 6e 5f 63 6f 6e 74 72 6f  imization_contro
0570: 6c 20 64 62 20 66 61 63 74 6f 72 2d 63 6f 6e 73  l db factor-cons
0580: 74 61 6e 74 73 20 30 0a 20 20 64 62 20 63 61 63  tants 0.  db cac
0590: 68 65 20 66 6c 75 73 68 0a 20 20 64 62 20 65 76  he flush.  db ev
05a0: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
05b0: 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 0a 20 20  * FROM t1, t2.  
05c0: 20 20 20 57 48 45 52 45 20 28 61 3d 27 41 27 20     WHERE (a='A' 
05d0: 41 4e 44 20 62 3d 27 58 27 29 0a 20 20 20 20 20  AND b='X').     
05e0: 20 20 20 4f 52 20 28 61 3d 27 41 27 20 41 4e 44     OR (a='A' AND
05f0: 20 45 58 49 53 54 53 20 28 53 45 4c 45 43 54 20   EXISTS (SELECT 
0600: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
0610: 63 3d 27 43 27 29 29 3b 0a 20 20 7d 0a 7d 20 7b  c='C'));.  }.} {
0620: 41 20 42 7d 0a 6f 70 74 69 6d 69 7a 61 74 69 6f  A B}.optimizatio
0630: 6e 5f 63 6f 6e 74 72 6f 6c 20 64 62 20 61 6c 6c  n_control db all
0640: 20 31 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61   1..# Verify tha
0650: 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 61 74 69  t the optimizati
0660: 6f 6e 5f 63 6f 6e 74 72 6f 6c 20 63 6f 6d 6d 61  on_control comma
0670: 6e 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 77  nd is actually w
0680: 6f 72 6b 69 6e 67 0a 23 0a 64 6f 5f 74 65 73 74  orking.#.do_test
0690: 20 74 6b 74 2d 38 30 62 61 32 2d 31 35 30 20 7b   tkt-80ba2-150 {
06a0: 0a 20 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5f  .  optimization_
06b0: 63 6f 6e 74 72 6f 6c 20 64 62 20 66 61 63 74 6f  control db facto
06c0: 72 2d 63 6f 6e 73 74 61 6e 74 73 20 31 0a 20 20  r-constants 1.  
06d0: 64 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20  db cache flush. 
06e0: 20 73 65 74 20 78 31 20 5b 64 62 20 65 76 61 6c   set x1 [db eval
06f0: 20 7b 45 58 50 4c 41 49 4e 20 0a 20 20 20 20 53   {EXPLAIN .    S
0700: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c  ELECT * FROM t1,
0710: 20 74 32 0a 20 20 20 20 20 57 48 45 52 45 20 28   t2.     WHERE (
0720: 61 3d 27 41 27 20 41 4e 44 20 62 3d 27 58 27 29  a='A' AND b='X')
0730: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 61 3d 27  .        OR (a='
0740: 41 27 20 41 4e 44 20 45 58 49 53 54 53 20 28 53  A' AND EXISTS (S
0750: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
0760: 57 48 45 52 45 20 63 3d 27 43 27 29 29 3b 7d 5d  WHERE c='C'));}]
0770: 0a 20 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 5f  .  optimization_
0780: 63 6f 6e 74 72 6f 6c 20 64 62 20 66 61 63 74 6f  control db facto
0790: 72 2d 63 6f 6e 73 74 61 6e 74 73 20 30 0a 20 20  r-constants 0.  
07a0: 64 62 20 63 61 63 68 65 20 66 6c 75 73 68 0a 20  db cache flush. 
07b0: 20 73 65 74 20 78 32 20 5b 64 62 20 65 76 61 6c   set x2 [db eval
07c0: 20 7b 45 58 50 4c 41 49 4e 20 0a 20 20 20 20 53   {EXPLAIN .    S
07d0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c  ELECT * FROM t1,
07e0: 20 74 32 0a 20 20 20 20 20 57 48 45 52 45 20 28   t2.     WHERE (
07f0: 61 3d 27 41 27 20 41 4e 44 20 62 3d 27 58 27 29  a='A' AND b='X')
0800: 0a 20 20 20 20 20 20 20 20 4f 52 20 28 61 3d 27  .        OR (a='
0810: 41 27 20 41 4e 44 20 45 58 49 53 54 53 20 28 53  A' AND EXISTS (S
0820: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
0830: 57 48 45 52 45 20 63 3d 27 43 27 29 29 3b 7d 5d  WHERE c='C'));}]
0840: 0a 0a 20 20 65 78 70 72 20 7b 24 78 31 3d 3d 24  ..  expr {$x1==$
0850: 78 32 7d 0a 7d 20 7b 30 7d 0a 0a 64 6f 5f 74 65  x2}.} {0}..do_te
0860: 73 74 20 74 6b 74 2d 38 30 62 61 32 2d 32 30 30  st tkt-80ba2-200
0870: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20   {.  db eval {. 
0880: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
0890: 65 6e 74 72 79 5f 74 79 70 65 73 20 28 0a 20 20  entry_types (.  
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08b0: 20 20 20 20 20 20 69 64 20 20 20 20 20 69 6e 74        id     int
08c0: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
08d0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
08e0: 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 20 20            name  
08f0: 20 74 65 78 74 0a 20 20 20 20 20 20 20 20 20 20   text.          
0900: 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20            );.   
0910: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 65 6e   INSERT INTO "en
0920: 74 72 79 5f 74 79 70 65 73 22 20 56 41 4c 55 45  try_types" VALUE
0930: 53 28 31 30 30 2c 27 63 6c 69 5f 63 6f 6d 6d 61  S(100,'cli_comma
0940: 6e 64 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  nd');.    INSERT
0950: 20 49 4e 54 4f 20 22 65 6e 74 72 79 5f 74 79 70   INTO "entry_typ
0960: 65 73 22 20 56 41 4c 55 45 53 28 33 30 30 2c 27  es" VALUES(300,'
0970: 6f 62 6a 65 63 74 5f 63 68 61 6e 67 65 27 29 3b  object_change');
0980: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0990: 45 20 6f 62 6a 65 63 74 5f 63 68 61 6e 67 65 73  E object_changes
09a0: 20 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   (.             
09b0: 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 67             chang
09c0: 65 5f 69 64 20 20 20 20 69 6e 74 65 67 65 72 20  e_id    integer 
09d0: 70 72 69 6d 61 72 79 20 6b 65 79 2c 0a 20 20 20  primary key,.   
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09f0: 20 20 20 20 20 73 79 73 74 65 6d 5f 69 64 20 20       system_id  
0a00: 20 20 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20    int,.         
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
0a20: 62 6a 5f 69 64 20 20 20 20 20 20 20 69 6e 74 2c  bj_id       int,
0a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0a40: 20 20 20 20 20 20 20 20 20 6f 62 6a 5f 63 6f 6e           obj_con
0a50: 74 65 78 74 20 20 74 65 78 74 2c 0a 20 20 20 20  text  text,.    
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 20 20 20 20 63 68 61 6e 67 65 5f 74 79 70 65 20      change_type 
0a80: 20 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20   int,.          
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
0aa0: 6d 6d 61 6e 64 5f 69 64 20 20 20 69 6e 74 0a 20  mmand_id   int. 
0ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ac0: 20 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54     );.    INSERT
0ad0: 20 49 4e 54 4f 20 22 6f 62 6a 65 63 74 5f 63 68   INTO "object_ch
0ae0: 61 6e 67 65 73 22 20 56 41 4c 55 45 53 28 31 35  anges" VALUES(15
0af0: 35 31 2c 31 2c 31 31 34 36 30 38 2c 27 65 78 70  51,1,114608,'exp
0b00: 6f 72 74 65 64 5f 70 6f 6f 6c 73 27 2c 31 2c 32  orted_pools',1,2
0b10: 31 31 34 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  114);.    INSERT
0b20: 20 49 4e 54 4f 20 22 6f 62 6a 65 63 74 5f 63 68   INTO "object_ch
0b30: 61 6e 67 65 73 22 20 56 41 4c 55 45 53 28 32 30  anges" VALUES(20
0b40: 34 38 2c 31 2c 31 31 34 36 30 38 2c 27 65 78 70  48,1,114608,'exp
0b50: 6f 72 74 65 64 5f 70 6f 6f 6c 73 27 2c 32 2c 32  orted_pools',2,2
0b60: 33 31 39 29 3b 0a 20 20 20 20 43 52 45 41 54 45  319);.    CREATE
0b70: 20 54 41 42 4c 45 20 74 69 6d 65 6c 69 6e 65 20   TABLE timeline 
0b80: 28 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  (.              
0b90: 20 20 20 20 20 20 20 20 20 20 72 6f 77 69 64 20            rowid 
0ba0: 20 20 20 20 20 20 20 69 6e 74 65 67 65 72 20 70         integer p
0bb0: 72 69 6d 61 72 79 20 6b 65 79 2c 0a 20 20 20 20  rimary key,.    
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 74 69 6d 65 73 74 61 6d 70 20 20 20      timestamp   
0be0: 20 74 65 78 74 2c 0a 20 20 20 20 20 20 20 20 20   text,.         
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
0c00: 79 73 74 65 6d 5f 69 64 20 20 20 20 69 6e 74 2c  ystem_id    int,
0c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0c20: 20 20 20 20 20 20 20 20 20 65 6e 74 72 79 5f 74           entry_t
0c30: 79 70 65 20 20 20 69 6e 74 2c 0a 20 20 20 20 20  ype   int,.     
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 20 20 65 6e 74 72 79 5f 69 64 20 20 20 20 20     entry_id     
0c60: 69 6e 74 0a 20 20 20 20 20 20 20 20 20 20 20 20  int.            
0c70: 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20 49          );.    I
0c80: 4e 53 45 52 54 20 49 4e 54 4f 20 22 74 69 6d 65  NSERT INTO "time
0c90: 6c 69 6e 65 22 20 56 41 4c 55 45 53 28 36 37 33  line" VALUES(673
0ca0: 35 2c 27 32 30 31 30 2d 31 31 2d 32 31 20 31 37  5,'2010-11-21 17
0cb0: 3a 30 38 3a 32 37 2e 30 30 30 27 2c 31 2c 33 30  :08:27.000',1,30
0cc0: 30 2c 32 30 34 38 29 3b 0a 20 20 20 20 49 4e 53  0,2048);.    INS
0cd0: 45 52 54 20 49 4e 54 4f 20 22 74 69 6d 65 6c 69  ERT INTO "timeli
0ce0: 6e 65 22 20 56 41 4c 55 45 53 28 36 38 32 35 2c  ne" VALUES(6825,
0cf0: 27 32 30 31 30 2d 31 31 2d 32 31 20 31 37 3a 30  '2010-11-21 17:0
0d00: 39 3a 32 31 2e 30 30 30 27 2c 31 2c 33 30 30 2c  9:21.000',1,300,
0d10: 32 31 31 34 29 3b 0a 20 20 20 20 53 45 4c 45 43  2114);.    SELEC
0d20: 54 20 65 6e 74 72 79 5f 74 79 70 65 2c 0a 20 20  T entry_type,.  
0d30: 20 20 20 20 20 20 20 20 20 65 6e 74 72 79 5f 74           entry_t
0d40: 79 70 65 73 2e 6e 61 6d 65 2c 0a 20 20 20 20 20  ypes.name,.     
0d50: 20 20 20 20 20 20 65 6e 74 72 79 5f 69 64 0a 20        entry_id. 
0d60: 20 20 20 20 20 46 52 4f 4d 20 74 69 6d 65 6c 69       FROM timeli
0d70: 6e 65 20 4a 4f 49 4e 20 65 6e 74 72 79 5f 74 79  ne JOIN entry_ty
0d80: 70 65 73 20 4f 4e 20 65 6e 74 72 79 5f 74 79 70  pes ON entry_typ
0d90: 65 20 3d 20 65 6e 74 72 79 5f 74 79 70 65 73 2e  e = entry_types.
0da0: 69 64 0a 20 20 20 20 20 57 48 45 52 45 20 28 65  id.     WHERE (e
0db0: 6e 74 72 79 5f 74 79 70 65 73 2e 6e 61 6d 65 20  ntry_types.name 
0dc0: 3d 20 27 63 6c 69 5f 63 6f 6d 6d 61 6e 64 27 20  = 'cli_command' 
0dd0: 41 4e 44 20 65 6e 74 72 79 5f 69 64 3d 32 31 31  AND entry_id=211
0de0: 34 29 0a 20 20 20 20 20 20 20 20 4f 52 20 28 65  4).        OR (e
0df0: 6e 74 72 79 5f 74 79 70 65 73 2e 6e 61 6d 65 20  ntry_types.name 
0e00: 3d 20 27 6f 62 6a 65 63 74 5f 63 68 61 6e 67 65  = 'object_change
0e10: 27 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 41  '.             A
0e20: 4e 44 20 65 6e 74 72 79 5f 69 64 20 49 4e 20 28  ND entry_id IN (
0e30: 53 45 4c 45 43 54 20 63 68 61 6e 67 65 5f 69 64  SELECT change_id
0e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
0e60: 52 4f 4d 20 6f 62 6a 65 63 74 5f 63 68 61 6e 67  ROM object_chang
0e70: 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  es.             
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e90: 20 20 57 48 45 52 45 20 6f 62 6a 5f 63 6f 6e 74    WHERE obj_cont
0ea0: 65 78 74 20 3d 20 27 65 78 70 6f 72 74 65 64 5f  ext = 'exported_
0eb0: 70 6f 6f 6c 73 27 29 29 3b 0a 20 20 7d 0a 7d 20  pools'));.  }.} 
0ec0: 7b 33 30 30 20 6f 62 6a 65 63 74 5f 63 68 61 6e  {300 object_chan
0ed0: 67 65 20 32 30 34 38 7d 0a 64 6f 5f 74 65 73 74  ge 2048}.do_test
0ee0: 20 74 6b 74 2d 38 30 62 61 32 2d 32 30 31 20 7b   tkt-80ba2-201 {
0ef0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
0f00: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 69   CREATE INDEX ti
0f10: 6d 65 6c 69 6e 65 5f 65 6e 74 72 79 5f 69 64 5f  meline_entry_id_
0f20: 69 64 78 20 6f 6e 20 74 69 6d 65 6c 69 6e 65 28  idx on timeline(
0f30: 65 6e 74 72 79 5f 69 64 29 3b 0a 20 20 20 20 53  entry_id);.    S
0f40: 45 4c 45 43 54 20 65 6e 74 72 79 5f 74 79 70 65  ELECT entry_type
0f50: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 65 6e 74  ,.           ent
0f60: 72 79 5f 74 79 70 65 73 2e 6e 61 6d 65 2c 0a 20  ry_types.name,. 
0f70: 20 20 20 20 20 20 20 20 20 20 65 6e 74 72 79 5f            entry_
0f80: 69 64 0a 20 20 20 20 20 20 46 52 4f 4d 20 74 69  id.      FROM ti
0f90: 6d 65 6c 69 6e 65 20 4a 4f 49 4e 20 65 6e 74 72  meline JOIN entr
0fa0: 79 5f 74 79 70 65 73 20 4f 4e 20 65 6e 74 72 79  y_types ON entry
0fb0: 5f 74 79 70 65 20 3d 20 65 6e 74 72 79 5f 74 79  _type = entry_ty
0fc0: 70 65 73 2e 69 64 0a 20 20 20 20 20 57 48 45 52  pes.id.     WHER
0fd0: 45 20 28 65 6e 74 72 79 5f 74 79 70 65 73 2e 6e  E (entry_types.n
0fe0: 61 6d 65 20 3d 20 27 63 6c 69 5f 63 6f 6d 6d 61  ame = 'cli_comma
0ff0: 6e 64 27 20 41 4e 44 20 65 6e 74 72 79 5f 69 64  nd' AND entry_id
1000: 3d 32 31 31 34 29 0a 20 20 20 20 20 20 20 20 4f  =2114).        O
1010: 52 20 28 65 6e 74 72 79 5f 74 79 70 65 73 2e 6e  R (entry_types.n
1020: 61 6d 65 20 3d 20 27 6f 62 6a 65 63 74 5f 63 68  ame = 'object_ch
1030: 61 6e 67 65 27 0a 20 20 20 20 20 20 20 20 20 20  ange'.          
1040: 20 20 20 41 4e 44 20 65 6e 74 72 79 5f 69 64 20     AND entry_id 
1050: 49 4e 20 28 53 45 4c 45 43 54 20 63 68 61 6e 67  IN (SELECT chang
1060: 65 5f 69 64 0a 20 20 20 20 20 20 20 20 20 20 20  e_id.           
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 46 52 4f 4d 20 6f 62 6a 65 63 74 5f 63     FROM object_c
1090: 68 61 6e 67 65 73 0a 20 20 20 20 20 20 20 20 20  hanges.         
10a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b0: 20 20 20 20 20 20 57 48 45 52 45 20 6f 62 6a 5f        WHERE obj_
10c0: 63 6f 6e 74 65 78 74 20 3d 20 27 65 78 70 6f 72  context = 'expor
10d0: 74 65 64 5f 70 6f 6f 6c 73 27 29 29 3b 0a 20 20  ted_pools'));.  
10e0: 7d 0a 7d 20 7b 33 30 30 20 6f 62 6a 65 63 74 5f  }.} {300 object_
10f0: 63 68 61 6e 67 65 20 32 30 34 38 7d 0a 64 6f 5f  change 2048}.do_
1100: 74 65 73 74 20 74 6b 74 2d 38 30 62 61 32 2d 32  test tkt-80ba2-2
1110: 30 32 20 7b 0a 20 20 6f 70 74 69 6d 69 7a 61 74  02 {.  optimizat
1120: 69 6f 6e 5f 63 6f 6e 74 72 6f 6c 20 64 62 20 66  ion_control db f
1130: 61 63 74 6f 72 2d 63 6f 6e 73 74 61 6e 74 73 20  actor-constants 
1140: 30 0a 20 20 64 62 20 63 61 63 68 65 20 66 6c 75  0.  db cache flu
1150: 73 68 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  sh.  db eval {. 
1160: 20 20 20 53 45 4c 45 43 54 20 65 6e 74 72 79 5f     SELECT entry_
1170: 74 79 70 65 2c 0a 20 20 20 20 20 20 20 20 20 20  type,.          
1180: 20 65 6e 74 72 79 5f 74 79 70 65 73 2e 6e 61 6d   entry_types.nam
1190: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 65 6e  e,.           en
11a0: 74 72 79 5f 69 64 0a 20 20 20 20 20 20 46 52 4f  try_id.      FRO
11b0: 4d 20 74 69 6d 65 6c 69 6e 65 20 4a 4f 49 4e 20  M timeline JOIN 
11c0: 65 6e 74 72 79 5f 74 79 70 65 73 20 4f 4e 20 65  entry_types ON e
11d0: 6e 74 72 79 5f 74 79 70 65 20 3d 20 65 6e 74 72  ntry_type = entr
11e0: 79 5f 74 79 70 65 73 2e 69 64 0a 20 20 20 20 20  y_types.id.     
11f0: 57 48 45 52 45 20 28 65 6e 74 72 79 5f 74 79 70  WHERE (entry_typ
1200: 65 73 2e 6e 61 6d 65 20 3d 20 27 63 6c 69 5f 63  es.name = 'cli_c
1210: 6f 6d 6d 61 6e 64 27 20 41 4e 44 20 65 6e 74 72  ommand' AND entr
1220: 79 5f 69 64 3d 32 31 31 34 29 0a 20 20 20 20 20  y_id=2114).     
1230: 20 20 20 4f 52 20 28 65 6e 74 72 79 5f 74 79 70     OR (entry_typ
1240: 65 73 2e 6e 61 6d 65 20 3d 20 27 6f 62 6a 65 63  es.name = 'objec
1250: 74 5f 63 68 61 6e 67 65 27 0a 20 20 20 20 20 20  t_change'.      
1260: 20 20 20 20 20 20 20 41 4e 44 20 65 6e 74 72 79         AND entry
1270: 5f 69 64 20 49 4e 20 28 53 45 4c 45 43 54 20 63  _id IN (SELECT c
1280: 68 61 6e 67 65 5f 69 64 0a 20 20 20 20 20 20 20  hange_id.       
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a0: 20 20 20 20 20 20 20 46 52 4f 4d 20 6f 62 6a 65         FROM obje
12b0: 63 74 5f 63 68 61 6e 67 65 73 0a 20 20 20 20 20  ct_changes.     
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d0: 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20            WHERE 
12e0: 6f 62 6a 5f 63 6f 6e 74 65 78 74 20 3d 20 27 65  obj_context = 'e
12f0: 78 70 6f 72 74 65 64 5f 70 6f 6f 6c 73 27 29 29  xported_pools'))
1300: 3b 0a 20 20 7d 0a 7d 20 7b 33 30 30 20 6f 62 6a  ;.  }.} {300 obj
1310: 65 63 74 5f 63 68 61 6e 67 65 20 32 30 34 38 7d  ect_change 2048}
1320: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
1330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 0a  ------------.#..
1370: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
1380: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1390: 33 30 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  301 {.  CREATE T
13a0: 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29  ABLE t1(a, b, c)
13b0: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
13c0: 20 69 31 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20   i1 ON t1(a);.  
13d0: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 20  CREATE INDEX i2 
13e0: 4f 4e 20 74 31 28 62 29 3b 0a 20 20 43 52 45 41  ON t1(b);.  CREA
13f0: 54 45 20 54 41 42 4c 45 20 74 32 28 64 2c 20 65  TE TABLE t2(d, e
1400: 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  );..  INSERT INT
1410: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 41 27 2c  O t1 VALUES('A',
1420: 20 27 42 27 2c 20 27 43 27 29 3b 0a 20 20 49 4e   'B', 'C');.  IN
1430: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
1440: 55 45 53 28 27 44 27 2c 20 27 45 27 29 3b 0a 7d  UES('D', 'E');.}
1450: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1460: 74 20 33 30 32 20 7b 0a 20 20 53 45 4c 45 43 54  t 302 {.  SELECT
1470: 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57   * FROM t1, t2 W
1480: 48 45 52 45 0a 20 20 20 20 28 61 3d 27 41 27 20  HERE.    (a='A' 
1490: 41 4e 44 20 64 3d 27 45 27 29 20 4f 52 0a 20 20  AND d='E') OR.  
14a0: 20 20 28 62 3d 27 42 27 20 41 4e 44 20 63 20 49    (b='B' AND c I
14b0: 4e 20 28 27 43 27 2c 20 27 44 27 2c 20 27 45 27  N ('C', 'D', 'E'
14c0: 29 29 0a 7d 20 7b 41 20 42 20 43 20 44 20 45 7d  )).} {A B C D E}
14d0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
14e0: 74 20 33 30 33 20 7b 0a 20 20 53 45 4c 45 43 54  t 303 {.  SELECT
14f0: 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57   * FROM t1, t2 W
1500: 48 45 52 45 0a 20 20 20 20 28 61 3d 27 41 27 20  HERE.    (a='A' 
1510: 41 4e 44 20 64 3d 27 45 27 29 20 4f 52 0a 20 20  AND d='E') OR.  
1520: 20 20 28 62 3d 27 42 27 20 41 4e 44 20 63 20 49    (b='B' AND c I
1530: 4e 20 28 53 45 4c 45 43 54 20 63 20 46 52 4f 4d  N (SELECT c FROM
1540: 20 74 31 29 29 0a 7d 20 7b 41 20 42 20 43 20 44   t1)).} {A B C D
1550: 20 45 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 63   E}..ifcapable c
1560: 6f 6d 70 6f 75 6e 64 20 7b 0a 20 20 64 6f 5f 65  ompound {.  do_e
1570: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 30 34 20  xecsql_test 304 
1580: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
1590: 52 4f 4d 20 74 31 2c 20 74 32 20 57 48 45 52 45  ROM t1, t2 WHERE
15a0: 0a 20 20 20 20 20 20 28 61 3d 27 41 27 20 41 4e  .      (a='A' AN
15b0: 44 20 64 3d 27 45 27 29 20 4f 52 0a 20 20 20 20  D d='E') OR.    
15c0: 20 20 28 62 3d 27 42 27 20 41 4e 44 20 63 20 49    (b='B' AND c I
15d0: 4e 20 28 53 45 4c 45 43 54 20 27 42 27 20 55 4e  N (SELECT 'B' UN
15e0: 49 4f 4e 20 53 45 4c 45 43 54 20 27 43 27 20 55  ION SELECT 'C' U
15f0: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 27 44 27 29  NION SELECT 'D')
1600: 29 0a 20 20 7d 20 7b 41 20 42 20 43 20 44 20 45  ).  } {A B C D E
1610: 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  }.}..do_execsql_
1620: 74 65 73 74 20 33 30 35 20 7b 0a 20 20 53 45 4c  test 305 {.  SEL
1630: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74  ECT * FROM t1, t
1640: 32 20 57 48 45 52 45 0a 20 20 20 20 28 62 3d 27  2 WHERE.    (b='
1650: 42 27 20 41 4e 44 20 63 20 49 4e 20 28 27 43 27  B' AND c IN ('C'
1660: 2c 20 27 44 27 2c 20 27 45 27 29 29 20 4f 52 0a  , 'D', 'E')) OR.
1670: 20 20 20 20 28 61 3d 27 41 27 20 41 4e 44 20 64      (a='A' AND d
1680: 3d 27 45 27 29 0a 7d 20 7b 41 20 42 20 43 20 44  ='E').} {A B C D
1690: 20 45 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   E}..do_execsql_
16a0: 74 65 73 74 20 33 30 36 20 7b 0a 20 20 53 45 4c  test 306 {.  SEL
16b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74  ECT * FROM t1, t
16c0: 32 20 57 48 45 52 45 0a 20 20 20 20 28 62 3d 27  2 WHERE.    (b='
16d0: 42 27 20 41 4e 44 20 63 20 49 4e 20 28 53 45 4c  B' AND c IN (SEL
16e0: 45 43 54 20 63 20 46 52 4f 4d 20 74 31 29 29 20  ECT c FROM t1)) 
16f0: 4f 52 0a 20 20 20 20 28 61 3d 27 41 27 20 41 4e  OR.    (a='A' AN
1700: 44 20 64 3d 27 45 27 29 0a 7d 20 7b 41 20 42 20  D d='E').} {A B 
1710: 43 20 44 20 45 7d 0a 0a 69 66 63 61 70 61 62 6c  C D E}..ifcapabl
1720: 65 20 63 6f 6d 70 6f 75 6e 64 20 7b 0a 20 20 64  e compound {.  d
1730: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
1740: 30 37 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  07 {.    SELECT 
1750: 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 20 57 48  * FROM t1, t2 WH
1760: 45 52 45 0a 20 20 20 20 20 20 28 62 3d 27 42 27  ERE.      (b='B'
1770: 20 41 4e 44 20 63 20 49 4e 20 28 53 45 4c 45 43   AND c IN (SELEC
1780: 54 20 27 42 27 20 55 4e 49 4f 4e 20 53 45 4c 45  T 'B' UNION SELE
1790: 43 54 20 27 43 27 20 55 4e 49 4f 4e 20 53 45 4c  CT 'C' UNION SEL
17a0: 45 43 54 20 27 44 27 29 29 20 4f 52 0a 20 20 20  ECT 'D')) OR.   
17b0: 20 20 20 28 61 3d 27 41 27 20 41 4e 44 20 64 3d     (a='A' AND d=
17c0: 27 45 27 29 0a 20 20 7d 20 7b 41 20 42 20 43 20  'E').  } {A B C 
17d0: 44 20 45 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74  D E}.}..finish_t
17e0: 65 73 74 0a                                      est.