/ Hex Artifact Content
Login

Artifact be78ba3aa1831c6358fd7d5b9809bfd520f0c2a7d63a295e8f182e140ff137c3:


0000: 23 20 32 30 30 38 20 4f 63 74 6f 62 65 72 20 36  # 2008 October 6
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n 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 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
01b0: 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73 20  of this file is 
01c0: 74 65 73 74 69 6e 67 20 74 68 65 20 4c 49 4d 49  testing the LIMI
01d0: 54 20 2e 2e 2e 20 4f 46 46 53 45 54 20 2e 2e 2e  T ... OFFSET ...
01e0: 20 63 6c 61 75 73 65 0a 23 20 20 6f 66 20 55 50   clause.#  of UP
01f0: 44 41 54 45 20 61 6e 64 20 44 45 4c 45 54 45 20  DATE and DELETE 
0200: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 23 0a 0a 73  statements..#..s
0210: 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65  et testdir [file
0220: 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d   dirname $argv0]
0230: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
0240: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20  /tester.tcl.set 
0250: 74 65 73 74 70 72 65 66 69 78 20 77 68 65 72 65  testprefix where
0260: 6c 69 6d 69 74 32 0a 0a 69 66 63 61 70 61 62 6c  limit2..ifcapabl
0270: 65 20 21 75 70 64 61 74 65 5f 64 65 6c 65 74 65  e !update_delete
0280: 5f 6c 69 6d 69 74 20 7b 0a 20 20 66 69 6e 69 73  _limit {.  finis
0290: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
02a0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
02f0: 54 65 73 74 20 77 69 74 68 20 76 69 65 77 73 20  Test with views 
0300: 61 6e 64 20 49 4e 53 54 45 41 44 20 4f 46 20 74  and INSTEAD OF t
0310: 72 69 67 67 65 72 73 2e 0a 23 0a 64 6f 5f 65 78  riggers..#.do_ex
0320: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b  ecsql_test 1.0 {
0330: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
0340: 74 31 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45  t1(a, b);.  INSE
0350: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0360: 53 28 31 2c 20 27 66 27 29 3b 0a 20 20 49 4e 53  S(1, 'f');.  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 32 2c 20 27 65 27 29 3b 0a 20 20 49 4e  ES(2, 'e');.  IN
0390: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
03a0: 55 45 53 28 33 2c 20 27 64 27 29 3b 0a 20 20 49  UES(3, 'd');.  I
03b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
03c0: 4c 55 45 53 28 34 2c 20 27 63 27 29 3b 0a 20 20  LUES(4, 'c');.  
03d0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
03e0: 41 4c 55 45 53 28 35 2c 20 27 62 27 29 3b 0a 20  ALUES(5, 'b');. 
03f0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0400: 56 41 4c 55 45 53 28 36 2c 20 27 61 27 29 3b 0a  VALUES(6, 'a');.
0410: 0a 20 20 43 52 45 41 54 45 20 56 49 45 57 20 76  .  CREATE VIEW v
0420: 31 20 41 53 20 53 45 4c 45 43 54 20 61 2c 62 20  1 AS SELECT a,b 
0430: 46 52 4f 4d 20 74 31 3b 0a 20 20 43 52 45 41 54  FROM t1;.  CREAT
0440: 45 20 54 41 42 4c 45 20 6c 6f 67 28 6f 70 2c 20  E TABLE log(op, 
0450: 61 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52  a);..  CREATE TR
0460: 49 47 47 45 52 20 76 31 64 65 6c 20 49 4e 53 54  IGGER v1del INST
0470: 45 41 44 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e  EAD OF DELETE ON
0480: 20 76 31 20 42 45 47 49 4e 0a 20 20 20 20 49 4e   v1 BEGIN.    IN
0490: 53 45 52 54 20 49 4e 54 4f 20 6c 6f 67 20 56 41  SERT INTO log VA
04a0: 4c 55 45 53 28 27 64 65 6c 65 74 65 27 2c 20 6f  LUES('delete', o
04b0: 6c 64 2e 61 29 3b 0a 20 20 45 4e 44 3b 0a 0a 20  ld.a);.  END;.. 
04c0: 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
04d0: 76 31 75 70 64 20 49 4e 53 54 45 41 44 20 4f 46  v1upd INSTEAD OF
04e0: 20 55 50 44 41 54 45 20 4f 4e 20 76 31 20 42 45   UPDATE ON v1 BE
04f0: 47 49 4e 0a 20 20 20 20 49 4e 53 45 52 54 20 49  GIN.    INSERT I
0500: 4e 54 4f 20 6c 6f 67 20 56 41 4c 55 45 53 28 27  NTO log VALUES('
0510: 75 70 64 61 74 65 27 2c 20 6f 6c 64 2e 61 29 3b  update', old.a);
0520: 0a 20 20 45 4e 44 3b 0a 7d 0a 0a 64 6f 5f 65 78  .  END;.}..do_ex
0530: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b  ecsql_test 1.1 {
0540: 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 76  .  DELETE FROM v
0550: 31 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d  1 ORDER BY a LIM
0560: 49 54 20 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a  IT 3;.  SELECT *
0570: 20 46 52 4f 4d 20 6c 6f 67 3b 20 44 45 4c 45 54   FROM log; DELET
0580: 45 20 46 52 4f 4d 20 6c 6f 67 3b 0a 7d 20 7b 0a  E FROM log;.} {.
0590: 20 20 64 65 6c 65 74 65 20 31 20 64 65 6c 65 74    delete 1 delet
05a0: 65 20 32 20 64 65 6c 65 74 65 20 33 0a 7d 0a 64  e 2 delete 3.}.d
05b0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
05c0: 2e 32 20 7b 0a 20 20 44 45 4c 45 54 45 20 46 52  .2 {.  DELETE FR
05d0: 4f 4d 20 76 31 20 4f 52 44 45 52 20 42 59 20 62  OM v1 ORDER BY b
05e0: 20 4c 49 4d 49 54 20 33 3b 0a 20 20 53 45 4c 45   LIMIT 3;.  SELE
05f0: 43 54 20 2a 20 46 52 4f 4d 20 6c 6f 67 3b 20 44  CT * FROM log; D
0600: 45 4c 45 54 45 20 46 52 4f 4d 20 6c 6f 67 3b 0a  ELETE FROM log;.
0610: 7d 20 7b 0a 20 20 64 65 6c 65 74 65 20 36 20 64  } {.  delete 6 d
0620: 65 6c 65 74 65 20 35 20 64 65 6c 65 74 65 20 34  elete 5 delete 4
0630: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
0640: 73 74 20 31 2e 33 20 7b 0a 20 20 55 50 44 41 54  st 1.3 {.  UPDAT
0650: 45 20 76 31 20 53 45 54 20 62 20 3d 20 35 35 35  E v1 SET b = 555
0660: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
0670: 54 20 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20  T 3;.  SELECT * 
0680: 46 52 4f 4d 20 6c 6f 67 3b 20 44 45 4c 45 54 45  FROM log; DELETE
0690: 20 46 52 4f 4d 20 6c 6f 67 3b 0a 7d 20 7b 0a 20   FROM log;.} {. 
06a0: 20 75 70 64 61 74 65 20 31 20 75 70 64 61 74 65   update 1 update
06b0: 20 32 20 75 70 64 61 74 65 20 33 0a 7d 0a 64 6f   2 update 3.}.do
06c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e  _execsql_test 1.
06d0: 34 20 7b 0a 20 20 55 50 44 41 54 45 20 76 31 20  4 {.  UPDATE v1 
06e0: 53 45 54 20 62 20 3d 20 35 35 35 20 4f 52 44 45  SET b = 555 ORDE
06f0: 52 20 42 59 20 62 20 4c 49 4d 49 54 20 33 3b 0a  R BY b LIMIT 3;.
0700: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0710: 6c 6f 67 3b 20 44 45 4c 45 54 45 20 46 52 4f 4d  log; DELETE FROM
0720: 20 6c 6f 67 3b 0a 7d 20 7b 0a 20 20 75 70 64 61   log;.} {.  upda
0730: 74 65 20 36 20 75 70 64 61 74 65 20 35 20 75 70  te 6 update 5 up
0740: 64 61 74 65 20 34 0a 7d 0a 0a 23 2d 2d 2d 2d 2d  date 4.}..#-----
0750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0790: 2d 2d 2d 2d 0a 23 20 53 69 6d 70 6c 65 20 74 65  ----.# Simple te
07a0: 73 74 20 75 73 69 6e 67 20 57 49 54 48 4f 55 54  st using WITHOUT
07b0: 20 52 4f 57 49 44 20 74 61 62 6c 65 2e 0a 23 0a   ROWID table..#.
07c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
07d0: 32 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  2.1.0 {.  CREATE
07e0: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20   TABLE t2(a, b, 
07f0: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61  c, PRIMARY KEY(a
0800: 2c 20 62 29 29 20 57 49 54 48 4f 55 54 20 52 4f  , b)) WITHOUT RO
0810: 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  WID;.  INSERT IN
0820: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31 2c 20  TO t2 VALUES(1, 
0830: 31 2c 20 27 68 27 29 3b 0a 20 20 49 4e 53 45 52  1, 'h');.  INSER
0840: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
0850: 28 31 2c 20 32 2c 20 27 67 27 29 3b 0a 20 20 49  (1, 2, 'g');.  I
0860: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
0870: 4c 55 45 53 28 32 2c 20 31 2c 20 27 66 27 29 3b  LUES(2, 1, 'f');
0880: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0890: 32 20 56 41 4c 55 45 53 28 32 2c 20 32 2c 20 27  2 VALUES(2, 2, '
08a0: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
08b0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 33 2c 20  TO t2 VALUES(3, 
08c0: 31 2c 20 27 64 27 29 3b 0a 20 20 49 4e 53 45 52  1, 'd');.  INSER
08d0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
08e0: 28 33 2c 20 32 2c 20 27 63 27 29 3b 0a 20 20 49  (3, 2, 'c');.  I
08f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
0900: 4c 55 45 53 28 34 2c 20 31 2c 20 27 62 27 29 3b  LUES(4, 1, 'b');
0910: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0920: 32 20 56 41 4c 55 45 53 28 34 2c 20 32 2c 20 27  2 VALUES(4, 2, '
0930: 61 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  a');.}..do_execs
0940: 71 6c 5f 74 65 73 74 20 32 2e 31 2e 31 20 7b 0a  ql_test 2.1.1 {.
0950: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c    BEGIN;.    DEL
0960: 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48 45 52  ETE FROM t2 WHER
0970: 45 20 62 3d 31 20 4f 52 44 45 52 20 42 59 20 63  E b=1 ORDER BY c
0980: 20 4c 49 4d 49 54 20 32 3b 0a 20 20 20 20 53 45   LIMIT 2;.    SE
0990: 4c 45 43 54 20 63 20 46 52 4f 4d 20 74 32 20 4f  LECT c FROM t2 O
09a0: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 52 4f 4c  RDER BY 1;.  ROL
09b0: 4c 42 41 43 4b 3b 0a 7d 20 7b 61 20 63 20 65 20  LBACK;.} {a c e 
09c0: 66 20 67 20 68 7d 0a 0a 64 6f 5f 65 78 65 63 73  f g h}..do_execs
09d0: 71 6c 5f 74 65 73 74 20 32 2e 31 2e 32 20 7b 0a  ql_test 2.1.2 {.
09e0: 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55 50 44    BEGIN;.    UPD
09f0: 41 54 45 20 74 32 20 53 45 54 20 63 3d 4e 55 4c  ATE t2 SET c=NUL
0a00: 4c 20 4f 52 44 45 52 20 42 59 20 61 2c 20 62 20  L ORDER BY a, b 
0a10: 44 45 53 43 20 4c 49 4d 49 54 20 33 20 4f 46 46  DESC LIMIT 3 OFF
0a20: 53 45 54 20 31 3b 0a 20 20 20 20 53 45 4c 45 43  SET 1;.    SELEC
0a30: 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74  T a, b, c FROM t
0a40: 32 3b 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 7d  2;.  ROLLBACK;.}
0a50: 20 7b 0a 20 20 31 20 31 20 7b 7d 20 0a 20 20 31   {.  1 1 {} .  1
0a60: 20 32 20 67 20 0a 20 20 32 20 31 20 7b 7d 20 0a   2 g .  2 1 {} .
0a70: 20 20 32 20 32 20 7b 7d 20 0a 20 20 33 20 31 20    2 2 {} .  3 1 
0a80: 64 20 0a 20 20 33 20 32 20 63 20 0a 20 20 34 20  d .  3 2 c .  4 
0a90: 31 20 62 20 0a 20 20 34 20 32 20 61 0a 7d 0a 0a  1 b .  4 2 a.}..
0aa0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0ab0: 32 2e 32 2e 30 20 7b 0a 20 20 44 52 4f 50 20 54  2.2.0 {.  DROP T
0ac0: 41 42 4c 45 20 74 32 3b 0a 20 20 43 52 45 41 54  ABLE t2;.  CREAT
0ad0: 45 20 54 41 42 4c 45 20 74 32 28 61 20 49 4e 54  E TABLE t2(a INT
0ae0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
0af0: 2c 20 62 2c 20 63 29 20 57 49 54 48 4f 55 54 20  , b, c) WITHOUT 
0b00: 52 4f 57 49 44 3b 0a 20 20 49 4e 53 45 52 54 20  ROWID;.  INSERT 
0b10: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 31  INTO t2 VALUES(1
0b20: 2c 20 31 2c 20 27 68 27 29 3b 0a 20 20 49 4e 53  , 1, 'h');.  INS
0b30: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0b40: 45 53 28 32 2c 20 32 2c 20 27 67 27 29 3b 0a 20  ES(2, 2, 'g');. 
0b50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0b60: 56 41 4c 55 45 53 28 33 2c 20 31 2c 20 27 66 27  VALUES(3, 1, 'f'
0b70: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0b80: 20 74 32 20 56 41 4c 55 45 53 28 34 2c 20 32 2c   t2 VALUES(4, 2,
0b90: 20 27 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20   'e');.  INSERT 
0ba0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 35  INTO t2 VALUES(5
0bb0: 2c 20 31 2c 20 27 64 27 29 3b 0a 20 20 49 4e 53  , 1, 'd');.  INS
0bc0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0bd0: 45 53 28 36 2c 20 32 2c 20 27 63 27 29 3b 0a 20  ES(6, 2, 'c');. 
0be0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0bf0: 56 41 4c 55 45 53 28 37 2c 20 31 2c 20 27 62 27  VALUES(7, 1, 'b'
0c00: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0c10: 20 74 32 20 56 41 4c 55 45 53 28 38 2c 20 32 2c   t2 VALUES(8, 2,
0c20: 20 27 61 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65   'a');.}..do_exe
0c30: 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e 31 20  csql_test 2.2.1 
0c40: 7b 0a 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 44  {.  BEGIN;.    D
0c50: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
0c60: 45 52 45 20 62 3d 31 20 4f 52 44 45 52 20 42 59  ERE b=1 ORDER BY
0c70: 20 63 20 4c 49 4d 49 54 20 32 3b 0a 20 20 20 20   c LIMIT 2;.    
0c80: 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 74 32  SELECT c FROM t2
0c90: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 52   ORDER BY 1;.  R
0ca0: 4f 4c 4c 42 41 43 4b 3b 0a 7d 20 7b 61 20 63 20  OLLBACK;.} {a c 
0cb0: 65 20 66 20 67 20 68 7d 0a 0a 64 6f 5f 65 78 65  e f g h}..do_exe
0cc0: 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e 32 20  csql_test 2.2.2 
0cd0: 7b 0a 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 55  {.  BEGIN;.    U
0ce0: 50 44 41 54 45 20 74 32 20 53 45 54 20 63 3d 4e  PDATE t2 SET c=N
0cf0: 55 4c 4c 20 4f 52 44 45 52 20 42 59 20 61 20 44  ULL ORDER BY a D
0d00: 45 53 43 20 4c 49 4d 49 54 20 33 20 4f 46 46 53  ESC LIMIT 3 OFFS
0d10: 45 54 20 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  ET 1;.    SELECT
0d20: 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 32   a, b, c FROM t2
0d30: 3b 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 7d 20  ;.  ROLLBACK;.} 
0d40: 7b 0a 20 20 31 20 31 20 68 0a 20 20 32 20 32 20  {.  1 1 h.  2 2 
0d50: 67 20 0a 20 20 33 20 31 20 66 0a 20 20 34 20 32  g .  3 1 f.  4 2
0d60: 20 65 0a 20 20 35 20 31 20 7b 7d 0a 20 20 36 20   e.  5 1 {}.  6 
0d70: 32 20 7b 7d 20 0a 20 20 37 20 31 20 7b 7d 20 0a  2 {} .  7 1 {} .
0d80: 20 20 38 20 32 20 61 0a 7d 0a 0a 23 2d 2d 2d 2d    8 2 a.}..#----
0d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0dd0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 75 73 69  -----.# Test usi
0de0: 6e 67 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  ng a virtual tab
0df0: 6c 65 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 66  le.#.ifcapable f
0e00: 74 73 35 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73  ts5 {.  do_execs
0e10: 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b 0a 20 20  ql_test 3.0 {.  
0e20: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0e30: 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20   TABLE ft USING 
0e40: 66 74 73 35 28 78 29 3b 0a 20 20 20 20 49 4e 53  fts5(x);.    INS
0e50: 45 52 54 20 49 4e 54 4f 20 66 74 28 72 6f 77 69  ERT INTO ft(rowi
0e60: 64 2c 20 78 29 20 56 41 4c 55 45 53 28 2d 34 35  d, x) VALUES(-45
0e70: 2c 20 20 20 27 61 20 61 27 29 3b 0a 20 20 20 20  ,   'a a');.    
0e80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 28 72  INSERT INTO ft(r
0e90: 6f 77 69 64 2c 20 78 29 20 56 41 4c 55 45 53 28  owid, x) VALUES(
0ea0: 31 32 2c 20 20 20 20 27 61 20 62 27 29 3b 0a 20  12,    'a b');. 
0eb0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
0ec0: 74 28 72 6f 77 69 64 2c 20 78 29 20 56 41 4c 55  t(rowid, x) VALU
0ed0: 45 53 28 34 34 34 2c 20 20 20 27 61 20 63 27 29  ES(444,   'a c')
0ee0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0ef0: 4f 20 66 74 28 72 6f 77 69 64 2c 20 78 29 20 56  O ft(rowid, x) V
0f00: 41 4c 55 45 53 28 31 32 33 30 30 2c 20 27 61 20  ALUES(12300, 'a 
0f10: 64 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  d');.    INSERT 
0f20: 49 4e 54 4f 20 66 74 28 72 6f 77 69 64 2c 20 78  INTO ft(rowid, x
0f30: 29 20 56 41 4c 55 45 53 28 32 35 34 30 30 2c 20  ) VALUES(25400, 
0f40: 27 61 20 63 27 29 3b 0a 20 20 20 20 49 4e 53 45  'a c');.    INSE
0f50: 52 54 20 49 4e 54 4f 20 66 74 28 72 6f 77 69 64  RT INTO ft(rowid
0f60: 2c 20 78 29 20 56 41 4c 55 45 53 28 32 35 34 30  , x) VALUES(2540
0f70: 31 2c 20 27 61 20 62 27 29 3b 0a 20 20 20 20 49  1, 'a b');.    I
0f80: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 28 72 6f  NSERT INTO ft(ro
0f90: 77 69 64 2c 20 78 29 20 56 41 4c 55 45 53 28 35  wid, x) VALUES(5
0fa0: 30 30 30 30 2c 20 27 61 20 61 27 29 3b 0a 20 20  0000, 'a a');.  
0fb0: 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }..  do_execsql_
0fc0: 74 65 73 74 20 33 2e 31 2e 31 20 7b 0a 20 20 20  test 3.1.1 {.   
0fd0: 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 44 45   BEGIN;.      DE
0fe0: 4c 45 54 45 20 46 52 4f 4d 20 66 74 20 4f 52 44  LETE FROM ft ORD
0ff0: 45 52 20 42 59 20 72 6f 77 69 64 20 4c 49 4d 49  ER BY rowid LIMI
1000: 54 20 33 3b 0a 20 20 20 20 20 20 53 45 4c 45 43  T 3;.      SELEC
1010: 54 20 78 20 46 52 4f 4d 20 66 74 3b 0a 20 20 20  T x FROM ft;.   
1020: 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 7d 20 7b   ROLLBACK;.  } {
1030: 7b 61 20 64 7d 20 7b 61 20 63 7d 20 7b 61 20 62  {a d} {a c} {a b
1040: 7d 20 7b 61 20 61 7d 7d 0a 0a 20 20 64 6f 5f 65  } {a a}}..  do_e
1050: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 2e  xecsql_test 3.1.
1060: 32 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  2 {.    BEGIN;. 
1070: 20 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d       DELETE FROM
1080: 20 66 74 20 57 48 45 52 45 20 66 74 20 4d 41 54   ft WHERE ft MAT
1090: 43 48 20 27 61 27 20 4f 52 44 45 52 20 42 59 20  CH 'a' ORDER BY 
10a0: 72 6f 77 69 64 20 4c 49 4d 49 54 20 33 3b 0a 20  rowid LIMIT 3;. 
10b0: 20 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52       SELECT x FR
10c0: 4f 4d 20 66 74 3b 0a 20 20 20 20 52 4f 4c 4c 42  OM ft;.    ROLLB
10d0: 41 43 4b 3b 0a 20 20 7d 20 7b 7b 61 20 64 7d 20  ACK;.  } {{a d} 
10e0: 7b 61 20 63 7d 20 7b 61 20 62 7d 20 7b 61 20 61  {a c} {a b} {a a
10f0: 7d 7d 0a 20 20 0a 20 20 64 6f 5f 65 78 65 63 73  }}.  .  do_execs
1100: 71 6c 5f 74 65 73 74 20 33 2e 31 2e 33 20 7b 0a  ql_test 3.1.3 {.
1110: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
1120: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 66 74 20   DELETE FROM ft 
1130: 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20 27  WHERE ft MATCH '
1140: 62 27 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  b' ORDER BY rowi
1150: 64 20 41 53 43 20 4c 49 4d 49 54 20 31 20 4f 46  d ASC LIMIT 1 OF
1160: 46 53 45 54 20 31 3b 0a 20 20 20 20 20 20 53 45  FSET 1;.      SE
1170: 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
1180: 66 74 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  ft;.    ROLLBACK
1190: 3b 0a 20 20 7d 20 7b 2d 34 35 20 31 32 20 34 34  ;.  } {-45 12 44
11a0: 34 20 31 32 33 30 30 20 32 35 34 30 30 20 35 30  4 12300 25400 50
11b0: 30 30 30 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73  000}..  do_execs
11c0: 71 6c 5f 74 65 73 74 20 33 2e 32 2e 31 20 7b 0a  ql_test 3.2.1 {.
11d0: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
11e0: 20 55 50 44 41 54 45 20 66 74 20 53 45 54 20 78   UPDATE ft SET x
11f0: 3d 27 68 65 6c 6c 6f 27 20 4f 52 44 45 52 20 42  ='hello' ORDER B
1200: 59 20 72 6f 77 69 64 20 4c 49 4d 49 54 20 32 20  Y rowid LIMIT 2 
1210: 4f 46 46 53 45 54 20 32 3b 0a 20 20 20 20 20 20  OFFSET 2;.      
1220: 53 45 4c 45 43 54 20 78 20 46 52 4f 4d 20 66 74  SELECT x FROM ft
1230: 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a  ;.    ROLLBACK;.
1240: 20 20 7d 20 7b 7b 61 20 61 7d 20 7b 61 20 62 7d    } {{a a} {a b}
1250: 20 68 65 6c 6c 6f 20 68 65 6c 6c 6f 20 7b 61 20   hello hello {a 
1260: 63 7d 20 7b 61 20 62 7d 20 7b 61 20 61 7d 7d 0a  c} {a b} {a a}}.
1270: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
1280: 73 74 20 33 2e 32 2e 32 20 7b 0a 20 20 20 20 42  st 3.2.2 {.    B
1290: 45 47 49 4e 3b 0a 20 20 20 20 20 20 55 50 44 41  EGIN;.      UPDA
12a0: 54 45 20 66 74 20 53 45 54 20 78 3d 27 68 65 6c  TE ft SET x='hel
12b0: 6c 6f 27 20 57 48 45 52 45 20 66 74 20 4d 41 54  lo' WHERE ft MAT
12c0: 43 48 20 27 61 27 20 0a 20 20 20 20 20 20 20 20  CH 'a' .        
12d0: 20 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64    ORDER BY rowid
12e0: 20 44 45 53 43 20 4c 49 4d 49 54 20 32 20 4f 46   DESC LIMIT 2 OF
12f0: 46 53 45 54 20 32 3b 0a 20 20 20 20 20 20 53 45  FSET 2;.      SE
1300: 4c 45 43 54 20 78 20 46 52 4f 4d 20 66 74 3b 0a  LECT x FROM ft;.
1310: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
1320: 7d 20 7b 7b 61 20 61 7d 20 7b 61 20 62 7d 20 7b  } {{a a} {a b} {
1330: 61 20 63 7d 20 68 65 6c 6c 6f 20 68 65 6c 6c 6f  a c} hello hello
1340: 20 7b 61 20 62 7d 20 7b 61 20 61 7d 7d 0a 7d 20   {a b} {a a}}.} 
1350: 3b 23 20 66 74 73 35 0a 0a 23 2d 2d 2d 2d 2d 2d  ;# fts5..#------
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13a0: 2d 2d 2d 0a 23 20 54 65 73 74 20 75 73 69 6e 67  ---.# Test using
13b0: 20 49 4e 44 45 58 45 44 20 42 59 20 63 6c 61 75   INDEXED BY clau
13c0: 73 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  ses..#.do_execsq
13d0: 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a 20 20 43  l_test 4.0 {.  C
13e0: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 28 61  REATE TABLE x1(a
13f0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1400: 20 4b 45 59 2c 20 62 2c 20 63 2c 20 64 29 3b 0a   KEY, b, c, d);.
1410: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 78    CREATE INDEX x
1420: 31 62 63 20 4f 4e 20 78 31 28 62 2c 20 63 29 3b  1bc ON x1(b, c);
1430: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
1440: 31 20 56 41 4c 55 45 53 28 31 2c 31 2c 31 2c 31  1 VALUES(1,1,1,1
1450: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1460: 20 78 31 20 56 41 4c 55 45 53 28 32 2c 31 2c 32   x1 VALUES(2,1,2
1470: 2c 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ,2);.  INSERT IN
1480: 54 4f 20 78 31 20 56 41 4c 55 45 53 28 33 2c 32  TO x1 VALUES(3,2
1490: 2c 31 2c 33 29 3b 0a 20 20 49 4e 53 45 52 54 20  ,1,3);.  INSERT 
14a0: 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 34  INTO x1 VALUES(4
14b0: 2c 32 2c 32 2c 33 29 3b 0a 20 20 49 4e 53 45 52  ,2,2,3);.  INSER
14c0: 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53  T INTO x1 VALUES
14d0: 28 35 2c 33 2c 31 2c 32 29 3b 0a 20 20 49 4e 53  (5,3,1,2);.  INS
14e0: 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55  ERT INTO x1 VALU
14f0: 45 53 28 36 2c 33 2c 32 2c 31 29 3b 0a 7d 0a 0a  ES(6,3,2,1);.}..
1500: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1510: 34 2e 31 20 7b 0a 20 20 42 45 47 49 4e 3b 0a 20  4.1 {.  BEGIN;. 
1520: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 78     DELETE FROM x
1530: 31 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d  1 ORDER BY a LIM
1540: 49 54 20 32 3b 0a 20 20 20 20 53 45 4c 45 43 54  IT 2;.    SELECT
1550: 20 61 20 46 52 4f 4d 20 78 31 3b 0a 20 20 52 4f   a FROM x1;.  RO
1560: 4c 4c 42 41 43 4b 3b 0a 7d 20 7b 33 20 34 20 35  LLBACK;.} {3 4 5
1570: 20 36 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c   6}..do_catchsql
1580: 5f 74 65 73 74 20 34 2e 32 20 7b 0a 20 20 44 45  _test 4.2 {.  DE
1590: 4c 45 54 45 20 46 52 4f 4d 20 78 31 20 49 4e 44  LETE FROM x1 IND
15a0: 45 58 45 44 20 42 59 20 78 31 62 63 20 57 48 45  EXED BY x1bc WHE
15b0: 52 45 20 64 3d 33 20 4c 49 4d 49 54 20 31 3b 0a  RE d=3 LIMIT 1;.
15c0: 7d 20 7b 31 20 7b 6e 6f 20 71 75 65 72 79 20 73  } {1 {no query s
15d0: 6f 6c 75 74 69 6f 6e 7d 7d 0a 0a 64 6f 5f 65 78  olution}}..do_ex
15e0: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 33 20 7b  ecsql_test 4.3 {
15f0: 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 78  .  DELETE FROM x
1600: 31 20 49 4e 44 45 58 45 44 20 42 59 20 78 31 62  1 INDEXED BY x1b
1610: 63 20 57 48 45 52 45 20 62 3d 33 20 4c 49 4d 49  c WHERE b=3 LIMI
1620: 54 20 31 3b 0a 20 20 53 45 4c 45 43 54 20 61 20  T 1;.  SELECT a 
1630: 46 52 4f 4d 20 78 31 3b 0a 7d 20 7b 31 20 32 20  FROM x1;.} {1 2 
1640: 33 20 34 20 36 7d 0a 0a 64 6f 5f 63 61 74 63 68  3 4 6}..do_catch
1650: 73 71 6c 5f 74 65 73 74 20 34 2e 34 20 7b 0a 20  sql_test 4.4 {. 
1660: 20 55 50 44 41 54 45 20 78 31 20 49 4e 44 45 58   UPDATE x1 INDEX
1670: 45 44 20 42 59 20 78 31 62 63 20 53 45 54 20 64  ED BY x1bc SET d
1680: 3d 35 20 57 48 45 52 45 20 64 3d 33 20 4c 49 4d  =5 WHERE d=3 LIM
1690: 49 54 20 31 3b 0a 7d 20 7b 31 20 7b 6e 6f 20 71  IT 1;.} {1 {no q
16a0: 75 65 72 79 20 73 6f 6c 75 74 69 6f 6e 7d 7d 0a  uery solution}}.
16b0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
16c0: 20 34 2e 35 20 7b 0a 20 20 55 50 44 41 54 45 20   4.5 {.  UPDATE 
16d0: 78 31 20 49 4e 44 45 58 45 44 20 42 59 20 78 31  x1 INDEXED BY x1
16e0: 62 63 20 53 45 54 20 64 3d 35 20 57 48 45 52 45  bc SET d=5 WHERE
16f0: 20 62 3d 32 20 4c 49 4d 49 54 20 31 3b 0a 20 20   b=2 LIMIT 1;.  
1700: 53 45 4c 45 43 54 20 61 2c 20 64 20 46 52 4f 4d  SELECT a, d FROM
1710: 20 78 31 3b 0a 7d 20 7b 31 20 31 20 32 20 32 20   x1;.} {1 1 2 2 
1720: 33 20 35 20 34 20 33 20 36 20 31 7d 0a 0a 23 2d  3 5 4 3 6 1}..#-
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
1780: 75 73 69 6e 67 20 6f 62 6a 65 63 74 20 6e 61 6d  using object nam
1790: 65 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20  es that require 
17a0: 71 75 6f 74 69 6e 67 2e 0a 23 0a 64 6f 5f 65 78  quoting..#.do_ex
17b0: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 30 20 7b  ecsql_test 5.0 {
17c0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
17d0: 22 78 20 79 22 28 22 61 20 62 22 20 50 52 49 4d  "x y"("a b" PRIM
17e0: 41 52 59 20 4b 45 59 2c 20 22 63 20 64 22 29 20  ARY KEY, "c d") 
17f0: 57 49 54 48 4f 55 54 20 52 4f 57 49 44 3b 0a 20  WITHOUT ROWID;. 
1800: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 78 79   CREATE INDEX xy
1810: 63 64 20 4f 4e 20 22 78 20 79 22 28 22 63 20 64  cd ON "x y"("c d
1820: 22 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ");..  INSERT IN
1830: 54 4f 20 22 78 20 79 22 20 56 41 4c 55 45 53 28  TO "x y" VALUES(
1840: 27 61 27 2c 20 27 61 27 29 3b 0a 20 20 49 4e 53  'a', 'a');.  INS
1850: 45 52 54 20 49 4e 54 4f 20 22 78 20 79 22 20 56  ERT INTO "x y" V
1860: 41 4c 55 45 53 28 27 62 27 2c 20 27 62 27 29 3b  ALUES('b', 'b');
1870: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 22  .  INSERT INTO "
1880: 78 20 79 22 20 56 41 4c 55 45 53 28 27 63 27 2c  x y" VALUES('c',
1890: 20 27 63 27 29 3b 0a 20 20 49 4e 53 45 52 54 20   'c');.  INSERT 
18a0: 49 4e 54 4f 20 22 78 20 79 22 20 56 41 4c 55 45  INTO "x y" VALUE
18b0: 53 28 27 64 27 2c 20 27 64 27 29 3b 0a 20 20 49  S('d', 'd');.  I
18c0: 4e 53 45 52 54 20 49 4e 54 4f 20 22 78 20 79 22  NSERT INTO "x y"
18d0: 20 56 41 4c 55 45 53 28 27 65 27 2c 20 27 61 27   VALUES('e', 'a'
18e0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
18f0: 20 22 78 20 79 22 20 56 41 4c 55 45 53 28 27 66   "x y" VALUES('f
1900: 27 2c 20 27 62 27 29 3b 0a 20 20 49 4e 53 45 52  ', 'b');.  INSER
1910: 54 20 49 4e 54 4f 20 22 78 20 79 22 20 56 41 4c  T INTO "x y" VAL
1920: 55 45 53 28 27 67 27 2c 20 27 63 27 29 3b 0a 20  UES('g', 'c');. 
1930: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 22 78 20   INSERT INTO "x 
1940: 79 22 20 56 41 4c 55 45 53 28 27 68 27 2c 20 27  y" VALUES('h', '
1950: 64 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  d');.}..do_execs
1960: 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20  ql_test 5.1 {.  
1970: 42 45 47 49 4e 3b 0a 20 20 20 20 44 45 4c 45 54  BEGIN;.    DELET
1980: 45 20 46 52 4f 4d 20 22 78 20 79 22 20 57 48 45  E FROM "x y" WHE
1990: 52 45 20 22 63 20 64 22 21 3d 27 65 27 20 4f 52  RE "c d"!='e' OR
19a0: 44 45 52 20 42 59 20 22 63 20 64 22 20 4c 49 4d  DER BY "c d" LIM
19b0: 49 54 20 32 20 4f 46 46 53 45 54 20 32 3b 0a 20  IT 2 OFFSET 2;. 
19c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
19d0: 20 22 78 20 79 22 20 4f 52 44 45 52 20 42 59 20   "x y" ORDER BY 
19e0: 31 3b 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 7d  1;.  ROLLBACK;.}
19f0: 20 7b 0a 20 20 61 20 61 20 63 20 63 20 64 20 64   {.  a a c c d d
1a00: 20 65 20 61 20 67 20 63 20 68 20 64 0a 7d 0a 0a   e a g c h d.}..
1a10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1a20: 35 2e 32 20 7b 0a 20 20 42 45 47 49 4e 3b 0a 20  5.2 {.  BEGIN;. 
1a30: 20 20 20 55 50 44 41 54 45 20 22 78 20 79 22 20     UPDATE "x y" 
1a40: 53 45 54 20 22 63 20 64 22 3d 27 65 27 20 57 48  SET "c d"='e' WH
1a50: 45 52 45 20 22 63 20 64 22 21 3d 27 65 27 20 4f  ERE "c d"!='e' O
1a60: 52 44 45 52 20 42 59 20 22 63 20 64 22 20 4c 49  RDER BY "c d" LI
1a70: 4d 49 54 20 32 20 4f 46 46 53 45 54 20 32 3b 0a  MIT 2 OFFSET 2;.
1a80: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1a90: 4d 20 22 78 20 79 22 20 4f 52 44 45 52 20 42 59  M "x y" ORDER BY
1aa0: 20 31 3b 0a 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a   1;.  ROLLBACK;.
1ab0: 7d 20 7b 0a 20 20 61 20 61 20 62 20 65 20 63 20  } {.  a a b e c 
1ac0: 63 20 64 20 64 20 65 20 61 20 66 20 65 20 67 20  c d d e a f e g 
1ad0: 63 20 68 20 64 0a 7d 0a 0a 70 72 6f 63 20 6c 6f  c h d.}..proc lo
1ae0: 67 20 7b 61 72 67 73 7d 20 7b 20 6c 61 70 70 65  g {args} { lappe
1af0: 6e 64 20 3a 3a 6c 6f 67 20 7b 2a 7d 24 61 72 67  nd ::log {*}$arg
1b00: 73 20 7d 0a 64 62 20 66 75 6e 63 20 6c 6f 67 20  s }.db func log 
1b10: 6c 6f 67 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  log.do_execsql_t
1b20: 65 73 74 20 35 2e 33 20 7b 0a 20 20 43 52 45 41  est 5.3 {.  CREA
1b30: 54 45 20 56 49 45 57 20 22 76 20 77 22 20 41 53  TE VIEW "v w" AS
1b40: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 22   SELECT * FROM "
1b50: 78 20 79 22 3b 0a 20 20 43 52 45 41 54 45 20 54  x y";.  CREATE T
1b60: 52 49 47 47 45 52 20 74 72 31 20 49 4e 53 54 45  RIGGER tr1 INSTE
1b70: 41 44 20 4f 46 20 44 45 4c 45 54 45 20 4f 4e 20  AD OF DELETE ON 
1b80: 22 76 20 77 22 20 42 45 47 49 4e 0a 20 20 20 20  "v w" BEGIN.    
1b90: 53 45 4c 45 43 54 20 6c 6f 67 28 6f 6c 64 2e 22  SELECT log(old."
1ba0: 61 20 62 22 2c 20 6f 6c 64 2e 22 63 20 64 22 29  a b", old."c d")
1bb0: 3b 0a 20 20 45 4e 44 3b 0a 20 20 43 52 45 41 54  ;.  END;.  CREAT
1bc0: 45 20 54 52 49 47 47 45 52 20 74 72 32 20 49 4e  E TRIGGER tr2 IN
1bd0: 53 54 45 41 44 20 4f 46 20 55 50 44 41 54 45 20  STEAD OF UPDATE 
1be0: 4f 4e 20 22 76 20 77 22 20 42 45 47 49 4e 0a 20  ON "v w" BEGIN. 
1bf0: 20 20 20 53 45 4c 45 43 54 20 6c 6f 67 28 6e 65     SELECT log(ne
1c00: 77 2e 22 61 20 62 22 2c 20 6e 65 77 2e 22 63 20  w."a b", new."c 
1c10: 64 22 29 3b 0a 20 20 45 4e 44 3b 0a 7d 0a 0a 64  d");.  END;.}..d
1c20: 6f 5f 74 65 73 74 20 35 2e 34 20 7b 0a 20 20 73  o_test 5.4 {.  s
1c30: 65 74 20 3a 3a 6c 6f 67 20 7b 7d 0a 20 20 65 78  et ::log {}.  ex
1c40: 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46  ecsql { DELETE F
1c50: 52 4f 4d 20 22 76 20 77 22 20 4f 52 44 45 52 20  ROM "v w" ORDER 
1c60: 42 59 20 22 61 20 62 22 20 4c 49 4d 49 54 20 33  BY "a b" LIMIT 3
1c70: 20 7d 0a 20 20 73 65 74 20 3a 3a 6c 6f 67 0a 7d   }.  set ::log.}
1c80: 20 7b 61 20 61 20 62 20 62 20 63 20 63 7d 0a 0a   {a a b b c c}..
1c90: 64 6f 5f 74 65 73 74 20 35 2e 35 20 7b 0a 20 20  do_test 5.5 {.  
1ca0: 73 65 74 20 3a 3a 6c 6f 67 20 7b 7d 0a 20 20 65  set ::log {}.  e
1cb0: 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20  xecsql { UPDATE 
1cc0: 22 76 20 77 22 20 53 45 54 20 22 61 20 62 22 20  "v w" SET "a b" 
1cd0: 3d 20 22 61 20 62 22 20 7c 7c 20 27 78 27 20 4f  = "a b" || 'x' O
1ce0: 52 44 45 52 20 42 59 20 22 61 20 62 22 20 4c 49  RDER BY "a b" LI
1cf0: 4d 49 54 20 35 3b 20 7d 0a 20 20 73 65 74 20 3a  MIT 5; }.  set :
1d00: 3a 6c 6f 67 0a 7d 20 7b 61 78 20 61 20 62 78 20  :log.} {ax a bx 
1d10: 62 20 63 78 20 63 20 64 78 20 64 20 65 78 20 61  b cx c dx d ex a
1d20: 7d 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  }...finish_test.
1d30: 0a                                               .