/ Hex Artifact Content
Login

Artifact 533add9100255e4cc430d371b3ecfb79f11f956b86c3a1b9d34413bf8e482d8f:


0000: 23 20 32 30 31 33 2d 31 30 2d 33 30 0a 23 0a 23  # 2013-10-30.#.#
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 0a 23 20 54 68 69 73 20 66 69 6c 65  **.#.# This file
0170: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72   implements regr
0180: 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72  ession tests for
0190: 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e   SQLite library.
01a0: 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20 6f 66    The.# focus of
01b0: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 74 65   this file is te
01c0: 73 74 69 6e 67 20 57 49 54 48 4f 55 54 20 52 4f  sting WITHOUT RO
01d0: 57 49 44 20 74 61 62 6c 65 73 2e 0a 23 0a 0a 73  WID tables..#..s
01e0: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
01f0: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0200: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0210: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20  /tester.tcl.set 
0220: 74 65 73 74 70 72 65 66 69 78 20 77 69 74 68 6f  testprefix witho
0230: 75 74 5f 72 6f 77 69 64 31 0a 0a 23 20 43 72 65  ut_rowid1..# Cre
0240: 61 74 65 20 61 6e 64 20 71 75 65 72 79 20 61 20  ate and query a 
0250: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
0260: 62 6c 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  ble..#.do_execsq
0270: 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  l_test without_r
0280: 6f 77 69 64 31 2d 31 2e 30 20 7b 0a 20 20 43 52  owid1-1.0 {.  CR
0290: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
02a0: 62 2c 63 2c 64 2c 20 50 52 49 4d 41 52 59 20 4b  b,c,d, PRIMARY K
02b0: 45 59 28 63 2c 61 29 29 20 57 49 54 48 4f 55 54  EY(c,a)) WITHOUT
02c0: 20 52 4f 57 49 44 3b 0a 20 20 43 52 45 41 54 45   ROWID;.  CREATE
02d0: 20 49 4e 44 45 58 20 74 31 62 64 20 4f 4e 20 74   INDEX t1bd ON t
02e0: 31 28 62 2c 20 64 29 3b 0a 20 20 49 4e 53 45 52  1(b, d);.  INSER
02f0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0300: 28 27 6a 6f 75 72 6e 61 6c 27 2c 27 73 68 65 72  ('journal','sher
0310: 6d 61 6e 27 2c 27 61 6d 6d 6f 6e 69 61 27 2c 27  man','ammonia','
0320: 68 65 6c 65 6e 61 27 29 3b 0a 20 20 49 4e 53 45  helena');.  INSE
0330: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0340: 53 28 27 64 79 6e 61 6d 69 63 27 2c 27 6a 75 6c  S('dynamic','jul
0350: 69 65 74 27 2c 27 66 6c 69 70 70 65 72 27 2c 27  iet','flipper','
0360: 63 6f 6d 6d 61 6e 64 27 29 3b 0a 20 20 49 4e 53  command');.  INS
0370: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0380: 45 53 28 27 6a 6f 75 72 6e 61 6c 27 2c 27 73 68  ES('journal','sh
0390: 65 72 6d 61 6e 27 2c 27 67 61 6d 6d 61 27 2c 27  erman','gamma','
03a0: 70 61 74 72 69 6f 74 27 29 3b 0a 20 20 49 4e 53  patriot');.  INS
03b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
03c0: 45 53 28 27 61 72 63 74 69 63 27 2c 27 73 6c 65  ES('arctic','sle
03d0: 65 70 27 2c 27 61 6d 6d 6f 6e 69 61 27 2c 27 68  ep','ammonia','h
03e0: 65 6c 65 6e 61 27 29 3b 0a 20 20 53 45 4c 45 43  elena');.  SELEC
03f0: 54 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74 31  T *, '|' FROM t1
0400: 20 4f 52 44 45 52 20 42 59 20 63 2c 20 61 3b 0a   ORDER BY c, a;.
0410: 7d 20 7b 61 72 63 74 69 63 20 73 6c 65 65 70 20  } {arctic sleep 
0420: 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20 7c  ammonia helena |
0430: 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e   journal sherman
0440: 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20   ammonia helena 
0450: 7c 20 64 79 6e 61 6d 69 63 20 6a 75 6c 69 65 74  | dynamic juliet
0460: 20 66 6c 69 70 70 65 72 20 63 6f 6d 6d 61 6e 64   flipper command
0470: 20 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d   | journal sherm
0480: 61 6e 20 67 61 6d 6d 61 20 70 61 74 72 69 6f 74  an gamma patriot
0490: 20 7c 7d 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63   |}..integrity_c
04a0: 68 65 63 6b 20 77 69 74 68 6f 75 74 5f 72 6f 77  heck without_row
04b0: 69 64 31 2d 31 2e 30 69 63 0a 0a 64 6f 5f 65 78  id1-1.0ic..do_ex
04c0: 65 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f  ecsql_test witho
04d0: 75 74 5f 72 6f 77 69 64 31 2d 31 2e 31 20 7b 0a  ut_rowid1-1.1 {.
04e0: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
04f0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0500: 20 2b 63 2c 20 61 3b 0a 7d 20 7b 61 72 63 74 69   +c, a;.} {arcti
0510: 63 20 73 6c 65 65 70 20 61 6d 6d 6f 6e 69 61 20  c sleep ammonia 
0520: 68 65 6c 65 6e 61 20 7c 20 6a 6f 75 72 6e 61 6c  helena | journal
0530: 20 73 68 65 72 6d 61 6e 20 61 6d 6d 6f 6e 69 61   sherman ammonia
0540: 20 68 65 6c 65 6e 61 20 7c 20 64 79 6e 61 6d 69   helena | dynami
0550: 63 20 6a 75 6c 69 65 74 20 66 6c 69 70 70 65 72  c juliet flipper
0560: 20 63 6f 6d 6d 61 6e 64 20 7c 20 6a 6f 75 72 6e   command | journ
0570: 61 6c 20 73 68 65 72 6d 61 6e 20 67 61 6d 6d 61  al sherman gamma
0580: 20 70 61 74 72 69 6f 74 20 7c 7d 0a 0a 64 6f 5f   patriot |}..do_
0590: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77 69 74  execsql_test wit
05a0: 68 6f 75 74 5f 72 6f 77 69 64 31 2d 31 2e 32 20  hout_rowid1-1.2 
05b0: 7b 0a 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c  {.  SELECT *, '|
05c0: 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  ' FROM t1 ORDER 
05d0: 42 59 20 63 20 44 45 53 43 2c 20 61 20 44 45 53  BY c DESC, a DES
05e0: 43 3b 0a 7d 20 7b 6a 6f 75 72 6e 61 6c 20 73 68  C;.} {journal sh
05f0: 65 72 6d 61 6e 20 67 61 6d 6d 61 20 70 61 74 72  erman gamma patr
0600: 69 6f 74 20 7c 20 64 79 6e 61 6d 69 63 20 6a 75  iot | dynamic ju
0610: 6c 69 65 74 20 66 6c 69 70 70 65 72 20 63 6f 6d  liet flipper com
0620: 6d 61 6e 64 20 7c 20 6a 6f 75 72 6e 61 6c 20 73  mand | journal s
0630: 68 65 72 6d 61 6e 20 61 6d 6d 6f 6e 69 61 20 68  herman ammonia h
0640: 65 6c 65 6e 61 20 7c 20 61 72 63 74 69 63 20 73  elena | arctic s
0650: 6c 65 65 70 20 61 6d 6d 6f 6e 69 61 20 68 65 6c  leep ammonia hel
0660: 65 6e 61 20 7c 7d 0a 0a 64 6f 5f 65 78 65 63 73  ena |}..do_execs
0670: 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  ql_test without_
0680: 72 6f 77 69 64 31 2d 31 2e 31 31 20 7b 0a 20 20  rowid1-1.11 {.  
0690: 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20 46 52  SELECT *, '|' FR
06a0: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 62  OM t1 ORDER BY b
06b0: 2c 20 64 3b 0a 7d 20 7b 64 79 6e 61 6d 69 63 20  , d;.} {dynamic 
06c0: 6a 75 6c 69 65 74 20 66 6c 69 70 70 65 72 20 63  juliet flipper c
06d0: 6f 6d 6d 61 6e 64 20 7c 20 6a 6f 75 72 6e 61 6c  ommand | journal
06e0: 20 73 68 65 72 6d 61 6e 20 61 6d 6d 6f 6e 69 61   sherman ammonia
06f0: 20 68 65 6c 65 6e 61 20 7c 20 6a 6f 75 72 6e 61   helena | journa
0700: 6c 20 73 68 65 72 6d 61 6e 20 67 61 6d 6d 61 20  l sherman gamma 
0710: 70 61 74 72 69 6f 74 20 7c 20 61 72 63 74 69 63  patriot | arctic
0720: 20 73 6c 65 65 70 20 61 6d 6d 6f 6e 69 61 20 68   sleep ammonia h
0730: 65 6c 65 6e 61 20 7c 7d 0a 0a 64 6f 5f 65 78 65  elena |}..do_exe
0740: 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75  csql_test withou
0750: 74 5f 72 6f 77 69 64 31 2d 31 2e 31 32 20 7b 0a  t_rowid1-1.12 {.
0760: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
0770: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0780: 20 2b 62 2c 20 64 3b 0a 7d 20 7b 64 79 6e 61 6d   +b, d;.} {dynam
0790: 69 63 20 6a 75 6c 69 65 74 20 66 6c 69 70 70 65  ic juliet flippe
07a0: 72 20 63 6f 6d 6d 61 6e 64 20 7c 20 6a 6f 75 72  r command | jour
07b0: 6e 61 6c 20 73 68 65 72 6d 61 6e 20 61 6d 6d 6f  nal sherman ammo
07c0: 6e 69 61 20 68 65 6c 65 6e 61 20 7c 20 6a 6f 75  nia helena | jou
07d0: 72 6e 61 6c 20 73 68 65 72 6d 61 6e 20 67 61 6d  rnal sherman gam
07e0: 6d 61 20 70 61 74 72 69 6f 74 20 7c 20 61 72 63  ma patriot | arc
07f0: 74 69 63 20 73 6c 65 65 70 20 61 6d 6d 6f 6e 69  tic sleep ammoni
0800: 61 20 68 65 6c 65 6e 61 20 7c 7d 0a 0a 23 20 54  a helena |}..# T
0810: 72 79 69 6e 67 20 74 6f 20 69 6e 73 65 72 74 20  rying to insert 
0820: 61 20 64 75 70 6c 69 63 61 74 65 20 50 52 49 4d  a duplicate PRIM
0830: 41 52 59 20 4b 45 59 20 66 61 69 6c 73 2e 0a 23  ARY KEY fails..#
0840: 0a 64 6f 5f 74 65 73 74 20 77 69 74 68 6f 75 74  .do_test without
0850: 5f 72 6f 77 69 64 31 2d 31 2e 32 31 20 7b 0a 20  _rowid1-1.21 {. 
0860: 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20   catchsql {.    
0870: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
0880: 41 4c 55 45 53 28 27 64 79 6e 61 6d 69 63 27 2c  ALUES('dynamic',
0890: 27 70 68 6f 6e 65 27 2c 27 66 6c 69 70 70 65 72  'phone','flipper
08a0: 27 2c 27 68 61 72 76 61 72 64 27 29 3b 0a 20 20  ','harvard');.  
08b0: 7d 0a 7d 20 7b 31 20 7b 55 4e 49 51 55 45 20 63  }.} {1 {UNIQUE c
08c0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
08d0: 3a 20 74 31 2e 63 2c 20 74 31 2e 61 7d 7d 0a 0a  : t1.c, t1.a}}..
08e0: 23 20 52 45 50 4c 41 43 45 20 49 4e 54 4f 20 77  # REPLACE INTO w
08f0: 6f 72 6b 73 2c 20 68 6f 77 65 76 65 72 2e 0a 23  orks, however..#
0900: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0910: 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64 31 2d   without_rowid1-
0920: 31 2e 32 32 20 7b 0a 20 20 52 45 50 4c 41 43 45  1.22 {.  REPLACE
0930: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0940: 27 64 79 6e 61 6d 69 63 27 2c 27 70 68 6f 6e 65  'dynamic','phone
0950: 27 2c 27 66 6c 69 70 70 65 72 27 2c 27 68 61 72  ','flipper','har
0960: 76 61 72 64 27 29 3b 0a 20 20 53 45 4c 45 43 54  vard');.  SELECT
0970: 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74 31 20   *, '|' FROM t1 
0980: 4f 52 44 45 52 20 42 59 20 63 2c 20 61 3b 0a 7d  ORDER BY c, a;.}
0990: 20 7b 61 72 63 74 69 63 20 73 6c 65 65 70 20 61   {arctic sleep a
09a0: 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20 7c 20  mmonia helena | 
09b0: 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e 20  journal sherman 
09c0: 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20 7c  ammonia helena |
09d0: 20 64 79 6e 61 6d 69 63 20 70 68 6f 6e 65 20 66   dynamic phone f
09e0: 6c 69 70 70 65 72 20 68 61 72 76 61 72 64 20 7c  lipper harvard |
09f0: 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e   journal sherman
0a00: 20 67 61 6d 6d 61 20 70 61 74 72 69 6f 74 20 7c   gamma patriot |
0a10: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0a20: 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  st without_rowid
0a30: 31 2d 31 2e 32 33 20 7b 0a 20 20 53 45 4c 45 43  1-1.23 {.  SELEC
0a40: 54 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74 31  T *, '|' FROM t1
0a50: 20 4f 52 44 45 52 20 42 59 20 62 2c 20 64 3b 0a   ORDER BY b, d;.
0a60: 7d 20 7b 64 79 6e 61 6d 69 63 20 70 68 6f 6e 65  } {dynamic phone
0a70: 20 66 6c 69 70 70 65 72 20 68 61 72 76 61 72 64   flipper harvard
0a80: 20 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d   | journal sherm
0a90: 61 6e 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e  an ammonia helen
0aa0: 61 20 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72  a | journal sher
0ab0: 6d 61 6e 20 67 61 6d 6d 61 20 70 61 74 72 69 6f  man gamma patrio
0ac0: 74 20 7c 20 61 72 63 74 69 63 20 73 6c 65 65 70  t | arctic sleep
0ad0: 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20   ammonia helena 
0ae0: 7c 7d 0a 0a 23 20 55 50 44 41 54 45 20 73 74 61  |}..# UPDATE sta
0af0: 74 65 6d 65 6e 74 73 2e 0a 23 0a 64 6f 5f 65 78  tements..#.do_ex
0b00: 65 63 73 71 6c 5f 74 65 73 74 20 77 69 74 68 6f  ecsql_test witho
0b10: 75 74 5f 72 6f 77 69 64 31 2d 31 2e 33 31 20 7b  ut_rowid1-1.31 {
0b20: 0a 20 20 55 50 44 41 54 45 20 74 31 20 53 45 54  .  UPDATE t1 SET
0b30: 20 64 3d 33 2e 31 34 31 35 39 32 36 20 57 48 45   d=3.1415926 WHE
0b40: 52 45 20 61 3d 27 6a 6f 75 72 6e 61 6c 27 3b 0a  RE a='journal';.
0b50: 20 20 53 45 4c 45 43 54 20 2a 2c 20 27 7c 27 20    SELECT *, '|' 
0b60: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0b70: 20 63 2c 20 61 3b 0a 7d 20 7b 61 72 63 74 69 63   c, a;.} {arctic
0b80: 20 73 6c 65 65 70 20 61 6d 6d 6f 6e 69 61 20 68   sleep ammonia h
0b90: 65 6c 65 6e 61 20 7c 20 6a 6f 75 72 6e 61 6c 20  elena | journal 
0ba0: 73 68 65 72 6d 61 6e 20 61 6d 6d 6f 6e 69 61 20  sherman ammonia 
0bb0: 33 2e 31 34 31 35 39 32 36 20 7c 20 64 79 6e 61  3.1415926 | dyna
0bc0: 6d 69 63 20 70 68 6f 6e 65 20 66 6c 69 70 70 65  mic phone flippe
0bd0: 72 20 68 61 72 76 61 72 64 20 7c 20 6a 6f 75 72  r harvard | jour
0be0: 6e 61 6c 20 73 68 65 72 6d 61 6e 20 67 61 6d 6d  nal sherman gamm
0bf0: 61 20 33 2e 31 34 31 35 39 32 36 20 7c 7d 0a 64  a 3.1415926 |}.d
0c00: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 77  o_execsql_test w
0c10: 69 74 68 6f 75 74 5f 72 6f 77 69 64 31 2d 31 2e  ithout_rowid1-1.
0c20: 33 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 2c  32 {.  SELECT *,
0c30: 20 27 7c 27 20 46 52 4f 4d 20 74 31 20 4f 52 44   '|' FROM t1 ORD
0c40: 45 52 20 42 59 20 62 2c 20 64 3b 0a 7d 20 7b 64  ER BY b, d;.} {d
0c50: 79 6e 61 6d 69 63 20 70 68 6f 6e 65 20 66 6c 69  ynamic phone fli
0c60: 70 70 65 72 20 68 61 72 76 61 72 64 20 7c 20 6a  pper harvard | j
0c70: 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e 20 61  ournal sherman a
0c80: 6d 6d 6f 6e 69 61 20 33 2e 31 34 31 35 39 32 36  mmonia 3.1415926
0c90: 20 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d   | journal sherm
0ca0: 61 6e 20 67 61 6d 6d 61 20 33 2e 31 34 31 35 39  an gamma 3.14159
0cb0: 32 36 20 7c 20 61 72 63 74 69 63 20 73 6c 65 65  26 | arctic slee
0cc0: 70 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61  p ammonia helena
0cd0: 20 7c 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   |}..do_execsql_
0ce0: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
0cf0: 69 64 31 2d 31 2e 33 35 20 7b 0a 20 20 55 50 44  id1-1.35 {.  UPD
0d00: 41 54 45 20 74 31 20 53 45 54 20 61 3d 31 32 35  ATE t1 SET a=125
0d10: 30 20 57 48 45 52 45 20 62 3d 27 70 68 6f 6e 65  0 WHERE b='phone
0d20: 27 3b 0a 20 20 53 45 4c 45 43 54 20 2a 2c 20 27  ';.  SELECT *, '
0d30: 7c 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  |' FROM t1 ORDER
0d40: 20 42 59 20 63 2c 20 61 3b 0a 7d 20 7b 61 72 63   BY c, a;.} {arc
0d50: 74 69 63 20 73 6c 65 65 70 20 61 6d 6d 6f 6e 69  tic sleep ammoni
0d60: 61 20 68 65 6c 65 6e 61 20 7c 20 6a 6f 75 72 6e  a helena | journ
0d70: 61 6c 20 73 68 65 72 6d 61 6e 20 61 6d 6d 6f 6e  al sherman ammon
0d80: 69 61 20 33 2e 31 34 31 35 39 32 36 20 7c 20 31  ia 3.1415926 | 1
0d90: 32 35 30 20 70 68 6f 6e 65 20 66 6c 69 70 70 65  250 phone flippe
0da0: 72 20 68 61 72 76 61 72 64 20 7c 20 6a 6f 75 72  r harvard | jour
0db0: 6e 61 6c 20 73 68 65 72 6d 61 6e 20 67 61 6d 6d  nal sherman gamm
0dc0: 61 20 33 2e 31 34 31 35 39 32 36 20 7c 7d 0a 69  a 3.1415926 |}.i
0dd0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 77  ntegrity_check w
0de0: 69 74 68 6f 75 74 5f 72 6f 77 69 64 31 2d 31 2e  ithout_rowid1-1.
0df0: 33 36 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  36..do_execsql_t
0e00: 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77 69  est without_rowi
0e10: 64 31 2d 31 2e 33 37 20 7b 0a 20 20 53 45 4c 45  d1-1.37 {.  SELE
0e20: 43 54 20 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74  CT *, '|' FROM t
0e30: 31 20 4f 52 44 45 52 20 42 59 20 62 2c 20 64 3b  1 ORDER BY b, d;
0e40: 0a 7d 20 7b 31 32 35 30 20 70 68 6f 6e 65 20 66  .} {1250 phone f
0e50: 6c 69 70 70 65 72 20 68 61 72 76 61 72 64 20 7c  lipper harvard |
0e60: 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e   journal sherman
0e70: 20 61 6d 6d 6f 6e 69 61 20 33 2e 31 34 31 35 39   ammonia 3.14159
0e80: 32 36 20 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65  26 | journal she
0e90: 72 6d 61 6e 20 67 61 6d 6d 61 20 33 2e 31 34 31  rman gamma 3.141
0ea0: 35 39 32 36 20 7c 20 61 72 63 74 69 63 20 73 6c  5926 | arctic sl
0eb0: 65 65 70 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65  eep ammonia hele
0ec0: 6e 61 20 7c 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  na |}..do_execsq
0ed0: 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72  l_test without_r
0ee0: 6f 77 69 64 31 2d 31 2e 34 30 20 7b 0a 20 20 56  owid1-1.40 {.  V
0ef0: 41 43 55 55 4d 3b 0a 20 20 53 45 4c 45 43 54 20  ACUUM;.  SELECT 
0f00: 2a 2c 20 27 7c 27 20 46 52 4f 4d 20 74 31 20 4f  *, '|' FROM t1 O
0f10: 52 44 45 52 20 42 59 20 62 2c 20 64 3b 0a 7d 20  RDER BY b, d;.} 
0f20: 7b 31 32 35 30 20 70 68 6f 6e 65 20 66 6c 69 70  {1250 phone flip
0f30: 70 65 72 20 68 61 72 76 61 72 64 20 7c 20 6a 6f  per harvard | jo
0f40: 75 72 6e 61 6c 20 73 68 65 72 6d 61 6e 20 61 6d  urnal sherman am
0f50: 6d 6f 6e 69 61 20 33 2e 31 34 31 35 39 32 36 20  monia 3.1415926 
0f60: 7c 20 6a 6f 75 72 6e 61 6c 20 73 68 65 72 6d 61  | journal sherma
0f70: 6e 20 67 61 6d 6d 61 20 33 2e 31 34 31 35 39 32  n gamma 3.141592
0f80: 36 20 7c 20 61 72 63 74 69 63 20 73 6c 65 65 70  6 | arctic sleep
0f90: 20 61 6d 6d 6f 6e 69 61 20 68 65 6c 65 6e 61 20   ammonia helena 
0fa0: 7c 7d 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  |}.integrity_che
0fb0: 63 6b 20 77 69 74 68 6f 75 74 5f 72 6f 77 69 64  ck without_rowid
0fc0: 31 2d 31 2e 34 31 0a 0a 23 20 56 65 72 69 66 79  1-1.41..# Verify
0fd0: 20 74 68 61 74 20 41 4e 41 4c 59 5a 45 20 77 6f   that ANALYZE wo
0fe0: 72 6b 73 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  rks.#.do_execsql
0ff0: 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f  _test without_ro
1000: 77 69 64 31 2d 31 2e 35 30 20 7b 0a 20 20 41 4e  wid1-1.50 {.  AN
1010: 41 4c 59 5a 45 3b 0a 20 20 53 45 4c 45 43 54 20  ALYZE;.  SELECT 
1020: 2a 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74  * FROM sqlite_st
1030: 61 74 31 20 4f 52 44 45 52 20 42 59 20 69 64 78  at1 ORDER BY idx
1040: 3b 0a 7d 20 7b 74 31 20 74 31 20 7b 34 20 32 20  ;.} {t1 t1 {4 2 
1050: 31 7d 20 74 31 20 74 31 62 64 20 7b 34 20 32 20  1} t1 t1bd {4 2 
1060: 32 7d 7d 0a 69 66 63 61 70 61 62 6c 65 20 73 74  2}}.ifcapable st
1070: 61 74 33 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73  at3 {.  do_execs
1080: 71 6c 5f 74 65 73 74 20 77 69 74 68 6f 75 74 5f  ql_test without_
1090: 72 6f 77 69 64 31 2d 31 2e 35 31 20 7b 0a 20 20  rowid1-1.51 {.  
10a0: 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43    SELECT DISTINC
10b0: 54 20 74 62 6c 2c 20 69 64 78 20 46 52 4f 4d 20  T tbl, idx FROM 
10c0: 73 71 6c 69 74 65 5f 73 74 61 74 33 20 4f 52 44  sqlite_stat3 ORD
10d0: 45 52 20 42 59 20 69 64 78 3b 0a 20 20 7d 20 7b  ER BY idx;.  } {
10e0: 74 31 20 74 31 20 74 31 20 74 31 62 64 7d 0a 7d  t1 t1 t1 t1bd}.}
10f0: 0a 69 66 63 61 70 61 62 6c 65 20 73 74 61 74 34  .ifcapable stat4
1100: 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   {.  do_execsql_
1110: 74 65 73 74 20 77 69 74 68 6f 75 74 5f 72 6f 77  test without_row
1120: 69 64 31 2d 31 2e 35 32 20 7b 0a 20 20 20 20 53  id1-1.52 {.    S
1130: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74  ELECT DISTINCT t
1140: 62 6c 2c 20 69 64 78 20 46 52 4f 4d 20 73 71 6c  bl, idx FROM sql
1150: 69 74 65 5f 73 74 61 74 34 20 4f 52 44 45 52 20  ite_stat4 ORDER 
1160: 42 59 20 69 64 78 3b 0a 20 20 7d 20 7b 74 31 20  BY idx;.  } {t1 
1170: 74 31 20 74 31 20 74 31 62 64 7d 0a 7d 0a 0a 23  t1 t1 t1bd}.}..#
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 64 6f 5f 65  ----------..do_e
1190: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 2e  xecsql_test 2.1.
11a0: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
11b0: 4c 45 20 74 34 20 28 61 20 43 4f 4c 4c 41 54 45  LE t4 (a COLLATE
11c0: 20 6e 6f 63 61 73 65 20 50 52 49 4d 41 52 59 20   nocase PRIMARY 
11d0: 4b 45 59 2c 20 62 29 20 57 49 54 48 4f 55 54 20  KEY, b) WITHOUT 
11e0: 52 4f 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20  ROWID;.  INSERT 
11f0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
1200: 61 62 63 27 2c 20 27 64 65 66 27 29 3b 0a 20 20  abc', 'def');.  
1210: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
1220: 3b 0a 7d 20 7b 61 62 63 20 64 65 66 7d 0a 64 6f  ;.} {abc def}.do
1230: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
1240: 31 2e 32 20 7b 0a 20 20 55 50 44 41 54 45 20 74  1.2 {.  UPDATE t
1250: 34 20 53 45 54 20 61 20 3d 20 27 41 42 43 27 3b  4 SET a = 'ABC';
1260: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
1270: 20 74 34 3b 0a 7d 20 7b 41 42 43 20 64 65 66 7d   t4;.} {ABC def}
1280: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1290: 74 20 32 2e 32 2e 31 20 7b 0a 20 20 44 52 4f 50  t 2.2.1 {.  DROP
12a0: 20 54 41 42 4c 45 20 74 34 3b 0a 20 20 43 52 45   TABLE t4;.  CRE
12b0: 41 54 45 20 54 41 42 4c 45 20 74 34 20 28 62 2c  ATE TABLE t4 (b,
12c0: 20 61 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73   a COLLATE nocas
12d0: 65 20 50 52 49 4d 41 52 59 20 4b 45 59 29 20 57  e PRIMARY KEY) W
12e0: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
12f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 28 61  INSERT INTO t4(a
1300: 2c 20 62 29 20 56 41 4c 55 45 53 28 27 61 62 63  , b) VALUES('abc
1310: 27 2c 20 27 64 65 66 27 29 3b 0a 20 20 53 45 4c  ', 'def');.  SEL
1320: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 7d  ECT * FROM t4;.}
1330: 20 7b 64 65 66 20 61 62 63 7d 0a 0a 64 6f 5f 65   {def abc}..do_e
1340: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e  xecsql_test 2.2.
1350: 32 20 7b 0a 20 20 55 50 44 41 54 45 20 74 34 20  2 {.  UPDATE t4 
1360: 53 45 54 20 61 20 3d 20 27 41 42 43 27 2c 20 62  SET a = 'ABC', b
1370: 20 3d 20 27 78 79 7a 27 3b 0a 20 20 53 45 4c 45   = 'xyz';.  SELE
1380: 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 7d 20  CT * FROM t4;.} 
1390: 7b 78 79 7a 20 41 42 43 7d 0a 0a 64 6f 5f 65 78  {xyz ABC}..do_ex
13a0: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 33 2e 31  ecsql_test 2.3.1
13b0: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
13c0: 45 20 74 35 20 28 61 2c 20 62 2c 20 50 52 49 4d  E t5 (a, b, PRIM
13d0: 41 52 59 20 4b 45 59 28 62 2c 20 61 29 29 20 57  ARY KEY(b, a)) W
13e0: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
13f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 28 61  INSERT INTO t5(a
1400: 2c 20 62 29 20 56 41 4c 55 45 53 28 27 61 62 63  , b) VALUES('abc
1410: 27 2c 20 27 64 65 66 27 29 3b 0a 20 20 55 50 44  ', 'def');.  UPD
1420: 41 54 45 20 74 35 20 53 45 54 20 61 3d 27 61 62  ATE t5 SET a='ab
1430: 63 27 2c 20 62 3d 27 64 65 66 27 3b 0a 7d 20 7b  c', b='def';.} {
1440: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
1450: 73 74 20 32 2e 34 2e 31 20 7b 0a 20 20 43 52 45  st 2.4.1 {.  CRE
1460: 41 54 45 20 54 41 42 4c 45 20 74 36 20 28 0a 20  ATE TABLE t6 (. 
1470: 20 20 20 61 20 43 4f 4c 4c 41 54 45 20 6e 6f 63     a COLLATE noc
1480: 61 73 65 2c 20 62 2c 20 63 20 55 4e 49 51 55 45  ase, b, c UNIQUE
1490: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 62 2c  , PRIMARY KEY(b,
14a0: 20 61 29 0a 20 20 29 20 57 49 54 48 4f 55 54 20   a).  ) WITHOUT 
14b0: 52 4f 57 49 44 3b 0a 0a 20 20 49 4e 53 45 52 54  ROWID;..  INSERT
14c0: 20 49 4e 54 4f 20 74 36 28 61 2c 20 62 2c 20 63   INTO t6(a, b, c
14d0: 29 20 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20  ) VALUES('abc', 
14e0: 27 64 65 66 27 2c 20 27 67 68 69 27 29 3b 0a 20  'def', 'ghi');. 
14f0: 20 55 50 44 41 54 45 20 74 36 20 53 45 54 20 61   UPDATE t6 SET a
1500: 3d 27 41 42 43 27 2c 20 63 3d 27 67 68 69 27 3b  ='ABC', c='ghi';
1510: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  .} {}..do_execsq
1520: 6c 5f 74 65 73 74 20 32 2e 34 2e 32 20 7b 0a 20  l_test 2.4.2 {. 
1530: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1540: 36 20 4f 52 44 45 52 20 42 59 20 62 2c 20 61 3b  6 ORDER BY b, a;
1550: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
1560: 20 74 36 20 4f 52 44 45 52 20 42 59 20 63 3b 0a   t6 ORDER BY c;.
1570: 7d 20 7b 41 42 43 20 64 65 66 20 67 68 69 20 41  } {ABC def ghi A
1580: 42 43 20 64 65 66 20 67 68 69 7d 0a 0a 23 2d 2d  BC def ghi}..#--
1590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15d0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 55 6e 6c 65 73 73  -------.# Unless
15e0: 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e   the destination
15f0: 20 74 61 62 6c 65 20 69 73 20 63 6f 6d 70 6c 65   table is comple
1600: 74 65 6c 79 20 65 6d 70 74 79 2c 20 74 68 65 20  tely empty, the 
1610: 78 66 65 72 20 6f 70 74 69 6d 69 7a 61 74 69 6f  xfer optimizatio
1620: 6e 20 0a 23 20 69 73 20 64 69 73 61 62 6c 65 64  n .# is disabled
1630: 20 66 6f 72 20 57 49 54 48 4f 55 54 20 52 4f 57   for WITHOUT ROW
1640: 49 44 20 74 61 62 6c 65 73 2e 20 54 68 65 20 66  ID tables. The f
1650: 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 73 20 63  ollowing tests c
1660: 68 65 63 6b 20 66 6f 72 0a 23 20 73 6f 6d 65 20  heck for.# some 
1670: 70 72 6f 62 6c 65 6d 73 20 74 68 61 74 20 6d 69  problems that mi
1680: 67 68 74 20 6f 63 63 75 72 20 69 66 20 74 68 69  ght occur if thi
1690: 73 20 77 65 72 65 20 6e 6f 74 20 74 68 65 20 63  s were not the c
16a0: 61 73 65 2e 0a 23 0a 72 65 73 65 74 5f 64 62 0a  ase..#.reset_db.
16b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
16c0: 33 2e 31 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  3.1.1 {.  CREATE
16d0: 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20   TABLE t1(a, b, 
16e0: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29 20  PRIMARY KEY(a)) 
16f0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20  WITHOUT ROWID;. 
1700: 20 43 52 45 41 54 45 20 55 4e 49 51 55 45 20 49   CREATE UNIQUE I
1710: 4e 44 45 58 20 69 31 20 4f 4e 20 74 31 28 62 29  NDEX i1 ON t1(b)
1720: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  ;..  CREATE TABL
1730: 45 20 74 32 28 61 2c 20 62 2c 20 50 52 49 4d 41  E t2(a, b, PRIMA
1740: 52 59 20 4b 45 59 28 61 29 29 20 57 49 54 48 4f  RY KEY(a)) WITHO
1750: 55 54 20 52 4f 57 49 44 3b 0a 20 20 43 52 45 41  UT ROWID;.  CREA
1760: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20  TE UNIQUE INDEX 
1770: 69 32 20 4f 4e 20 74 32 28 62 29 3b 0a 0a 20 20  i2 ON t2(b);..  
1780: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
1790: 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 27 74 77  ALUES('one', 'tw
17a0: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
17b0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 74 68  TO t2 VALUES('th
17c0: 72 65 65 27 2c 20 27 74 77 6f 27 29 3b 0a 7d 0a  ree', 'two');.}.
17d0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
17e0: 20 33 2e 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52   3.1.2 {.  INSER
17f0: 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54  T OR REPLACE INT
1800: 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20 46 52  O t1 SELECT * FR
1810: 4f 4d 20 74 32 3b 0a 20 20 53 45 4c 45 43 54 20  OM t2;.  SELECT 
1820: 2a 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 74 68  * FROM t1;.} {th
1830: 72 65 65 20 74 77 6f 7d 0a 0a 64 6f 5f 65 78 65  ree two}..do_exe
1840: 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 2e 33 20  csql_test 3.1.3 
1850: 7b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  {.  DELETE FROM 
1860: 74 31 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  t1;.  INSERT INT
1870: 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20 46 52  O t1 SELECT * FR
1880: 4f 4d 20 74 32 3b 0a 20 20 53 45 4c 45 43 54 20  OM t2;.  SELECT 
1890: 2a 20 46 52 4f 4d 20 74 31 3b 0a 7d 20 7b 74 68  * FROM t1;.} {th
18a0: 72 65 65 20 74 77 6f 7d 0a 0a 64 6f 5f 63 61 74  ree two}..do_cat
18b0: 63 68 73 71 6c 5f 74 65 73 74 20 33 2e 31 2e 34  chsql_test 3.1.4
18c0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
18d0: 20 74 32 20 56 41 4c 55 45 53 28 27 66 6f 75 72   t2 VALUES('four
18e0: 27 2c 20 27 66 6f 75 72 27 29 3b 0a 20 20 49 4e  ', 'four');.  IN
18f0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
1900: 55 45 53 28 27 73 69 78 27 2c 20 27 74 77 6f 27  UES('six', 'two'
1910: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1920: 20 74 31 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   t1 SELECT * FRO
1930: 4d 20 74 32 3b 0a 7d 20 7b 31 20 7b 55 4e 49 51  M t2;.} {1 {UNIQ
1940: 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  UE constraint fa
1950: 69 6c 65 64 3a 20 74 32 2e 62 7d 7d 0a 0a 64 6f  iled: t2.b}}..do
1960: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
1970: 31 2e 35 20 7b 0a 20 20 43 52 45 41 54 45 20 54  1.5 {.  CREATE T
1980: 41 42 4c 45 20 74 33 28 61 20 50 52 49 4d 41 52  ABLE t3(a PRIMAR
1990: 59 20 4b 45 59 29 3b 0a 20 20 43 52 45 41 54 45  Y KEY);.  CREATE
19a0: 20 54 41 42 4c 45 20 74 34 28 61 20 50 52 49 4d   TABLE t4(a PRIM
19b0: 41 52 59 20 4b 45 59 29 3b 0a 0a 20 20 49 4e 53  ARY KEY);..  INS
19c0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
19d0: 45 53 28 27 69 27 29 3b 0a 20 20 49 4e 53 45 52  ES('i');.  INSER
19e0: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
19f0: 28 27 69 69 27 29 3b 0a 20 20 49 4e 53 45 52 54  ('ii');.  INSERT
1a00: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
1a10: 27 69 69 69 27 29 3b 0a 0a 20 20 49 4e 53 45 52  'iii');..  INSER
1a20: 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54  T INTO t3 SELECT
1a30: 20 2a 20 46 52 4f 4d 20 74 34 3b 0a 20 20 53 45   * FROM t4;.  SE
1a40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 3b 0a  LECT * FROM t3;.
1a50: 7d 20 7b 69 20 69 69 20 69 69 69 7d 0a 0a 23 23  } {i ii iii}..##
1a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa0: 23 23 23 23 23 23 23 23 23 23 0a 23 20 54 69 63  ##########.# Tic
1ab0: 6b 65 74 20 5b 63 33 34 64 30 35 35 37 66 37 34  ket [c34d0557f74
1ac0: 30 63 34 35 30 37 30 39 64 36 65 33 33 64 66 37  0c450709d6e33df7
1ad0: 32 64 34 66 33 66 36 35 31 61 33 63 63 5d 0a 23  2d4f3f651a3cc].#
1ae0: 20 4e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   Name resolution
1af0: 20 69 73 73 75 65 20 77 69 74 68 20 57 49 54 48   issue with WITH
1b00: 4f 55 54 20 52 4f 57 49 44 0a 23 0a 64 6f 5f 65  OUT ROWID.#.do_e
1b10: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 20  xecsql_test 4.1 
1b20: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
1b30: 20 74 34 31 28 61 20 50 52 49 4d 41 52 59 20 4b   t41(a PRIMARY K
1b40: 45 59 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49  EY) WITHOUT ROWI
1b50: 44 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  D;.  INSERT INTO
1b60: 20 74 34 31 20 56 41 4c 55 45 53 28 27 61 62 63   t41 VALUES('abc
1b70: 27 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  ');.  CREATE TAB
1b80: 4c 45 20 74 34 32 28 78 29 3b 0a 20 20 49 4e 53  LE t42(x);.  INS
1b90: 45 52 54 20 49 4e 54 4f 20 74 34 32 20 56 41 4c  ERT INTO t42 VAL
1ba0: 55 45 53 28 27 78 79 7a 27 29 3b 0a 20 20 53 45  UES('xyz');.  SE
1bb0: 4c 45 43 54 20 74 34 32 2e 72 6f 77 69 64 20 46  LECT t42.rowid F
1bc0: 52 4f 4d 20 74 34 31 2c 20 74 34 32 3b 0a 7d 20  ROM t41, t42;.} 
1bd0: 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {1}.do_execsql_t
1be0: 65 73 74 20 34 2e 32 20 7b 0a 20 20 53 45 4c 45  est 4.2 {.  SELE
1bf0: 43 54 20 74 34 32 2e 72 6f 77 69 64 20 46 52 4f  CT t42.rowid FRO
1c00: 4d 20 74 34 32 2c 20 74 34 31 3b 0a 7d 20 7b 31  M t42, t41;.} {1
1c10: 7d 0a 0a 0a 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1c60: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
1c70: 74 65 73 74 73 20 76 65 72 69 66 79 20 74 68 61  tests verify tha
1c80: 74 20 74 68 65 20 74 72 61 69 6c 69 6e 67 20 50  t the trailing P
1c90: 4b 20 66 69 65 6c 64 73 20 61 64 64 65 64 20 74  K fields added t
1ca0: 6f 20 65 61 63 68 0a 23 20 65 6e 74 72 79 20 69  o each.# entry i
1cb0: 6e 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 61 20  n an index on a 
1cc0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
1cd0: 62 6c 65 20 61 72 65 20 75 73 65 64 20 63 6f 72  ble are used cor
1ce0: 72 65 63 74 6c 79 2e 0a 23 0a 64 6f 5f 65 78 65  rectly..#.do_exe
1cf0: 63 73 71 6c 5f 74 65 73 74 20 35 2e 30 20 7b 0a  csql_test 5.0 {.
1d00: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1d10: 34 35 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  45(a PRIMARY KEY
1d20: 2c 20 62 2c 20 63 29 20 57 49 54 48 4f 55 54 20  , b, c) WITHOUT 
1d30: 52 4f 57 49 44 3b 0a 20 20 43 52 45 41 54 45 20  ROWID;.  CREATE 
1d40: 49 4e 44 45 58 20 69 34 35 20 4f 4e 20 74 34 35  INDEX i45 ON t45
1d50: 28 62 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49  (b);..  INSERT I
1d60: 4e 54 4f 20 74 34 35 20 56 41 4c 55 45 53 28 32  NTO t45 VALUES(2
1d70: 2c 20 27 6f 6e 65 27 2c 20 27 78 27 29 3b 0a 20  , 'one', 'x');. 
1d80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 35   INSERT INTO t45
1d90: 20 56 41 4c 55 45 53 28 34 2c 20 27 6f 6e 65 27   VALUES(4, 'one'
1da0: 2c 20 27 78 27 29 3b 0a 20 20 49 4e 53 45 52 54  , 'x');.  INSERT
1db0: 20 49 4e 54 4f 20 74 34 35 20 56 41 4c 55 45 53   INTO t45 VALUES
1dc0: 28 36 2c 20 27 6f 6e 65 27 2c 20 27 78 27 29 3b  (6, 'one', 'x');
1dd0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1de0: 34 35 20 56 41 4c 55 45 53 28 38 2c 20 27 6f 6e  45 VALUES(8, 'on
1df0: 65 27 2c 20 27 78 27 29 3b 0a 20 20 49 4e 53 45  e', 'x');.  INSE
1e00: 52 54 20 49 4e 54 4f 20 74 34 35 20 56 41 4c 55  RT INTO t45 VALU
1e10: 45 53 28 31 30 2c 20 27 6f 6e 65 27 2c 20 27 78  ES(10, 'one', 'x
1e20: 27 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ');..  INSERT IN
1e30: 54 4f 20 74 34 35 20 56 41 4c 55 45 53 28 31 2c  TO t45 VALUES(1,
1e40: 20 27 74 77 6f 27 2c 20 27 78 27 29 3b 0a 20 20   'two', 'x');.  
1e50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 35 20  INSERT INTO t45 
1e60: 56 41 4c 55 45 53 28 33 2c 20 27 74 77 6f 27 2c  VALUES(3, 'two',
1e70: 20 27 78 27 29 3b 0a 20 20 49 4e 53 45 52 54 20   'x');.  INSERT 
1e80: 49 4e 54 4f 20 74 34 35 20 56 41 4c 55 45 53 28  INTO t45 VALUES(
1e90: 35 2c 20 27 74 77 6f 27 2c 20 27 78 27 29 3b 0a  5, 'two', 'x');.
1ea0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34    INSERT INTO t4
1eb0: 35 20 56 41 4c 55 45 53 28 37 2c 20 27 74 77 6f  5 VALUES(7, 'two
1ec0: 27 2c 20 27 78 27 29 3b 0a 20 20 49 4e 53 45 52  ', 'x');.  INSER
1ed0: 54 20 49 4e 54 4f 20 74 34 35 20 56 41 4c 55 45  T INTO t45 VALUE
1ee0: 53 28 39 2c 20 27 74 77 6f 27 2c 20 27 78 27 29  S(9, 'two', 'x')
1ef0: 3b 0a 7d 0a 0a 64 6f 5f 65 71 70 5f 74 65 73 74  ;.}..do_eqp_test
1f00: 20 35 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20   5.1 {.  SELECT 
1f10: 2a 20 46 52 4f 4d 20 74 34 35 20 57 48 45 52 45  * FROM t45 WHERE
1f20: 20 62 3d 3f 20 41 4e 44 20 61 3e 3f 0a 7d 20 7b   b=? AND a>?.} {
1f30: 55 53 49 4e 47 20 49 4e 44 45 58 20 69 34 35 20  USING INDEX i45 
1f40: 28 62 3d 3f 20 41 4e 44 20 61 3e 3f 29 7d 0a 0a  (b=? AND a>?)}..
1f50: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1f60: 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a  5.2 {.  SELECT *
1f70: 20 46 52 4f 4d 20 74 34 35 20 57 48 45 52 45 20   FROM t45 WHERE 
1f80: 62 3d 27 74 77 6f 27 20 41 4e 44 20 61 3e 34 0a  b='two' AND a>4.
1f90: 7d 20 7b 35 20 74 77 6f 20 78 20 37 20 74 77 6f  } {5 two x 7 two
1fa0: 20 78 20 39 20 74 77 6f 20 78 7d 0a 0a 64 6f 5f   x 9 two x}..do_
1fb0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 33  execsql_test 5.3
1fc0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52   {.  SELECT * FR
1fd0: 4f 4d 20 74 34 35 20 57 48 45 52 45 20 62 3d 27  OM t45 WHERE b='
1fe0: 6f 6e 65 27 20 41 4e 44 20 61 3c 38 0a 7d 20 7b  one' AND a<8.} {
1ff0: 20 32 20 6f 6e 65 20 78 20 34 20 6f 6e 65 20 78   2 one x 4 one x
2000: 20 36 20 6f 6e 65 20 78 20 7d 0a 0a 64 6f 5f 65   6 one x }..do_e
2010: 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 34 20  xecsql_test 5.4 
2020: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
2030: 20 74 34 36 28 61 2c 20 62 2c 20 63 2c 20 64 2c   t46(a, b, c, d,
2040: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61 2c 20   PRIMARY KEY(a, 
2050: 62 29 29 20 57 49 54 48 4f 55 54 20 52 4f 57 49  b)) WITHOUT ROWI
2060: 44 3b 0a 20 20 57 49 54 48 20 72 28 78 29 20 41  D;.  WITH r(x) A
2070: 53 20 28 0a 20 20 20 20 53 45 4c 45 43 54 20 31  S (.    SELECT 1
2080: 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43   UNION ALL SELEC
2090: 54 20 78 2b 31 20 46 52 4f 4d 20 72 20 57 48 45  T x+1 FROM r WHE
20a0: 52 45 20 78 3c 31 30 30 0a 20 20 29 0a 20 20 49  RE x<100.  ).  I
20b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 36 20 53  NSERT INTO t46 S
20c0: 45 4c 45 43 54 20 78 20 2f 20 32 30 2c 20 78 20  ELECT x / 20, x 
20d0: 25 20 32 30 2c 20 78 20 25 20 31 30 2c 20 78 20  % 20, x % 10, x 
20e0: 46 52 4f 4d 20 72 3b 0a 7d 0a 0a 73 65 74 20 71  FROM r;.}..set q
20f0: 75 65 72 69 65 73 20 7b 0a 20 20 31 20 20 20 20  ueries {.  1    
2100: 32 20 20 20 20 22 63 20 3d 20 35 20 41 4e 44 20  2    "c = 5 AND 
2110: 61 20 3d 20 31 22 20 20 20 20 20 20 20 20 20 20  a = 1"          
2120: 7b 69 34 36 20 28 63 3d 3f 20 41 4e 44 20 61 3d  {i46 (c=? AND a=
2130: 3f 29 7d 0a 20 20 32 20 20 20 20 36 20 20 20 20  ?)}.  2    6    
2140: 22 63 20 3d 20 34 20 41 4e 44 20 61 20 3c 20 33  "c = 4 AND a < 3
2150: 22 20 20 20 20 20 20 20 20 20 20 7b 69 34 36 20  "          {i46 
2160: 28 63 3d 3f 20 41 4e 44 20 61 3c 3f 29 7d 0a 20  (c=? AND a<?)}. 
2170: 20 33 20 20 20 20 34 20 20 20 20 22 63 20 3d 20   3    4    "c = 
2180: 32 20 41 4e 44 20 61 20 3e 3d 20 33 22 20 20 20  2 AND a >= 3"   
2190: 20 20 20 20 20 20 7b 69 34 36 20 28 63 3d 3f 20        {i46 (c=? 
21a0: 41 4e 44 20 61 3e 3f 29 7d 0a 20 20 34 20 20 20  AND a>?)}.  4   
21b0: 20 31 20 20 20 20 22 63 20 3d 20 32 20 41 4e 44   1    "c = 2 AND
21c0: 20 61 20 3d 20 31 20 41 4e 44 20 62 3c 31 30 22   a = 1 AND b<10"
21d0: 20 7b 69 34 36 20 28 63 3d 3f 20 41 4e 44 20 61   {i46 (c=? AND a
21e0: 3d 3f 20 41 4e 44 20 62 3c 3f 29 7d 0a 20 20 35  =? AND b<?)}.  5
21f0: 20 20 20 20 31 20 20 20 20 22 63 20 3d 20 30 20      1    "c = 0 
2200: 41 4e 44 20 61 20 3d 20 30 20 41 4e 44 20 62 3e  AND a = 0 AND b>
2210: 35 22 20 20 7b 69 34 36 20 28 63 3d 3f 20 41 4e  5"  {i46 (c=? AN
2220: 44 20 61 3d 3f 20 41 4e 44 20 62 3e 3f 29 7d 0a  D a=? AND b>?)}.
2230: 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 63  }..foreach {tn c
2240: 6e 74 20 77 68 65 72 65 20 65 71 70 7d 20 24 71  nt where eqp} $q
2250: 75 65 72 69 65 73 20 7b 0a 20 20 64 6f 5f 65 78  ueries {.  do_ex
2260: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 35 2e 24  ecsql_test 5.5.$
2270: 74 6e 2e 31 20 22 53 45 4c 45 43 54 20 63 6f 75  tn.1 "SELECT cou
2280: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 34 36 20 57  nt(*) FROM t46 W
2290: 48 45 52 45 20 24 77 68 65 72 65 22 20 24 63 6e  HERE $where" $cn
22a0: 74 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t.}..do_execsql_
22b0: 74 65 73 74 20 35 2e 36 20 7b 0a 20 20 43 52 45  test 5.6 {.  CRE
22c0: 41 54 45 20 49 4e 44 45 58 20 69 34 36 20 4f 4e  ATE INDEX i46 ON
22d0: 20 74 34 36 28 63 29 3b 0a 7d 0a 0a 66 6f 72 65   t46(c);.}..fore
22e0: 61 63 68 20 7b 74 6e 20 63 6e 74 20 77 68 65 72  ach {tn cnt wher
22f0: 65 20 65 71 70 7d 20 24 71 75 65 72 69 65 73 20  e eqp} $queries 
2300: 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {.  do_execsql_t
2310: 65 73 74 20 35 2e 37 2e 24 74 6e 2e 31 20 22 53  est 5.7.$tn.1 "S
2320: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
2330: 52 4f 4d 20 74 34 36 20 57 48 45 52 45 20 24 77  ROM t46 WHERE $w
2340: 68 65 72 65 22 20 24 63 6e 74 0a 20 20 64 6f 5f  here" $cnt.  do_
2350: 65 71 70 5f 74 65 73 74 20 35 2e 37 2e 24 74 6e  eqp_test 5.7.$tn
2360: 2e 32 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e  .2  "SELECT coun
2370: 74 28 2a 29 20 46 52 4f 4d 20 74 34 36 20 57 48  t(*) FROM t46 WH
2380: 45 52 45 20 24 77 68 65 72 65 22 20 24 65 71 70  ERE $where" $eqp
2390: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
23a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
23e0: 20 43 68 65 63 6b 20 74 68 61 74 20 72 65 64 75   Check that redu
23f0: 6e 64 61 6e 74 20 55 4e 49 51 55 45 20 63 6f 6e  ndant UNIQUE con
2400: 73 74 72 61 69 6e 74 73 20 64 6f 20 6e 6f 74 20  straints do not 
2410: 63 61 75 73 65 20 61 20 70 72 6f 62 6c 65 6d 2e  cause a problem.
2420: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
2430: 73 74 20 36 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 6.0 {.  CREAT
2440: 45 20 54 41 42 4c 45 20 74 34 37 28 61 2c 20 62  E TABLE t47(a, b
2450: 20 55 4e 49 51 55 45 20 50 52 49 4d 41 52 59 20   UNIQUE PRIMARY 
2460: 4b 45 59 29 20 57 49 54 48 4f 55 54 20 52 4f 57  KEY) WITHOUT ROW
2470: 49 44 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  ID;.  CREATE IND
2480: 45 58 20 69 34 37 20 4f 4e 20 74 34 37 28 61 29  EX i47 ON t47(a)
2490: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
24a0: 74 34 37 20 56 41 4c 55 45 53 28 31 2c 20 32 29  t47 VALUES(1, 2)
24b0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
24c0: 74 34 37 20 56 41 4c 55 45 53 28 32 2c 20 34 29  t47 VALUES(2, 4)
24d0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
24e0: 74 34 37 20 56 41 4c 55 45 53 28 33 2c 20 36 29  t47 VALUES(3, 6)
24f0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2500: 74 34 37 20 56 41 4c 55 45 53 28 34 2c 20 38 29  t47 VALUES(4, 8)
2510: 3b 0a 0a 20 20 56 41 43 55 55 4d 3b 0a 20 20 50  ;..  VACUUM;.  P
2520: 52 41 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f  RAGMA integrity_
2530: 63 68 65 63 6b 3b 0a 20 20 53 45 4c 45 43 54 20  check;.  SELECT 
2540: 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65  name FROM sqlite
2550: 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 62  _master WHERE tb
2560: 6c 5f 6e 61 6d 65 20 3d 20 27 74 34 37 27 3b 0a  l_name = 't47';.
2570: 7d 20 7b 6f 6b 20 74 34 37 20 69 34 37 7d 0a 0a  } {ok t47 i47}..
2580: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2590: 36 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54  6.1 {.  CREATE T
25a0: 41 42 4c 45 20 74 34 38 28 0a 20 20 20 20 61 20  ABLE t48(.    a 
25b0: 55 4e 49 51 55 45 20 55 4e 49 51 55 45 2c 20 0a  UNIQUE UNIQUE, .
25c0: 20 20 20 20 62 20 55 4e 49 51 55 45 2c 20 0a 20      b UNIQUE, . 
25d0: 20 20 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61     PRIMARY KEY(a
25e0: 29 2c 20 0a 20 20 20 20 55 4e 49 51 55 45 28 61  ), .    UNIQUE(a
25f0: 29 0a 20 20 29 20 57 49 54 48 4f 55 54 20 52 4f  ).  ) WITHOUT RO
2600: 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  WID;.  INSERT IN
2610: 54 4f 20 74 34 38 20 56 41 4c 55 45 53 28 27 61  TO t48 VALUES('a
2620: 27 2c 20 27 62 27 29 2c 20 28 27 63 27 2c 20 27  ', 'b'), ('c', '
2630: 64 27 29 2c 20 28 27 65 27 2c 20 27 66 27 29 3b  d'), ('e', 'f');
2640: 0a 20 20 56 41 43 55 55 4d 3b 0a 20 20 50 52 41  .  VACUUM;.  PRA
2650: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
2660: 65 63 6b 3b 0a 20 20 53 45 4c 45 43 54 20 6e 61  eck;.  SELECT na
2670: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
2680: 61 73 74 65 72 20 57 48 45 52 45 20 74 62 6c 5f  aster WHERE tbl_
2690: 6e 61 6d 65 20 3d 20 27 74 34 38 27 3b 0a 7d 20  name = 't48';.} 
26a0: 7b 0a 20 20 6f 6b 20 20 74 34 38 20 20 20 73 71  {.  ok  t48   sq
26b0: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 74  lite_autoindex_t
26c0: 34 38 5f 32 0a 7d 0a 0a 23 20 32 30 31 35 2d 30  48_2.}..# 2015-0
26d0: 35 2d 32 38 3a 20 43 48 45 43 4b 20 63 6f 6e 73  5-28: CHECK cons
26e0: 74 72 61 69 6e 74 73 20 63 61 6e 20 72 65 66 65  traints can refe
26f0: 72 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 69  r to the rowid i
2700: 6e 20 61 0a 23 20 72 6f 77 69 64 20 74 61 62 6c  n a.# rowid tabl
2710: 65 2c 20 62 75 74 20 6e 6f 74 20 69 6e 20 61 20  e, but not in a 
2720: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61  WITHOUT ROWID ta
2730: 62 6c 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  ble..#.do_execsq
2740: 6c 5f 74 65 73 74 20 37 2e 31 20 7b 0a 20 20 43  l_test 7.1 {.  C
2750: 52 45 41 54 45 20 54 41 42 4c 45 20 74 37 30 61  REATE TABLE t70a
2760: 28 0a 20 20 20 20 20 61 20 49 4e 54 20 43 48 45  (.     a INT CHE
2770: 43 4b 28 20 72 6f 77 69 64 21 3d 33 33 20 29 2c  CK( rowid!=33 ),
2780: 0a 20 20 20 20 20 62 20 54 45 58 54 20 50 52 49  .     b TEXT PRI
2790: 4d 41 52 59 20 4b 45 59 0a 20 20 29 3b 0a 20 20  MARY KEY.  );.  
27a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 30 61  INSERT INTO t70a
27b0: 28 61 2c 62 29 20 56 41 4c 55 45 53 28 39 39 2c  (a,b) VALUES(99,
27c0: 27 68 65 6c 6c 6f 27 29 3b 0a 7d 20 7b 7d 0a 64  'hello');.} {}.d
27d0: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
27e0: 37 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  7.2 {.  INSERT I
27f0: 4e 54 4f 20 74 37 30 61 28 72 6f 77 69 64 2c 61  NTO t70a(rowid,a
2800: 2c 62 29 20 56 41 4c 55 45 53 28 33 33 2c 39 39  ,b) VALUES(33,99
2810: 2c 27 78 79 7a 7a 79 27 29 3b 0a 7d 20 7b 31 20  ,'xyzzy');.} {1 
2820: 7b 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e  {CHECK constrain
2830: 74 20 66 61 69 6c 65 64 3a 20 74 37 30 61 7d 7d  t failed: t70a}}
2840: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
2850: 74 20 37 2e 33 20 7b 0a 20 20 43 52 45 41 54 45  t 7.3 {.  CREATE
2860: 20 54 41 42 4c 45 20 74 37 30 62 28 0a 20 20 20   TABLE t70b(.   
2870: 20 20 61 20 49 4e 54 20 43 48 45 43 4b 28 20 72    a INT CHECK( r
2880: 6f 77 69 64 21 3d 33 33 20 29 2c 0a 20 20 20 20  owid!=33 ),.    
2890: 20 62 20 54 45 58 54 20 50 52 49 4d 41 52 59 20   b TEXT PRIMARY 
28a0: 4b 45 59 0a 20 20 29 20 57 49 54 48 4f 55 54 20  KEY.  ) WITHOUT 
28b0: 52 4f 57 49 44 3b 0a 7d 20 7b 31 20 7b 6e 6f 20  ROWID;.} {1 {no 
28c0: 73 75 63 68 20 63 6f 6c 75 6d 6e 3a 20 72 6f 77  such column: row
28d0: 69 64 7d 7d 0a 0a 23 20 32 30 31 37 2d 30 37 2d  id}}..# 2017-07-
28e0: 33 30 3a 20 4f 53 53 46 75 7a 7a 20 64 69 73 63  30: OSSFuzz disc
28f0: 6f 76 65 72 65 64 20 74 68 61 74 20 61 6e 20 65  overed that an e
2900: 78 74 72 61 20 65 6e 74 72 79 20 77 61 73 20 62  xtra entry was b
2910: 65 69 6e 67 0a 23 20 61 64 64 65 64 20 69 6e 20  eing.# added in 
2920: 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
2930: 72 20 74 61 62 6c 65 20 66 6f 72 20 61 6e 20 22  r table for an "
2940: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
2950: 4b 45 59 20 55 4e 49 51 55 45 22 0a 23 20 57 49  KEY UNIQUE".# WI
2960: 54 48 4f 55 54 20 52 4f 57 49 44 20 74 61 62 6c  THOUT ROWID tabl
2970: 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
2980: 69 73 20 68 61 73 20 6e 6f 77 20 62 65 65 6e 20  is has now been 
2990: 66 69 78 65 64 2e 0a 23 0a 64 62 20 63 6c 6f 73  fixed..#.db clos
29a0: 65 0a 73 71 6c 69 74 65 33 20 64 62 20 3a 6d 65  e.sqlite3 db :me
29b0: 6d 6f 72 79 3a 0a 64 6f 5f 65 78 65 63 73 71 6c  mory:.do_execsql
29c0: 5f 74 65 73 74 20 38 2e 31 20 7b 0a 20 20 43 52  _test 8.1 {.  CR
29d0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20  EATE TABLE t1(x 
29e0: 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
29f0: 4b 45 59 20 55 4e 49 51 55 45 2c 20 62 29 20 57  KEY UNIQUE, b) W
2a00: 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20 20  ITHOUT ROWID;.  
2a10: 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 31 78  CREATE INDEX t1x
2a20: 20 4f 4e 20 74 31 28 78 29 3b 0a 20 20 49 4e 53   ON t1(x);.  INS
2a30: 45 52 54 20 49 4e 54 4f 20 74 31 28 78 2c 62 29  ERT INTO t1(x,b)
2a40: 20 56 41 4c 55 45 53 28 27 66 75 6e 6e 79 27 2c   VALUES('funny',
2a50: 27 62 75 66 66 61 6c 6f 27 29 3b 0a 20 20 53 45  'buffalo');.  SE
2a60: 4c 45 43 54 20 74 79 70 65 2c 20 6e 61 6d 65 2c  LECT type, name,
2a70: 20 27 7c 27 20 46 52 4f 4d 20 73 71 6c 69 74 65   '|' FROM sqlite
2a80: 5f 6d 61 73 74 65 72 3b 0a 7d 20 7b 74 61 62 6c  _master;.} {tabl
2a90: 65 20 74 31 20 7c 20 69 6e 64 65 78 20 74 31 78  e t1 | index t1x
2aa0: 20 7c 7d 0a 0a 23 20 32 30 31 38 2d 30 34 2d 30   |}..# 2018-04-0
2ab0: 35 3a 20 4f 53 53 46 75 7a 7a 20 66 6f 75 6e 64  5: OSSFuzz found
2ac0: 20 74 68 61 74 20 74 68 65 20 66 6f 6c 6c 6f 77   that the follow
2ad0: 69 6e 67 20 77 61 73 20 61 63 63 65 73 73 69 6e  ing was accessin
2ae0: 67 20 61 6e 20 0a 23 20 75 6e 69 6e 74 69 61 6c  g an .# unintial
2af0: 69 7a 65 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ized memory cell
2b00: 2e 20 57 68 69 63 68 20 77 61 73 20 6e 6f 74 20  . Which was not 
2b10: 61 63 74 75 61 6c 6c 79 20 63 61 75 73 69 6e 67  actually causing
2b20: 20 61 20 0a 23 20 6d 61 6c 66 75 6e 63 74 69 6f   a .# malfunctio
2b30: 6e 2c 20 62 75 74 20 64 6f 65 73 20 63 61 75 73  n, but does caus
2b40: 65 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  e an assert() to
2b50: 20 66 61 69 6c 2e 0a 23 0a 64 6f 5f 65 78 65 63   fail..#.do_exec
2b60: 73 71 6c 5f 74 65 73 74 20 39 2e 30 20 7b 0a 20  sql_test 9.0 {. 
2b70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
2b80: 28 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b  (b, c, PRIMARY K
2b90: 45 59 28 62 2c 63 29 29 20 57 49 54 48 4f 55 54  EY(b,c)) WITHOUT
2ba0: 20 52 4f 57 49 44 3b 0a 20 20 43 52 45 41 54 45   ROWID;.  CREATE
2bb0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 20 74 32   UNIQUE INDEX t2
2bc0: 62 20 4f 4e 20 74 32 28 62 29 3b 0a 20 20 55 50  b ON t2(b);.  UP
2bd0: 44 41 54 45 20 74 32 20 53 45 54 20 62 3d 31 20  DATE t2 SET b=1 
2be0: 57 48 45 52 45 20 62 3d 27 27 3b 0a 7d 0a 0a 64  WHERE b='';.}..d
2bf0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
2c00: 30 2e 31 20 7b 0a 20 20 44 45 4c 45 54 45 20 46  0.1 {.  DELETE F
2c10: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d 31  ROM t2 WHERE b=1
2c20: 0a 7d 0a 0a 20 20 0a 66 69 6e 69 73 68 5f 74 65  .}..  .finish_te
2c30: 73 74 0a                                         st.