/ Hex Artifact Content
Login

Artifact 6ccdf5e459a5dc4673d3273dc311a7e9742ca952dd0551a6a6320d27035ce4b3:


0000: 23 20 32 30 31 34 2d 30 38 2d 32 34 0a 23 0a 23  # 2014-08-24.#.#
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 0a 23  QLite library..#
01a0: 20 54 68 65 20 66 6f 63 75 73 20 6f 66 20 74 68   The focus of th
01b0: 69 73 20 73 63 72 69 70 74 20 69 73 20 74 65 73  is script is tes
01c0: 74 69 6e 67 20 64 65 74 61 69 6c 73 20 6f 66 20  ting details of 
01d0: 74 68 65 20 53 51 4c 20 6c 61 6e 67 75 61 67 65  the SQL language
01e0: 20 70 61 72 73 65 72 2e 0a 23 20 0a 0a 73 65 74   parser..# ..set
01f0: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0200: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0210: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0220: 65 73 74 65 72 2e 74 63 6c 0a 0a 64 6f 5f 63 61  ester.tcl..do_ca
0230: 74 63 68 73 71 6c 5f 74 65 73 74 20 70 61 72 73  tchsql_test pars
0240: 65 72 31 2d 31 2e 31 20 7b 0a 20 20 43 52 45 41  er1-1.1 {.  CREA
0250: 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20 20  TE TABLE t1(.   
0260: 20 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20   a TEXT PRIMARY 
0270: 4b 45 59 2c 0a 20 20 20 20 62 20 54 45 58 54 2c  KEY,.    b TEXT,
0280: 0a 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59  .    FOREIGN KEY
0290: 28 62 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73  (b COLLATE nocas
02a0: 65 20 44 45 53 43 29 20 52 45 46 45 52 45 4e 43  e DESC) REFERENC
02b0: 45 53 20 74 31 28 61 20 43 4f 4c 4c 41 54 45 20  ES t1(a COLLATE 
02c0: 62 69 6e 61 72 79 20 41 53 43 29 0a 20 20 29 3b  binary ASC).  );
02d0: 0a 7d 20 7b 31 20 7b 73 79 6e 74 61 78 20 65 72  .} {1 {syntax er
02e0: 72 6f 72 20 61 66 74 65 72 20 63 6f 6c 75 6d 6e  ror after column
02f0: 20 6e 61 6d 65 20 22 62 22 7d 7d 0a 0a 0a 23 20   name "b"}}...# 
0300: 56 65 72 69 66 79 20 74 68 61 74 20 61 20 6c 65  Verify that a le
0310: 67 61 63 79 20 73 63 68 65 6d 61 20 69 6e 20 74  gacy schema in t
0320: 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  he sqlite_master
0330: 20 66 69 6c 65 20 69 73 20 61 6c 6c 6f 77 65 64   file is allowed
0340: 20 74 6f 20 68 61 76 65 0a 23 20 43 4f 4c 4c 41   to have.# COLLA
0350: 54 45 2c 20 41 53 43 2c 20 61 6e 64 20 44 45 53  TE, ASC, and DES
0360: 43 20 6b 65 79 77 6f 72 64 73 20 6f 6e 20 74 68  C keywords on th
0370: 65 20 69 64 20 6c 69 73 74 20 6f 66 20 61 20 46  e id list of a F
0380: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 61 6e  K constraint, an
0390: 64 20 74 68 61 74 0a 23 20 74 68 6f 73 65 20 6b  d that.# those k
03a0: 65 79 77 6f 72 64 73 20 61 72 65 20 73 69 6c 65  eywords are sile
03b0: 6e 74 6c 79 20 69 67 6e 6f 72 65 64 2e 0a 23 0a  ntly ignored..#.
03c0: 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66 69  sqlite3_db_confi
03d0: 67 20 64 62 20 44 45 46 45 4e 53 49 56 45 20 30  g db DEFENSIVE 0
03e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
03f0: 20 70 61 72 73 65 72 31 2d 31 2e 32 20 7b 0a 20   parser1-1.2 {. 
0400: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
0410: 28 0a 20 20 20 20 61 20 54 45 58 54 20 50 52 49  (.    a TEXT PRI
0420: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 62 20  MARY KEY,.    b 
0430: 54 45 58 54 2c 0a 20 20 20 20 46 4f 52 45 49 47  TEXT,.    FOREIG
0440: 4e 20 4b 45 59 28 62 29 20 52 45 46 45 52 45 4e  N KEY(b) REFEREN
0450: 43 45 53 20 74 31 28 61 29 0a 20 20 29 3b 0a 20  CES t1(a).  );. 
0460: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0470: 56 41 4c 55 45 53 28 27 61 62 63 27 2c 4e 55 4c  VALUES('abc',NUL
0480: 4c 29 2c 28 27 78 79 7a 27 2c 27 61 62 63 27 29  L),('xyz','abc')
0490: 3b 0a 20 20 50 52 41 47 4d 41 20 77 72 69 74 61  ;.  PRAGMA writa
04a0: 62 6c 65 5f 73 63 68 65 6d 61 3d 6f 6e 3b 0a 20  ble_schema=on;. 
04b0: 20 55 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d   UPDATE sqlite_m
04c0: 61 73 74 65 72 20 53 45 54 20 73 71 6c 3d 27 43  aster SET sql='C
04d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 0a  REATE TABLE t1(.
04e0: 20 20 20 20 61 20 54 45 58 54 20 50 52 49 4d 41      a TEXT PRIMA
04f0: 52 59 20 4b 45 59 2c 0a 20 20 20 20 62 20 54 45  RY KEY,.    b TE
0500: 58 54 2c 0a 20 20 20 20 46 4f 52 45 49 47 4e 20  XT,.    FOREIGN 
0510: 4b 45 59 28 62 20 43 4f 4c 4c 41 54 45 20 6e 6f  KEY(b COLLATE no
0520: 63 61 73 65 29 20 52 45 46 45 52 45 4e 43 45 53  case) REFERENCES
0530: 20 74 31 28 61 29 0a 20 20 29 27 20 57 48 45 52   t1(a).  )' WHER
0540: 45 20 6e 61 6d 65 3d 27 74 31 27 3b 0a 20 20 53  E name='t1';.  S
0550: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
0560: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
0570: 45 52 45 20 73 71 6c 20 4c 49 4b 45 20 27 25 63  ERE sql LIKE '%c
0580: 6f 6c 6c 61 74 65 25 27 3b 0a 7d 20 7b 74 31 7d  ollate%';.} {t1}
0590: 0a 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73  .sqlite3 db2 tes
05a0: 74 2e 64 62 0a 64 6f 5f 74 65 73 74 20 70 61 72  t.db.do_test par
05b0: 73 65 72 31 2d 31 2e 33 20 7b 0a 20 20 73 71 6c  ser1-1.3 {.  sql
05c0: 69 74 65 33 20 64 62 32 20 74 65 73 74 2e 64 62  ite3 db2 test.db
05d0: 0a 20 20 64 62 32 20 65 76 61 6c 20 7b 53 45 4c  .  db2 eval {SEL
05e0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52  ECT * FROM t1 OR
05f0: 44 45 52 20 42 59 20 31 7d 0a 7d 20 7b 61 62 63  DER BY 1}.} {abc
0600: 20 7b 7d 20 78 79 7a 20 61 62 63 7d 0a 64 62 32   {} xyz abc}.db2
0610: 20 63 6c 6f 73 65 0a 0a 64 6f 5f 65 78 65 63 73   close..do_execs
0620: 71 6c 5f 74 65 73 74 20 70 61 72 73 65 72 31 2d  ql_test parser1-
0630: 31 2e 34 20 7b 0a 20 20 55 50 44 41 54 45 20 73  1.4 {.  UPDATE s
0640: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 53 45 54  qlite_master SET
0650: 20 73 71 6c 3d 27 43 52 45 41 54 45 20 54 41 42   sql='CREATE TAB
0660: 4c 45 20 74 31 28 0a 20 20 20 20 61 20 54 45 58  LE t1(.    a TEX
0670: 54 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  T PRIMARY KEY,. 
0680: 20 20 20 62 20 54 45 58 54 2c 0a 20 20 20 20 46     b TEXT,.    F
0690: 4f 52 45 49 47 4e 20 4b 45 59 28 62 20 41 53 43  OREIGN KEY(b ASC
06a0: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 28  ) REFERENCES t1(
06b0: 61 29 0a 20 20 29 27 20 57 48 45 52 45 20 6e 61  a).  )' WHERE na
06c0: 6d 65 3d 27 74 31 27 3b 0a 20 20 53 45 4c 45 43  me='t1';.  SELEC
06d0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
06e0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
06f0: 73 71 6c 20 4c 49 4b 45 20 27 25 41 53 43 25 27  sql LIKE '%ASC%'
0700: 3b 0a 7d 20 7b 74 31 7d 0a 73 71 6c 69 74 65 33  ;.} {t1}.sqlite3
0710: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 64 6f 5f   db2 test.db.do_
0720: 74 65 73 74 20 70 61 72 73 65 72 31 2d 31 2e 35  test parser1-1.5
0730: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
0740: 20 74 65 73 74 2e 64 62 0a 20 20 64 62 32 20 65   test.db.  db2 e
0750: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
0760: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 31  OM t1 ORDER BY 1
0770: 7d 0a 7d 20 7b 61 62 63 20 7b 7d 20 78 79 7a 20  }.} {abc {} xyz 
0780: 61 62 63 7d 0a 64 62 32 20 63 6c 6f 73 65 0a 0a  abc}.db2 close..
0790: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
07a0: 20 70 61 72 73 65 72 31 2d 32 2e 31 20 7b 0a 20   parser1-2.1 {. 
07b0: 20 57 49 54 48 20 52 45 43 55 52 53 49 56 45 0a   WITH RECURSIVE.
07c0: 20 20 20 20 63 28 78 20 43 4f 4c 4c 41 54 45 20      c(x COLLATE 
07d0: 62 69 6e 61 72 79 29 20 41 53 20 28 56 41 4c 55  binary) AS (VALU
07e0: 45 53 28 31 29 20 55 4e 49 4f 4e 20 53 45 4c 45  ES(1) UNION SELE
07f0: 43 54 20 78 2b 31 20 46 52 4f 4d 20 63 20 57 48  CT x+1 FROM c WH
0800: 45 52 45 20 78 3c 35 29 0a 20 20 53 45 4c 45 43  ERE x<5).  SELEC
0810: 54 20 78 20 46 52 4f 4d 20 63 3b 0a 7d 20 7b 31  T x FROM c;.} {1
0820: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 61   {syntax error a
0830: 66 74 65 72 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  fter column name
0840: 20 22 78 22 7d 7d 0a 64 6f 5f 63 61 74 63 68 73   "x"}}.do_catchs
0850: 71 6c 5f 74 65 73 74 20 70 61 72 73 65 72 31 2d  ql_test parser1-
0860: 32 2e 32 20 7b 0a 20 20 57 49 54 48 20 52 45 43  2.2 {.  WITH REC
0870: 55 52 53 49 56 45 0a 20 20 20 20 63 28 78 20 41  URSIVE.    c(x A
0880: 53 43 29 20 41 53 20 28 56 41 4c 55 45 53 28 31  SC) AS (VALUES(1
0890: 29 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 78  ) UNION SELECT x
08a0: 2b 31 20 46 52 4f 4d 20 63 20 57 48 45 52 45 20  +1 FROM c WHERE 
08b0: 78 3c 35 29 0a 20 20 53 45 4c 45 43 54 20 78 20  x<5).  SELECT x 
08c0: 46 52 4f 4d 20 63 3b 0a 7d 20 7b 31 20 7b 73 79  FROM c;.} {1 {sy
08d0: 6e 74 61 78 20 65 72 72 6f 72 20 61 66 74 65 72  ntax error after
08e0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 22 78 22   column name "x"
08f0: 7d 7d 0a 0a 23 20 56 65 72 69 66 79 20 74 68 61  }}..# Verify tha
0900: 74 20 74 68 65 20 63 6f 6d 6d 61 20 62 65 74 77  t the comma betw
0910: 65 65 6e 20 6d 75 6c 74 69 70 6c 65 20 74 61 62  een multiple tab
0920: 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69  le constraints i
0930: 73 0a 23 20 6f 70 74 69 6f 6e 61 6c 2e 0a 23 0a  s.# optional..#.
0940: 23 20 54 68 65 20 6d 69 73 73 69 6e 67 20 63 6f  # The missing co
0950: 6d 6d 61 20 69 73 20 74 65 63 68 6e 69 63 61 6c  mma is technical
0960: 6c 79 20 61 20 73 79 6e 74 61 78 20 65 72 72 6f  ly a syntax erro
0970: 72 2e 20 20 42 75 74 20 77 65 20 68 61 76 65 20  r.  But we have 
0980: 74 6f 20 73 75 70 70 6f 72 74 0a 23 20 69 74 20  to support.# it 
0990: 62 65 63 61 75 73 65 20 74 68 65 72 65 20 6d 69  because there mi
09a0: 67 68 74 20 62 65 20 6c 65 67 61 63 79 20 64 61  ght be legacy da
09b0: 74 61 62 61 73 65 73 20 74 68 61 74 20 6f 6d 69  tabases that omi
09c0: 74 20 74 68 65 20 63 6f 6d 6d 61 73 20 69 6e 20  t the commas in 
09d0: 74 68 65 69 72 0a 23 20 73 71 6c 69 74 65 5f 6d  their.# sqlite_m
09e0: 61 73 74 65 72 20 74 61 62 6c 65 73 2e 0a 23 0a  aster tables..#.
09f0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0a00: 70 61 72 73 65 72 31 2d 33 2e 31 20 7b 0a 20 20  parser1-3.1 {.  
0a10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 30  CREATE TABLE t30
0a20: 30 28 69 64 20 49 4e 54 45 47 45 52 20 50 52 49  0(id INTEGER PRI
0a30: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 43 52 45  MARY KEY);.  CRE
0a40: 41 54 45 20 54 41 42 4c 45 20 74 33 30 31 28 0a  ATE TABLE t301(.
0a50: 20 20 20 20 69 64 20 49 4e 54 45 47 45 52 20 50      id INTEGER P
0a60: 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20  RIMARY KEY,.    
0a70: 63 31 20 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e  c1 INTEGER NOT N
0a80: 55 4c 4c 2c 0a 20 20 20 20 63 32 20 49 4e 54 45  ULL,.    c2 INTE
0a90: 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 2c 0a 20 20  GER NOT NULL,.  
0aa0: 20 20 63 33 20 42 4f 4f 4c 45 41 4e 20 4e 4f 54    c3 BOOLEAN NOT
0ab0: 20 4e 55 4c 4c 20 44 45 46 41 55 4c 54 20 30 2c   NULL DEFAULT 0,
0ac0: 0a 20 20 20 20 46 4f 52 45 49 47 4e 20 4b 45 59  .    FOREIGN KEY
0ad0: 28 63 31 29 20 52 45 46 45 52 45 4e 43 45 53 20  (c1) REFERENCES 
0ae0: 74 33 30 30 28 69 64 29 20 4f 4e 20 44 45 4c 45  t300(id) ON DELE
0af0: 54 45 20 43 41 53 43 41 44 45 20 4f 4e 20 55 50  TE CASCADE ON UP
0b00: 44 41 54 45 20 52 45 53 54 52 49 43 54 0a 20 20  DATE RESTRICT.  
0b10: 20 20 20 20 20 20 2f 2a 20 6e 6f 20 63 6f 6d 6d        /* no comm
0b20: 61 20 2a 2f 0a 20 20 20 20 46 4f 52 45 49 47 4e  a */.    FOREIGN
0b30: 20 4b 45 59 28 63 32 29 20 52 45 46 45 52 45 4e   KEY(c2) REFEREN
0b40: 43 45 53 20 74 33 30 30 28 69 64 29 20 4f 4e 20  CES t300(id) ON 
0b50: 44 45 4c 45 54 45 20 43 41 53 43 41 44 45 20 4f  DELETE CASCADE O
0b60: 4e 20 55 50 44 41 54 45 20 52 45 53 54 52 49 43  N UPDATE RESTRIC
0b70: 54 0a 20 20 20 20 20 20 20 20 2f 2a 20 6e 6f 20  T.        /* no 
0b80: 63 6f 6d 6d 61 20 2a 2f 0a 20 20 20 20 55 4e 49  comma */.    UNI
0b90: 51 55 45 28 63 31 2c 20 63 32 29 0a 20 20 29 3b  QUE(c1, c2).  );
0ba0: 0a 20 20 50 52 41 47 4d 41 20 66 6f 72 65 69 67  .  PRAGMA foreig
0bb0: 6e 5f 6b 65 79 5f 6c 69 73 74 28 74 33 30 31 29  n_key_list(t301)
0bc0: 3b 0a 7d 20 7b 30 20 30 20 74 33 30 30 20 63 32  ;.} {0 0 t300 c2
0bd0: 20 69 64 20 52 45 53 54 52 49 43 54 20 43 41 53   id RESTRICT CAS
0be0: 43 41 44 45 20 4e 4f 4e 45 20 31 20 30 20 74 33  CADE NONE 1 0 t3
0bf0: 30 30 20 63 31 20 69 64 20 52 45 53 54 52 49 43  00 c1 id RESTRIC
0c00: 54 20 43 41 53 43 41 44 45 20 4e 4f 4e 45 7d 0a  T CASCADE NONE}.
0c10: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.