/ Hex Artifact Content
Login

Artifact 06ccd57af3c0c7895d0f7dc844f13c51f8258885:


0000: 23 20 32 30 31 30 20 4d 61 72 63 68 20 32 35 0a  # 2010 March 25.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a   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 0a 23 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 74  ile implements t
0180: 65 73 74 73 20 74 6f 20 76 65 72 69 66 79 20 74  ests to verify t
0190: 68 61 74 20 74 69 63 6b 65 74 20 5b 63 62 64 30  hat ticket [cbd0
01a0: 35 34 66 61 36 62 5d 20 68 61 73 20 62 65 65 6e  54fa6b] has been
01b0: 0a 23 20 66 69 78 65 64 2e 20 20 0a 23 0a 0a 73  .# fixed.  .#..s
01c0: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
01d0: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
01e0: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
01f0: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 69 66 63  /tester.tcl..ifc
0200: 61 70 61 62 6c 65 20 21 73 74 61 74 34 26 26 21  apable !stat4&&!
0210: 73 74 61 74 33 20 7b 0a 20 20 66 69 6e 69 73 68  stat3 {.  finish
0220: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
0230: 0a 0a 70 72 6f 63 20 73 20 7b 62 6c 6f 62 7d 20  ..proc s {blob} 
0240: 7b 0a 20 20 73 65 74 20 72 65 74 20 22 22 0a 20  {.  set ret "". 
0250: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 62 6c   binary scan $bl
0260: 6f 62 20 63 2a 20 62 79 74 65 73 0a 20 20 66 6f  ob c* bytes.  fo
0270: 72 65 61 63 68 20 62 20 24 62 79 74 65 73 20 7b  reach b $bytes {
0280: 0a 20 20 20 20 73 65 74 20 74 20 5b 62 69 6e 61  .    set t [bina
0290: 72 79 20 66 6f 72 6d 61 74 20 63 20 24 62 5d 0a  ry format c $b].
02a0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string 
02b0: 69 73 20 70 72 69 6e 74 20 24 74 5d 7d 20 7b 0a  is print $t]} {.
02c0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 74        append ret
02d0: 20 24 74 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b   $t.    } else {
02e0: 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65  .      append re
02f0: 74 20 2e 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  t ..    }.  }.  
0300: 72 65 74 75 72 6e 20 24 72 65 74 0a 7d 0a 64 62  return $ret.}.db
0310: 20 66 75 6e 63 74 69 6f 6e 20 73 20 73 0a 0a 64   function s s..d
0320: 6f 5f 74 65 73 74 20 74 6b 74 2d 63 62 64 30 35  o_test tkt-cbd05
0330: 2d 31 2e 31 20 7b 0a 20 20 64 62 20 65 76 61 6c  -1.1 {.  db eval
0340: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
0350: 42 4c 45 20 74 31 28 61 20 49 4e 54 45 47 45 52  BLE t1(a INTEGER
0360: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20   PRIMARY KEY, b 
0370: 54 45 58 54 20 55 4e 49 51 55 45 20 4e 4f 54 20  TEXT UNIQUE NOT 
0380: 4e 55 4c 4c 29 3b 0a 20 20 20 20 43 52 45 41 54  NULL);.    CREAT
0390: 45 20 49 4e 44 45 58 20 74 31 5f 78 20 4f 4e 20  E INDEX t1_x ON 
03a0: 74 31 28 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  t1(b);.    INSER
03b0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
03c0: 20 28 4e 55 4c 4c 2c 20 27 27 29 3b 0a 20 20 20   (NULL, '');.   
03d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
03e0: 56 41 4c 55 45 53 20 28 4e 55 4c 4c 2c 20 27 41  VALUES (NULL, 'A
03f0: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
0400: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 20 28 4e  NTO t1 VALUES (N
0410: 55 4c 4c 2c 20 27 42 27 29 3b 0a 20 20 20 20 49  ULL, 'B');.    I
0420: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0430: 4c 55 45 53 20 28 4e 55 4c 4c 2c 20 27 43 27 29  LUES (NULL, 'C')
0440: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0450: 4f 20 74 31 20 56 41 4c 55 45 53 20 28 4e 55 4c  O t1 VALUES (NUL
0460: 4c 2c 20 27 44 27 29 3b 0a 20 20 20 20 49 4e 53  L, 'D');.    INS
0470: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0480: 45 53 20 28 4e 55 4c 4c 2c 20 27 45 27 29 3b 0a  ES (NULL, 'E');.
0490: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
04a0: 74 31 20 56 41 4c 55 45 53 20 28 4e 55 4c 4c 2c  t1 VALUES (NULL,
04b0: 20 27 46 27 29 3b 0a 20 20 20 20 49 4e 53 45 52   'F');.    INSER
04c0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
04d0: 20 28 4e 55 4c 4c 2c 20 27 47 27 29 3b 0a 20 20   (NULL, 'G');.  
04e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
04f0: 20 56 41 4c 55 45 53 20 28 4e 55 4c 4c 2c 20 27   VALUES (NULL, '
0500: 48 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  H');.    INSERT 
0510: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 20 28  INTO t1 VALUES (
0520: 4e 55 4c 4c 2c 20 27 49 27 29 3b 0a 20 20 20 20  NULL, 'I');.    
0530: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
0540: 46 52 4f 4d 20 74 31 3b 0a 20 20 7d 0a 7d 20 7b  FROM t1;.  }.} {
0550: 31 30 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d  10}.do_test tkt-
0560: 63 62 64 30 35 2d 31 2e 32 20 7b 0a 20 20 64 62  cbd05-1.2 {.  db
0570: 20 65 76 61 6c 20 7b 20 41 4e 41 4c 59 5a 45 3b   eval { ANALYZE;
0580: 20 7d 0a 20 20 69 66 63 61 70 61 62 6c 65 20 73   }.  ifcapable s
0590: 74 61 74 34 20 7b 0a 20 20 20 20 64 62 20 65 76  tat4 {.    db ev
05a0: 61 6c 20 7b 0a 20 20 20 20 20 20 50 52 41 47 4d  al {.      PRAGM
05b0: 41 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d  A writable_schem
05c0: 61 20 3d 20 31 3b 0a 20 20 20 20 20 20 43 52 45  a = 1;.      CRE
05d0: 41 54 45 20 56 49 45 57 20 76 76 76 20 41 53 20  ATE VIEW vvv AS 
05e0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 74 62  .      SELECT tb
05f0: 6c 2c 69 64 78 2c 6e 65 71 2c 6e 6c 74 2c 6e 64  l,idx,neq,nlt,nd
0600: 6c 74 2c 74 65 73 74 5f 65 78 74 72 61 63 74 28  lt,test_extract(
0610: 73 61 6d 70 6c 65 2c 30 29 20 41 53 20 73 61 6d  sample,0) AS sam
0620: 70 6c 65 0a 20 20 20 20 20 20 46 52 4f 4d 20 73  ple.      FROM s
0630: 71 6c 69 74 65 5f 73 74 61 74 34 3b 0a 20 20 20  qlite_stat4;.   
0640: 20 20 20 50 52 41 47 4d 41 20 77 72 69 74 61 62     PRAGMA writab
0650: 6c 65 5f 73 63 68 65 6d 61 20 3d 20 30 3b 0a 20  le_schema = 0;. 
0660: 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a     }.  } else {.
0670: 20 20 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20      db eval {.  
0680: 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57 20      CREATE VIEW 
0690: 76 76 76 20 41 53 20 0a 20 20 20 20 20 20 53 45  vvv AS .      SE
06a0: 4c 45 43 54 20 74 62 6c 2c 69 64 78 2c 6e 65 71  LECT tbl,idx,neq
06b0: 2c 6e 6c 74 2c 6e 64 6c 74 2c 73 61 6d 70 6c 65  ,nlt,ndlt,sample
06c0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61   FROM sqlite_sta
06d0: 74 33 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 20  t3;.    }.  }.} 
06e0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d 63  {}.do_test tkt-c
06f0: 62 64 30 35 2d 31 2e 33 20 7b 0a 20 20 65 78 65  bd05-1.3 {.  exe
0700: 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c 45  csql { .    SELE
0710: 43 54 20 74 62 6c 2c 69 64 78 2c 67 72 6f 75 70  CT tbl,idx,group
0720: 5f 63 6f 6e 63 61 74 28 73 28 73 61 6d 70 6c 65  _concat(s(sample
0730: 29 2c 27 20 27 29 20 0a 20 20 20 20 46 52 4f 4d  ),' ') .    FROM
0740: 20 76 76 76 20 0a 20 20 20 20 57 48 45 52 45 20   vvv .    WHERE 
0750: 69 64 78 20 3d 20 27 74 31 5f 78 27 20 0a 20 20  idx = 't1_x' .  
0760: 20 20 47 52 4f 55 50 20 42 59 20 74 62 6c 2c 69    GROUP BY tbl,i
0770: 64 78 0a 20 20 7d 0a 7d 20 7b 74 31 20 74 31 5f  dx.  }.} {t1 t1_
0780: 78 20 7b 20 41 20 42 20 43 20 44 20 45 20 46 20  x { A B C D E F 
0790: 47 20 48 20 49 7d 7d 0a 0a 64 6f 5f 74 65 73 74  G H I}}..do_test
07a0: 20 74 6b 74 2d 63 62 64 30 35 2d 32 2e 31 20 7b   tkt-cbd05-2.1 {
07b0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
07c0: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a   DROP TABLE t1;.
07d0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
07e0: 20 74 31 28 61 20 49 4e 54 45 47 45 52 20 50 52   t1(a INTEGER PR
07f0: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 42 4c 4f  IMARY KEY, b BLO
0800: 42 20 55 4e 49 51 55 45 20 4e 4f 54 20 4e 55 4c  B UNIQUE NOT NUL
0810: 4c 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  L);.    CREATE I
0820: 4e 44 45 58 20 74 31 5f 78 20 4f 4e 20 74 31 28  NDEX t1_x ON t1(
0830: 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  b);.    INSERT I
0840: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
0850: 4c 4c 2c 20 58 27 27 29 3b 0a 20 20 20 20 49 4e  LL, X'');.    IN
0860: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0870: 55 45 53 28 4e 55 4c 4c 2c 20 58 27 34 31 27 29  UES(NULL, X'41')
0880: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0890: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
08a0: 2c 20 58 27 34 32 27 29 3b 0a 20 20 20 20 49 4e  , X'42');.    IN
08b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
08c0: 55 45 53 28 4e 55 4c 4c 2c 20 58 27 34 33 27 29  UES(NULL, X'43')
08d0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
08e0: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
08f0: 2c 20 58 27 34 34 27 29 3b 0a 20 20 20 20 49 4e  , X'44');.    IN
0900: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0910: 55 45 53 28 4e 55 4c 4c 2c 20 58 27 34 35 27 29  UES(NULL, X'45')
0920: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0930: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
0940: 2c 20 58 27 34 36 27 29 3b 0a 20 20 20 20 49 4e  , X'46');.    IN
0950: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0960: 55 45 53 28 4e 55 4c 4c 2c 20 58 27 34 37 27 29  UES(NULL, X'47')
0970: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0980: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
0990: 2c 20 58 27 34 38 27 29 3b 0a 20 20 20 20 49 4e  , X'48');.    IN
09a0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
09b0: 55 45 53 28 4e 55 4c 4c 2c 20 58 27 34 39 27 29  UES(NULL, X'49')
09c0: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75  ;.    SELECT cou
09d0: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 3b 0a 20  nt(*) FROM t1;. 
09e0: 20 7d 0a 7d 20 7b 31 30 7d 0a 64 6f 5f 74 65 73   }.} {10}.do_tes
09f0: 74 20 74 6b 74 2d 63 62 64 30 35 2d 32 2e 32 20  t tkt-cbd05-2.2 
0a00: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
0a10: 20 20 41 4e 41 4c 59 5a 45 3b 0a 20 20 7d 0a 7d    ANALYZE;.  }.}
0a20: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 74 6b 74 2d   {}.do_test tkt-
0a30: 63 62 64 30 35 2d 32 2e 33 20 7b 0a 20 20 65 78  cbd05-2.3 {.  ex
0a40: 65 63 73 71 6c 20 7b 20 0a 20 20 20 20 53 45 4c  ecsql { .    SEL
0a50: 45 43 54 20 74 62 6c 2c 69 64 78 2c 67 72 6f 75  ECT tbl,idx,grou
0a60: 70 5f 63 6f 6e 63 61 74 28 73 28 73 61 6d 70 6c  p_concat(s(sampl
0a70: 65 29 2c 27 20 27 29 20 0a 20 20 20 20 46 52 4f  e),' ') .    FRO
0a80: 4d 20 76 76 76 20 0a 20 20 20 20 57 48 45 52 45  M vvv .    WHERE
0a90: 20 69 64 78 20 3d 20 27 74 31 5f 78 27 20 0a 20   idx = 't1_x' . 
0aa0: 20 20 20 47 52 4f 55 50 20 42 59 20 74 62 6c 2c     GROUP BY tbl,
0ab0: 69 64 78 0a 20 20 7d 0a 7d 20 7b 74 31 20 74 31  idx.  }.} {t1 t1
0ac0: 5f 78 20 7b 20 41 20 42 20 43 20 44 20 45 20 46  _x { A B C D E F
0ad0: 20 47 20 48 20 49 7d 7d 0a 0a 66 69 6e 69 73 68   G H I}}..finish
0ae0: 5f 74 65 73 74 0a                                _test.