/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 2dc7bd4c0de8ba7a8af0b6d3beaa6759d57b88c62e10ae4d158e9f544982d5d4:


0000: 23 20 32 30 31 37 2d 31 30 2d 31 31 0a 23 0a 23  # 2017-10-11.#.#
0010: 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73 63   The author disc
0020: 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74 20  laims copyright 
0030: 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20 63  to this source c
0040: 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f  ode.  In place o
0050: 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69  f.# a legal noti
0060: 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c  ce, here is a bl
0070: 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20 4d  essing:.#.#    M
0080: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
0090: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20 20  nd not evil..#  
00a0: 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66    May you find f
00b0: 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79  orgiveness for y
00c0: 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67  ourself and forg
00d0: 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20 20  ive others..#   
00e0: 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66   May you share f
00f0: 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b  reely, never tak
0100: 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f  ing more than yo
0110: 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a 2a  u 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 0a 23 20 54 68 69 73 20 66 69 6c 65 20 69  **.# This file i
0170: 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65 73  mplements regres
0180: 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20 53  sion tests for S
0190: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 20 20  QLite library.  
01a0: 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66 20 74  The.# focus of t
01b0: 68 69 73 20 66 69 6c 65 20 69 73 20 74 65 73 74  his file is test
01c0: 69 6e 67 20 74 68 65 20 63 68 65 63 6b 69 6e 64  ing the checkind
01d0: 65 78 20 65 78 74 65 6e 73 69 6f 6e 2e 0a 23 0a  ex extension..#.
01e0: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
01f0: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0200: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0210: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65  ir/tester.tcl.se
0220: 74 20 74 65 73 74 70 72 65 66 69 78 20 63 68 65  t testprefix che
0230: 63 6b 69 6e 64 65 78 0a 0a 69 66 63 61 70 61 62  ckindex..ifcapab
0240: 6c 65 20 21 76 74 61 62 7c 7c 21 63 6f 6d 70 6f  le !vtab||!compo
0250: 75 6e 64 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  und {.  finish_t
0260: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
0270: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
0280: 20 2e 2e 2f 63 68 65 63 6b 69 6e 64 65 78 2e 73   ../checkindex.s
0290: 6f 5d 3d 3d 30 7d 20 7b 0a 20 20 66 69 6e 69 73  o]==0} {.  finis
02a0: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
02b0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
02c0: 73 74 20 31 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 1.0 {.  CREAT
02d0: 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 29  E TABLE t1(a, b)
02e0: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
02f0: 20 69 31 20 4f 4e 20 74 31 28 61 29 3b 0a 20 20   i1 ON t1(a);.  
0300: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0310: 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 32 29 3b  ALUES('one', 2);
0320: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0330: 31 20 56 41 4c 55 45 53 28 27 74 77 6f 27 2c 20  1 VALUES('two', 
0340: 34 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  4);.  INSERT INT
0350: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 74 68 72  O t1 VALUES('thr
0360: 65 65 27 2c 20 36 29 3b 0a 20 20 49 4e 53 45 52  ee', 6);.  INSER
0370: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0380: 28 27 66 6f 75 72 27 2c 20 38 29 3b 0a 20 20 49  ('four', 8);.  I
0390: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
03a0: 4c 55 45 53 28 27 66 69 76 65 27 2c 20 31 30 29  LUES('five', 10)
03b0: 3b 0a 7d 0a 0a 64 62 20 65 6e 61 62 6c 65 5f 6c  ;.}..db enable_l
03c0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20 31 0a  oad_extension 1.
03d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
03e0: 31 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6c  1.1 {.  SELECT l
03f0: 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 28 27 2e  oad_extension('.
0400: 2e 2f 63 68 65 63 6b 69 6e 64 65 78 2e 73 6f 27  ./checkindex.so'
0410: 29 3b 0a 7d 20 7b 7b 7d 7d 0a 0a 64 6f 5f 65 78  );.} {{}}..do_ex
0420: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 20 7b  ecsql_test 1.2 {
0430: 0a 20 20 53 45 4c 45 43 54 20 65 72 72 6d 73 67  .  SELECT errmsg
0440: 20 49 53 20 4e 55 4c 4c 2c 20 63 75 72 72 65 6e   IS NULL, curren
0450: 74 5f 6b 65 79 20 46 52 4f 4d 20 69 6e 63 72 65  t_key FROM incre
0460: 6d 65 6e 74 61 6c 5f 69 6e 64 65 78 5f 63 68 65  mental_index_che
0470: 63 6b 28 27 69 31 27 29 3b 0a 7d 20 7b 0a 20 20  ck('i1');.} {.  
0480: 31 20 66 69 76 65 2c 35 0a 20 20 31 20 66 6f 75  1 five,5.  1 fou
0490: 72 2c 34 0a 20 20 31 20 6f 6e 65 2c 31 0a 20 20  r,4.  1 one,1.  
04a0: 31 20 74 68 72 65 65 2c 33 0a 20 20 31 20 74 77  1 three,3.  1 tw
04b0: 6f 2c 32 0a 7d 0a 0a 0a 64 6f 5f 74 65 73 74 20  o,2.}...do_test 
04c0: 31 2e 33 20 7b 0a 20 20 73 65 74 20 74 62 6c 72  1.3 {.  set tblr
04d0: 6f 6f 74 20 5b 64 62 20 6f 6e 65 20 7b 20 53 45  oot [db one { SE
04e0: 4c 45 43 54 20 72 6f 6f 74 70 61 67 65 20 46 52  LECT rootpage FR
04f0: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0500: 20 57 48 45 52 45 20 6e 61 6d 65 3d 27 74 31 27   WHERE name='t1'
0510: 20 7d 5d 0a 20 20 73 71 6c 69 74 65 33 5f 74 65   }].  sqlite3_te
0520: 73 74 5f 63 6f 6e 74 72 6f 6c 20 53 51 4c 49 54  st_control SQLIT
0530: 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d 50 4f 53  E_TESTCTRL_IMPOS
0540: 54 45 52 20 64 62 20 6d 61 69 6e 20 31 20 24 74  TER db main 1 $t
0550: 62 6c 72 6f 6f 74 0a 20 20 64 62 20 65 76 61 6c  blroot.  db eval
0560: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78   {CREATE TABLE x
0570: 74 31 28 61 2c 20 62 29 7d 0a 20 20 73 71 6c 69  t1(a, b)}.  sqli
0580: 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
0590: 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
05a0: 5f 49 4d 50 4f 53 54 45 52 20 64 62 20 6d 61 69  _IMPOSTER db mai
05b0: 6e 20 30 20 30 0a 0a 20 20 65 78 65 63 73 71 6c  n 0 0..  execsql
05c0: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 78 74   {.    UPDATE xt
05d0: 31 20 53 45 54 20 61 3d 27 73 69 78 27 20 57 48  1 SET a='six' WH
05e0: 45 52 45 20 72 6f 77 69 64 3d 33 3b 0a 20 20 20  ERE rowid=3;.   
05f0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 78 74 31   DELETE FROM xt1
0600: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 35   WHERE rowid = 5
0610: 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74 65 33  ;.  }..  sqlite3
0620: 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 20 53 51  _test_control SQ
0630: 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 49 4d  LITE_TESTCTRL_IM
0640: 50 4f 53 54 45 52 20 64 62 20 6d 61 69 6e 20 30  POSTER db main 0
0650: 20 31 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63   1.} {}..do_exec
0660: 73 71 6c 5f 74 65 73 74 20 31 2e 34 20 7b 0a 20  sql_test 1.4 {. 
0670: 20 53 45 4c 45 43 54 20 65 72 72 6d 73 67 20 49   SELECT errmsg I
0680: 53 20 4e 55 4c 4c 2c 20 63 75 72 72 65 6e 74 5f  S NULL, current_
0690: 6b 65 79 20 46 52 4f 4d 20 69 6e 63 72 65 6d 65  key FROM increme
06a0: 6e 74 61 6c 5f 69 6e 64 65 78 5f 63 68 65 63 6b  ntal_index_check
06b0: 28 27 69 31 27 29 3b 0a 7d 20 7b 0a 20 20 30 20  ('i1');.} {.  0 
06c0: 66 69 76 65 2c 35 0a 20 20 31 20 66 6f 75 72 2c  five,5.  1 four,
06d0: 34 0a 20 20 31 20 6f 6e 65 2c 31 0a 20 20 30 20  4.  1 one,1.  0 
06e0: 74 68 72 65 65 2c 33 0a 20 20 31 20 74 77 6f 2c  three,3.  1 two,
06f0: 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  2.}.do_execsql_t
0700: 65 73 74 20 31 2e 35 20 7b 0a 20 20 53 45 4c 45  est 1.5 {.  SELE
0710: 43 54 20 65 72 72 6d 73 67 2c 20 63 75 72 72 65  CT errmsg, curre
0720: 6e 74 5f 6b 65 79 20 46 52 4f 4d 20 69 6e 63 72  nt_key FROM incr
0730: 65 6d 65 6e 74 61 6c 5f 69 6e 64 65 78 5f 63 68  emental_index_ch
0740: 65 63 6b 28 27 69 31 27 29 3b 0a 7d 20 7b 0a 20  eck('i1');.} {. 
0750: 20 7b 72 6f 77 20 6d 69 73 73 69 6e 67 7d 20 66   {row missing} f
0760: 69 76 65 2c 35 0a 20 20 7b 7d 20 66 6f 75 72 2c  ive,5.  {} four,
0770: 34 0a 20 20 7b 7d 20 6f 6e 65 2c 31 0a 20 20 7b  4.  {} one,1.  {
0780: 72 6f 77 20 64 61 74 61 20 6d 69 73 6d 61 74 63  row data mismatc
0790: 68 7d 20 74 68 72 65 65 2c 33 0a 20 20 7b 7d 20  h} three,3.  {} 
07a0: 74 77 6f 2c 32 0a 7d 0a 0a 0a 0a 66 69 6e 69 73  two,2.}....finis
07b0: 68 5f 74 65 73 74 0a 0a                          h_test..