/ Hex Artifact Content
Login

Artifact 48598b15e8fe6554d301e7b65a10c9851f177e84:


0000: 23 20 32 30 31 30 20 53 65 70 74 65 6d 62 65 72  # 2010 September
0010: 20 32 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   25.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 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 2a 2a 2a 0a 23 0a 23 20 54 68  *********.#.# Th
0170: 69 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e  is file implemen
0180: 74 73 20 74 65 73 74 73 20 74 6f 20 76 65 72 69  ts tests to veri
0190: 66 79 20 74 68 61 74 20 74 68 65 20 22 74 65 73  fy that the "tes
01a0: 74 61 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 73  table statements
01b0: 22 20 69 6e 20 0a 23 20 74 68 65 20 6c 61 6e 67  " in .# the lang
01c0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2e 68 74 6d  _createtable.htm
01d0: 6c 20 64 6f 63 75 6d 65 6e 74 20 61 72 65 20 63  l document are c
01e0: 6f 72 72 65 63 74 2e 0a 23 0a 0a 73 65 74 20 74  orrect..#..set t
01f0: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0200: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0210: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0220: 74 65 72 2e 74 63 6c 0a 0a 73 65 74 20 3a 3a 74  ter.tcl..set ::t
0230: 65 73 74 70 72 65 66 69 78 20 65 5f 63 72 65 61  estprefix e_crea
0240: 74 65 74 61 62 6c 65 0a 0a 23 20 54 65 73 74 20  tetable..# Test 
0250: 6f 72 67 61 6e 69 7a 61 74 69 6f 6e 3a 0a 23 0a  organization:.#.
0260: 23 20 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c  #   e_createtabl
0270: 65 2d 30 2e 2a 3a 20 54 65 73 74 20 74 68 61 74  e-0.*: Test that
0280: 20 74 68 65 20 73 79 6e 74 61 78 20 64 69 61 67   the syntax diag
0290: 72 61 6d 73 20 61 72 65 20 63 6f 72 72 65 63 74  rams are correct
02a0: 2e 0a 23 0a 23 20 20 20 65 5f 63 72 65 61 74 65  ..#.#   e_create
02b0: 74 61 62 6c 65 2d 31 2e 2a 3a 20 54 65 73 74 20  table-1.*: Test 
02c0: 73 74 61 74 65 6d 65 6e 74 73 20 72 65 6c 61 74  statements relat
02d0: 65 64 20 74 6f 20 74 61 62 6c 65 20 61 6e 64 20  ed to table and 
02e0: 64 61 74 61 62 61 73 65 20 6e 61 6d 65 73 2c 20  database names, 
02f0: 0a 23 20 20 20 20 20 20 20 74 68 65 20 54 45 4d  .#       the TEM
0300: 50 20 61 6e 64 20 54 45 4d 50 4f 52 41 52 59 20  P and TEMPORARY 
0310: 6b 65 79 77 6f 72 64 73 2c 20 61 6e 64 20 74 68  keywords, and th
0320: 65 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  e IF NOT EXISTS 
0330: 63 6c 61 75 73 65 2e 0a 23 0a 23 20 20 20 65 5f  clause..#.#   e_
0340: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 2a 3a  createtable-2.*:
0350: 20 54 65 73 74 20 22 43 52 45 41 54 45 20 54 41   Test "CREATE TA
0360: 42 4c 45 20 41 53 22 20 73 74 61 74 65 6d 65 6e  BLE AS" statemen
0370: 74 73 2e 0a 23 0a 0a 70 72 6f 63 20 64 6f 5f 63  ts..#..proc do_c
0380: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
0390: 20 7b 6e 6d 20 61 72 67 73 7d 20 7b 0a 20 20 75   {nm args} {.  u
03a0: 70 6c 65 76 65 6c 20 64 6f 5f 73 65 6c 65 63 74  plevel do_select
03b0: 5f 74 65 73 74 73 20 5b 6c 69 73 74 20 65 5f 63  _tests [list e_c
03c0: 72 65 61 74 65 74 61 62 6c 65 2d 24 6e 6d 5d 20  reatetable-$nm] 
03d0: 24 61 72 67 73 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d  $args.}...#-----
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0420: 2d 2d 2d 2d 0a 23 20 54 68 69 73 20 63 6f 6d 6d  ----.# This comm
0430: 61 6e 64 20 72 65 74 75 72 6e 73 20 61 20 73 65  and returns a se
0440: 72 69 61 6c 69 7a 65 64 20 74 63 6c 20 61 72 72  rialized tcl arr
0450: 61 79 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  ay mapping from 
0460: 74 68 65 20 6e 61 6d 65 20 6f 66 0a 23 20 65 61  the name of.# ea
0470: 63 68 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ch attached data
0480: 62 61 73 65 20 74 6f 20 61 20 6c 69 73 74 20 6f  base to a list o
0490: 66 20 74 61 62 6c 65 73 20 69 6e 20 74 68 61 74  f tables in that
04a0: 20 64 61 74 61 62 61 73 65 2e 20 46 6f 72 20 65   database. For e
04b0: 78 61 6d 70 6c 65 2c 0a 23 20 69 66 20 74 68 65  xample,.# if the
04c0: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
04d0: 20 69 73 20 63 72 65 61 74 65 64 20 77 69 74 68   is created with
04e0: 3a 0a 23 0a 23 20 20 20 43 52 45 41 54 45 20 54  :.#.#   CREATE T
04f0: 41 42 4c 45 20 74 31 28 78 29 3b 0a 23 20 20 20  ABLE t1(x);.#   
0500: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
0510: 45 20 74 32 28 78 29 3b 0a 23 20 20 20 43 52 45  E t2(x);.#   CRE
0520: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74  ATE TEMP TABLE t
0530: 33 28 78 29 3b 0a 23 0a 23 20 54 68 65 6e 20 74  3(x);.#.# Then t
0540: 68 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75  his command retu
0550: 72 6e 73 20 22 6d 61 69 6e 20 74 31 20 74 65 6d  rns "main t1 tem
0560: 70 20 7b 74 32 20 74 33 7d 22 2e 0a 23 0a 70 72  p {t2 t3}"..#.pr
0570: 6f 63 20 74 61 62 6c 65 5f 6c 69 73 74 20 7b 7d  oc table_list {}
0580: 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69   {.  set res [li
0590: 73 74 5d 0a 20 20 64 62 20 65 76 61 6c 20 7b 20  st].  db eval { 
05a0: 70 72 61 67 6d 61 20 64 61 74 61 62 61 73 65 5f  pragma database_
05b0: 6c 69 73 74 20 7d 20 61 20 7b 0a 20 20 20 20 73  list } a {.    s
05c0: 65 74 20 64 62 6e 61 6d 65 20 24 61 28 6e 61 6d  et dbname $a(nam
05d0: 65 29 0a 20 20 20 20 73 65 74 20 6d 61 73 74 65  e).    set maste
05e0: 72 20 24 61 28 6e 61 6d 65 29 2e 73 71 6c 69 74  r $a(name).sqlit
05f0: 65 5f 6d 61 73 74 65 72 0a 20 20 20 20 69 66 20  e_master.    if 
0600: 7b 24 64 62 6e 61 6d 65 20 3d 3d 20 22 74 65 6d  {$dbname == "tem
0610: 70 22 7d 20 7b 20 73 65 74 20 6d 61 73 74 65 72  p"} { set master
0620: 20 73 71 6c 69 74 65 5f 74 65 6d 70 5f 6d 61 73   sqlite_temp_mas
0630: 74 65 72 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e  ter }.    lappen
0640: 64 20 72 65 73 20 24 64 62 6e 61 6d 65 20 5b 0a  d res $dbname [.
0650: 20 20 20 20 20 20 64 62 20 65 76 61 6c 20 22 53        db eval "S
0660: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 74  ELECT DISTINCT t
0670: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 24 6d 61  bl_name FROM $ma
0680: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 74 62  ster ORDER BY tb
0690: 6c 5f 6e 61 6d 65 22 0a 20 20 20 20 5d 0a 20 20  l_name".    ].  
06a0: 7d 0a 20 20 73 65 74 20 72 65 73 0a 7d 0a 0a 0a  }.  set res.}...
06b0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
06c0: 2d 34 37 32 36 36 2d 30 39 31 31 34 20 2d 2d 20  -47266-09114 -- 
06d0: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 74  syntax diagram t
06e0: 79 70 65 2d 6e 61 6d 65 0a 23 0a 64 6f 5f 63 72  ype-name.#.do_cr
06f0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
0700: 30 2e 31 2e 31 20 2d 72 65 70 61 69 72 20 7b 0a  0.1.1 -repair {.
0710: 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65    drop_all_table
0720: 73 0a 7d 20 7b 0a 20 20 31 20 20 20 22 43 52 45  s.} {.  1   "CRE
0730: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
0740: 6f 6e 65 29 22 20 20 20 20 20 20 20 20 20 20 20  one)"           
0750: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0760: 20 20 32 20 20 20 22 43 52 45 41 54 45 20 54 41    2   "CREATE TA
0770: 42 4c 45 20 74 31 28 63 31 20 6f 6e 65 20 74 77  BLE t1(c1 one tw
0780: 6f 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  o)"             
0790: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
07a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
07b0: 28 63 31 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  (c1 one two thre
07c0: 65 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  e)"             
07d0: 20 7b 7d 0a 20 20 34 20 20 20 22 43 52 45 41 54   {}.  4   "CREAT
07e0: 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 6f 6e  E TABLE t1(c1 on
07f0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
0800: 29 22 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20  )"         {}.  
0810: 35 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  5   "CREATE TABL
0820: 45 20 74 31 28 63 31 20 6f 6e 65 20 74 77 6f 20  E t1(c1 one two 
0830: 74 68 72 65 65 20 66 6f 75 72 28 31 34 29 29 22  three four(14))"
0840: 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 22 43       {}.  6   "C
0850: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0860: 31 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20  1 one two three 
0870: 66 6f 75 72 28 31 34 2c 20 32 32 29 29 22 20 7b  four(14, 22))" {
0880: 7d 0a 20 20 37 20 20 20 22 43 52 45 41 54 45 20  }.  7   "CREATE 
0890: 54 41 42 4c 45 20 74 31 28 63 31 20 76 61 72 28  TABLE t1(c1 var(
08a0: 2b 31 34 2c 20 2d 32 32 2e 33 29 29 22 20 20 20  +14, -22.3))"   
08b0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 38 20           {}.  8 
08c0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
08d0: 74 31 28 63 31 20 76 61 72 28 31 2e 30 65 31 30  t1(c1 var(1.0e10
08e0: 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  ))"             
08f0: 20 20 20 7b 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74     {}.}.do_creat
0900: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 30 2e 31  etable_tests 0.1
0910: 2e 32 20 2d 65 72 72 6f 72 20 7b 0a 20 20 6e 65  .2 -error {.  ne
0920: 61 72 20 22 25 73 22 3a 20 73 79 6e 74 61 78 20  ar "%s": syntax 
0930: 65 72 72 6f 72 0a 7d 20 7b 0a 20 20 31 20 20 20  error.} {.  1   
0940: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0950: 28 63 31 20 6f 6e 65 28 6e 75 6d 62 65 72 29 29  (c1 one(number))
0960: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
0970: 20 7b 6e 75 6d 62 65 72 7d 0a 7d 0a 0a 0a 23 20   {number}.}...# 
0980: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
0990: 30 36 38 39 2d 34 38 37 37 39 20 2d 2d 20 73 79  0689-48779 -- sy
09a0: 6e 74 61 78 20 64 69 61 67 72 61 6d 20 63 6f 6c  ntax diagram col
09b0: 75 6d 6e 2d 63 6f 6e 73 74 72 61 69 6e 74 0a 23  umn-constraint.#
09c0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
09d0: 74 65 73 74 73 20 30 2e 32 2e 31 20 2d 72 65 70  tests 0.2.1 -rep
09e0: 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c  air {.  drop_all
09f0: 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65 63 73  _tables .  execs
0a00: 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  ql { CREATE TABL
0a10: 45 20 74 32 28 78 20 50 52 49 4d 41 52 59 20 4b  E t2(x PRIMARY K
0a20: 45 59 29 20 7d 0a 7d 20 7b 0a 20 20 31 2e 31 20  EY) }.} {.  1.1 
0a30: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0a40: 74 31 28 63 31 20 74 65 78 74 20 50 52 49 4d 41  t1(c1 text PRIMA
0a50: 52 59 20 4b 45 59 29 22 20 20 20 20 20 20 20 20  RY KEY)"        
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 20 7b 7d 0a 20 20 31 2e 32 20 20 20 22 43 52 45   {}.  1.2   "CRE
0a80: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
0a90: 74 65 78 74 20 50 52 49 4d 41 52 59 20 4b 45 59  text PRIMARY KEY
0aa0: 20 41 53 43 29 22 20 20 20 20 20 20 20 20 20 20   ASC)"          
0ab0: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
0ac0: 31 2e 33 20 20 20 22 43 52 45 41 54 45 20 54 41  1.3   "CREATE TA
0ad0: 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 50  BLE t1(c1 text P
0ae0: 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53 43 29  RIMARY KEY DESC)
0af0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
0b00: 20 20 20 20 20 7b 7d 0a 20 20 31 2e 34 20 20 20       {}.  1.4   
0b10: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0b20: 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41  (c1 text CONSTRA
0b30: 49 4e 54 20 63 6f 6e 73 20 50 52 49 4d 41 52 59  INT cons PRIMARY
0b40: 20 4b 45 59 20 44 45 53 43 29 22 20 20 20 20 7b   KEY DESC)"    {
0b50: 7d 0a 0a 20 20 32 2e 31 20 20 20 22 43 52 45 41  }..  2.1   "CREA
0b60: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0b70: 65 78 74 20 4e 4f 54 20 4e 55 4c 4c 29 22 20 20  ext NOT NULL)"  
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32            {}.  2
0ba0: 2e 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .2   "CREATE TAB
0bb0: 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 43 4f  LE t1(c1 text CO
0bc0: 4e 53 54 52 41 49 4e 54 20 6e 6d 20 4e 4f 54 20  NSTRAINT nm NOT 
0bd0: 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20  NULL)"          
0be0: 20 20 20 20 7b 7d 0a 20 20 32 2e 33 20 20 20 22      {}.  2.3   "
0bf0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
0c00: 63 31 20 74 65 78 74 20 4e 55 4c 4c 29 22 20 20  c1 text NULL)"  
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
0c30: 0a 20 20 32 2e 34 20 20 20 22 43 52 45 41 54 45  .  2.4   "CREATE
0c40: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
0c50: 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 6e 6d 20  t CONSTRAINT nm 
0c60: 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20  NULL)"          
0c70: 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 33 2e          {}..  3.
0c80: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
0c90: 45 20 74 31 28 63 31 20 74 65 78 74 20 55 4e 49  E t1(c1 text UNI
0ca0: 51 55 45 29 22 20 20 20 20 20 20 20 20 20 20 20  QUE)"           
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cc0: 20 20 20 7b 7d 0a 20 20 33 2e 32 20 20 20 22 43     {}.  3.2   "C
0cd0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0ce0: 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41 49 4e  1 text CONSTRAIN
0cf0: 54 20 75 6e 20 55 4e 49 51 55 45 29 22 20 20 20  T un UNIQUE)"   
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0d10: 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41 54 45  .  4.1   "CREATE
0d20: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
0d30: 74 20 43 48 45 43 4b 28 63 31 21 3d 30 29 29 22  t CHECK(c1!=0))"
0d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d50: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 2e 32          {}.  4.2
0d60: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
0d70: 20 74 31 28 63 31 20 74 65 78 74 20 43 4f 4e 53   t1(c1 text CONS
0d80: 54 52 41 49 4e 54 20 63 68 6b 20 43 48 45 43 4b  TRAINT chk CHECK
0d90: 28 63 31 21 3d 30 29 29 22 20 20 20 20 20 20 20  (c1!=0))"       
0da0: 20 20 7b 7d 0a 0a 20 20 35 2e 31 20 20 20 22 43    {}..  5.1   "C
0db0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0dc0: 31 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 31  1 text DEFAULT 1
0dd0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0df0: 20 20 35 2e 32 20 20 20 22 43 52 45 41 54 45 20    5.2   "CREATE 
0e00: 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74  TABLE t1(c1 text
0e10: 20 44 45 46 41 55 4c 54 20 2d 31 29 22 20 20 20   DEFAULT -1)"   
0e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e30: 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e 33 20         {}.  5.3 
0e40: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0e50: 74 31 28 63 31 20 74 65 78 74 20 44 45 46 41 55  t1(c1 text DEFAU
0e60: 4c 54 20 2b 31 29 22 20 20 20 20 20 20 20 20 20  LT +1)"         
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 7b 7d 0a 20 20 35 2e 34 20 20 20 22 43 52 45   {}.  5.4   "CRE
0e90: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
0ea0: 74 65 78 74 20 44 45 46 41 55 4c 54 20 2d 34 35  text DEFAULT -45
0eb0: 2e 38 65 32 32 29 22 20 20 20 20 20 20 20 20 20  .8e22)"         
0ec0: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
0ed0: 35 2e 35 20 20 20 22 43 52 45 41 54 45 20 54 41  5.5   "CREATE TA
0ee0: 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 44  BLE t1(c1 text D
0ef0: 45 46 41 55 4c 54 20 28 31 2b 31 29 29 22 20 20  EFAULT (1+1))"  
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f10: 20 20 20 20 20 7b 7d 0a 20 20 35 2e 36 20 20 20       {}.  5.6   
0f20: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0f30: 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41  (c1 text CONSTRA
0f40: 49 4e 54 20 5c 22 31 20 32 5c 22 20 44 45 46 41  INT \"1 2\" DEFA
0f50: 55 4c 54 20 28 31 2b 31 29 29 22 20 20 20 20 7b  ULT (1+1))"    {
0f60: 7d 0a 0a 20 20 36 2e 31 20 20 20 22 43 52 45 41  }..  6.1   "CREA
0f70: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0f80: 65 78 74 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  ext COLLATE noca
0f90: 73 65 29 22 20 20 20 20 20 20 20 20 7b 7d 0a 20  se)"        {}. 
0fa0: 20 36 2e 32 20 20 20 22 43 52 45 41 54 45 20 54   6.2   "CREATE T
0fb0: 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20  ABLE t1(c1 text 
0fc0: 43 4f 4e 53 54 52 41 49 4e 54 20 27 61 20 78 27  CONSTRAINT 'a x'
0fd0: 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 29   COLLATE nocase)
0fe0: 22 20 20 20 20 20 7b 7d 0a 0a 20 20 37 2e 31 20  "     {}..  7.1 
0ff0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1000: 74 31 28 63 31 20 52 45 46 45 52 45 4e 43 45 53  t1(c1 REFERENCES
1010: 20 74 32 29 22 20 20 20 20 20 20 20 20 20 20 20   t2)"           
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1030: 20 7b 7d 0a 20 20 37 2e 32 20 20 20 22 43 52 45   {}.  7.2   "CRE
1040: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
1050: 43 4f 4e 53 54 52 41 49 4e 54 20 61 62 63 20 52  CONSTRAINT abc R
1060: 45 46 45 52 45 4e 43 45 53 20 74 32 29 22 20 20  EFERENCES t2)"  
1070: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20             {}.. 
1080: 20 38 2e 31 20 20 20 7b 0a 20 20 20 20 43 52 45   8.1   {.    CRE
1090: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20  ATE TABLE t1(c1 
10a0: 0a 20 20 20 20 20 20 50 52 49 4d 41 52 59 20 4b  .      PRIMARY K
10b0: 45 59 20 4e 4f 54 20 4e 55 4c 4c 20 55 4e 49 51  EY NOT NULL UNIQ
10c0: 55 45 20 43 48 45 43 4b 28 63 31 20 49 53 20 27  UE CHECK(c1 IS '
10d0: 74 65 6e 27 29 20 44 45 46 41 55 4c 54 20 31 32  ten') DEFAULT 12
10e0: 33 20 52 45 46 45 52 45 4e 43 45 53 20 74 31 0a  3 REFERENCES t1.
10f0: 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a 20 20      );.  } {}.  
1100: 38 2e 32 20 20 20 7b 0a 20 20 20 20 43 52 45 41  8.2   {.    CREA
1110: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 0a  TE TABLE t1(c1 .
1120: 20 20 20 20 20 20 52 45 46 45 52 45 4e 43 45 53        REFERENCES
1130: 20 74 31 20 44 45 46 41 55 4c 54 20 31 32 33 20   t1 DEFAULT 123 
1140: 43 48 45 43 4b 28 63 31 20 49 53 20 27 74 65 6e  CHECK(c1 IS 'ten
1150: 27 29 20 55 4e 49 51 55 45 20 4e 4f 54 20 4e 55  ') UNIQUE NOT NU
1160: 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59 20 0a  LL PRIMARY KEY .
1170: 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a 7d 0a      );.  } {}.}.
1180: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
1190: 52 2d 35 38 31 36 39 2d 35 31 38 30 34 20 2d 2d  R-58169-51804 --
11a0: 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20   syntax diagram 
11b0: 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74  table-constraint
11c0: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
11d0: 65 5f 74 65 73 74 73 20 30 2e 33 2e 31 20 2d 72  e_tests 0.3.1 -r
11e0: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61  epair {.  drop_a
11f0: 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65  ll_tables .  exe
1200: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
1210: 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41 52 59  BLE t2(x PRIMARY
1220: 20 4b 45 59 29 20 7d 0a 7d 20 7b 0a 20 20 31 2e   KEY) }.} {.  1.
1230: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
1240: 45 20 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49  E t1(c1, c2, PRI
1250: 4d 41 52 59 20 4b 45 59 28 63 31 29 29 22 20 20  MARY KEY(c1))"  
1260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1270: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 32 20         {}.  1.2 
1280: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1290: 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49 4d 41  t1(c1, c2, PRIMA
12a0: 52 59 20 4b 45 59 28 63 31 2c 20 63 32 29 29 22  RY KEY(c1, c2))"
12b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c0: 20 20 20 20 20 7b 7d 0a 20 20 31 2e 33 20 20 20       {}.  1.3   
12d0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
12e0: 28 63 31 2c 20 63 32 2c 20 50 52 49 4d 41 52 59  (c1, c2, PRIMARY
12f0: 20 4b 45 59 28 63 31 2c 20 63 32 29 20 4f 4e 20   KEY(c1, c2) ON 
1300: 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 29  CONFLICT IGNORE)
1310: 22 20 20 7b 7d 0a 0a 20 20 32 2e 31 20 20 20 22  "  {}..  2.1   "
1320: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1330: 63 31 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63  c1, c2, UNIQUE(c
1340: 31 29 29 22 20 20 20 20 20 20 20 20 20 20 20 20  1))"            
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1360: 20 20 7b 7d 0a 20 20 32 2e 32 20 20 20 22 43 52    {}.  2.2   "CR
1370: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
1380: 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63 31 2c  , c2, UNIQUE(c1,
1390: 20 63 32 29 29 22 20 20 20 20 20 20 20 20 20 20   c2))"          
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b0: 7b 7d 0a 20 20 32 2e 33 20 20 20 22 43 52 45 41  {}.  2.3   "CREA
13c0: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20  TE TABLE t1(c1, 
13d0: 63 32 2c 20 55 4e 49 51 55 45 28 63 31 2c 20 63  c2, UNIQUE(c1, c
13e0: 32 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49  2) ON CONFLICT I
13f0: 47 4e 4f 52 45 29 22 20 20 20 20 20 20 20 7b 7d  GNORE)"       {}
1400: 0a 0a 20 20 33 2e 31 20 20 20 22 43 52 45 41 54  ..  3.1   "CREAT
1410: 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20 63  E TABLE t1(c1, c
1420: 32 2c 20 43 48 45 43 4b 28 63 31 20 49 53 20 4e  2, CHECK(c1 IS N
1430: 4f 54 20 63 32 29 29 22 20 20 20 20 20 20 20 20  OT c2))"        
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
1450: 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41 54 45  .  4.1   "CREATE
1460: 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20 63 32   TABLE t1(c1, c2
1470: 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28 63 31  , FOREIGN KEY(c1
1480: 29 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29  ) REFERENCES t2)
1490: 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d  "           {}.}
14a0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
14b0: 20 52 2d 34 34 38 32 36 2d 32 32 32 34 33 20 2d   R-44826-22243 -
14c0: 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  - syntax diagram
14d0: 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 23 0a 64 6f   column-def.#.do
14e0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
14f0: 74 73 20 30 2e 34 2e 31 20 2d 72 65 70 61 69 72  ts 0.4.1 -repair
1500: 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f 74 61   {.  drop_all_ta
1510: 62 6c 65 73 20 0a 7d 20 7b 0a 20 20 31 20 20 20  bles .} {.  1   
1520: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
1530: 74 31 28 0a 20 20 20 20 20 20 20 20 20 20 20 63  t1(.           c
1540: 6f 6c 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ol1,.           
1550: 63 6f 6c 32 20 54 45 58 54 2c 0a 20 20 20 20 20  col2 TEXT,.     
1560: 20 20 20 20 20 20 63 6f 6c 33 20 49 4e 54 45 47        col3 INTEG
1570: 45 52 20 55 4e 49 51 55 45 2c 0a 20 20 20 20 20  ER UNIQUE,.     
1580: 20 20 20 20 20 20 63 6f 6c 34 20 56 41 52 43 48        col4 VARCH
1590: 41 52 28 31 30 2c 20 31 30 29 20 50 52 49 4d 41  AR(10, 10) PRIMA
15a0: 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20 20 20  RY KEY,.        
15b0: 20 20 20 22 6e 61 6d 65 20 77 69 74 68 20 73 70     "name with sp
15c0: 61 63 65 73 22 20 52 45 46 45 52 45 4e 43 45 53  aces" REFERENCES
15d0: 20 74 31 0a 20 20 20 20 20 20 20 20 20 29 3b 0a   t1.         );.
15e0: 20 20 20 20 20 20 20 20 7d 20 7b 7d 0a 7d 0a 0a          } {}.}..
15f0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
1600: 2d 34 35 36 39 38 2d 34 35 36 37 37 20 2d 2d 20  -45698-45677 -- 
1610: 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d 20 63  syntax diagram c
1620: 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74 6d 74  reate-table-stmt
1630: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
1640: 65 5f 74 65 73 74 73 20 30 2e 35 2e 31 20 2d 72  e_tests 0.5.1 -r
1650: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61  epair {.  drop_a
1660: 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65  ll_tables .  exe
1670: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
1680: 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29 20  BLE t2(a, b, c) 
1690: 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 20 20 22 43  }.} {.  1     "C
16a0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
16b0: 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20  , b, c)"        
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
16e0: 20 32 20 20 20 20 20 22 43 52 45 41 54 45 20 54   2     "CREATE T
16f0: 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20  EMP TABLE t1(a, 
1700: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1720: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 20       {}.  3     
1730: 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52  "CREATE TEMPORAR
1740: 59 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c  Y TABLE t1(a, b,
1750: 20 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20   c)"            
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
1770: 0a 20 20 34 20 20 20 20 20 22 43 52 45 41 54 45  .  4     "CREATE
1780: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
1790: 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29  ISTS t1(a, b, c)
17a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
17b0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20         {}.  5   
17c0: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54    "CREATE TEMP T
17d0: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
17e0: 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20  TS t1(a, b, c)" 
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1800: 7b 7d 0a 20 20 36 20 20 20 20 20 22 43 52 45 41  {}.  6     "CREA
1810: 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
1820: 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53  LE IF NOT EXISTS
1830: 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20   t1(a, b, c)"   
1840: 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 37           {}..  7
1850: 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42       "CREATE TAB
1860: 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62 2c  LE main.t1(a, b,
1870: 20 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20   c)"            
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 20 20 20 7b 7d 0a 20 20 38 20 20 20 20 20 22 43     {}.  8     "C
18a0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
18b0: 20 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63   temp.t1(a, b, c
18c0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
18e0: 20 39 20 20 20 20 20 22 43 52 45 41 54 45 20 54   9     "CREATE T
18f0: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 74  EMPORARY TABLE t
1900: 65 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63 29 22  emp.t1(a, b, c)"
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1920: 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20 20 20       {}.  10    
1930: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
1940: 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 61 69 6e   NOT EXISTS main
1950: 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20  .t1(a, b, c)"   
1960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
1970: 0a 20 20 31 31 20 20 20 20 22 43 52 45 41 54 45  .  11    "CREATE
1980: 20 54 45 4d 50 20 54 41 42 4c 45 20 49 46 20 4e   TEMP TABLE IF N
1990: 4f 54 20 45 58 49 53 54 53 20 74 65 6d 70 2e 74  OT EXISTS temp.t
19a0: 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20  1(a, b, c)"     
19b0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 32 20 20         {}.  12  
19c0: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52    "CREATE TEMPOR
19d0: 41 52 59 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ARY TABLE IF NOT
19e0: 20 45 58 49 53 54 53 20 74 65 6d 70 2e 74 31 28   EXISTS temp.t1(
19f0: 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20  a, b, c)"       
1a00: 7b 7d 0a 0a 20 20 31 33 20 20 20 20 22 43 52 45  {}..  13    "CRE
1a10: 41 54 45 20 54 41 42 4c 45 20 74 31 20 41 53 20  ATE TABLE t1 AS 
1a20: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
1a30: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1a40: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31            {}.  1
1a50: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d  4    "CREATE TEM
1a60: 50 20 54 41 42 4c 45 20 74 31 20 41 53 20 53 45  P TABLE t1 AS SE
1a70: 4c 45 43 54 20 63 2c 20 62 2c 20 61 20 46 52 4f  LECT c, b, a FRO
1a80: 4d 20 74 32 22 20 20 20 20 20 20 20 20 20 20 20  M t2"           
1a90: 20 20 20 7b 7d 0a 20 20 31 35 20 20 20 20 22 43     {}.  15    "C
1aa0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 20 41  REATE TABLE t1 A
1ab0: 53 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a  S SELECT count(*
1ac0: 29 2c 20 6d 61 78 28 62 29 2c 20 6d 69 6e 28 61  ), max(b), min(a
1ad0: 29 20 46 52 4f 4d 20 74 32 22 20 20 7b 7d 0a 7d  ) FROM t2"  {}.}
1ae0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
1af0: 20 52 2d 32 34 33 36 39 2d 31 31 39 31 39 20 2d   R-24369-11919 -
1b00: 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  - syntax diagram
1b10: 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63 6c 61   foreign-key-cla
1b20: 75 73 65 0a 23 0a 23 20 20 20 31 3a 20 20 20 20  use.#.#   1:    
1b30: 20 20 20 20 20 45 78 70 6c 69 63 69 74 20 70 61       Explicit pa
1b40: 72 65 6e 74 2d 6b 65 79 20 63 6f 6c 75 6d 6e 73  rent-key columns
1b50: 2e 0a 23 20 20 20 32 3a 20 20 20 20 20 20 20 20  ..#   2:        
1b60: 20 49 6d 70 6c 69 63 69 74 20 63 68 69 6c 64 2d   Implicit child-
1b70: 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 23  key columns..#.#
1b80: 20 20 20 31 3a 20 20 20 20 20 20 20 20 20 4d 41     1:         MA
1b90: 54 43 48 20 46 55 4c 4c 0a 23 20 20 20 32 3a 20  TCH FULL.#   2: 
1ba0: 20 20 20 20 20 20 20 20 4d 41 54 43 48 20 50 41          MATCH PA
1bb0: 52 54 49 41 4c 0a 23 20 20 20 33 3a 20 20 20 20  RTIAL.#   3:    
1bc0: 20 20 20 20 20 4d 41 54 43 48 20 53 49 4d 50 4c       MATCH SIMPL
1bd0: 45 0a 23 20 20 20 34 3a 20 20 20 20 20 20 20 20  E.#   4:        
1be0: 20 4d 41 54 43 48 20 53 54 49 43 4b 0a 23 20 20   MATCH STICK.#  
1bf0: 20 35 3a 20 20 20 20 20 20 20 20 20 0a 23 0a 23   5:         .#.#
1c00: 20 20 20 31 3a 20 20 20 20 20 20 20 20 20 4f 4e     1:         ON
1c10: 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c   DELETE SET NULL
1c20: 0a 23 20 20 20 32 3a 20 20 20 20 20 20 20 20 20  .#   2:         
1c30: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 44 45  ON DELETE SET DE
1c40: 46 41 55 4c 54 0a 23 20 20 20 33 3a 20 20 20 20  FAULT.#   3:    
1c50: 20 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 43       ON DELETE C
1c60: 41 53 43 41 44 45 0a 23 20 20 20 34 3a 20 20 20  ASCADE.#   4:   
1c70: 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20        ON DELETE 
1c80: 52 45 53 54 52 49 43 54 0a 23 20 20 20 35 3a 20  RESTRICT.#   5: 
1c90: 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54          ON DELET
1ca0: 45 20 4e 4f 20 41 43 54 49 4f 4e 0a 23 20 20 20  E NO ACTION.#   
1cb0: 36 3a 0a 23 0a 23 20 20 20 31 3a 20 20 20 20 20  6:.#.#   1:     
1cc0: 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20 53 45      ON UPDATE SE
1cd0: 54 20 4e 55 4c 4c 0a 23 20 20 20 32 3a 20 20 20  T NULL.#   2:   
1ce0: 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20        ON UPDATE 
1cf0: 53 45 54 20 44 45 46 41 55 4c 54 0a 23 20 20 20  SET DEFAULT.#   
1d00: 33 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 55 50  3:         ON UP
1d10: 44 41 54 45 20 43 41 53 43 41 44 45 0a 23 20 20  DATE CASCADE.#  
1d20: 20 34 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 55   4:         ON U
1d30: 50 44 41 54 45 20 52 45 53 54 52 49 43 54 0a 23  PDATE RESTRICT.#
1d40: 20 20 20 35 3a 20 20 20 20 20 20 20 20 20 4f 4e     5:         ON
1d50: 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f   UPDATE NO ACTIO
1d60: 4e 0a 23 20 20 20 36 3a 0a 23 0a 23 20 20 20 31  N.#   6:.#.#   1
1d70: 3a 20 20 20 20 20 20 20 20 20 4e 4f 54 20 44 45  :         NOT DE
1d80: 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c  FERRABLE INITIAL
1d90: 4c 59 20 44 45 46 45 52 52 45 44 0a 23 20 20 20  LY DEFERRED.#   
1da0: 32 3a 20 20 20 20 20 20 20 20 20 4e 4f 54 20 44  2:         NOT D
1db0: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
1dc0: 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 23 20  LLY IMMEDIATE.# 
1dd0: 20 20 33 3a 20 20 20 20 20 20 20 20 20 4e 4f 54    3:         NOT
1de0: 20 44 45 46 45 52 52 41 42 4c 45 0a 23 20 20 20   DEFERRABLE.#   
1df0: 34 3a 20 20 20 20 20 20 20 20 20 44 45 46 45 52  4:         DEFER
1e00: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
1e10: 44 45 46 45 52 52 45 44 0a 23 20 20 20 35 3a 20  DEFERRED.#   5: 
1e20: 20 20 20 20 20 20 20 20 44 45 46 45 52 52 41 42          DEFERRAB
1e30: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
1e40: 45 44 49 41 54 45 0a 23 20 20 20 36 3a 20 20 20  EDIATE.#   6:   
1e50: 20 20 20 20 20 20 44 45 46 45 52 52 41 42 4c 45        DEFERRABLE
1e60: 0a 23 20 20 20 37 3a 20 20 20 20 20 20 20 20 20  .#   7:         
1e70: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
1e80: 65 5f 74 65 73 74 73 20 30 2e 36 2e 31 20 2d 72  e_tests 0.6.1 -r
1e90: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61  epair {.  drop_a
1ea0: 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65  ll_tables .  exe
1eb0: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
1ec0: 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41 52 59  BLE t2(x PRIMARY
1ed0: 20 4b 45 59 2c 20 79 29 20 7d 0a 20 20 65 78 65   KEY, y) }.  exe
1ee0: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
1ef0: 42 4c 45 20 74 33 28 69 2c 20 6a 2c 20 55 4e 49  BLE t3(i, j, UNI
1f00: 51 55 45 28 69 2c 20 6a 29 20 29 20 7d 0a 7d 20  QUE(i, j) ) }.} 
1f10: 7b 0a 20 20 31 31 31 34 36 20 7b 20 43 52 45 41  {.  11146 { CREA
1f20: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20  TE TABLE t1(a . 
1f30: 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32     REFERENCES t2
1f40: 28 78 29 20 4d 41 54 43 48 20 46 55 4c 4c 20 0a  (x) MATCH FULL .
1f50: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45      ON DELETE SE
1f60: 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45  T NULL ON UPDATE
1f70: 20 52 45 53 54 52 49 43 54 20 44 45 46 45 52 52   RESTRICT DEFERR
1f80: 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31  ABLE.  )} {}.  1
1f90: 31 34 31 32 20 7b 20 43 52 45 41 54 45 20 54 41  1412 { CREATE TA
1fa0: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
1fb0: 46 45 52 45 4e 43 45 53 20 74 32 28 78 29 20 0a  FERENCES t2(x) .
1fc0: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45      ON DELETE RE
1fd0: 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45  STRICT ON UPDATE
1fe0: 20 53 45 54 20 4e 55 4c 4c 20 4d 41 54 43 48 20   SET NULL MATCH 
1ff0: 46 55 4c 4c 20 0a 20 20 20 20 4e 4f 54 20 44 45  FULL .    NOT DE
2000: 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c  FERRABLE INITIAL
2010: 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29  LY IMMEDIATE.  )
2020: 7d 20 7b 7d 0a 20 20 31 32 31 33 35 20 7b 20 43  } {}.  12135 { C
2030: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2040: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2050: 20 74 32 28 78 29 20 4d 41 54 43 48 20 50 41 52   t2(x) MATCH PAR
2060: 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c  TIAL .    ON DEL
2070: 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20  ETE SET NULL ON 
2080: 55 50 44 41 54 45 20 43 41 53 43 41 44 45 20 44  UPDATE CASCADE D
2090: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
20a0: 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20  LLY IMMEDIATE.  
20b0: 29 7d 20 7b 7d 0a 20 20 31 32 34 32 37 20 7b 20  )} {}.  12427 { 
20c0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
20d0: 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45  a .    REFERENCE
20e0: 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 50 41  S t2(x) MATCH PA
20f0: 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45  RTIAL .    ON DE
2100: 4c 45 54 45 20 52 45 53 54 52 49 43 54 20 4f 4e  LETE RESTRICT ON
2110: 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46 41   UPDATE SET DEFA
2120: 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20 20 31  ULT .  )} {}.  1
2130: 32 34 34 36 20 7b 20 43 52 45 41 54 45 20 54 41  2446 { CREATE TA
2140: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2150: 46 45 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d  FERENCES t2(x) M
2160: 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a 20 20  ATCH PARTIAL .  
2170: 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45 53 54    ON DELETE REST
2180: 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45 20 52  RICT ON UPDATE R
2190: 45 53 54 52 49 43 54 20 44 45 46 45 52 52 41 42  ESTRICT DEFERRAB
21a0: 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 32 35  LE.  )} {}.  125
21b0: 32 32 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  22 { CREATE TABL
21c0: 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45  E t1(a .    REFE
21d0: 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54  RENCES t2(x) MAT
21e0: 43 48 20 50 41 52 54 49 41 4c 20 0a 20 20 20 20  CH PARTIAL .    
21f0: 4f 4e 20 44 45 4c 45 54 45 20 4e 4f 20 41 43 54  ON DELETE NO ACT
2200: 49 4f 4e 20 4f 4e 20 55 50 44 41 54 45 20 53 45  ION ON UPDATE SE
2210: 54 20 44 45 46 41 55 4c 54 20 4e 4f 54 20 44 45  T DEFAULT NOT DE
2220: 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c  FERRABLE INITIAL
2230: 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29  LY IMMEDIATE.  )
2240: 7d 20 7b 7d 0a 20 20 31 33 31 33 33 20 7b 20 43  } {}.  13133 { C
2250: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2260: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2270: 20 74 32 28 78 29 20 4d 41 54 43 48 20 53 49 4d   t2(x) MATCH SIM
2280: 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  PLE .    ON DELE
2290: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55  TE SET NULL ON U
22a0: 50 44 41 54 45 20 43 41 53 43 41 44 45 20 4e 4f  PDATE CASCADE NO
22b0: 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  T DEFERRABLE.  )
22c0: 7d 20 7b 7d 0a 20 20 31 33 32 31 36 20 7b 20 43  } {}.  13216 { C
22d0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
22e0: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
22f0: 20 74 32 28 78 29 20 4d 41 54 43 48 20 53 49 4d   t2(x) MATCH SIM
2300: 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  PLE .    ON DELE
2310: 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20 4f  TE SET DEFAULT O
2320: 4e 20 55 50 44 41 54 45 20 53 45 54 20 4e 55 4c  N UPDATE SET NUL
2330: 4c 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  L DEFERRABLE.  )
2340: 7d 20 7b 7d 0a 20 20 31 33 32 36 33 20 7b 20 43  } {}.  13263 { C
2350: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2360: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2370: 20 74 32 28 78 29 20 4d 41 54 43 48 20 53 49 4d   t2(x) MATCH SIM
2380: 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  PLE .    ON DELE
2390: 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20 20  TE SET DEFAULT  
23a0: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
23b0: 20 29 7d 20 7b 7d 0a 20 20 31 33 34 32 31 20 7b   )} {}.  13421 {
23c0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
23d0: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
23e0: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
23f0: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2400: 4c 45 54 45 20 52 45 53 54 52 49 43 54 20 4f 4e  LETE RESTRICT ON
2410: 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46 41   UPDATE SET DEFA
2420: 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52 41 42  ULT NOT DEFERRAB
2430: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45 46  LE INITIALLY DEF
2440: 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a 20 20  ERRED.  )} {}.  
2450: 31 33 34 33 32 20 7b 20 43 52 45 41 54 45 20 54  13432 { CREATE T
2460: 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52  ABLE t1(a .    R
2470: 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29 20  EFERENCES t2(x) 
2480: 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a 20 20  MATCH SIMPLE .  
2490: 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45 53 54    ON DELETE REST
24a0: 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45 20 43  RICT ON UPDATE C
24b0: 41 53 43 41 44 45 20 4e 4f 54 20 44 45 46 45 52  ASCADE NOT DEFER
24c0: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
24d0: 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b  IMMEDIATE.  )} {
24e0: 7d 0a 20 20 31 33 35 32 33 20 7b 20 43 52 45 41  }.  13523 { CREA
24f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20  TE TABLE t1(a . 
2500: 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32     REFERENCES t2
2510: 28 78 29 20 4d 41 54 43 48 20 53 49 4d 50 4c 45  (x) MATCH SIMPLE
2520: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
2530: 4e 4f 20 41 43 54 49 4f 4e 20 4f 4e 20 55 50 44  NO ACTION ON UPD
2540: 41 54 45 20 53 45 54 20 44 45 46 41 55 4c 54 20  ATE SET DEFAULT 
2550: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
2560: 20 29 7d 20 7b 7d 0a 20 20 31 34 33 33 36 20 7b   )} {}.  14336 {
2570: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2580: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2590: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
25a0: 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20 44 45 4c  TICK .    ON DEL
25b0: 45 54 45 20 43 41 53 43 41 44 45 20 4f 4e 20 55  ETE CASCADE ON U
25c0: 50 44 41 54 45 20 43 41 53 43 41 44 45 20 44 45  PDATE CASCADE DE
25d0: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
25e0: 0a 20 20 31 34 36 31 31 20 7b 20 43 52 45 41 54  .  14611 { CREAT
25f0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2600: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28    REFERENCES t2(
2610: 78 29 20 4d 41 54 43 48 20 53 54 49 43 4b 20 0a  x) MATCH STICK .
2620: 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20 53 45      ON UPDATE SE
2630: 54 20 4e 55 4c 4c 20 4e 4f 54 20 44 45 46 45 52  T NULL NOT DEFER
2640: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
2650: 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d  DEFERRED.  )} {}
2660: 0a 20 20 31 35 31 35 35 20 7b 20 43 52 45 41 54  .  15155 { CREAT
2670: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2680: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28    REFERENCES t2(
2690: 78 29 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45  x).    ON DELETE
26a0: 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44   SET NULL ON UPD
26b0: 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 44 45  ATE NO ACTION DE
26c0: 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c  FERRABLE INITIAL
26d0: 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29  LY IMMEDIATE.  )
26e0: 7d 20 7b 7d 0a 20 20 31 35 34 35 33 20 7b 20 43  } {}.  15453 { C
26f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2700: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2710: 20 74 32 28 78 29 20 4f 4e 20 44 45 4c 45 54 45   t2(x) ON DELETE
2720: 20 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44   RESTRICT ON UPD
2730: 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 4e 4f  ATE NO ACTION NO
2740: 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  T DEFERRABLE.  )
2750: 7d 20 7b 7d 0a 20 20 31 35 36 36 31 20 7b 20 43  } {}.  15661 { C
2760: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2770: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2780: 20 74 32 28 78 29 20 4e 4f 54 20 44 45 46 45 52   t2(x) NOT DEFER
2790: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
27a0: 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d  DEFERRED.  )} {}
27b0: 0a 20 20 32 31 31 31 35 20 7b 20 43 52 45 41 54  .  21115 { CREAT
27c0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
27d0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
27e0: 4d 41 54 43 48 20 46 55 4c 4c 20 0a 20 20 20 20  MATCH FULL .    
27f0: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55  ON DELETE SET NU
2800: 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54  LL ON UPDATE SET
2810: 20 4e 55 4c 4c 20 44 45 46 45 52 52 41 42 4c 45   NULL DEFERRABLE
2820: 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44   INITIALLY IMMED
2830: 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  IATE.  )} {}.  2
2840: 31 31 32 33 20 7b 20 43 52 45 41 54 45 20 54 41  1123 { CREATE TA
2850: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2860: 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43  FERENCES t2 MATC
2870: 48 20 46 55 4c 4c 20 0a 20 20 20 20 4f 4e 20 44  H FULL .    ON D
2880: 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f  ELETE SET NULL O
2890: 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46  N UPDATE SET DEF
28a0: 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52 41  AULT NOT DEFERRA
28b0: 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32 31  BLE.  )} {}.  21
28c0: 32 31 37 20 7b 20 43 52 45 41 54 45 20 54 41 42  217 { CREATE TAB
28d0: 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46  LE t1(a .    REF
28e0: 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43 48  ERENCES t2 MATCH
28f0: 20 46 55 4c 4c 20 4f 4e 20 44 45 4c 45 54 45 20   FULL ON DELETE 
2900: 53 45 54 20 44 45 46 41 55 4c 54 20 4f 4e 20 55  SET DEFAULT ON U
2910: 50 44 41 54 45 20 53 45 54 20 4e 55 4c 4c 20 0a  PDATE SET NULL .
2920: 20 20 29 7d 20 7b 7d 0a 20 20 32 31 33 36 32 20    )} {}.  21362 
2930: 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  { CREATE TABLE t
2940: 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e  1(a .    REFEREN
2950: 43 45 53 20 74 32 20 4d 41 54 43 48 20 46 55 4c  CES t2 MATCH FUL
2960: 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45  L .    ON DELETE
2970: 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44 45 46   CASCADE NOT DEF
2980: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
2990: 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d  Y IMMEDIATE.  )}
29a0: 20 7b 7d 0a 20 20 32 32 31 34 33 20 7b 20 43 52   {}.  22143 { CR
29b0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
29c0: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
29d0: 74 32 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c  t2 MATCH PARTIAL
29e0: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
29f0: 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41  SET NULL ON UPDA
2a00: 54 45 20 52 45 53 54 52 49 43 54 20 4e 4f 54 20  TE RESTRICT NOT 
2a10: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
2a20: 7b 7d 0a 20 20 32 32 31 35 36 20 7b 20 43 52 45  {}.  22156 { CRE
2a30: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2a40: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2a50: 32 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20  2 MATCH PARTIAL 
2a60: 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53  .    ON DELETE S
2a70: 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41 54  ET NULL ON UPDAT
2a80: 45 20 4e 4f 20 41 43 54 49 4f 4e 20 44 45 46 45  E NO ACTION DEFE
2a90: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
2aa0: 20 32 32 33 32 37 20 7b 20 43 52 45 41 54 45 20   22327 { CREATE 
2ab0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2ac0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2ad0: 54 43 48 20 50 41 52 54 49 41 4c 20 4f 4e 20 44  TCH PARTIAL ON D
2ae0: 45 4c 45 54 45 20 43 41 53 43 41 44 45 20 4f 4e  ELETE CASCADE ON
2af0: 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46 41   UPDATE SET DEFA
2b00: 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  ULT .  )} {}.  2
2b10: 32 36 36 33 20 7b 20 43 52 45 41 54 45 20 54 41  2663 { CREATE TA
2b20: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2b30: 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43  FERENCES t2 MATC
2b40: 48 20 50 41 52 54 49 41 4c 20 4e 4f 54 20 44 45  H PARTIAL NOT DE
2b50: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
2b60: 0a 20 20 32 33 32 33 36 20 7b 20 43 52 45 41 54  .  23236 { CREAT
2b70: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2b80: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2b90: 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a 20 20  MATCH SIMPLE .  
2ba0: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
2bb0: 44 45 46 41 55 4c 54 20 4f 4e 20 55 50 44 41 54  DEFAULT ON UPDAT
2bc0: 45 20 43 41 53 43 41 44 45 20 44 45 46 45 52 52  E CASCADE DEFERR
2bd0: 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  ABLE.  )} {}.  2
2be0: 34 31 35 35 20 7b 20 43 52 45 41 54 45 20 54 41  4155 { CREATE TA
2bf0: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2c00: 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43  FERENCES t2 MATC
2c10: 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20  H STICK .    ON 
2c20: 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20  DELETE SET NULL 
2c30: 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54  ON UPDATE NO ACT
2c40: 49 4f 4e 20 44 45 46 45 52 52 41 42 4c 45 20 49  ION DEFERRABLE I
2c50: 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41  NITIALLY IMMEDIA
2c60: 54 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32 34 35  TE.  )} {}.  245
2c70: 32 32 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  22 { CREATE TABL
2c80: 45 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45  E t1(a .    REFE
2c90: 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43 48 20  RENCES t2 MATCH 
2ca0: 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20 44 45  STICK .    ON DE
2cb0: 4c 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 4f  LETE NO ACTION O
2cc0: 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45 46  N UPDATE SET DEF
2cd0: 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52 41  AULT NOT DEFERRA
2ce0: 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d  BLE INITIALLY IM
2cf0: 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a  MEDIATE.  )} {}.
2d00: 20 20 32 34 36 32 35 20 7b 20 43 52 45 41 54 45    24625 { CREATE
2d10: 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20   TABLE t1(a .   
2d20: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d   REFERENCES t2 M
2d30: 41 54 43 48 20 53 54 49 43 4b 20 0a 20 20 20 20  ATCH STICK .    
2d40: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2d50: 46 41 55 4c 54 20 44 45 46 45 52 52 41 42 4c 45  FAULT DEFERRABLE
2d60: 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44   INITIALLY IMMED
2d70: 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  IATE.  )} {}.  2
2d80: 35 34 35 34 20 7b 20 43 52 45 41 54 45 20 54 41  5454 { CREATE TA
2d90: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2da0: 46 45 52 45 4e 43 45 53 20 74 32 20 0a 20 20 20  FERENCES t2 .   
2db0: 20 4f 4e 20 44 45 4c 45 54 45 20 52 45 53 54 52   ON DELETE RESTR
2dc0: 49 43 54 20 4f 4e 20 55 50 44 41 54 45 20 4e 4f  ICT ON UPDATE NO
2dd0: 20 41 43 54 49 4f 4e 20 44 45 46 45 52 52 41 42   ACTION DEFERRAB
2de0: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44 45 46  LE INITIALLY DEF
2df0: 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a 7d 0a  ERRED.  )} {}.}.
2e00: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
2e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
2e50: 73 74 20 63 61 73 65 73 20 65 5f 63 72 65 61 74  st cases e_creat
2e60: 65 74 61 62 6c 65 2d 31 2e 2a 20 2d 20 74 65 73  etable-1.* - tes
2e70: 74 20 73 74 61 74 65 6d 65 6e 74 73 20 72 65 6c  t statements rel
2e80: 61 74 65 64 20 74 6f 20 74 61 62 6c 65 20 61 6e  ated to table an
2e90: 64 0a 23 20 64 61 74 61 62 61 73 65 20 6e 61 6d  d.# database nam
2ea0: 65 73 2c 20 74 68 65 20 54 45 4d 50 20 61 6e 64  es, the TEMP and
2eb0: 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79 77 6f   TEMPORARY keywo
2ec0: 72 64 73 2c 20 61 6e 64 20 74 68 65 20 49 46 20  rds, and the IF 
2ed0: 4e 4f 54 20 45 58 49 53 54 53 0a 23 20 63 6c 61  NOT EXISTS.# cla
2ee0: 75 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f  use..#.drop_all_
2ef0: 74 61 62 6c 65 73 0a 66 6f 72 63 65 64 65 6c 65  tables.forcedele
2f00: 74 65 20 74 65 73 74 2e 64 62 32 20 74 65 73 74  te test.db2 test
2f10: 2e 64 62 33 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  .db3..do_execsql
2f20: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
2f30: 62 6c 65 2d 31 2e 30 20 7b 0a 20 20 41 54 54 41  ble-1.0 {.  ATTA
2f40: 43 48 20 27 74 65 73 74 2e 64 62 32 27 20 41 53  CH 'test.db2' AS
2f50: 20 61 75 78 61 3b 0a 20 20 41 54 54 41 43 48 20   auxa;.  ATTACH 
2f60: 27 74 65 73 74 2e 64 62 33 27 20 41 53 20 61 75  'test.db3' AS au
2f70: 78 62 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56 49 44  xb;.} {}..# EVID
2f80: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 37 38 39 39  ENCE-OF: R-17899
2f90: 2d 30 34 35 35 34 20 54 61 62 6c 65 20 6e 61 6d  -04554 Table nam
2fa0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
2fb0: 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61 72 65  th "sqlite_" are
2fc0: 0a 23 20 72 65 73 65 72 76 65 64 20 66 6f 72 20  .# reserved for 
2fd0: 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20 49 74  internal use. It
2fe0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74 6f 20   is an error to 
2ff0: 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65 61 74  attempt to creat
3000: 65 20 61 20 74 61 62 6c 65 0a 23 20 77 69 74 68  e a table.# with
3010: 20 61 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61   a name that sta
3020: 72 74 73 20 77 69 74 68 20 22 73 71 6c 69 74 65  rts with "sqlite
3030: 5f 22 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74  _"..#.do_createt
3040: 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 31 2e 31  able_tests 1.1.1
3050: 20 2d 65 72 72 6f 72 20 7b 0a 20 20 6f 62 6a 65   -error {.  obje
3060: 63 74 20 6e 61 6d 65 20 72 65 73 65 72 76 65 64  ct name reserved
3070: 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20 75 73   for internal us
3080: 65 3a 20 25 73 0a 7d 20 7b 0a 20 20 31 20 20 20  e: %s.} {.  1   
3090: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73   "CREATE TABLE s
30a0: 71 6c 69 74 65 5f 61 62 63 28 61 2c 20 62 2c 20  qlite_abc(a, b, 
30b0: 63 29 22 20 20 20 20 20 20 20 20 73 71 6c 69 74  c)"        sqlit
30c0: 65 5f 61 62 63 0a 20 20 32 20 20 20 20 22 43 52  e_abc.  2    "CR
30d0: 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e  EATE TABLE temp.
30e0: 73 71 6c 69 74 65 5f 68 65 6c 6c 6f 77 6f 72 6c  sqlite_helloworl
30f0: 64 28 78 29 22 20 20 73 71 6c 69 74 65 5f 68 65  d(x)"  sqlite_he
3100: 6c 6c 6f 77 6f 72 6c 64 0a 20 20 33 20 20 20 20  lloworld.  3    
3110: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  {CREATE TABLE au
3120: 78 61 2e 22 73 71 6c 69 74 65 5f 5f 22 28 78 2c  xa."sqlite__"(x,
3130: 20 79 29 7d 20 20 20 20 20 20 73 71 6c 69 74 65   y)}      sqlite
3140: 5f 5f 0a 20 20 34 20 20 20 20 7b 43 52 45 41 54  __.  4    {CREAT
3150: 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22 73 71  E TABLE auxb."sq
3160: 6c 69 74 65 5f 22 28 7a 29 7d 20 20 20 20 20 20  lite_"(z)}      
3170: 20 20 20 20 73 71 6c 69 74 65 5f 0a 20 20 35 20      sqlite_.  5 
3180: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
3190: 20 22 53 51 4c 49 54 45 5f 54 42 4c 22 28 7a 29   "SQLITE_TBL"(z)
31a0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  }            SQL
31b0: 49 54 45 5f 54 42 4c 0a 7d 0a 64 6f 5f 63 72 65  ITE_TBL.}.do_cre
31c0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
31d0: 2e 31 2e 32 20 7b 0a 20 20 31 20 20 20 20 22 43  .1.2 {.  1    "C
31e0: 52 45 41 54 45 20 54 41 42 4c 45 20 73 71 6c 69  REATE TABLE sqli
31f0: 74 5f 61 62 63 28 61 2c 20 62 2c 20 63 29 22 20  t_abc(a, b, c)" 
3200: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
3210: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3220: 74 65 6d 70 2e 73 71 6c 69 74 65 68 65 6c 6c 6f  temp.sqlitehello
3230: 77 6f 72 6c 64 28 78 29 22 20 20 20 7b 7d 0a 20  world(x)"   {}. 
3240: 20 33 20 20 20 20 7b 43 52 45 41 54 45 20 54 41   3    {CREATE TA
3250: 42 4c 45 20 61 75 78 61 2e 22 73 71 6c 69 74 65  BLE auxa."sqlite
3260: 22 28 78 2c 20 79 29 7d 20 20 20 20 20 20 20 20  "(x, y)}        
3270: 7b 7d 0a 20 20 34 20 20 20 20 7b 43 52 45 41 54  {}.  4    {CREAT
3280: 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22 73 71  E TABLE auxb."sq
3290: 6c 69 74 65 2d 22 28 7a 29 7d 20 20 20 20 20 20  lite-"(z)}      
32a0: 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20 7b 43      {}.  5    {C
32b0: 52 45 41 54 45 20 54 41 42 4c 45 20 22 53 51 4c  REATE TABLE "SQL
32c0: 49 54 45 2d 54 42 4c 22 28 7a 29 7d 20 20 20 20  ITE-TBL"(z)}    
32d0: 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 0a 23          {}.}...#
32e0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
32f0: 31 30 31 39 35 2d 33 31 30 32 33 20 49 66 20 61  10195-31023 If a
3300: 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d 65 3e   <database-name>
3310: 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 69   is specified, i
3320: 74 0a 23 20 6d 75 73 74 20 62 65 20 65 69 74 68  t.# must be eith
3330: 65 72 20 22 6d 61 69 6e 22 2c 20 22 74 65 6d 70  er "main", "temp
3340: 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65 20 6f  ", or the name o
3350: 66 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  f an attached da
3360: 74 61 62 61 73 65 2e 0a 23 0a 23 20 45 56 49 44  tabase..#.# EVID
3370: 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 38 32 32  ENCE-OF: R-39822
3380: 2d 30 37 38 32 32 20 49 6e 20 74 68 69 73 20 63  -07822 In this c
3390: 61 73 65 20 74 68 65 20 6e 65 77 20 74 61 62 6c  ase the new tabl
33a0: 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 0a  e is created in.
33b0: 23 20 74 68 65 20 6e 61 6d 65 64 20 64 61 74 61  # the named data
33c0: 62 61 73 65 2e 0a 23 0a 23 20 20 20 54 65 73 74  base..#.#   Test
33d0: 20 63 61 73 65 73 20 31 2e 32 2e 2a 20 74 65 73   cases 1.2.* tes
33e0: 74 20 74 68 65 20 66 69 72 73 74 20 6f 66 20 74  t the first of t
33f0: 68 65 20 74 77 6f 20 72 65 71 75 69 72 65 6d 65  he two requireme
3400: 6e 74 73 20 61 62 6f 76 65 2e 20 54 68 65 0a 23  nts above. The.#
3410: 20 20 20 73 65 63 6f 6e 64 20 69 73 20 76 65 72     second is ver
3420: 69 66 69 65 64 20 62 79 20 63 61 73 65 73 20 31  ified by cases 1
3430: 2e 33 2e 2a 2e 0a 23 0a 64 6f 5f 63 72 65 61 74  .3.*..#.do_creat
3440: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 32  etable_tests 1.2
3450: 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20 75 6e  .1 -error {.  un
3460: 6b 6e 6f 77 6e 20 64 61 74 61 62 61 73 65 20 25  known database %
3470: 73 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52  s.} {.  1    "CR
3480: 45 41 54 45 20 54 41 42 4c 45 20 67 65 6f 72 67  EATE TABLE georg
3490: 65 2e 74 31 28 61 2c 20 62 29 22 20 20 20 20 20  e.t1(a, b)"     
34a0: 20 20 20 20 20 20 20 67 65 6f 72 67 65 0a 20 20         george.  
34b0: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
34c0: 4c 45 20 5f 2e 74 31 28 61 2c 20 62 29 22 20 20  LE _.t1(a, b)"  
34d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
34e0: 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
34f0: 65 5f 74 65 73 74 73 20 31 2e 32 2e 32 20 7b 0a  e_tests 1.2.2 {.
3500: 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54    1    "CREATE T
3510: 41 42 4c 45 20 6d 61 69 6e 2e 61 62 63 28 61 2c  ABLE main.abc(a,
3520: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
3530: 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41   {}.  2    "CREA
3540: 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e 68 65  TE TABLE temp.he
3550: 6c 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20 20 20  lloworld(x)"    
3560: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 7b       {}.  3    {
3570: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
3580: 61 2e 22 74 20 31 22 28 78 2c 20 79 29 7d 20 20  a."t 1"(x, y)}  
3590: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20           {}.  4 
35a0: 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45     {CREATE TABLE
35b0: 20 61 75 78 62 2e 78 79 7a 28 7a 29 7d 20 20 20   auxb.xyz(z)}   
35c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
35d0: 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  }.drop_all_table
35e0: 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  s.do_createtable
35f0: 5f 74 65 73 74 73 20 31 2e 33 20 2d 74 63 6c 71  _tests 1.3 -tclq
3600: 75 65 72 79 20 7b 0a 20 20 75 6e 73 65 74 20 2d  uery {.  unset -
3610: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58 0a 20 20 61  nocomplain X.  a
3620: 72 72 61 79 20 73 65 74 20 58 20 5b 74 61 62 6c  rray set X [tabl
3630: 65 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74 20 24  e_list].  list $
3640: 58 28 6d 61 69 6e 29 20 24 58 28 74 65 6d 70 29  X(main) $X(temp)
3650: 20 24 58 28 61 75 78 61 29 20 24 58 28 61 75 78   $X(auxa) $X(aux
3660: 62 29 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  b).} {.  1    "C
3670: 52 45 41 54 45 20 54 41 42 4c 45 20 6d 61 69 6e  REATE TABLE main
3680: 2e 61 62 63 28 61 2c 20 62 2c 20 63 29 22 20 20  .abc(a, b, c)"  
3690: 7b 61 62 63 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20  {abc {} {} {}}. 
36a0: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
36b0: 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62  BLE main.t1(a, b
36c0: 2c 20 63 29 22 20 20 20 7b 7b 61 62 63 20 74 31  , c)"   {{abc t1
36d0: 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 33 20  } {} {} {}}.  3 
36e0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
36f0: 20 74 65 6d 70 2e 74 6d 70 28 61 2c 20 62 2c 20   temp.tmp(a, b, 
3700: 63 29 22 20 20 7b 7b 61 62 63 20 74 31 7d 20 74  c)"  {{abc t1} t
3710: 6d 70 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20  mp {} {}}.  4   
3720: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   "CREATE TABLE a
3730: 75 78 62 2e 74 62 6c 28 78 2c 20 79 29 22 20 20  uxb.tbl(x, y)"  
3740: 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d 70     {{abc t1} tmp
3750: 20 7b 7d 20 74 62 6c 7d 0a 20 20 35 20 20 20 20   {} tbl}.  5    
3760: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75  "CREATE TABLE au
3770: 78 62 2e 74 31 28 6b 2c 20 76 29 22 20 20 20 20  xb.t1(k, v)"    
3780: 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d 70 20    {{abc t1} tmp 
3790: 7b 7d 20 7b 74 31 20 74 62 6c 7d 7d 0a 20 20 36  {} {t1 tbl}}.  6
37a0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
37b0: 45 20 61 75 78 61 2e 6e 65 78 74 28 63 2c 20 64  E auxa.next(c, d
37c0: 29 22 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20  )"    {{abc t1} 
37d0: 74 6d 70 20 6e 65 78 74 20 7b 74 31 20 74 62 6c  tmp next {t1 tbl
37e0: 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  }}.}..# EVIDENCE
37f0: 2d 4f 46 3a 20 52 2d 31 38 38 39 35 2d 32 37 33  -OF: R-18895-273
3800: 36 35 20 49 66 20 74 68 65 20 22 54 45 4d 50 22  65 If the "TEMP"
3810: 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59 22 20   or "TEMPORARY" 
3820: 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73 0a 23  keyword occurs.#
3830: 20 62 65 74 77 65 65 6e 20 74 68 65 20 22 43 52   between the "CR
3840: 45 41 54 45 22 20 61 6e 64 20 22 54 41 42 4c 45  EATE" and "TABLE
3850: 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 74  " then the new t
3860: 61 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20  able is created 
3870: 69 6e 20 74 68 65 0a 23 20 74 65 6d 70 20 64 61  in the.# temp da
3880: 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61  tabase..#.drop_a
3890: 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65  ll_tables.do_cre
38a0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
38b0: 2e 34 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20  .4 -tclquery {. 
38c0: 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
38d0: 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73 65 74  in X.  array set
38e0: 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a   X [table_list].
38f0: 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20    list $X(main) 
3900: 24 58 28 74 65 6d 70 29 20 24 58 28 61 75 78 61  $X(temp) $X(auxa
3910: 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20  ) $X(auxb).} {. 
3920: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 45   1    "CREATE TE
3930: 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  MP TABLE t1(a, b
3940: 29 22 20 20 20 20 20 20 7b 7b 7d 20 74 31 20 7b  )"      {{} t1 {
3950: 7d 20 7b 7d 7d 0a 20 20 32 20 20 20 20 22 43 52  } {}}.  2    "CR
3960: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
3970: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 22 20 7b  ABLE t2(a, b)" {
3980: 7b 7d 20 7b 74 31 20 74 32 7d 20 7b 7d 20 7b 7d  {} {t1 t2} {} {}
3990: 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }.}..# EVIDENCE-
39a0: 4f 46 3a 20 52 2d 34 39 34 33 39 2d 34 37 35 36  OF: R-49439-4756
39b0: 31 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  1 It is an error
39c0: 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f 74 68   to specify both
39d0: 20 61 0a 23 20 3c 64 61 74 61 62 61 73 65 2d 6e   a.# <database-n
39e0: 61 6d 65 3e 20 61 6e 64 20 74 68 65 20 54 45 4d  ame> and the TEM
39f0: 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59 20 6b  P or TEMPORARY k
3a00: 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73 20 74  eyword, unless t
3a10: 68 65 0a 23 20 3c 64 61 74 61 62 61 73 65 2d 6e  he.# <database-n
3a20: 61 6d 65 3e 20 69 73 20 22 74 65 6d 70 22 2e 0a  ame> is "temp"..
3a30: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
3a40: 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  s.do_createtable
3a50: 5f 74 65 73 74 73 20 31 2e 35 2e 31 20 2d 65 72  _tests 1.5.1 -er
3a60: 72 6f 72 20 7b 0a 20 20 74 65 6d 70 6f 72 61 72  ror {.  temporar
3a70: 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d 75 73  y table name mus
3a80: 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69 65 64  t be unqualified
3a90: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
3aa0: 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 6d  ATE TEMP TABLE m
3ab0: 61 69 6e 2e 74 31 28 61 2c 20 62 29 22 20 20 20  ain.t1(a, b)"   
3ac0: 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22       {}.  2    "
3ad0: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3ae0: 20 54 41 42 4c 45 20 61 75 78 61 2e 74 32 28 61   TABLE auxa.t2(a
3af0: 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33 20 20  , b)"   {}.  3  
3b00: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54    "CREATE TEMP T
3b10: 41 42 4c 45 20 61 75 78 62 2e 74 33 28 61 2c 20  ABLE auxb.t3(a, 
3b20: 62 29 22 20 20 20 20 20 20 20 20 7b 7d 0a 20 20  b)"        {}.  
3b30: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d  4    "CREATE TEM
3b40: 50 4f 52 41 52 59 20 54 41 42 4c 45 20 6d 61 69  PORARY TABLE mai
3b50: 6e 2e 78 78 78 28 78 29 22 20 20 20 20 20 7b 7d  n.xxx(x)"     {}
3b60: 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .}.drop_all_tabl
3b70: 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  es.do_createtabl
3b80: 65 5f 74 65 73 74 73 20 31 2e 35 2e 32 20 2d 74  e_tests 1.5.2 -t
3b90: 63 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e 73 65  clquery {.  unse
3ba0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58 0a  t -nocomplain X.
3bb0: 20 20 61 72 72 61 79 20 73 65 74 20 58 20 5b 74    array set X [t
3bc0: 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c 69 73  able_list].  lis
3bd0: 74 20 24 58 28 6d 61 69 6e 29 20 24 58 28 74 65  t $X(main) $X(te
3be0: 6d 70 29 20 24 58 28 61 75 78 61 29 20 24 58 28  mp) $X(auxa) $X(
3bf0: 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20 20 20  auxb).} {.  1   
3c00: 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41   "CREATE TEMP TA
3c10: 42 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c 20 62  BLE temp.t1(a, b
3c20: 29 22 20 20 20 20 20 20 20 20 7b 7b 7d 20 74 31  )"        {{} t1
3c30: 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20 20 22   {} {}}.  2    "
3c40: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3c50: 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 32 28 61   TABLE temp.t2(a
3c60: 2c 20 62 29 22 20 20 20 7b 7b 7d 20 7b 74 31 20  , b)"   {{} {t1 
3c70: 74 32 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 33 20 20  t2} {} {}}.  3  
3c80: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20 54    "CREATE TEMP T
3c90: 41 42 4c 45 20 54 45 4d 50 2e 74 33 28 61 2c 20  ABLE TEMP.t3(a, 
3ca0: 62 29 22 20 20 20 20 20 20 20 20 7b 7b 7d 20 7b  b)"        {{} {
3cb0: 74 31 20 74 32 20 74 33 7d 20 7b 7d 20 7b 7d 7d  t1 t2 t3} {} {}}
3cc0: 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20  .  4    "CREATE 
3cd0: 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20  TEMPORARY TABLE 
3ce0: 54 45 4d 50 2e 78 78 78 28 78 29 22 20 20 20 20  TEMP.xxx(x)"    
3cf0: 20 7b 7b 7d 20 7b 74 31 20 74 32 20 74 33 20 78   {{} {t1 t2 t3 x
3d00: 78 78 7d 20 7b 7d 20 7b 7d 7d 0a 7d 0a 0a 23 20  xx} {} {}}.}..# 
3d10: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
3d20: 30 39 31 37 2d 30 39 33 39 33 20 49 66 20 6e 6f  0917-09393 If no
3d30: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 69   database name i
3d40: 73 20 73 70 65 63 69 66 69 65 64 20 61 6e 64 20  s specified and 
3d50: 74 68 65 0a 23 20 54 45 4d 50 20 6b 65 79 77 6f  the.# TEMP keywo
3d60: 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73 65 6e  rd is not presen
3d70: 74 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  t then the table
3d80: 20 69 73 20 63 72 65 61 74 65 64 20 69 6e 20 74   is created in t
3d90: 68 65 20 6d 61 69 6e 0a 23 20 64 61 74 61 62 61  he main.# databa
3da0: 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  se..#.drop_all_t
3db0: 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74  ables.do_createt
3dc0: 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 36 20 2d  able_tests 1.6 -
3dd0: 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e 73  tclquery {.  uns
3de0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58  et -nocomplain X
3df0: 0a 20 20 61 72 72 61 79 20 73 65 74 20 58 20 5b  .  array set X [
3e00: 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c 69  table_list].  li
3e10: 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58 28 74  st $X(main) $X(t
3e20: 65 6d 70 29 20 24 58 28 61 75 78 61 29 20 24 58  emp) $X(auxa) $X
3e30: 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20 20  (auxb).} {.  1  
3e40: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3e50: 74 31 28 61 2c 20 62 29 22 20 20 20 7b 74 31 20  t1(a, b)"   {t1 
3e60: 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20  {} {} {}}.  2   
3e70: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
3e80: 32 28 61 2c 20 62 29 22 20 20 20 7b 7b 74 31 20  2(a, b)"   {{t1 
3e90: 74 32 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20  t2} {} {} {}}.  
3ea0: 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  3    "CREATE TAB
3eb0: 4c 45 20 74 33 28 61 2c 20 62 29 22 20 20 20 7b  LE t3(a, b)"   {
3ec0: 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d 20 7b 7d  {t1 t2 t3} {} {}
3ed0: 20 7b 7d 7d 0a 20 20 34 20 20 20 20 22 43 52 45   {}}.  4    "CRE
3ee0: 41 54 45 20 54 41 42 4c 45 20 78 78 78 28 78 29  ATE TABLE xxx(x)
3ef0: 22 20 20 20 20 20 7b 7b 74 31 20 74 32 20 74 33  "     {{t1 t2 t3
3f00: 20 78 78 78 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a   xxx} {} {} {}}.
3f10: 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  }..drop_all_tabl
3f20: 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  es.do_execsql_te
3f30: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
3f40: 2d 31 2e 37 2e 30 20 7b 0a 20 20 43 52 45 41 54  -1.7.0 {.  CREAT
3f50: 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29  E TABLE t1(x, y)
3f60: 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58  ;.  CREATE INDEX
3f70: 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a 20 20   i1 ON t1(x);.  
3f80: 43 52 45 41 54 45 20 56 49 45 57 20 20 76 31 20  CREATE VIEW  v1 
3f90: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
3fa0: 20 74 31 3b 0a 0a 20 20 43 52 45 41 54 45 20 54   t1;..  CREATE T
3fb0: 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31 28 78  ABLE auxa.tbl1(x
3fc0: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
3fd0: 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31 20 4f  NDEX auxa.idx1 O
3fe0: 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43 52 45  N tbl1(x);.  CRE
3ff0: 41 54 45 20 56 49 45 57 20 61 75 78 61 2e 76 69  ATE VIEW auxa.vi
4000: 65 77 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20  ew1 AS SELECT * 
4010: 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b 7d 0a  FROM tbl1;.} {}.
4020: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
4030: 52 2d 30 31 32 33 32 2d 35 34 38 33 38 20 49 74  R-01232-54838 It
4040: 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e 20 65   is usually an e
4050: 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70 74 20  rror to attempt 
4060: 74 6f 20 63 72 65 61 74 65 0a 23 20 61 20 6e 65  to create.# a ne
4070: 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64 61 74  w table in a dat
4080: 61 62 61 73 65 20 74 68 61 74 20 61 6c 72 65 61  abase that alrea
4090: 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20 74 61  dy contains a ta
40a0: 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20 76 69  ble, index or vi
40b0: 65 77 0a 23 20 6f 66 20 74 68 65 20 73 61 6d 65  ew.# of the same
40c0: 20 6e 61 6d 65 2e 0a 23 0a 23 20 20 20 54 65 73   name..#.#   Tes
40d0: 74 20 63 61 73 65 73 20 31 2e 37 2e 31 2e 2a 20  t cases 1.7.1.* 
40e0: 76 65 72 69 66 79 20 74 68 61 74 20 63 72 65 61  verify that crea
40f0: 74 69 6e 67 20 61 20 74 61 62 6c 65 20 69 6e 20  ting a table in 
4100: 61 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  a database with 
4110: 61 0a 23 20 20 20 74 61 62 6c 65 2f 69 6e 64 65  a.#   table/inde
4120: 78 2f 76 69 65 77 20 6f 66 20 74 68 65 20 73 61  x/view of the sa
4130: 6d 65 20 6e 61 6d 65 20 64 6f 65 73 20 66 61 69  me name does fai
4140: 6c 2e 20 31 2e 37 2e 32 2e 2a 20 74 65 73 74 73  l. 1.7.2.* tests
4150: 20 74 68 61 74 20 63 72 65 61 74 69 6e 67 0a 23   that creating.#
4160: 20 20 20 61 20 74 61 62 6c 65 20 77 69 74 68 20     a table with 
4170: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 73  the same name as
4180: 20 61 20 74 61 62 6c 65 2f 69 6e 64 65 78 2f 76   a table/index/v
4190: 69 65 77 20 69 6e 20 61 20 64 69 66 66 65 72 65  iew in a differe
41a0: 6e 74 20 64 61 74 61 62 61 73 65 0a 23 20 20 20  nt database.#   
41b0: 69 73 20 4f 6b 2e 0a 23 0a 64 6f 5f 63 72 65 61  is Ok..#.do_crea
41c0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e  tetable_tests 1.
41d0: 37 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25 73 20  7.1 -error { %s 
41e0: 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41  } {.  1    "CREA
41f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20 62  TE TABLE t1(a, b
4200: 29 22 20 20 20 7b 7b 74 61 62 6c 65 20 74 31 20  )"   {{table t1 
4210: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 7d 7d  already exists}}
4220: 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20  .  2    "CREATE 
4230: 54 41 42 4c 45 20 69 31 28 61 2c 20 62 29 22 20  TABLE i1(a, b)" 
4240: 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61 6c 72    {{there is alr
4250: 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20 6e 61  eady an index na
4260: 6d 65 64 20 69 31 7d 7d 0a 20 20 33 20 20 20 20  med i1}}.  3    
4270: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 76 31  "CREATE TABLE v1
4280: 28 61 2c 20 62 29 22 20 20 20 7b 7b 74 61 62 6c  (a, b)"   {{tabl
4290: 65 20 76 31 20 61 6c 72 65 61 64 79 20 65 78 69  e v1 already exi
42a0: 73 74 73 7d 7d 0a 20 20 34 20 20 20 20 22 43 52  sts}}.  4    "CR
42b0: 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e  EATE TABLE auxa.
42c0: 74 62 6c 31 28 61 2c 20 62 29 22 20 20 20 7b 7b  tbl1(a, b)"   {{
42d0: 74 61 62 6c 65 20 74 62 6c 31 20 61 6c 72 65 61  table tbl1 alrea
42e0: 64 79 20 65 78 69 73 74 73 7d 7d 0a 20 20 35 20  dy exists}}.  5 
42f0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
4300: 20 61 75 78 61 2e 69 64 78 31 28 61 2c 20 62 29   auxa.idx1(a, b)
4310: 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61  "   {{there is a
4320: 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20  lready an index 
4330: 6e 61 6d 65 64 20 69 64 78 31 7d 7d 0a 20 20 36  named idx1}}.  6
4340: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4350: 45 20 61 75 78 61 2e 76 69 65 77 31 28 61 2c 20  E auxa.view1(a, 
4360: 62 29 22 20 20 7b 7b 74 61 62 6c 65 20 76 69 65  b)"  {{table vie
4370: 77 31 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  w1 already exist
4380: 73 7d 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74  s}}.}.do_createt
4390: 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 37 2e 32  able_tests 1.7.2
43a0: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
43b0: 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74 31 28  E TABLE auxa.t1(
43c0: 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 32 20  a, b)"   {}.  2 
43d0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
43e0: 20 61 75 78 61 2e 69 31 28 61 2c 20 62 29 22 20   auxa.i1(a, b)" 
43f0: 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45    {}.  3    "CRE
4400: 41 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 76  ATE TABLE auxa.v
4410: 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20  1(a, b)"   {}.  
4420: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  4    "CREATE TAB
4430: 4c 45 20 74 62 6c 31 28 61 2c 20 62 29 22 20 20  LE tbl1(a, b)"  
4440: 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20 22 43      {}.  5    "C
4450: 52 45 41 54 45 20 54 41 42 4c 45 20 69 64 78 31  REATE TABLE idx1
4460: 28 61 2c 20 62 29 22 20 20 20 20 20 20 7b 7d 0a  (a, b)"      {}.
4470: 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54    6    "CREATE T
4480: 41 42 4c 45 20 76 69 65 77 31 28 61 2c 20 62 29  ABLE view1(a, b)
4490: 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56  "     {}.}..# EV
44a0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 33 39  IDENCE-OF: R-339
44b0: 31 37 2d 32 34 30 38 36 20 48 6f 77 65 76 65 72  17-24086 However
44c0: 2c 20 69 66 20 74 68 65 20 22 49 46 20 4e 4f 54  , if the "IF NOT
44d0: 20 45 58 49 53 54 53 22 20 63 6c 61 75 73 65 20   EXISTS" clause 
44e0: 69 73 0a 23 20 73 70 65 63 69 66 69 65 64 20 61  is.# specified a
44f0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 43 52  s part of the CR
4500: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
4510: 6d 65 6e 74 20 61 6e 64 20 61 20 74 61 62 6c 65  ment and a table
4520: 20 6f 72 20 76 69 65 77 20 6f 66 0a 23 20 74 68   or view of.# th
4530: 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c 72 65  e same name alre
4540: 61 64 79 20 65 78 69 73 74 73 2c 20 74 68 65 20  ady exists, the 
4550: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6d  CREATE TABLE com
4560: 6d 61 6e 64 20 73 69 6d 70 6c 79 20 68 61 73 20  mand simply has 
4570: 6e 6f 0a 23 20 65 66 66 65 63 74 20 28 61 6e 64  no.# effect (and
4580: 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73 61 67   no error messag
4590: 65 20 69 73 20 72 65 74 75 72 6e 65 64 29 2e 0a  e is returned)..
45a0: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
45b0: 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  s.do_execsql_tes
45c0: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
45d0: 31 2e 38 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  1.8.0 {.  CREATE
45e0: 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29 3b   TABLE t1(x, y);
45f0: 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  .  CREATE INDEX 
4600: 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a 20 20 43  i1 ON t1(x);.  C
4610: 52 45 41 54 45 20 56 49 45 57 20 20 76 31 20 41  REATE VIEW  v1 A
4620: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
4630: 74 31 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  t1;.  CREATE TAB
4640: 4c 45 20 61 75 78 61 2e 74 62 6c 31 28 78 2c 20  LE auxa.tbl1(x, 
4650: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  y);.  CREATE IND
4660: 45 58 20 61 75 78 61 2e 69 64 78 31 20 4f 4e 20  EX auxa.idx1 ON 
4670: 74 62 6c 31 28 78 29 3b 0a 20 20 43 52 45 41 54  tbl1(x);.  CREAT
4680: 45 20 56 49 45 57 20 61 75 78 61 2e 76 69 65 77  E VIEW auxa.view
4690: 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  1 AS SELECT * FR
46a0: 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b 7d 0a 64 6f  OM tbl1;.} {}.do
46b0: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
46c0: 74 73 20 31 2e 38 20 7b 0a 20 20 31 20 20 20 20  ts 1.8 {.  1    
46d0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 49 46  "CREATE TABLE IF
46e0: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31 28 61   NOT EXISTS t1(a
46f0: 2c 20 62 29 22 20 20 20 20 20 20 20 20 20 20 7b  , b)"          {
4700: 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45  }.  2    "CREATE
4710: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
4720: 49 53 54 53 20 61 75 78 61 2e 74 62 6c 31 28 61  ISTS auxa.tbl1(a
4730: 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33 20 20  , b)"   {}.  3  
4740: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4750: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 76 31  IF NOT EXISTS v1
4760: 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 20  (a, b)"         
4770: 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41   {}.  4    "CREA
4780: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
4790: 45 58 49 53 54 53 20 61 75 78 61 2e 76 69 65 77  EXISTS auxa.view
47a0: 31 28 61 2c 20 62 29 22 20 20 7b 7d 0a 7d 0a 0a  1(a, b)"  {}.}..
47b0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
47c0: 2d 31 36 34 36 35 2d 34 30 30 37 38 20 41 6e 20  -16465-40078 An 
47d0: 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c 20 72  error is still r
47e0: 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 74  eturned if the t
47f0: 61 62 6c 65 0a 23 20 63 61 6e 6e 6f 74 20 62 65  able.# cannot be
4800: 20 63 72 65 61 74 65 64 20 62 65 63 61 75 73 65   created because
4810: 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20   of an existing 
4820: 69 6e 64 65 78 2c 20 65 76 65 6e 20 69 66 20 74  index, even if t
4830: 68 65 20 22 49 46 20 4e 4f 54 0a 23 20 45 58 49  he "IF NOT.# EXI
4840: 53 54 53 22 20 63 6c 61 75 73 65 20 69 73 20 73  STS" clause is s
4850: 70 65 63 69 66 69 65 64 2e 0a 23 0a 64 6f 5f 63  pecified..#.do_c
4860: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
4870: 20 31 2e 39 20 2d 65 72 72 6f 72 20 7b 20 25 73   1.9 -error { %s
4880: 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45   } {.  1    "CRE
4890: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
48a0: 20 45 58 49 53 54 53 20 69 31 28 61 2c 20 62 29   EXISTS i1(a, b)
48b0: 22 20 20 20 0a 20 20 20 20 20 20 20 7b 7b 74 68  "   .       {{th
48c0: 65 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61  ere is already a
48d0: 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 69 31  n index named i1
48e0: 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54  }}.  2    "CREAT
48f0: 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45  E TABLE IF NOT E
4900: 58 49 53 54 53 20 61 75 78 61 2e 69 64 78 31 28  XISTS auxa.idx1(
4910: 61 2c 20 62 29 22 20 20 20 0a 20 20 20 20 20 20  a, b)"   .      
4920: 20 7b 7b 74 68 65 72 65 20 69 73 20 61 6c 72 65   {{there is alre
4930: 61 64 79 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d  ady an index nam
4940: 65 64 20 69 64 78 31 7d 7d 0a 7d 0a 0a 23 20 45  ed idx1}}.}..# E
4950: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 35  VIDENCE-OF: R-05
4960: 35 31 33 2d 33 33 38 31 39 20 49 74 20 69 73 20  513-33819 It is 
4970: 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  not an error to 
4980: 63 72 65 61 74 65 20 61 20 74 61 62 6c 65 20 74  create a table t
4990: 68 61 74 0a 23 20 68 61 73 20 74 68 65 20 73 61  hat.# has the sa
49a0: 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20 65 78  me name as an ex
49b0: 69 73 74 69 6e 67 20 74 72 69 67 67 65 72 2e 0a  isting trigger..
49c0: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
49d0: 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  s.do_execsql_tes
49e0: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
49f0: 31 2e 31 30 2e 30 20 7b 0a 20 20 43 52 45 41 54  1.10.0 {.  CREAT
4a00: 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29  E TABLE t1(x, y)
4a10: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
4a20: 20 61 75 78 62 2e 74 32 28 78 2c 20 79 29 3b 0a   auxb.t2(x, y);.
4a30: 0a 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45  .  CREATE TRIGGE
4a40: 52 20 74 72 31 20 41 46 54 45 52 20 49 4e 53 45  R tr1 AFTER INSE
4a50: 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e 0a 20  RT ON t1 BEGIN. 
4a60: 20 20 20 53 45 4c 45 43 54 20 31 3b 0a 20 20 45     SELECT 1;.  E
4a70: 4e 44 3b 0a 20 20 43 52 45 41 54 45 20 54 52 49  ND;.  CREATE TRI
4a80: 47 47 45 52 20 61 75 78 62 2e 74 72 32 20 41 46  GGER auxb.tr2 AF
4a90: 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20 74 32  TER INSERT ON t2
4aa0: 20 42 45 47 49 4e 0a 20 20 20 20 53 45 4c 45 43   BEGIN.    SELEC
4ab0: 54 20 31 3b 0a 20 20 45 4e 44 3b 0a 7d 20 7b 7d  T 1;.  END;.} {}
4ac0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
4ad0: 74 65 73 74 73 20 31 2e 31 30 20 7b 0a 20 20 31  tests 1.10 {.  1
4ae0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4af0: 45 20 74 72 31 28 61 2c 20 62 29 22 20 20 20 20  E tr1(a, b)"    
4b00: 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20        {}.  2    
4b10: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 72  "CREATE TABLE tr
4b20: 32 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20  2(a, b)"        
4b30: 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52 45    {}.  3    "CRE
4b40: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 74  ATE TABLE auxb.t
4b50: 72 31 28 61 2c 20 62 29 22 20 20 20 20 20 7b 7d  r1(a, b)"     {}
4b60: 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20  .  4    "CREATE 
4b70: 54 41 42 4c 45 20 61 75 78 62 2e 74 72 32 28 61  TABLE auxb.tr2(a
4b80: 2c 20 62 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a  , b)"     {}.}..
4b90: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
4ba0: 2d 32 32 32 38 33 2d 31 34 31 37 39 20 54 61 62  -22283-14179 Tab
4bb0: 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65 64 20  les are removed 
4bc0: 75 73 69 6e 67 20 74 68 65 20 44 52 4f 50 20 54  using the DROP T
4bd0: 41 42 4c 45 0a 23 20 73 74 61 74 65 6d 65 6e 74  ABLE.# statement
4be0: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
4bf0: 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  les.do_execsql_t
4c00: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
4c10: 65 2d 31 2e 31 31 2e 30 20 7b 0a 20 20 43 52 45  e-1.11.0 {.  CRE
4c20: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ATE TABLE t1(a, 
4c30: 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  b);.  CREATE TAB
4c40: 4c 45 20 74 32 28 61 2c 20 62 29 3b 0a 20 20 43  LE t2(a, b);.  C
4c50: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
4c60: 2e 74 33 28 61 2c 20 62 29 3b 0a 20 20 43 52 45  .t3(a, b);.  CRE
4c70: 41 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74  ATE TABLE auxa.t
4c80: 34 28 61 2c 20 62 29 3b 0a 7d 20 7b 7d 0a 0a 64  4(a, b);.} {}..d
4c90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
4ca0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31  _createtable-1.1
4cb0: 31 2e 31 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  1.1.1 {.  SELECT
4cc0: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 53 45   * FROM t1;.  SE
4cd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 3b 0a  LECT * FROM t2;.
4ce0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
4cf0: 74 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  t3;.  SELECT * F
4d00: 52 4f 4d 20 74 34 3b 0a 7d 20 7b 7d 0a 64 6f 5f  ROM t4;.} {}.do_
4d10: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 65 5f  execsql_test  e_
4d20: 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31  createtable-1.11
4d30: 2e 31 2e 32 20 7b 20 44 52 4f 50 20 54 41 42 4c  .1.2 { DROP TABL
4d40: 45 20 74 31 20 7d 20 7b 7d 0a 64 6f 5f 63 61 74  E t1 } {}.do_cat
4d50: 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  chsql_test e_cre
4d60: 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 31 2e  atetable-1.11.1.
4d70: 33 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 2a 20  3 { .  SELECT * 
4d80: 46 52 4f 4d 20 74 31 20 0a 7d 20 7b 31 20 7b 6e  FROM t1 .} {1 {n
4d90: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 74 31  o such table: t1
4da0: 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }}.do_execsql_te
4db0: 73 74 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c  st  e_createtabl
4dc0: 65 2d 31 2e 31 31 2e 31 2e 34 20 7b 20 44 52 4f  e-1.11.1.4 { DRO
4dd0: 50 20 54 41 42 4c 45 20 74 33 20 7d 20 7b 7d 0a  P TABLE t3 } {}.
4de0: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
4df0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31   e_createtable-1
4e00: 2e 31 31 2e 31 2e 35 20 7b 20 0a 20 20 53 45 4c  .11.1.5 { .  SEL
4e10: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 0a 7d  ECT * FROM t3 .}
4e20: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62   {1 {no such tab
4e30: 6c 65 3a 20 74 33 7d 7d 0a 0a 64 6f 5f 65 78 65  le: t3}}..do_exe
4e40: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
4e50: 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 31  tetable-1.11.2.1
4e60: 20 7b 0a 20 20 53 45 4c 45 43 54 20 6e 61 6d 65   {.  SELECT name
4e70: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
4e80: 74 65 72 3b 0a 20 20 53 45 4c 45 43 54 20 6e 61  ter;.  SELECT na
4e90: 6d 65 20 46 52 4f 4d 20 61 75 78 61 2e 73 71 6c  me FROM auxa.sql
4ea0: 69 74 65 5f 6d 61 73 74 65 72 3b 0a 7d 20 7b 74  ite_master;.} {t
4eb0: 32 20 74 34 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  2 t4}.do_execsql
4ec0: 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74 65 74  _test  e_createt
4ed0: 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 32 20 7b 20  able-1.11.2.2 { 
4ee0: 44 52 4f 50 20 54 41 42 4c 45 20 74 32 20 7d 20  DROP TABLE t2 } 
4ef0: 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  {}.do_execsql_te
4f00: 73 74 20 20 65 5f 63 72 65 61 74 65 74 61 62 6c  st  e_createtabl
4f10: 65 2d 31 2e 31 31 2e 32 2e 33 20 7b 20 44 52 4f  e-1.11.2.3 { DRO
4f20: 50 20 54 41 42 4c 45 20 74 34 20 7d 20 7b 7d 0a  P TABLE t4 } {}.
4f30: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4f40: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e  e_createtable-1.
4f50: 31 31 2e 32 2e 34 20 7b 0a 20 20 53 45 4c 45 43  11.2.4 {.  SELEC
4f60: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
4f70: 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 53 45 4c  te_master;.  SEL
4f80: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 61 75  ECT name FROM au
4f90: 78 61 2e 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  xa.sqlite_master
4fa0: 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ;.} {}..#-------
4fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ff0: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
5000: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e  e_createtable-2.
5010: 2a 20 2d 20 74 65 73 74 20 73 74 61 74 65 6d 65  * - test stateme
5020: 6e 74 73 20 72 65 6c 61 74 65 64 20 74 6f 20 74  nts related to t
5030: 68 65 20 43 52 45 41 54 45 0a 23 20 54 41 42 4c  he CREATE.# TABL
5040: 45 20 41 53 20 2e 2e 2e 20 53 45 4c 45 43 54 20  E AS ... SELECT 
5050: 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 0a 23 20  statement..#..# 
5060: 54 68 72 65 65 20 54 63 6c 20 63 6f 6d 6d 61 6e  Three Tcl comman
5070: 64 73 3a 0a 23 0a 23 20 20 20 73 65 6c 65 63 74  ds:.#.#   select
5080: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 53 51  _column_names SQ
5090: 4c 0a 23 20 20 20 20 20 54 68 65 20 61 72 67 75  L.#     The argu
50a0: 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61 20 53  ment must be a S
50b0: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
50c0: 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f   Return a list o
50d0: 66 20 74 68 65 20 6e 61 6d 65 73 0a 23 20 20 20  f the names.#   
50e0: 20 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73    of the columns
50f0: 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2d 73   of the result-s
5100: 65 74 20 74 68 61 74 20 77 6f 75 6c 64 20 62 65  et that would be
5110: 20 72 65 74 75 72 6e 65 64 20 62 79 20 65 78 65   returned by exe
5120: 63 75 74 69 6e 67 0a 23 20 20 20 20 20 74 68 65  cuting.#     the
5130: 20 53 45 4c 45 43 54 2e 0a 23 0a 23 20 20 20 74   SELECT..#.#   t
5140: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  able_column_name
5150: 73 20 54 42 4c 0a 23 20 20 20 20 20 54 68 65 20  s TBL.#     The 
5160: 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65  argument must be
5170: 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e 20 52   a table name. R
5180: 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20  eturn a list of 
5190: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 66 72  column names, fr
51a0: 6f 6d 0a 23 20 20 20 20 20 6c 65 66 74 20 74 6f  om.#     left to
51b0: 20 72 69 67 68 74 2c 20 66 6f 72 20 74 68 65 20   right, for the 
51c0: 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 74 61 62  table..#.#   tab
51d0: 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79  le_column_declty
51e0: 70 65 73 20 54 42 4c 0a 23 20 20 20 20 20 54 68  pes TBL.#     Th
51f0: 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20  e argument must 
5200: 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  be a table name.
5210: 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f   Return a list o
5220: 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 65  f column declare
5230: 64 0a 23 20 20 20 20 20 74 79 70 65 73 2c 20 66  d.#     types, f
5240: 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68  rom left to righ
5250: 74 2c 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65  t, for the table
5260: 2e 0a 23 0a 70 72 6f 63 20 73 63 69 20 7b 73 65  ..#.proc sci {se
5270: 6c 65 63 74 20 63 6d 64 7d 20 7b 0a 20 20 73 65  lect cmd} {.  se
5280: 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20 73  t res [list].  s
5290: 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74 65 33  et STMT [sqlite3
52a0: 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62 20 24  _prepare_v2 db $
52b0: 73 65 6c 65 63 74 20 2d 31 20 64 75 6d 6d 79 5d  select -1 dummy]
52c0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
52d0: 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65 33 5f   {$i < [sqlite3_
52e0: 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24 53 54  column_count $ST
52f0: 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a  MT]} {incr i} {.
5300: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
5310: 5b 24 63 6d 64 20 24 53 54 4d 54 20 24 69 5d 0a  [$cmd $STMT $i].
5320: 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 66 69    }.  sqlite3_fi
5330: 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20 20 73  nalize $STMT.  s
5340: 65 74 20 72 65 73 0a 7d 0a 70 72 6f 63 20 74 63  et res.}.proc tc
5350: 69 20 7b 74 62 6c 20 63 6d 64 7d 20 7b 20 73 63  i {tbl cmd} { sc
5360: 69 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  i "SELECT * FROM
5370: 20 24 74 62 6c 22 20 24 63 6d 64 20 7d 0a 70 72   $tbl" $cmd }.pr
5380: 6f 63 20 73 65 6c 65 63 74 5f 63 6f 6c 75 6d 6e  oc select_column
5390: 5f 6e 61 6d 65 73 20 20 20 20 7b 73 71 6c 7d 20  _names    {sql} 
53a0: 7b 20 73 63 69 20 24 73 71 6c 20 73 71 6c 69 74  { sci $sql sqlit
53b0: 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 20 7d  e3_column_name }
53c0: 0a 70 72 6f 63 20 74 61 62 6c 65 5f 63 6f 6c 75  .proc table_colu
53d0: 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 20 7b 74 62  mn_names     {tb
53e0: 6c 7d 20 7b 20 74 63 69 20 24 74 62 6c 20 73 71  l} { tci $tbl sq
53f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
5400: 65 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65 5f 63  e }.proc table_c
5410: 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 73 20  olumn_decltypes 
5420: 7b 74 62 6c 7d 20 7b 20 74 63 69 20 24 74 62 6c  {tbl} { tci $tbl
5430: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
5440: 64 65 63 6c 74 79 70 65 20 7d 0a 0a 23 20 43 72  decltype }..# Cr
5450: 65 61 74 65 20 61 20 64 61 74 61 62 61 73 65 20  eate a database 
5460: 73 63 68 65 6d 61 2e 20 54 68 69 73 20 73 63 68  schema. This sch
5470: 65 6d 61 20 69 73 20 75 73 65 64 20 62 79 20 74  ema is used by t
5480: 65 73 74 73 20 32 2e 31 2e 2a 20 74 68 72 6f 75  ests 2.1.* throu
5490: 67 68 20 32 2e 33 2e 2a 2e 0a 23 0a 64 72 6f 70  gh 2.3.*..#.drop
54a0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65  _all_tables.do_e
54b0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
54c0: 65 61 74 65 74 61 62 6c 65 2d 32 2e 30 20 7b 0a  eatetable-2.0 {.
54d0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
54e0: 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 43 52  1(a, b, c);.  CR
54f0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 64 2c  EATE TABLE t2(d,
5500: 20 65 2c 20 66 29 3b 0a 20 20 43 52 45 41 54 45   e, f);.  CREATE
5510: 20 54 41 42 4c 45 20 74 33 28 67 20 42 49 47 49   TABLE t3(g BIGI
5520: 4e 54 2c 20 68 20 56 41 52 43 48 41 52 28 31 30  NT, h VARCHAR(10
5530: 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  ));.  CREATE TAB
5540: 4c 45 20 74 34 28 69 20 42 4c 4f 42 2c 20 6a 20  LE t4(i BLOB, j 
5550: 41 4e 59 4f 4c 44 41 54 41 29 3b 0a 20 20 43 52  ANYOLDATA);.  CR
5560: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 6b 20  EATE TABLE t5(k 
5570: 46 4c 4f 41 54 2c 20 6c 20 49 4e 54 45 47 45 52  FLOAT, l INTEGER
5580: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
5590: 45 20 74 36 28 6d 20 44 45 46 41 55 4c 54 20 31  E t6(m DEFAULT 1
55a0: 30 2c 20 6e 20 44 45 46 41 55 4c 54 20 35 2c 20  0, n DEFAULT 5, 
55b0: 50 52 49 4d 41 52 59 20 4b 45 59 28 6d 2c 20 6e  PRIMARY KEY(m, n
55c0: 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  ));.  CREATE TAB
55d0: 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45 52 20  LE t7(x INTEGER 
55e0: 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20  PRIMARY KEY);.  
55f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28  CREATE TABLE t8(
5600: 6f 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65  o COLLATE nocase
5610: 20 44 45 46 41 55 4c 54 20 27 61 62 63 27 29 3b   DEFAULT 'abc');
5620: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
5630: 74 39 28 70 20 4e 4f 54 20 4e 55 4c 4c 2c 20 71  t9(p NOT NULL, q
5640: 20 44 4f 55 42 4c 45 20 43 48 45 43 4b 20 28 71   DOUBLE CHECK (q
5650: 21 3d 30 29 2c 20 72 20 53 54 52 49 4e 47 20 55  !=0), r STRING U
5660: 4e 49 51 55 45 29 3b 0a 7d 20 7b 7d 0a 0a 23 20  NIQUE);.} {}..# 
5670: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36  EVIDENCE-OF: R-6
5680: 34 38 32 38 2d 35 39 35 36 38 20 54 68 65 20 74  4828-59568 The t
5690: 61 62 6c 65 20 68 61 73 20 74 68 65 20 73 61 6d  able has the sam
56a0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
56b0: 6d 6e 73 20 61 73 0a 23 20 74 68 65 20 72 6f 77  mns as.# the row
56c0: 73 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68  s returned by th
56d0: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
56e0: 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  nt. The name of 
56f0: 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73 0a 23  each column is.#
5700: 20 74 68 65 20 73 61 6d 65 20 61 73 20 74 68 65   the same as the
5710: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 72   name of the cor
5720: 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c 75 6d  responding colum
5730: 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  n in the result 
5740: 73 65 74 20 6f 66 0a 23 20 74 68 65 20 53 45 4c  set of.# the SEL
5750: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ECT statement..#
5760: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
5770: 74 65 73 74 73 20 32 2e 31 20 2d 74 63 6c 71 75  tests 2.1 -tclqu
5780: 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f 63 6f  ery {.  table_co
5790: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 78 31 0a 7d 20  lumn_names x1.} 
57a0: 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61 74 63  -repair {.  catc
57b0: 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c  hsql { DROP TABL
57c0: 45 20 78 31 20 7d 0a 7d 20 7b 0a 20 20 31 20 20  E x1 }.} {.  1  
57d0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
57e0: 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  x1 AS SELECT * F
57f0: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 20  ROM t1"         
5800: 20 20 20 20 20 20 20 20 20 20 20 20 7b 61 20 62              {a b
5810: 20 63 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41   c}.  2    "CREA
5820: 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20 53  TE TABLE x1 AS S
5830: 45 4c 45 43 54 20 63 2c 20 62 2c 20 61 20 46 52  ELECT c, b, a FR
5840: 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 20 20  OM t1"          
5850: 20 20 20 20 20 7b 63 20 62 20 61 7d 0a 20 20 33       {c b a}.  3
5860: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
5870: 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a  E x1 AS SELECT *
5880: 20 46 52 4f 4d 20 74 31 2c 20 74 32 22 20 20 20   FROM t1, t2"   
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61                {a
58a0: 20 62 20 63 20 64 20 65 20 66 7d 0a 20 20 34 20   b c d e f}.  4 
58b0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
58c0: 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 63 6f   x1 AS SELECT co
58d0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 22 20  unt(*) FROM t1" 
58e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 63 6f               {co
58f0: 75 6e 74 28 2a 29 7d 0a 20 20 35 20 20 20 20 22  unt(*)}.  5    "
5900: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20  CREATE TABLE x1 
5910: 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  AS SELECT count(
5920: 61 29 20 41 53 20 61 2c 20 6d 61 78 28 62 29 20  a) AS a, max(b) 
5930: 46 52 4f 4d 20 74 31 22 20 7b 61 20 6d 61 78 28  FROM t1" {a max(
5940: 62 29 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  b)}.}..# EVIDENC
5950: 45 2d 4f 46 3a 20 52 2d 33 37 31 31 31 2d 32 32  E-OF: R-37111-22
5960: 38 35 35 20 54 68 65 20 64 65 63 6c 61 72 65 64  855 The declared
5970: 20 74 79 70 65 20 6f 66 20 65 61 63 68 20 63 6f   type of each co
5980: 6c 75 6d 6e 20 69 73 0a 23 20 64 65 74 65 72 6d  lumn is.# determ
5990: 69 6e 65 64 20 62 79 20 74 68 65 20 65 78 70 72  ined by the expr
59a0: 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74 79 20  ession affinity 
59b0: 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  of the correspon
59c0: 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f 6e 0a  ding expression.
59d0: 23 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20  # in the result 
59e0: 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c 45 43  set of the SELEC
59f0: 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61 73 20  T statement, as 
5a00: 66 6f 6c 6c 6f 77 73 3a 20 45 78 70 72 65 73 73  follows: Express
5a10: 69 6f 6e 0a 23 20 41 66 66 69 6e 69 74 79 20 43  ion.# Affinity C
5a20: 6f 6c 75 6d 6e 20 44 65 63 6c 61 72 65 64 20 54  olumn Declared T
5a30: 79 70 65 20 54 45 58 54 20 22 54 45 58 54 22 20  ype TEXT "TEXT" 
5a40: 4e 55 4d 45 52 49 43 20 22 4e 55 4d 22 20 49 4e  NUMERIC "NUM" IN
5a50: 54 45 47 45 52 20 22 49 4e 54 22 0a 23 20 52 45  TEGER "INT".# RE
5a60: 41 4c 20 22 52 45 41 4c 22 20 4e 4f 4e 45 20 22  AL "REAL" NONE "
5a70: 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e 67 29  " (empty string)
5a80: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
5a90: 65 5f 74 65 73 74 73 20 32 2e 32 20 2d 74 63 6c  e_tests 2.2 -tcl
5aa0: 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f  query {.  table_
5ab0: 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65 73  column_decltypes
5ac0: 20 78 31 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a   x1.} -repair {.
5ad0: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
5ae0: 50 20 54 41 42 4c 45 20 78 31 20 7d 0a 7d 20 7b  P TABLE x1 }.} {
5af0: 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20  .  1    "CREATE 
5b00: 54 41 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45  TABLE x1 AS SELE
5b10: 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20 20 20  CT a FROM t1"   
5b20: 20 20 7b 22 22 7d 0a 20 20 32 20 20 20 20 22 43    {""}.  2    "C
5b30: 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41  REATE TABLE x1 A
5b40: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
5b50: 74 33 22 20 20 20 20 20 7b 49 4e 54 20 54 45 58  t3"     {INT TEX
5b60: 54 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54  T}.  3    "CREAT
5b70: 45 20 54 41 42 4c 45 20 78 31 20 41 53 20 53 45  E TABLE x1 AS SE
5b80: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 22 20  LECT * FROM t4" 
5b90: 20 20 20 20 7b 22 22 20 4e 55 4d 7d 0a 20 20 34      {"" NUM}.  4
5ba0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
5bb0: 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a  E x1 AS SELECT *
5bc0: 20 46 52 4f 4d 20 74 35 22 20 20 20 20 20 7b 52   FROM t5"     {R
5bd0: 45 41 4c 20 49 4e 54 7d 0a 7d 0a 0a 23 20 45 56  EAL INT}.}..# EV
5be0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 36 36  IDENCE-OF: R-166
5bf0: 36 37 2d 30 39 37 37 32 20 41 20 74 61 62 6c 65  67-09772 A table
5c00: 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 43   created using C
5c10: 52 45 41 54 45 20 54 41 42 4c 45 20 41 53 20 68  REATE TABLE AS h
5c20: 61 73 0a 23 20 6e 6f 20 50 52 49 4d 41 52 59 20  as.# no PRIMARY 
5c30: 4b 45 59 20 61 6e 64 20 6e 6f 20 63 6f 6e 73 74  KEY and no const
5c40: 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20 6b 69  raints of any ki
5c50: 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20  nd. The default 
5c60: 76 61 6c 75 65 20 6f 66 0a 23 20 65 61 63 68 20  value of.# each 
5c70: 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 20  column is NULL. 
5c80: 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  The default coll
5c90: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 66  ation sequence f
5ca0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
5cb0: 66 0a 23 20 74 68 65 20 6e 65 77 20 74 61 62 6c  f.# the new tabl
5cc0: 65 20 69 73 20 42 49 4e 41 52 59 2e 0a 23 0a 23  e is BINARY..#.#
5cd0: 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67     The following
5ce0: 20 74 65 73 74 73 20 63 72 65 61 74 65 20 74 61   tests create ta
5cf0: 62 6c 65 73 20 62 61 73 65 64 20 6f 6e 20 53 45  bles based on SE
5d00: 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73 20  LECT statements 
5d10: 74 68 61 74 20 72 65 61 64 0a 23 20 20 20 66 72  that read.#   fr
5d20: 6f 6d 20 74 61 62 6c 65 73 20 74 68 61 74 20 68  om tables that h
5d30: 61 76 65 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ave primary keys
5d40: 2c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 6e  , constraints an
5d50: 64 20 65 78 70 6c 69 63 69 74 20 64 65 66 61 75  d explicit defau
5d60: 6c 74 20 0a 23 20 20 20 63 6f 6c 6c 61 74 69 6f  lt .#   collatio
5d70: 6e 20 73 65 71 75 65 6e 63 65 73 2e 20 4e 6f 6e  n sequences. Non
5d80: 65 20 6f 66 20 74 68 69 73 20 69 73 20 74 72 61  e of this is tra
5d90: 6e 73 66 65 72 65 64 20 74 6f 20 74 68 65 20 64  nsfered to the d
5da0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 0a 23 20 20  efinition of.#  
5db0: 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 61   the new table a
5dc0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
5dd0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61  sqlite_master ta
5de0: 62 6c 65 2e 0a 23 0a 23 20 20 20 54 65 73 74 73  ble..#.#   Tests
5df0: 20 32 2e 33 2e 32 2e 2a 20 73 68 6f 77 20 74 68   2.3.2.* show th
5e00: 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  at the default v
5e10: 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63 6f 6c  alue of each col
5e20: 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 0a 23 0a 64  umn is NULL..#.d
5e30: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
5e40: 73 74 73 20 32 2e 33 2e 31 20 2d 71 75 65 72 79  sts 2.3.1 -query
5e50: 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71 6c 20   {.  SELECT sql 
5e60: 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74  FROM sqlite_mast
5e70: 65 72 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  er ORDER BY rowi
5e80: 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31 0a 7d  d DESC LIMIT 1.}
5e90: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
5ea0: 45 20 54 41 42 4c 45 20 78 31 20 41 53 20 53 45  E TABLE x1 AS SE
5eb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 22 20  LECT * FROM t6" 
5ec0: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78  {{CREATE TABLE x
5ed0: 31 28 6d 2c 6e 29 7d 7d 0a 20 20 32 20 20 20 20  1(m,n)}}.  2    
5ee0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 32  "CREATE TABLE x2
5ef0: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
5f00: 4d 20 74 37 22 20 7b 7b 43 52 45 41 54 45 20 54  M t7" {{CREATE T
5f10: 41 42 4c 45 20 78 32 28 78 20 49 4e 54 29 7d 7d  ABLE x2(x INT)}}
5f20: 0a 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20  .  3    "CREATE 
5f30: 54 41 42 4c 45 20 78 33 20 41 53 20 53 45 4c 45  TABLE x3 AS SELE
5f40: 43 54 20 2a 20 46 52 4f 4d 20 74 38 22 20 7b 7b  CT * FROM t8" {{
5f50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 33 28  CREATE TABLE x3(
5f60: 6f 29 7d 7d 0a 20 20 34 20 20 20 20 22 43 52 45  o)}}.  4    "CRE
5f70: 41 54 45 20 54 41 42 4c 45 20 78 34 20 41 53 20  ATE TABLE x4 AS 
5f80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 39  SELECT * FROM t9
5f90: 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  " {{CREATE TABLE
5fa0: 20 78 34 28 70 2c 71 20 52 45 41 4c 2c 72 20 4e   x4(p,q REAL,r N
5fb0: 55 4d 29 7d 7d 0a 7d 0a 64 6f 5f 65 78 65 63 73  UM)}}.}.do_execs
5fc0: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
5fd0: 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 31 20 7b 0a  table-2.3.2.1 {.
5fe0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31    INSERT INTO x1
5ff0: 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b   DEFAULT VALUES;
6000: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
6010: 32 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  2 DEFAULT VALUES
6020: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
6030: 78 33 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  x3 DEFAULT VALUE
6040: 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  S;.  INSERT INTO
6050: 20 78 34 20 44 45 46 41 55 4c 54 20 56 41 4c 55   x4 DEFAULT VALU
6060: 45 53 3b 0a 7d 20 7b 7d 0a 64 62 20 6e 75 6c 6c  ES;.} {}.db null
6070: 76 61 6c 75 65 20 6e 75 6c 6c 0a 64 6f 5f 65 78  value null.do_ex
6080: 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  ecsql_test e_cre
6090: 61 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 32  atetable-2.3.2.2
60a0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
60b0: 20 78 31 20 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c   x1 } {null null
60c0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
60d0: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
60e0: 32 2e 33 2e 32 2e 33 20 7b 20 53 45 4c 45 43 54  2.3.2.3 { SELECT
60f0: 20 2a 20 46 52 4f 4d 20 78 32 20 7d 20 7b 6e 75   * FROM x2 } {nu
6100: 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ll}.do_execsql_t
6110: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
6120: 65 2d 32 2e 33 2e 32 2e 34 20 7b 20 53 45 4c 45  e-2.3.2.4 { SELE
6130: 43 54 20 2a 20 46 52 4f 4d 20 78 33 20 7d 20 7b  CT * FROM x3 } {
6140: 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  null}.do_execsql
6150: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
6160: 62 6c 65 2d 32 2e 33 2e 32 2e 35 20 7b 20 53 45  ble-2.3.2.5 { SE
6170: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 34 20 7d  LECT * FROM x4 }
6180: 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75 6c 6c   {null null null
6190: 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65 20 7b  }.db nullvalue {
61a0: 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  }..drop_all_tabl
61b0: 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  es.do_execsql_te
61c0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
61d0: 2d 32 2e 34 2e 30 20 7b 0a 20 20 43 52 45 41 54  -2.4.0 {.  CREAT
61e0: 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79 29  E TABLE t1(x, y)
61f0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
6200: 74 31 20 56 41 4c 55 45 53 28 27 69 27 2c 20 20  t1 VALUES('i',  
6210: 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52   'one');.  INSER
6220: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
6230: 28 27 69 69 27 2c 20 20 27 74 77 6f 27 29 3b 0a  ('ii',  'two');.
6240: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
6250: 20 56 41 4c 55 45 53 28 27 69 69 69 27 2c 20 27   VALUES('iii', '
6260: 74 68 72 65 65 27 29 3b 0a 7d 20 7b 7d 0a 0a 23  three');.} {}..#
6270: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
6280: 32 34 31 35 33 2d 32 38 33 35 32 20 54 61 62 6c  24153-28352 Tabl
6290: 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  es created using
62a0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
62b0: 20 61 72 65 0a 23 20 69 6e 69 74 69 61 6c 6c 79   are.# initially
62c0: 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74 68 20   populated with 
62d0: 74 68 65 20 72 6f 77 73 20 6f 66 20 64 61 74 61  the rows of data
62e0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68 65   returned by the
62f0: 20 53 45 4c 45 43 54 0a 23 20 73 74 61 74 65 6d   SELECT.# statem
6300: 65 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43  ent..#.# EVIDENC
6310: 45 2d 4f 46 3a 20 52 2d 30 38 32 32 34 2d 33 30  E-OF: R-08224-30
6320: 32 34 39 20 52 6f 77 73 20 61 72 65 20 61 73 73  249 Rows are ass
6330: 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f 75 73  igned contiguous
6340: 6c 79 20 61 73 63 65 6e 64 69 6e 67 0a 23 20 72  ly ascending.# r
6350: 6f 77 69 64 20 76 61 6c 75 65 73 2c 20 73 74 61  owid values, sta
6360: 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20 69 6e  rting with 1, in
6370: 20 74 68 65 20 6f 72 64 65 72 20 74 68 61 74 20   the order that 
6380: 74 68 65 79 20 61 72 65 20 72 65 74 75 72 6e 65  they are returne
6390: 64 20 62 79 0a 23 20 74 68 65 20 53 45 4c 45 43  d by.# the SELEC
63a0: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23  T statement..#.#
63b0: 20 20 20 45 61 63 68 20 74 65 73 74 20 63 61 73     Each test cas
63c0: 65 20 62 65 6c 6f 77 20 69 73 20 73 70 65 63 69  e below is speci
63d0: 66 69 65 64 20 61 73 20 74 68 65 20 6e 61 6d 65  fied as the name
63e0: 20 6f 66 20 61 20 74 61 62 6c 65 20 74 6f 20 63   of a table to c
63f0: 72 65 61 74 65 0a 23 20 20 20 75 73 69 6e 67 20  reate.#   using 
6400: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
6410: 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e 2e 22  . AS SELECT ..."
6420: 20 61 6e 64 20 61 20 53 45 4c 45 43 54 20 73 74   and a SELECT st
6430: 61 74 65 6d 65 6e 74 20 74 6f 20 75 73 65 20 69  atement to use i
6440: 6e 0a 23 20 20 20 63 72 65 61 74 69 6e 67 20 69  n.#   creating i
6450: 74 2e 20 54 68 65 20 74 61 62 6c 65 20 69 73 20  t. The table is 
6460: 63 72 65 61 74 65 64 2e 20 0a 23 0a 23 20 20 20  created. .#.#   
6470: 54 65 73 74 20 63 61 73 65 73 20 32 2e 34 2e 2a  Test cases 2.4.*
6480: 2e 31 20 63 68 65 63 6b 20 74 68 61 74 20 61 66  .1 check that af
6490: 74 65 72 20 69 74 20 68 61 73 20 62 65 65 6e 20  ter it has been 
64a0: 63 72 65 61 74 65 64 2c 20 74 68 65 20 64 61 74  created, the dat
64b0: 61 20 69 6e 20 74 68 65 0a 23 20 20 20 74 61 62  a in the.#   tab
64c0: 6c 65 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  le is the same a
64d0: 73 20 74 68 65 20 64 61 74 61 20 72 65 74 75 72  s the data retur
64e0: 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c 45 43  ned by the SELEC
64f0: 54 20 73 74 61 74 65 6d 65 6e 74 20 65 78 65 63  T statement exec
6500: 75 74 65 64 20 61 73 0a 23 20 20 20 61 20 73 74  uted as.#   a st
6510: 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61 6e 64  andalone command
6520: 2c 20 76 65 72 69 66 79 69 6e 67 20 74 68 65 20  , verifying the 
6530: 66 69 72 73 74 20 74 65 73 74 61 62 6c 65 20 73  first testable s
6540: 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 2e 0a  tatement above..
6550: 23 0a 23 20 20 20 54 65 73 74 20 63 61 73 65 73  #.#   Test cases
6560: 20 32 2e 34 2e 2a 2e 32 20 63 68 65 63 6b 20 74   2.4.*.2 check t
6570: 68 61 74 20 74 68 65 20 72 6f 77 69 64 73 20 77  hat the rowids w
6580: 65 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 63 6f  ere allocated co
6590: 6e 74 69 67 75 6f 75 73 6c 79 0a 23 20 20 20 61  ntiguously.#   a
65a0: 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
65b0: 65 20 73 65 63 6f 6e 64 20 74 65 73 74 61 62 6c  e second testabl
65c0: 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  e statement abov
65d0: 65 2e 20 54 68 61 74 20 74 68 65 20 72 6f 77 69  e. That the rowi
65e0: 64 73 0a 23 20 20 20 66 72 6f 6d 20 74 68 65 20  ds.#   from the 
65f0: 63 6f 6e 74 69 67 75 6f 75 73 20 62 6c 6f 63 6b  contiguous block
6600: 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65 64 20   were allocated 
6610: 74 6f 20 72 6f 77 73 20 69 6e 20 74 68 65 20 6f  to rows in the o
6620: 72 64 65 72 20 72 6f 77 73 20 61 72 65 0a 23 20  rder rows are.# 
6630: 20 20 72 65 74 75 72 6e 65 64 20 62 79 20 74 68    returned by th
6640: 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
6650: 6e 74 20 69 73 20 76 65 72 69 66 69 65 64 20 62  nt is verified b
6660: 79 20 32 2e 34 2e 2a 2e 31 2e 0a 23 0a 23 20 45  y 2.4.*.1..#.# E
6670: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 32  VIDENCE-OF: R-32
6680: 33 36 35 2d 30 39 30 34 33 20 41 20 22 43 52 45  365-09043 A "CRE
6690: 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20 41 53  ATE TABLE ... AS
66a0: 20 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d 65   SELECT" stateme
66b0: 6e 74 0a 23 20 63 72 65 61 74 65 73 20 61 6e 64  nt.# creates and
66c0: 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64 61 74   populates a dat
66d0: 61 62 61 73 65 20 74 61 62 6c 65 20 62 61 73 65  abase table base
66e0: 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c 74 73  d on the results
66f0: 20 6f 66 20 61 0a 23 20 53 45 4c 45 43 54 20 73   of a.# SELECT s
6700: 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20 20 20  tatement..#.#   
6710: 54 68 65 20 61 62 6f 76 65 20 69 73 20 61 6c 73  The above is als
6720: 6f 20 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20  o considered to 
6730: 62 65 20 74 65 73 74 65 64 20 62 79 20 74 68 65  be tested by the
6740: 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49 74 20 69   following. It i
6750: 73 0a 23 20 20 20 63 6c 65 61 72 20 74 68 61 74  s.#   clear that
6760: 20 74 61 62 6c 65 73 20 61 72 65 20 62 65 69 6e   tables are bein
6770: 67 20 63 72 65 61 74 65 64 20 61 6e 64 20 70 6f  g created and po
6780: 70 75 6c 61 74 65 64 20 62 79 20 74 68 65 20 63  pulated by the c
6790: 6f 6d 6d 61 6e 64 20 69 6e 0a 23 20 20 20 71 75  ommand in.#   qu
67a0: 65 73 74 69 6f 6e 2e 0a 23 0a 66 6f 72 65 61 63  estion..#.foreac
67b0: 68 20 7b 74 6e 20 74 62 6c 20 73 65 6c 65 63 74  h {tn tbl select
67c0: 7d 20 7b 0a 20 20 31 20 20 20 78 31 20 20 20 22  } {.  1   x1   "
67d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
67e0: 22 0a 20 20 32 20 20 20 78 32 20 20 20 22 53 45  ".  2   x2   "SE
67f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f  LECT * FROM t1 O
6800: 52 44 45 52 20 42 59 20 78 20 44 45 53 43 22 0a  RDER BY x DESC".
6810: 20 20 33 20 20 20 78 33 20 20 20 22 53 45 4c 45    3   x3   "SELE
6820: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT * FROM t1 ORD
6830: 45 52 20 42 59 20 78 20 41 53 43 22 0a 7d 20 7b  ER BY x ASC".} {
6840: 0a 20 20 23 20 43 72 65 61 74 65 20 74 68 65 20  .  # Create the 
6850: 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20 22 43  table using a "C
6860: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
6870: 41 53 20 53 45 4c 45 43 54 20 2e 2e 2e 22 20 63  AS SELECT ..." c
6880: 6f 6d 6d 61 6e 64 2e 0a 20 20 65 78 65 63 73 71  ommand..  execsq
6890: 6c 20 5b 73 75 62 73 74 20 7b 43 52 45 41 54 45  l [subst {CREATE
68a0: 20 54 41 42 4c 45 20 24 74 62 6c 20 41 53 20 24   TABLE $tbl AS $
68b0: 73 65 6c 65 63 74 7d 5d 0a 0a 20 20 23 20 43 68  select}]..  # Ch
68c0: 65 63 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77  eck that the row
68d0: 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20  s inserted into 
68e0: 74 68 65 20 74 61 62 6c 65 2c 20 73 6f 72 74 65  the table, sorte
68f0: 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 72  d in ascending r
6900: 6f 77 69 64 0a 20 20 23 20 6f 72 64 65 72 2c 20  owid.  # order, 
6910: 6d 61 74 63 68 20 74 68 6f 73 65 20 72 65 74 75  match those retu
6920: 72 6e 65 64 20 62 79 20 65 78 65 63 75 74 69 6e  rned by executin
6930: 67 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61  g the SELECT sta
6940: 74 65 6d 65 6e 74 20 61 73 20 61 0a 20 20 23 20  tement as a.  # 
6950: 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61  standalone comma
6960: 6e 64 2e 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  nd..  do_execsql
6970: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
6980: 62 6c 65 2d 32 2e 34 2e 24 74 6e 2e 31 20 5b 73  ble-2.4.$tn.1 [s
6990: 75 62 73 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ubst {.    SELEC
69a0: 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 20 4f 52  T * FROM $tbl OR
69b0: 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a 20 20  DER BY rowid;.  
69c0: 7d 5d 20 5b 65 78 65 63 73 71 6c 20 24 73 65 6c  }] [execsql $sel
69d0: 65 63 74 5d 0a 0a 20 20 23 20 43 68 65 63 6b 20  ect]..  # Check 
69e0: 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 73 20  that the rowids 
69f0: 69 6e 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  in the new table
6a00: 20 61 72 65 20 61 20 63 6f 6e 74 69 67 75 6f 75   are a contiguou
6a10: 73 20 62 6c 6f 63 6b 20 73 74 61 72 74 69 6e 67  s block starting
6a20: 0a 20 20 23 20 77 69 74 68 20 72 6f 77 69 64 20  .  # with rowid 
6a30: 31 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69  1. Note that thi
6a40: 73 20 77 69 6c 6c 20 66 61 69 6c 20 69 66 20 53  s will fail if S
6a50: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
6a60: 24 73 65 6c 65 63 74 20 0a 20 20 23 20 72 65 74  $select .  # ret
6a70: 75 72 6e 73 20 30 20 72 6f 77 73 20 28 61 73 20  urns 0 rows (as 
6a80: 6d 61 78 28 72 6f 77 69 64 29 20 77 69 6c 6c 20  max(rowid) will 
6a90: 62 65 20 4e 55 4c 4c 29 2e 0a 20 20 64 6f 5f 65  be NULL)..  do_e
6aa0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
6ab0: 65 61 74 65 74 61 62 6c 65 2d 32 2e 34 2e 24 74  eatetable-2.4.$t
6ac0: 6e 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20 20 20  n.2 [subst {.   
6ad0: 20 53 45 4c 45 43 54 20 6d 69 6e 28 72 6f 77 69   SELECT min(rowi
6ae0: 64 29 2c 20 63 6f 75 6e 74 28 72 6f 77 69 64 29  d), count(rowid)
6af0: 3d 3d 6d 61 78 28 72 6f 77 69 64 29 20 46 52 4f  ==max(rowid) FRO
6b00: 4d 20 24 74 62 6c 0a 20 20 7d 5d 20 7b 31 20 31  M $tbl.  }] {1 1
6b10: 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }.}..#----------
6b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b60: 0a 23 20 54 65 73 74 20 63 61 73 65 73 20 66 6f  .# Test cases fo
6b70: 72 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 74 69  r column definti
6b80: 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20 54 41  ons in CREATE TA
6b90: 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73 20 74  BLE statements t
6ba0: 68 61 74 20 64 6f 20 6e 6f 74 0a 23 20 75 73 65  hat do not.# use
6bb0: 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
6bc0: 65 6e 74 2e 20 4e 6f 74 20 69 6e 63 6c 75 64 69  ent. Not includi
6bd0: 6e 67 20 64 61 74 61 20 63 6f 6e 73 74 72 61 69  ng data constrai
6be0: 6e 74 73 2e 20 49 6e 20 6f 74 68 65 72 20 77 6f  nts. In other wo
6bf0: 72 64 73 2c 0a 23 20 74 65 73 74 73 20 66 6f 72  rds,.# tests for
6c00: 20 74 68 65 20 73 70 65 63 69 66 69 63 61 74 69   the specificati
6c10: 6f 6e 20 6f 66 3a 0a 23 0a 23 20 20 20 2a 20 64  on of:.#.#   * d
6c20: 65 63 6c 61 72 65 64 20 74 79 70 65 73 2c 0a 23  eclared types,.#
6c30: 20 20 20 2a 20 64 65 66 61 75 6c 74 20 76 61 6c     * default val
6c40: 75 65 73 2c 20 61 6e 64 0a 23 20 20 20 2a 20 64  ues, and.#   * d
6c50: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
6c60: 20 73 65 71 75 65 6e 63 65 73 2e 0a 23 0a 0a 23   sequences..#..#
6c70: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
6c80: 32 37 32 31 39 2d 34 39 30 35 37 20 55 6e 6c 69  27219-49057 Unli
6c90: 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64 61 74 61  ke most SQL data
6ca0: 62 61 73 65 73 2c 20 53 51 4c 69 74 65 20 64 6f  bases, SQLite do
6cb0: 65 73 20 6e 6f 74 0a 23 20 72 65 73 74 72 69 63  es not.# restric
6cc0: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 64 61  t the type of da
6cd0: 74 61 20 74 68 61 74 20 6d 61 79 20 62 65 20 69  ta that may be i
6ce0: 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61 20 63  nserted into a c
6cf0: 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e 0a 23  olumn based on.#
6d00: 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64 65 63   the columns dec
6d10: 6c 61 72 65 64 20 74 79 70 65 2e 0a 23 0a 23 20  lared type..#.# 
6d20: 20 20 54 65 73 74 20 74 68 69 73 20 62 79 20 63    Test this by c
6d30: 72 65 61 74 69 6e 67 20 61 20 66 65 77 20 74 61  reating a few ta
6d40: 62 6c 65 73 20 77 69 74 68 20 76 61 72 69 65 64  bles with varied
6d50: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 73 2c   declared types,
6d60: 20 74 68 65 6e 0a 23 20 20 20 69 6e 73 65 72 74   then.#   insert
6d70: 69 6e 67 20 76 61 72 69 6f 75 73 20 64 69 66 66  ing various diff
6d80: 65 72 65 6e 74 20 74 79 70 65 73 20 6f 66 20 76  erent types of v
6d90: 61 6c 75 65 73 20 69 6e 74 6f 20 74 68 65 6d 2e  alues into them.
6da0: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
6db0: 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  es.do_execsql_te
6dc0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
6dd0: 2d 33 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41 54  -3.1.0 {.  CREAT
6de0: 45 20 54 41 42 4c 45 20 74 31 28 78 20 56 41 52  E TABLE t1(x VAR
6df0: 43 48 41 52 28 31 30 29 2c 20 79 20 49 4e 54 45  CHAR(10), y INTE
6e00: 47 45 52 2c 20 7a 20 44 4f 55 42 4c 45 29 3b 0a  GER, z DOUBLE);.
6e10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
6e20: 32 28 61 20 44 41 54 45 54 49 4d 45 2c 20 62 20  2(a DATETIME, b 
6e30: 53 54 52 49 4e 47 2c 20 63 20 52 45 41 4c 29 3b  STRING, c REAL);
6e40: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
6e50: 74 33 28 6f 2c 20 74 29 3b 0a 7d 20 7b 7d 0a 0a  t3(o, t);.} {}..
6e60: 23 20 76 61 6c 75 65 20 74 79 70 65 20 2d 3e 20  # value type -> 
6e70: 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d 6e 20  declared column 
6e80: 74 79 70 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d  type.# ---------
6e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 69 6e 74 65  ---------.# inte
6eb0: 67 65 72 20 20 20 20 2d 3e 20 56 41 52 43 48 41  ger    -> VARCHA
6ec0: 52 28 31 30 29 0a 23 20 73 74 72 69 6e 67 20 20  R(10).# string  
6ed0: 20 20 20 2d 3e 20 49 4e 54 45 47 45 52 0a 23 20     -> INTEGER.# 
6ee0: 62 6c 6f 62 20 20 20 20 20 20 20 2d 3e 20 44 4f  blob       -> DO
6ef0: 55 42 4c 45 0a 23 0a 64 6f 5f 65 78 65 63 73 71  UBLE.#.do_execsq
6f00: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
6f10: 61 62 6c 65 2d 33 2e 31 2e 31 20 7b 0a 20 20 49  able-3.1.1 {.  I
6f20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
6f30: 4c 55 45 53 28 31 34 2c 20 27 71 75 69 74 65 20  LUES(14, 'quite 
6f40: 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69 6e 67  a lengthy string
6f50: 27 2c 20 58 27 35 35 35 36 35 35 27 29 3b 0a 20  ', X'555655');. 
6f60: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
6f70: 31 3b 0a 7d 20 7b 31 34 20 7b 71 75 69 74 65 20  1;.} {14 {quite 
6f80: 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69 6e 67  a lengthy string
6f90: 7d 20 55 56 55 7d 0a 0a 23 20 73 74 72 69 6e 67  } UVU}..# string
6fa0: 20 20 20 20 20 2d 3e 20 44 41 54 45 54 49 4d 45       -> DATETIME
6fb0: 0a 23 20 69 6e 74 65 67 65 72 20 20 20 20 2d 3e  .# integer    ->
6fc0: 20 53 54 52 49 4e 47 0a 23 20 74 69 6d 65 20 20   STRING.# time  
6fd0: 20 20 20 20 20 2d 3e 20 52 45 41 4c 0a 23 0a 64       -> REAL.#.d
6fe0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
6ff0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31  _createtable-3.1
7000: 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .2 {.  INSERT IN
7010: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 6e 6f  TO t2 VALUES('no
7020: 74 20 61 20 64 61 74 65 74 69 6d 65 27 2c 20 31  t a datetime', 1
7030: 33 2c 20 27 31 32 3a 34 31 3a 35 39 27 29 3b 0a  3, '12:41:59');.
7040: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
7050: 74 32 3b 0a 7d 20 7b 7b 6e 6f 74 20 61 20 64 61  t2;.} {{not a da
7060: 74 65 74 69 6d 65 7d 20 31 33 20 31 32 3a 34 31  tetime} 13 12:41
7070: 3a 35 39 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  :59}..# EVIDENCE
7080: 2d 4f 46 3a 20 52 2d 31 30 35 36 35 2d 30 39 35  -OF: R-10565-095
7090: 35 37 20 54 68 65 20 64 65 63 6c 61 72 65 64 20  57 The declared 
70a0: 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e  type of a column
70b0: 20 69 73 20 75 73 65 64 20 74 6f 0a 23 20 64 65   is used to.# de
70c0: 74 65 72 6d 69 6e 65 20 74 68 65 20 61 66 66 69  termine the affi
70d0: 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f 6c 75  nity of the colu
70e0: 6d 6e 20 6f 6e 6c 79 2e 0a 23 0a 23 20 20 20 20  mn only..#.#    
70f0: 20 41 66 66 69 6e 69 74 69 65 73 20 61 72 65 20   Affinities are 
7100: 74 65 73 74 65 64 20 69 6e 20 6d 6f 72 65 20 64  tested in more d
7110: 65 74 61 69 6c 20 65 6c 73 65 77 68 65 72 65 20  etail elsewhere 
7120: 28 73 65 65 20 64 6f 63 75 6d 65 6e 74 0a 23 20  (see document.# 
7130: 20 20 20 20 64 61 74 61 74 79 70 65 33 2e 68 74      datatype3.ht
7140: 6d 6c 29 2e 20 48 65 72 65 2c 20 6a 75 73 74 20  ml). Here, just 
7150: 74 65 73 74 20 74 68 61 74 20 61 66 66 69 6e 69  test that affini
7160: 74 79 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f  ty transformatio
7170: 6e 73 0a 23 20 20 20 20 20 63 6f 6e 73 69 73 74  ns.#     consist
7180: 65 6e 74 20 77 69 74 68 20 74 68 65 20 65 78 70  ent with the exp
7190: 65 63 74 65 64 20 61 66 66 69 6e 69 74 79 20 6f  ected affinity o
71a0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 28 62  f each column (b
71b0: 61 73 65 64 20 6f 6e 0a 23 20 20 20 20 20 74 68  ased on.#     th
71c0: 65 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 29  e declared type)
71d0: 20 61 70 70 65 61 72 20 74 6f 20 74 61 6b 65 20   appear to take 
71e0: 70 6c 61 63 65 2e 0a 23 0a 23 20 41 66 66 69 6e  place..#.# Affin
71f0: 69 74 69 65 73 20 6f 66 20 74 31 20 28 74 65 73  ities of t1 (tes
7200: 74 20 63 61 73 65 73 20 33 2e 32 2e 31 2e 2a 29  t cases 3.2.1.*)
7210: 3a 20 54 45 58 54 2c 20 49 4e 54 45 47 45 52 2c  : TEXT, INTEGER,
7220: 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69 74 69   REAL.# Affiniti
7230: 65 73 20 6f 66 20 74 32 20 28 74 65 73 74 20 63  es of t2 (test c
7240: 61 73 65 73 20 33 2e 32 2e 32 2e 2a 29 3a 20 4e  ases 3.2.2.*): N
7250: 55 4d 45 52 49 43 2c 20 4e 55 4d 45 52 49 43 2c  UMERIC, NUMERIC,
7260: 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69 74 69   REAL.# Affiniti
7270: 65 73 20 6f 66 20 74 33 20 28 74 65 73 74 20 63  es of t3 (test c
7280: 61 73 65 73 20 33 2e 32 2e 33 2e 2a 29 3a 20 4e  ases 3.2.3.*): N
7290: 4f 4e 45 2c 20 4e 4f 4e 45 0a 23 0a 64 6f 5f 65  ONE, NONE.#.do_e
72a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
72b0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 32 2e 30 20  eatetable-3.2.0 
72c0: 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31  { DELETE FROM t1
72d0: 3b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 32  ; DELETE FROM t2
72e0: 3b 20 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65 61 74  ; } {}..do_creat
72f0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32  etable_tests 3.2
7300: 2e 31 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45  .1 -query {.  SE
7310: 4c 45 43 54 20 71 75 6f 74 65 28 78 29 2c 20 71  LECT quote(x), q
7320: 75 6f 74 65 28 79 29 2c 20 71 75 6f 74 65 28 7a  uote(y), quote(z
7330: 29 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  ) FROM t1 ORDER 
7340: 42 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49  BY rowid DESC LI
7350: 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20 20  MIT 1;.} {.  1  
7360: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
7370: 20 56 41 4c 55 45 53 28 31 35 2c 20 20 20 27 32   VALUES(15,   '2
7380: 32 2e 30 27 2c 20 27 31 34 27 29 22 20 20 20 7b  2.0', '14')"   {
7390: 27 31 35 27 20 32 32 20 31 34 2e 30 7d 0a 20 20  '15' 22 14.0}.  
73a0: 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  2   "INSERT INTO
73b0: 20 74 31 20 56 41 4c 55 45 53 28 32 32 2e 30 2c   t1 VALUES(22.0,
73c0: 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20 20 20   22.0, 22.0)"   
73d0: 20 20 7b 27 32 32 2e 30 27 20 32 32 20 32 32 2e    {'22.0' 22 22.
73e0: 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61  0}.}.do_createta
73f0: 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 32 20  ble_tests 3.2.2 
7400: 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43  -query {.  SELEC
7410: 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74  T quote(a), quot
7420: 65 28 62 29 2c 20 71 75 6f 74 65 28 63 29 20 46  e(b), quote(c) F
7430: 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20  ROM t2 ORDER BY 
7440: 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54  rowid DESC LIMIT
7450: 20 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49   1;.} {.  1   "I
7460: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
7470: 4c 55 45 53 28 31 35 2c 20 20 20 27 32 32 2e 30  LUES(15,   '22.0
7480: 27 2c 20 27 31 34 27 29 22 20 20 20 7b 31 35 20  ', '14')"   {15 
7490: 20 20 32 32 20 20 31 34 2e 30 7d 0a 20 20 32 20    22  14.0}.  2 
74a0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
74b0: 32 20 56 41 4c 55 45 53 28 32 32 2e 30 2c 20 32  2 VALUES(22.0, 2
74c0: 32 2e 30 2c 20 32 32 2e 30 29 22 20 20 20 20 20  2.0, 22.0)"     
74d0: 7b 32 32 20 20 20 32 32 20 20 32 32 2e 30 7d 0a  {22   22  22.0}.
74e0: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
74f0: 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d 71 75  _tests 3.2.3 -qu
7500: 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20 71  ery {.  SELECT q
7510: 75 6f 74 65 28 6f 29 2c 20 71 75 6f 74 65 28 74  uote(o), quote(t
7520: 29 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20  ) FROM t3 ORDER 
7530: 42 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49  BY rowid DESC LI
7540: 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20 20  MIT 1;.} {.  1  
7550: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33   "INSERT INTO t3
7560: 20 56 41 4c 55 45 53 28 27 31 35 27 2c 20 27 32   VALUES('15', '2
7570: 32 2e 30 27 29 22 20 20 20 20 20 20 20 20 20 7b  2.0')"         {
7580: 27 31 35 27 20 27 32 32 2e 30 27 7d 0a 20 20 32  '15' '22.0'}.  2
7590: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
75a0: 74 33 20 56 41 4c 55 45 53 28 31 35 2c 20 32 32  t3 VALUES(15, 22
75b0: 2e 30 29 22 20 20 20 20 20 20 20 20 20 20 20 20  .0)"            
75c0: 20 7b 31 35 20 32 32 2e 30 7d 0a 7d 0a 0a 23 20   {15 22.0}.}..# 
75d0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34  EVIDENCE-OF: R-4
75e0: 32 33 31 36 2d 30 39 35 38 32 20 49 66 20 74 68  2316-09582 If th
75f0: 65 72 65 20 69 73 20 6e 6f 20 65 78 70 6c 69 63  ere is no explic
7600: 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73  it DEFAULT claus
7610: 65 0a 23 20 61 74 74 61 63 68 65 64 20 74 6f 20  e.# attached to 
7620: 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  a column definit
7630: 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 64 65  ion, then the de
7640: 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20 74  fault value of t
7650: 68 65 20 63 6f 6c 75 6d 6e 0a 23 20 69 73 20 4e  he column.# is N
7660: 55 4c 4c 2e 0a 23 0a 23 20 20 20 20 20 4e 6f 6e  ULL..#.#     Non
7670: 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73  e of the columns
7680: 20 69 6e 20 74 61 62 6c 65 20 74 31 20 68 61 76   in table t1 hav
7690: 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20 44 45  e an explicit DE
76a0: 46 41 55 4c 54 20 63 6c 61 75 73 65 2e 0a 23 20  FAULT clause..# 
76b0: 20 20 20 20 53 6f 20 74 65 73 74 69 6e 67 20 74      So testing t
76c0: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
76d0: 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 63 6f 6c  value of all col
76e0: 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20 74 31  umns in table t1
76f0: 20 69 73 0a 23 20 20 20 20 20 4e 55 4c 4c 20 73   is.#     NULL s
7700: 65 72 76 65 73 20 74 6f 20 76 65 72 69 66 79 20  erves to verify 
7710: 74 68 65 20 61 62 6f 76 65 2e 0a 23 20 20 20 20  the above..#    
7720: 20 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65   .do_createtable
7730: 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d 71 75  _tests 3.2.3 -qu
7740: 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20 71  ery {.  SELECT q
7750: 75 6f 74 65 28 78 29 2c 20 71 75 6f 74 65 28 79  uote(x), quote(y
7760: 29 2c 20 71 75 6f 74 65 28 7a 29 20 46 52 4f 4d  ), quote(z) FROM
7770: 20 74 31 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a   t1.} -repair {.
7780: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45    execsql { DELE
7790: 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d 20 7b  TE FROM t1 }.} {
77a0: 0a 20 20 31 20 20 20 22 49 4e 53 45 52 54 20 49  .  1   "INSERT I
77b0: 4e 54 4f 20 74 31 28 78 2c 20 79 29 20 56 41 4c  NTO t1(x, y) VAL
77c0: 55 45 53 28 27 61 62 63 27 2c 20 27 78 79 7a 27  UES('abc', 'xyz'
77d0: 29 22 20 20 20 7b 27 61 62 63 27 20 27 78 79 7a  )"   {'abc' 'xyz
77e0: 27 20 4e 55 4c 4c 7d 0a 20 20 32 20 20 20 22 49  ' NULL}.  2   "I
77f0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 78 2c  NSERT INTO t1(x,
7800: 20 7a 29 20 56 41 4c 55 45 53 28 27 61 62 63 27   z) VALUES('abc'
7810: 2c 20 27 78 79 7a 27 29 22 20 20 20 7b 27 61 62  , 'xyz')"   {'ab
7820: 63 27 20 4e 55 4c 4c 20 27 78 79 7a 27 7d 0a 20  c' NULL 'xyz'}. 
7830: 20 33 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   3   "INSERT INT
7840: 4f 20 74 31 20 44 45 46 41 55 4c 54 20 56 41 4c  O t1 DEFAULT VAL
7850: 55 45 53 22 20 20 20 20 20 20 20 20 20 20 20 20  UES"            
7860: 20 20 20 7b 4e 55 4c 4c 20 4e 55 4c 4c 20 4e 55     {NULL NULL NU
7870: 4c 4c 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  LL}.}..# EVIDENC
7880: 45 2d 4f 46 3a 20 52 2d 36 32 39 34 30 2d 34 33  E-OF: R-62940-43
7890: 30 30 35 20 41 6e 20 65 78 70 6c 69 63 69 74 20  005 An explicit 
78a0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 20 6d  DEFAULT clause m
78b0: 61 79 20 73 70 65 63 69 66 79 20 74 68 61 74 0a  ay specify that.
78c0: 23 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  # the default va
78d0: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61 20 73  lue is NULL, a s
78e0: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 2c 20  tring constant, 
78f0: 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2c  a blob constant,
7900: 20 61 0a 23 20 73 69 67 6e 65 64 2d 6e 75 6d 62   a.# signed-numb
7910: 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e 73 74  er, or any const
7920: 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 20 65  ant expression e
7930: 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72 65 6e  nclosed in paren
7940: 74 68 65 73 65 73 2e 20 41 6e 0a 23 20 65 78 70  theses. An.# exp
7950: 6c 69 63 69 74 20 64 65 66 61 75 6c 74 20 76 61  licit default va
7960: 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62 65 20  lue may also be 
7970: 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  one of the speci
7980: 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64  al case-independ
7990: 65 6e 74 0a 23 20 6b 65 79 77 6f 72 64 73 20 43  ent.# keywords C
79a0: 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43 55 52  URRENT_TIME, CUR
79b0: 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43 55 52  RENT_DATE or CUR
79c0: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 2e 0a  RENT_TIMESTAMP..
79d0: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
79e0: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
79f0: 33 2e 33 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  3.3.1 {.  CREATE
7a00: 20 54 41 42 4c 45 20 74 34 28 0a 20 20 20 20 61   TABLE t4(.    a
7a10: 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c 0a 20   DEFAULT NULL,. 
7a20: 20 20 20 62 20 44 45 46 41 55 4c 54 20 27 73 74     b DEFAULT 'st
7a30: 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 27 2c 0a  ring constant',.
7a40: 20 20 20 20 63 20 44 45 46 41 55 4c 54 20 58 27      c DEFAULT X'
7a50: 34 32 34 43 34 46 34 32 27 2c 0a 20 20 20 20 64  424C4F42',.    d
7a60: 20 44 45 46 41 55 4c 54 20 31 2c 0a 20 20 20 20   DEFAULT 1,.    
7a70: 65 20 44 45 46 41 55 4c 54 20 2d 31 2c 0a 20 20  e DEFAULT -1,.  
7a80: 20 20 66 20 44 45 46 41 55 4c 54 20 33 2e 31 34    f DEFAULT 3.14
7a90: 2c 0a 20 20 20 20 67 20 44 45 46 41 55 4c 54 20  ,.    g DEFAULT 
7aa0: 2d 33 2e 31 34 2c 0a 20 20 20 20 68 20 44 45 46  -3.14,.    h DEF
7ab0: 41 55 4c 54 20 28 20 73 75 62 73 74 72 28 27 61  AULT ( substr('a
7ac0: 62 63 64 27 2c 20 30 2c 20 32 29 20 7c 7c 20 27  bcd', 0, 2) || '
7ad0: 63 64 27 20 29 2c 0a 20 20 20 20 69 20 44 45 46  cd' ),.    i DEF
7ae0: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
7af0: 45 2c 0a 20 20 20 20 6a 20 44 45 46 41 55 4c 54  E,.    j DEFAULT
7b00: 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 0a 20   CURRENT_DATE,. 
7b10: 20 20 20 6b 20 44 45 46 41 55 4c 54 20 43 55 52     k DEFAULT CUR
7b20: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20  RENT_TIMESTAMP. 
7b30: 20 29 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56 49 44   );.} {}..# EVID
7b40: 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 30 32 38 38  ENCE-OF: R-10288
7b50: 2d 34 33 31 36 39 20 46 6f 72 20 74 68 65 20 70  -43169 For the p
7b60: 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20 44  urposes of the D
7b70: 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c 20 61  EFAULT clause, a
7b80: 6e 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 20 69  n.# expression i
7b90: 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63 6f 6e  s considered con
7ba0: 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64 20 74  stant provided t
7bb0: 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  hat it does not 
7bc0: 63 6f 6e 74 61 69 6e 0a 23 20 61 6e 79 20 73 75  contain.# any su
7bd0: 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73 74 72  b-queries or str
7be0: 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20 65 6e  ing constants en
7bf0: 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62 6c 65  closed in double
7c00: 20 71 75 6f 74 65 73 2e 0a 23 0a 64 6f 5f 63 72   quotes..#.do_cr
7c10: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
7c20: 33 2e 34 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20  3.4.1 -error {. 
7c30: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
7c40: 66 20 63 6f 6c 75 6d 6e 20 5b 78 5d 20 69 73 20  f column [x] is 
7c50: 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 0a 7d 20 7b  not constant.} {
7c60: 0a 20 20 31 20 20 20 7b 43 52 45 41 54 45 20 54  .  1   {CREATE T
7c70: 41 42 4c 45 20 74 35 28 78 20 44 45 46 41 55 4c  ABLE t5(x DEFAUL
7c80: 54 20 28 20 28 53 45 4c 45 43 54 20 31 29 20 29  T ( (SELECT 1) )
7c90: 29 7d 20 20 7b 7d 0a 20 20 32 20 20 20 7b 43 52  )}  {}.  2   {CR
7ca0: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 78 20  EATE TABLE t5(x 
7cb0: 44 45 46 41 55 4c 54 20 28 20 22 61 62 63 22 20  DEFAULT ( "abc" 
7cc0: 29 29 7d 20 20 7b 7d 0a 20 20 33 20 20 20 7b 43  ))}  {}.  3   {C
7cd0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 78  REATE TABLE t5(x
7ce0: 20 44 45 46 41 55 4c 54 20 28 20 31 20 49 4e 20   DEFAULT ( 1 IN 
7cf0: 28 53 45 4c 45 43 54 20 31 29 20 29 29 7d 20 20  (SELECT 1) ))}  
7d00: 7b 7d 0a 20 20 34 20 20 20 7b 43 52 45 41 54 45  {}.  4   {CREATE
7d10: 20 54 41 42 4c 45 20 74 35 28 78 20 44 45 46 41   TABLE t5(x DEFA
7d20: 55 4c 54 20 28 20 45 58 49 53 54 53 20 28 53 45  ULT ( EXISTS (SE
7d30: 4c 45 43 54 20 31 29 20 29 29 7d 20 20 7b 7d 0a  LECT 1) ))}  {}.
7d40: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
7d50: 5f 74 65 73 74 73 20 33 2e 34 2e 32 20 2d 72 65  _tests 3.4.2 -re
7d60: 70 61 69 72 20 7b 0a 20 20 63 61 74 63 68 73 71  pair {.  catchsq
7d70: 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74  l { DROP TABLE t
7d80: 35 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 7b 43  5 }.} {.  1   {C
7d90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 78  REATE TABLE t5(x
7da0: 20 44 45 46 41 55 4c 54 20 28 20 27 61 62 63 27   DEFAULT ( 'abc'
7db0: 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20 20 7b   ))}  {}.  2   {
7dc0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
7dd0: 78 20 44 45 46 41 55 4c 54 20 28 20 31 20 49 4e  x DEFAULT ( 1 IN
7de0: 20 28 31 2c 20 32 2c 20 33 29 20 29 29 7d 20 20   (1, 2, 3) ))}  
7df0: 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  {}.}..# EVIDENCE
7e00: 2d 4f 46 3a 20 52 2d 31 38 38 31 34 2d 32 33 35  -OF: R-18814-235
7e10: 30 31 20 45 61 63 68 20 74 69 6d 65 20 61 20 72  01 Each time a r
7e20: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
7e30: 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 0a 23 20  nto the table.# 
7e40: 62 79 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61  by an INSERT sta
7e50: 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f 65 73  tement that does
7e60: 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65 78 70   not provide exp
7e70: 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66 6f 72  licit values for
7e80: 20 61 6c 6c 0a 23 20 74 61 62 6c 65 20 63 6f 6c   all.# table col
7e90: 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65 73 20  umns the values 
7ea0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6e 65  stored in the ne
7eb0: 77 20 72 6f 77 20 61 72 65 20 64 65 74 65 72 6d  w row are determ
7ec0: 69 6e 65 64 20 62 79 20 74 68 65 69 72 0a 23 20  ined by their.# 
7ed0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 0a 23  default values.#
7ee0: 0a 23 20 20 20 20 20 56 65 72 69 66 79 20 74 68  .#     Verify th
7ef0: 69 73 20 77 69 74 68 20 73 6f 6d 65 20 61 73 73  is with some ass
7f00: 65 72 74 20 73 74 61 74 65 6d 65 6e 74 73 20 66  ert statements f
7f10: 6f 72 20 77 68 69 63 68 20 61 6c 6c 2c 20 73 6f  or which all, so
7f20: 6d 65 20 61 6e 64 20 6e 6f 0a 23 20 20 20 20 20  me and no.#     
7f30: 63 6f 6c 75 6d 6e 73 20 6c 61 63 6b 20 65 78 70  columns lack exp
7f40: 6c 69 63 69 74 20 76 61 6c 75 65 73 2e 0a 23 0a  licit values..#.
7f50: 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72 72 65  set sqlite_curre
7f60: 6e 74 5f 74 69 6d 65 20 31 30 30 30 30 30 30 30  nt_time 10000000
7f70: 30 30 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  00.do_createtabl
7f80: 65 5f 74 65 73 74 73 20 33 2e 35 20 2d 71 75 65  e_tests 3.5 -que
7f90: 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20 71 75  ry {.  SELECT qu
7fa0: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
7fb0: 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75 6f 74  , quote(c), quot
7fc0: 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29 2c 20  e(d), quote(e), 
7fd0: 71 75 6f 74 65 28 66 29 2c 20 0a 20 20 20 20 20  quote(f), .     
7fe0: 20 20 20 20 71 75 6f 74 65 28 67 29 2c 20 71 75      quote(g), qu
7ff0: 6f 74 65 28 68 29 2c 20 71 75 6f 74 65 28 69 29  ote(h), quote(i)
8000: 2c 20 71 75 6f 74 65 28 6a 29 2c 20 71 75 6f 74  , quote(j), quot
8010: 65 28 6b 29 0a 20 20 46 52 4f 4d 20 74 34 20 4f  e(k).  FROM t4 O
8020: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
8030: 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a  SC LIMIT 1;.} {.
8040: 20 20 31 20 22 49 4e 53 45 52 54 20 49 4e 54 4f    1 "INSERT INTO
8050: 20 74 34 20 44 45 46 41 55 4c 54 20 56 41 4c 55   t4 DEFAULT VALU
8060: 45 53 22 20 7b 0a 20 20 20 20 4e 55 4c 4c 20 7b  ES" {.    NULL {
8070: 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74  'string constant
8080: 27 7d 20 58 27 34 32 34 43 34 46 34 32 27 20 31  '} X'424C4F42' 1
8090: 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 0a   -1 3.14 -3.14 .
80a0: 20 20 20 20 27 61 63 64 27 20 27 30 31 3a 34 36      'acd' '01:46
80b0: 3a 34 30 27 20 27 32 30 30 31 2d 30 39 2d 30 39  :40' '2001-09-09
80c0: 27 20 7b 27 32 30 30 31 2d 30 39 2d 30 39 20 30  ' {'2001-09-09 0
80d0: 31 3a 34 36 3a 34 30 27 7d 0a 20 20 7d 0a 0a 20  1:46:40'}.  }.. 
80e0: 20 32 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20   2 "INSERT INTO 
80f0: 74 34 28 61 2c 20 62 2c 20 63 29 20 56 41 4c 55  t4(a, b, c) VALU
8100: 45 53 28 31 2c 20 32 2c 20 33 29 22 20 7b 0a 20  ES(1, 2, 3)" {. 
8110: 20 20 20 31 20 32 20 33 20 31 20 2d 31 20 33 2e     1 2 3 1 -1 3.
8120: 31 34 20 2d 33 2e 31 34 20 27 61 63 64 27 20 27  14 -3.14 'acd' '
8130: 30 31 3a 34 36 3a 34 30 27 20 27 32 30 30 31 2d  01:46:40' '2001-
8140: 30 39 2d 30 39 27 20 7b 27 32 30 30 31 2d 30 39  09-09' {'2001-09
8150: 2d 30 39 20 30 31 3a 34 36 3a 34 30 27 7d 0a 20  -09 01:46:40'}. 
8160: 20 7d 0a 0a 20 20 33 20 22 49 4e 53 45 52 54 20   }..  3 "INSERT 
8170: 49 4e 54 4f 20 74 34 28 6b 2c 20 6a 2c 20 69 29  INTO t4(k, j, i)
8180: 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29   VALUES(1, 2, 3)
8190: 22 20 7b 0a 20 20 20 20 4e 55 4c 4c 20 7b 27 73  " {.    NULL {'s
81a0: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 27 7d  tring constant'}
81b0: 20 58 27 34 32 34 43 34 46 34 32 27 20 31 20 2d   X'424C4F42' 1 -
81c0: 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 27 61 63  1 3.14 -3.14 'ac
81d0: 64 27 20 33 20 32 20 31 0a 20 20 7d 0a 0a 20 20  d' 3 2 1.  }..  
81e0: 34 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  4 "INSERT INTO t
81f0: 34 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c 67 2c  4(a,b,c,d,e,f,g,
8200: 68 2c 69 2c 6a 2c 6b 29 20 56 41 4c 55 45 53 28  h,i,j,k) VALUES(
8210: 31 2c 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c 38 2c  1,2,3,4,5,6,7,8,
8220: 39 2c 31 30 2c 31 31 29 22 20 7b 0a 20 20 20 20  9,10,11)" {.    
8230: 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20  1 2 3 4 5 6 7 8 
8240: 39 20 31 30 20 31 31 0a 20 20 7d 0a 7d 0a 0a 23  9 10 11.  }.}..#
8250: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
8260: 31 32 35 37 32 2d 36 32 35 30 31 20 49 66 20 74  12572-62501 If t
8270: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
8280: 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69   of the column i
8290: 73 20 61 0a 23 20 63 6f 6e 73 74 61 6e 74 20 4e  s a.# constant N
82a0: 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f 62 20  ULL, text, blob 
82b0: 6f 72 20 73 69 67 6e 65 64 2d 6e 75 6d 62 65 72  or signed-number
82c0: 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74 68 61   value, then tha
82d0: 74 20 76 61 6c 75 65 20 69 73 0a 23 20 75 73 65  t value is.# use
82e0: 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20 74 68  d directly in th
82f0: 65 20 6e 65 77 20 72 6f 77 2e 0a 23 0a 64 6f 5f  e new row..#.do_
8300: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
8310: 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 36 2e 31  reatetable-3.6.1
8320: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
8330: 45 20 74 35 28 0a 20 20 20 20 61 20 44 45 46 41  E t5(.    a DEFA
8340: 55 4c 54 20 4e 55 4c 4c 2c 20 20 0a 20 20 20 20  ULT NULL,  .    
8350: 62 20 44 45 46 41 55 4c 54 20 27 74 65 78 74 20  b DEFAULT 'text 
8360: 76 61 6c 75 65 27 2c 20 20 0a 20 20 20 20 63 20  value',  .    c 
8370: 44 45 46 41 55 4c 54 20 58 27 34 32 34 43 34 46  DEFAULT X'424C4F
8380: 34 32 27 2c 0a 20 20 20 20 64 20 44 45 46 41 55  42',.    d DEFAU
8390: 4c 54 20 2d 34 35 36 37 38 2e 36 2c 0a 20 20 20  LT -45678.6,.   
83a0: 20 65 20 44 45 46 41 55 4c 54 20 33 39 34 35 30   e DEFAULT 39450
83b0: 37 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65  7.  );.} {}.do_e
83c0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
83d0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 36 2e 32 20  eatetable-3.6.2 
83e0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
83f0: 74 35 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  t5 DEFAULT VALUE
8400: 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74  S;.  SELECT quot
8410: 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29 2c 20  e(a), quote(b), 
8420: 71 75 6f 74 65 28 63 29 2c 20 71 75 6f 74 65 28  quote(c), quote(
8430: 64 29 2c 20 71 75 6f 74 65 28 65 29 20 46 52 4f  d), quote(e) FRO
8440: 4d 20 74 35 3b 0a 7d 20 7b 4e 55 4c 4c 20 7b 27  M t5;.} {NULL {'
8450: 74 65 78 74 20 76 61 6c 75 65 27 7d 20 58 27 34  text value'} X'4
8460: 32 34 43 34 46 34 32 27 20 2d 34 35 36 37 38 2e  24C4F42' -45678.
8470: 36 20 33 39 34 35 30 37 7d 0a 0a 23 20 45 56 49  6 394507}..# EVI
8480: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 30 36 31  DENCE-OF: R-6061
8490: 36 2d 35 30 32 35 31 20 49 66 20 74 68 65 20 64  6-50251 If the d
84a0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
84b0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 0a 23  a column is an.#
84c0: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 70   expression in p
84d0: 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68 65 6e  arentheses, then
84e0: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
84f0: 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f 6e 63  is evaluated onc
8500: 65 20 66 6f 72 0a 23 20 65 61 63 68 20 72 6f 77  e for.# each row
8510: 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20 74 68   inserted and th
8520: 65 20 72 65 73 75 6c 74 73 20 75 73 65 64 20 69  e results used i
8530: 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 23  n the new row..#
8540: 0a 23 20 20 20 54 65 73 74 20 63 61 73 65 20 33  .#   Test case 3
8550: 2e 36 2e 34 20 64 65 6d 6f 6e 73 74 72 61 74 65  .6.4 demonstrate
8560: 73 20 74 68 61 74 20 74 68 65 20 65 78 70 72 65  s that the expre
8570: 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75 61 74  ssion is evaluat
8580: 65 64 20 0a 23 20 20 20 73 65 70 61 72 61 74 65  ed .#   separate
8590: 6c 79 20 66 6f 72 20 65 61 63 68 20 72 6f 77 20  ly for each row 
85a0: 69 66 20 74 68 65 20 49 4e 53 45 52 54 20 69 73  if the INSERT is
85b0: 20 61 6e 20 22 49 4e 53 45 52 54 20 49 4e 54 4f   an "INSERT INTO
85c0: 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e 22   ... SELECT ..."
85d0: 0a 23 20 20 20 63 6f 6d 6d 61 6e 64 2e 0a 23 0a  .#   command..#.
85e0: 73 65 74 20 3a 3a 6e 65 78 74 69 6e 74 20 30 0a  set ::nextint 0.
85f0: 70 72 6f 63 20 6e 65 78 74 69 6e 74 20 7b 7d 20  proc nextint {} 
8600: 7b 20 69 6e 63 72 20 3a 3a 6e 65 78 74 69 6e 74  { incr ::nextint
8610: 20 7d 0a 64 62 20 66 75 6e 63 20 6e 65 78 74 69   }.db func nexti
8620: 6e 74 20 6e 65 78 74 69 6e 74 0a 0a 64 6f 5f 65  nt nextint..do_e
8630: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
8640: 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e 31 20  eatetable-3.7.1 
8650: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
8660: 20 74 36 28 61 20 44 45 46 41 55 4c 54 20 28 20   t6(a DEFAULT ( 
8670: 6e 65 78 74 69 6e 74 28 29 20 29 2c 20 62 20 44  nextint() ), b D
8680: 45 46 41 55 4c 54 20 28 20 6e 65 78 74 69 6e 74  EFAULT ( nextint
8690: 28 29 20 29 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65  () ));.} {}.do_e
86a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
86b0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e 32 20  eatetable-3.7.2 
86c0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
86d0: 74 36 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  t6 DEFAULT VALUE
86e0: 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74  S;.  SELECT quot
86f0: 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29 20 46  e(a), quote(b) F
8700: 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31 20 32 7d 0a  ROM t6;.} {1 2}.
8710: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
8720: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
8730: 37 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  7.3 {.  INSERT I
8740: 4e 54 4f 20 74 36 28 61 29 20 56 41 4c 55 45 53  NTO t6(a) VALUES
8750: 28 27 58 27 29 3b 0a 20 20 53 45 4c 45 43 54 20  ('X');.  SELECT 
8760: 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28  quote(a), quote(
8770: 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31  b) FROM t6;.} {1
8780: 20 32 20 27 58 27 20 33 7d 0a 64 6f 5f 65 78 65   2 'X' 3}.do_exe
8790: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
87a0: 74 65 74 61 62 6c 65 2d 33 2e 37 2e 34 20 7b 0a  tetable-3.7.4 {.
87b0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
87c0: 28 61 29 20 53 45 4c 45 43 54 20 61 20 46 52 4f  (a) SELECT a FRO
87d0: 4d 20 74 36 3b 0a 20 20 53 45 4c 45 43 54 20 71  M t6;.  SELECT q
87e0: 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62  uote(a), quote(b
87f0: 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31 20  ) FROM t6;.} {1 
8800: 32 20 27 58 27 20 33 20 31 20 34 20 27 58 27 20  2 'X' 3 1 4 'X' 
8810: 35 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  5}..# EVIDENCE-O
8820: 46 3a 20 52 2d 31 35 33 36 33 2d 35 35 32 33 30  F: R-15363-55230
8830: 20 49 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   If the default 
8840: 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c 75 6d  value of a colum
8850: 6e 20 69 73 0a 23 20 43 55 52 52 45 4e 54 5f 54  n is.# CURRENT_T
8860: 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44 41 54  IME, CURRENT_DAT
8870: 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54 49 4d  E or CURRENT_TIM
8880: 45 53 54 41 4d 50 2c 20 74 68 65 6e 20 74 68 65  ESTAMP, then the
8890: 20 76 61 6c 75 65 20 75 73 65 64 0a 23 20 69 6e   value used.# in
88a0: 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69 73 20   the new row is 
88b0: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
88c0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 75 72  ation of the cur
88d0: 72 65 6e 74 20 55 54 43 20 64 61 74 65 20 61 6e  rent UTC date an
88e0: 64 2f 6f 72 0a 23 20 74 69 6d 65 2e 0a 23 0a 23  d/or.# time..#.#
88f0: 20 20 20 20 20 54 68 69 73 20 69 73 20 64 69 66       This is dif
8900: 66 69 63 75 6c 74 20 74 6f 20 74 65 73 74 20 6c  ficult to test l
8910: 69 74 65 72 61 6c 6c 79 20 77 69 74 68 6f 75 74  iterally without
8920: 20 6b 6e 6f 77 69 6e 67 20 77 68 61 74 20 74 69   knowing what ti
8930: 6d 65 20 74 68 65 20 0a 23 20 20 20 20 20 75 73  me the .#     us
8940: 65 72 20 77 69 6c 6c 20 72 75 6e 20 74 68 65 20  er will run the 
8950: 74 65 73 74 73 2e 20 49 6e 73 74 65 61 64 2c 20  tests. Instead, 
8960: 77 65 20 74 65 73 74 20 74 68 61 74 20 74 68 65  we test that the
8970: 20 74 68 72 65 65 20 63 61 73 65 73 0a 23 20 20   three cases.#  
8980: 20 20 20 61 62 6f 76 65 20 73 65 74 20 74 68 65     above set the
8990: 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 63 75   value to the cu
89a0: 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64 2f 6f  rrent date and/o
89b0: 72 20 74 69 6d 65 20 61 63 63 6f 72 64 69 6e 67  r time according
89c0: 20 74 6f 0a 23 20 20 20 20 20 74 68 65 20 78 43   to.#     the xC
89d0: 75 72 72 65 6e 74 54 69 6d 65 28 29 20 6d 65 74  urrentTime() met
89e0: 68 6f 64 20 6f 66 20 74 68 65 20 56 46 53 2e 20  hod of the VFS. 
89f0: 57 68 69 63 68 20 69 73 20 75 73 75 61 6c 6c 79  Which is usually
8a00: 20 74 68 65 20 73 61 6d 65 0a 23 20 20 20 20 20   the same.#     
8a10: 61 73 20 55 54 43 2e 20 49 6e 20 74 68 69 73 20  as UTC. In this 
8a20: 63 61 73 65 2c 20 68 6f 77 65 76 65 72 2c 20 77  case, however, w
8a30: 65 20 69 6e 73 74 72 75 6d 65 6e 74 20 69 74 20  e instrument it 
8a40: 74 6f 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  to always return
8a50: 0a 23 20 20 20 20 20 61 20 74 69 6d 65 20 65 71  .#     a time eq
8a60: 75 69 76 61 6c 65 6e 74 20 74 6f 20 22 32 30 30  uivalent to "200
8a70: 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30  1-09-09 01:46:40
8a80: 20 55 54 43 22 2e 0a 23 0a 73 65 74 20 73 71 6c   UTC"..#.set sql
8a90: 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69 6d 65  ite_current_time
8aa0: 20 31 30 30 30 30 30 30 30 30 30 0a 64 6f 5f 65   1000000000.do_e
8ab0: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
8ac0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e 31 20  eatetable-3.8.1 
8ad0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
8ae0: 20 74 37 28 0a 20 20 20 20 61 20 44 45 46 41 55   t7(.    a DEFAU
8af0: 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c  LT CURRENT_TIME,
8b00: 20 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54 20   .    b DEFAULT 
8b10: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 0a 20  CURRENT_DATE, . 
8b20: 20 20 20 63 20 44 45 46 41 55 4c 54 20 43 55 52     c DEFAULT CUR
8b30: 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 0a 20  RENT_TIMESTAMP. 
8b40: 20 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63   );.} {}.do_exec
8b50: 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74  sql_test e_creat
8b60: 65 74 61 62 6c 65 2d 33 2e 38 2e 32 20 7b 0a 20  etable-3.8.2 {. 
8b70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
8b80: 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53 3b 0a  DEFAULT VALUES;.
8b90: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 61    SELECT quote(a
8ba0: 29 2c 20 71 75 6f 74 65 28 62 29 2c 20 71 75 6f  ), quote(b), quo
8bb0: 74 65 28 63 29 20 46 52 4f 4d 20 74 37 3b 0a 7d  te(c) FROM t7;.}
8bc0: 20 7b 27 30 31 3a 34 36 3a 34 30 27 20 27 32 30   {'01:46:40' '20
8bd0: 30 31 2d 30 39 2d 30 39 27 20 7b 27 32 30 30 31  01-09-09' {'2001
8be0: 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30 27  -09-09 01:46:40'
8bf0: 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  }}...# EVIDENCE-
8c00: 4f 46 3a 20 52 2d 36 32 33 32 37 2d 35 33 38 34  OF: R-62327-5384
8c10: 33 20 46 6f 72 20 43 55 52 52 45 4e 54 5f 54 49  3 For CURRENT_TI
8c20: 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74 20 6f  ME, the format o
8c30: 66 20 74 68 65 20 76 61 6c 75 65 0a 23 20 69 73  f the value.# is
8c40: 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 0a 23 0a 23   "HH:MM:SS"..#.#
8c50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
8c60: 30 33 37 37 35 2d 34 33 34 37 31 20 46 6f 72 20  03775-43471 For 
8c70: 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20 22 59  CURRENT_DATE, "Y
8c80: 59 59 59 2d 4d 4d 2d 44 44 22 2e 0a 23 0a 23 20  YYY-MM-DD"..#.# 
8c90: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30  EVIDENCE-OF: R-0
8ca0: 37 36 37 37 2d 34 34 39 32 36 20 54 68 65 20 66  7677-44926 The f
8cb0: 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52 45 4e  ormat for CURREN
8cc0: 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73 0a 23  T_TIMESTAMP is.#
8cd0: 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48 48 3a   "YYYY-MM-DD HH:
8ce0: 4d 4d 3a 53 53 22 2e 0a 23 0a 23 20 20 20 20 20  MM:SS"..#.#     
8cf0: 54 68 65 20 74 68 72 65 65 20 61 62 6f 76 65 20  The three above 
8d00: 61 72 65 20 64 65 6d 6f 6e 73 74 72 61 74 65 64  are demonstrated
8d10: 20 62 79 20 74 65 73 74 73 20 31 2c 20 32 20 61   by tests 1, 2 a
8d20: 6e 64 20 33 20 62 65 6c 6f 77 2e 20 0a 23 20 20  nd 3 below. .#  
8d30: 20 20 20 52 65 73 70 65 63 74 69 76 65 6c 79 2e     Respectively.
8d40: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
8d50: 65 5f 74 65 73 74 73 20 33 2e 38 2e 33 20 2d 71  e_tests 3.8.3 -q
8d60: 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20  uery {.  SELECT 
8d70: 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 37 20  a, b, c FROM t7 
8d80: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
8d90: 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b  ESC LIMIT 1;.} {
8da0: 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49 4e 54  .  1 "INSERT INT
8db0: 4f 20 74 37 28 62 2c 20 63 29 20 56 41 4c 55 45  O t7(b, c) VALUE
8dc0: 53 28 27 78 27 2c 20 27 79 27 29 22 20 7b 30 31  S('x', 'y')" {01
8dd0: 3a 34 36 3a 34 30 20 78 20 79 7d 0a 20 20 32 20  :46:40 x y}.  2 
8de0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 28  "INSERT INTO t7(
8df0: 63 2c 20 61 29 20 56 41 4c 55 45 53 28 27 78 27  c, a) VALUES('x'
8e00: 2c 20 27 79 27 29 22 20 7b 79 20 32 30 30 31 2d  , 'y')" {y 2001-
8e10: 30 39 2d 30 39 20 78 7d 0a 20 20 33 20 22 49 4e  09-09 x}.  3 "IN
8e20: 53 45 52 54 20 49 4e 54 4f 20 74 37 28 61 2c 20  SERT INTO t7(a, 
8e30: 62 29 20 56 41 4c 55 45 53 28 27 78 27 2c 20 27  b) VALUES('x', '
8e40: 79 27 29 22 20 7b 78 20 79 20 7b 32 30 30 31 2d  y')" {x y {2001-
8e50: 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30 7d 7d  09-09 01:46:40}}
8e60: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
8e70: 46 3a 20 52 2d 35 35 30 36 31 2d 34 37 37 35 34  F: R-55061-47754
8e80: 20 54 68 65 20 43 4f 4c 4c 41 54 45 20 63 6c 61   The COLLATE cla
8e90: 75 73 65 20 73 70 65 63 69 66 69 65 73 20 74 68  use specifies th
8ea0: 65 20 6e 61 6d 65 20 6f 66 20 61 0a 23 20 63 6f  e name of a.# co
8eb0: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
8ec0: 20 74 6f 20 75 73 65 20 61 73 20 74 68 65 20 64   to use as the d
8ed0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
8ee0: 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20 74 68   sequence for th
8ef0: 65 0a 23 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20  e.# column..#.# 
8f00: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34  EVIDENCE-OF: R-4
8f10: 30 32 37 35 2d 35 34 33 36 33 20 49 66 20 6e 6f  0275-54363 If no
8f20: 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73 65 20   COLLATE clause 
8f30: 69 73 20 73 70 65 63 69 66 69 65 64 2c 20 74 68  is specified, th
8f40: 65 0a 23 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  e.# default coll
8f50: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 69  ation sequence i
8f60: 73 20 42 49 4e 41 52 59 2e 0a 23 0a 64 6f 5f 65  s BINARY..#.do_e
8f70: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
8f80: 65 61 74 65 74 61 62 6c 65 2d 33 2d 39 2e 31 20  eatetable-3-9.1 
8f90: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
8fa0: 20 74 38 28 61 20 43 4f 4c 4c 41 54 45 20 6e 6f   t8(a COLLATE no
8fb0: 63 61 73 65 2c 20 62 20 43 4f 4c 4c 41 54 45 20  case, b COLLATE 
8fc0: 72 74 72 69 6d 2c 20 63 20 43 4f 4c 4c 41 54 45  rtrim, c COLLATE
8fd0: 20 62 69 6e 61 72 79 2c 20 64 29 3b 0a 20 20 49   binary, d);.  I
8fe0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41  NSERT INTO t8 VA
8ff0: 4c 55 45 53 28 27 61 62 63 27 2c 20 20 20 27 61  LUES('abc',   'a
9000: 62 63 27 2c 20 20 20 27 61 62 63 27 2c 20 20 20  bc',   'abc',   
9010: 27 61 62 63 27 29 3b 0a 20 20 49 4e 53 45 52 54  'abc');.  INSERT
9020: 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28   INTO t8 VALUES(
9030: 27 61 62 63 20 20 27 2c 20 27 61 62 63 20 20 27  'abc  ', 'abc  '
9040: 2c 20 27 61 62 63 20 20 27 2c 20 27 61 62 63 20  , 'abc  ', 'abc 
9050: 20 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   ');.  INSERT IN
9060: 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27 41 42  TO t8 VALUES('AB
9070: 43 20 20 27 2c 20 27 41 42 43 20 20 27 2c 20 27  C  ', 'ABC  ', '
9080: 41 42 43 20 20 27 2c 20 27 41 42 43 20 20 27 29  ABC  ', 'ABC  ')
9090: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
90a0: 74 38 20 56 41 4c 55 45 53 28 27 41 42 43 27 2c  t8 VALUES('ABC',
90b0: 20 20 20 27 41 42 43 27 2c 20 20 20 27 41 42 43     'ABC',   'ABC
90c0: 27 2c 20 20 20 27 41 42 43 27 29 3b 0a 7d 20 7b  ',   'ABC');.} {
90d0: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
90e0: 5f 74 65 73 74 73 20 33 2e 39 20 7b 0a 20 20 32  _tests 3.9 {.  2
90f0: 20 20 20 20 22 53 45 4c 45 43 54 20 61 20 46 52      "SELECT a FR
9100: 4f 4d 20 74 38 20 4f 52 44 45 52 20 42 59 20 61  OM t8 ORDER BY a
9110: 2c 20 72 6f 77 69 64 22 20 20 20 20 7b 61 62 63  , rowid"    {abc
9120: 20 41 42 43 20 7b 61 62 63 20 20 7d 20 7b 41 42   ABC {abc  } {AB
9130: 43 20 20 7d 7d 0a 20 20 33 20 20 20 20 22 53 45  C  }}.  3    "SE
9140: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 38 20 4f  LECT b FROM t8 O
9150: 52 44 45 52 20 42 59 20 62 2c 20 72 6f 77 69 64  RDER BY b, rowid
9160: 22 20 20 20 20 7b 7b 41 42 43 20 20 7d 20 41 42  "    {{ABC  } AB
9170: 43 20 61 62 63 20 7b 61 62 63 20 20 7d 7d 0a 20  C abc {abc  }}. 
9180: 20 34 20 20 20 20 22 53 45 4c 45 43 54 20 63 20   4    "SELECT c 
9190: 46 52 4f 4d 20 74 38 20 4f 52 44 45 52 20 42 59  FROM t8 ORDER BY
91a0: 20 63 2c 20 72 6f 77 69 64 22 20 20 20 20 7b 41   c, rowid"    {A
91b0: 42 43 20 7b 41 42 43 20 20 7d 20 61 62 63 20 7b  BC {ABC  } abc {
91c0: 61 62 63 20 20 7d 7d 0a 20 20 35 20 20 20 20 22  abc  }}.  5    "
91d0: 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20 74 38  SELECT d FROM t8
91e0: 20 4f 52 44 45 52 20 42 59 20 64 2c 20 72 6f 77   ORDER BY d, row
91f0: 69 64 22 20 20 20 20 7b 41 42 43 20 7b 41 42 43  id"    {ABC {ABC
9200: 20 20 7d 20 61 62 63 20 7b 61 62 63 20 20 7d 7d    } abc {abc  }}
9210: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
9220: 46 3a 20 52 2d 32 35 34 37 33 2d 32 30 35 35 37  F: R-25473-20557
9230: 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63   The number of c
9240: 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61 62 6c  olumns in a tabl
9250: 65 20 69 73 20 6c 69 6d 69 74 65 64 0a 23 20 62  e is limited.# b
9260: 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 58  y the SQLITE_MAX
9270: 5f 43 4f 4c 55 4d 4e 20 63 6f 6d 70 69 6c 65 2d  _COLUMN compile-
9280: 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72 2e 0a  time parameter..
9290: 23 0a 70 72 6f 63 20 63 6f 6c 75 6d 6e 73 20 7b  #.proc columns {
92a0: 6e 7d 20 7b 0a 20 20 73 65 74 20 72 65 73 20 5b  n} {.  set res [
92b0: 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74  list].  for {set
92c0: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 7d 20   i 0} {$i < $n} 
92d0: 7b 69 6e 63 72 20 69 7d 20 7b 20 6c 61 70 70 65  {incr i} { lappe
92e0: 6e 64 20 72 65 73 20 22 63 24 69 22 20 7d 0a 20  nd res "c$i" }. 
92f0: 20 6a 6f 69 6e 20 24 72 65 73 20 22 2c 20 22 0a   join $res ", ".
9300: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
9310: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
9320: 33 2e 31 30 2e 31 20 5b 73 75 62 73 74 20 7b 0a  3.10.1 [subst {.
9330: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
9340: 39 28 5b 63 6f 6c 75 6d 6e 73 20 24 3a 3a 53 51  9([columns $::SQ
9350: 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 5d  LITE_MAX_COLUMN]
9360: 29 3b 0a 7d 5d 20 7b 7d 0a 64 6f 5f 63 61 74 63  );.}] {}.do_catc
9370: 68 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  hsql_test e_crea
9380: 74 65 74 61 62 6c 65 2d 33 2e 31 30 2e 32 20 5b  tetable-3.10.2 [
9390: 73 75 62 73 74 20 7b 0a 20 20 43 52 45 41 54 45  subst {.  CREATE
93a0: 20 54 41 42 4c 45 20 74 31 30 28 5b 63 6f 6c 75   TABLE t10([colu
93b0: 6d 6e 73 20 5b 65 78 70 72 20 24 3a 3a 53 51 4c  mns [expr $::SQL
93c0: 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e 2b 31  ITE_MAX_COLUMN+1
93d0: 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f 20  ]]);.}] {1 {too 
93e0: 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20  many columns on 
93f0: 74 31 30 7d 7d 0a 0a 23 20 45 56 49 44 45 4e 43  t10}}..# EVIDENC
9400: 45 2d 4f 46 3a 20 52 2d 32 37 37 37 35 2d 36 34  E-OF: R-27775-64
9410: 37 32 31 20 42 6f 74 68 20 6f 66 20 74 68 65 73  721 Both of thes
9420: 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62 65 20  e limits can be 
9430: 6c 6f 77 65 72 65 64 20 61 74 0a 23 20 72 75 6e  lowered at.# run
9440: 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65 20 73  time using the s
9450: 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20 43  qlite3_limit() C
9460: 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65 2e 0a  /C++ interface..
9470: 23 0a 23 20 20 20 41 20 33 30 2c 30 30 30 20 62  #.#   A 30,000 b
9480: 79 74 65 20 62 6c 6f 62 20 63 6f 6e 73 75 6d 65  yte blob consume
9490: 73 20 33 30 2c 30 30 33 20 62 79 74 65 73 20 6f  s 30,003 bytes o
94a0: 66 20 72 65 63 6f 72 64 20 73 70 61 63 65 2e 20  f record space. 
94b0: 41 20 72 65 63 6f 72 64 20 0a 23 20 20 20 74 68  A record .#   th
94c0: 61 74 20 63 6f 6e 74 61 69 6e 73 20 33 20 73 75  at contains 3 su
94d0: 63 68 20 62 6c 6f 62 73 20 63 6f 6e 73 75 6d 65  ch blobs consume
94e0: 73 20 28 33 30 2c 30 30 30 2a 33 29 2b 31 20 62  s (30,000*3)+1 b
94f0: 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e 20 54  ytes of space. T
9500: 65 73 74 73 0a 23 20 20 20 33 2e 31 31 2e 34 20  ests.#   3.11.4 
9510: 61 6e 64 20 33 2e 31 31 2e 35 2c 20 77 68 69 63  and 3.11.5, whic
9520: 68 20 76 65 72 69 66 79 20 74 68 61 74 20 53 51  h verify that SQ
9530: 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 20  LITE_MAX_LENGTH 
9540: 6d 61 79 20 62 65 20 6c 6f 77 65 72 65 64 0a 23  may be lowered.#
9550: 20 20 20 61 74 20 72 75 6e 74 69 6d 65 2c 20 61     at runtime, a
9560: 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68 69 73  re based on this
9570: 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2e 0a 23 0a   calculation..#.
9580: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20 64 62  sqlite3_limit db
9590: 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 43 4f   SQLITE_LIMIT_CO
95a0: 4c 55 4d 4e 20 35 30 30 0a 64 6f 5f 65 78 65 63  LUMN 500.do_exec
95b0: 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74  sql_test e_creat
95c0: 65 74 61 62 6c 65 2d 33 2e 31 31 2e 31 20 5b 73  etable-3.11.1 [s
95d0: 75 62 73 74 20 7b 0a 20 20 43 52 45 41 54 45 20  ubst {.  CREATE 
95e0: 54 41 42 4c 45 20 74 31 30 28 5b 63 6f 6c 75 6d  TABLE t10([colum
95f0: 6e 73 20 35 30 30 5d 29 3b 0a 7d 5d 20 7b 7d 0a  ns 500]);.}] {}.
9600: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
9610: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
9620: 2e 31 31 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20  .11.2 [subst {. 
9630: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
9640: 31 28 5b 63 6f 6c 75 6d 6e 73 20 35 30 31 5d 29  1([columns 501])
9650: 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f 20 6d 61 6e  ;.}] {1 {too man
9660: 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74 31 31  y columns on t11
9670: 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  }}..# Check that
9680: 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69   it is not possi
9690: 62 6c 65 20 74 6f 20 72 61 69 73 65 20 74 68 65  ble to raise the
96a0: 20 63 6f 6c 75 6d 6e 20 6c 69 6d 69 74 20 61 62   column limit ab
96b0: 6f 76 65 20 69 74 73 20 0a 23 20 64 65 66 61 75  ove its .# defau
96c0: 6c 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 20  lt compile time 
96d0: 76 61 6c 75 65 2e 0a 23 0a 73 71 6c 69 74 65 33  value..#.sqlite3
96e0: 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54 45  _limit db SQLITE
96f0: 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20 5b 65  _LIMIT_COLUMN [e
9700: 78 70 72 20 24 3a 3a 53 51 4c 49 54 45 5f 4d 41  xpr $::SQLITE_MA
9710: 58 5f 43 4f 4c 55 4d 4e 2b 32 5d 0a 64 6f 5f 63  X_COLUMN+2].do_c
9720: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63  atchsql_test e_c
9730: 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 31 2e  reatetable-3.11.
9740: 33 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52 45  3 [subst {.  CRE
9750: 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 5b 63  ATE TABLE t11([c
9760: 6f 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24 3a 3a  olumns [expr $::
9770: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
9780: 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74  N+1]]);.}] {1 {t
9790: 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20  oo many columns 
97a0: 6f 6e 20 74 31 31 7d 7d 0a 0a 73 71 6c 69 74 65  on t11}}..sqlite
97b0: 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49 54  3_limit db SQLIT
97c0: 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 20 39  E_LIMIT_LENGTH 9
97d0: 30 30 31 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  0010.do_execsql_
97e0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
97f0: 6c 65 2d 33 2e 31 31 2e 34 20 7b 0a 20 20 43 52  le-3.11.4 {.  CR
9800: 45 41 54 45 20 54 41 42 4c 45 20 74 31 32 28 61  EATE TABLE t12(a
9810: 2c 20 62 2c 20 63 29 3b 0a 20 20 49 4e 53 45 52  , b, c);.  INSER
9820: 54 20 49 4e 54 4f 20 74 31 32 20 56 41 4c 55 45  T INTO t12 VALUE
9830: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30  S(randomblob(300
9840: 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  00),randomblob(3
9850: 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62  0000),randomblob
9860: 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b 7d 0a 64  (30000));.} {}.d
9870: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
9880: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e  e_createtable-3.
9890: 31 31 2e 35 20 7b 0a 20 20 49 4e 53 45 52 54 20  11.5 {.  INSERT 
98a0: 49 4e 54 4f 20 74 31 32 20 56 41 4c 55 45 53 28  INTO t12 VALUES(
98b0: 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30 30 31  randomblob(30001
98c0: 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30  ),randomblob(300
98d0: 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  00),randomblob(3
98e0: 30 30 30 30 29 29 3b 0a 7d 20 7b 31 20 7b 73 74  0000));.} {1 {st
98f0: 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
9900: 20 62 69 67 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d   big}}..#-------
9910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9950: 2d 2d 0a 23 20 54 65 73 74 73 20 66 6f 72 20 73  --.# Tests for s
9960: 74 61 74 65 6d 65 6e 74 73 20 72 65 67 61 72 64  tatements regard
9970: 69 6e 67 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ing constraints 
9980: 28 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 55 4e  (PRIMARY KEY, UN
9990: 49 51 55 45 2c 20 4e 4f 54 20 0a 23 20 4e 55 4c  IQUE, NOT .# NUL
99a0: 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f 6e 73  L and CHECK cons
99b0: 74 72 61 69 6e 74 73 29 2e 0a 23 0a 0a 23 20 45  traints)..#..# E
99c0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32  VIDENCE-OF: R-52
99d0: 33 38 32 2d 35 34 32 34 38 20 45 61 63 68 20 74  382-54248 Each t
99e0: 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65 20 6d  able in SQLite m
99f0: 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73 74 20  ay have at most 
9a00: 6f 6e 65 0a 23 20 50 52 49 4d 41 52 59 20 4b 45  one.# PRIMARY KE
9a10: 59 2e 0a 23 20 0a 23 20 45 56 49 44 45 4e 43 45  Y..# .# EVIDENCE
9a20: 2d 4f 46 3a 20 52 2d 31 38 30 38 30 2d 34 37 32  -OF: R-18080-472
9a30: 37 31 20 49 66 20 74 68 65 72 65 20 69 73 20 6d  71 If there is m
9a40: 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 50 52 49  ore than one PRI
9a50: 4d 41 52 59 20 4b 45 59 0a 23 20 63 6c 61 75 73  MARY KEY.# claus
9a60: 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20 43 52  e in a single CR
9a70: 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74 65  EATE TABLE state
9a80: 6d 65 6e 74 2c 20 69 74 20 69 73 20 61 6e 20 65  ment, it is an e
9a90: 72 72 6f 72 2e 0a 23 0a 23 20 20 20 20 20 54 6f  rror..#.#     To
9aa0: 20 74 65 73 74 20 74 68 65 20 74 77 6f 20 61 62   test the two ab
9ab0: 6f 76 65 2c 20 73 68 6f 77 20 74 68 61 74 20 7a  ove, show that z
9ac0: 65 72 6f 20 70 72 69 6d 61 72 79 20 6b 65 79 73  ero primary keys
9ad0: 20 69 73 20 4f 6b 2c 20 6f 6e 65 20 70 72 69 6d   is Ok, one prim
9ae0: 61 72 79 0a 23 20 20 20 20 20 6b 65 79 20 69 73  ary.#     key is
9af0: 20 4f 6b 2c 20 61 6e 64 20 74 77 6f 20 6f 72 20   Ok, and two or 
9b00: 6d 6f 72 65 20 70 72 69 6d 61 72 79 20 6b 65 79  more primary key
9b10: 73 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 23  s is an error..#
9b20: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
9b30: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
9b40: 74 65 73 74 73 20 34 2e 31 2e 31 20 7b 0a 20 20  tests 4.1.1 {.  
9b50: 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  1    "CREATE TAB
9b60: 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20  LE t1(a, b, c)" 
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
9ba0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
9bb0: 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  2(a PRIMARY KEY,
9bc0: 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20   b, c)"         
9bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9be0: 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43 52     {}.  3    "CR
9bf0: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c  EATE TABLE t3(a,
9c00: 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b   b, c, PRIMARY K
9c10: 45 59 28 61 29 29 22 20 20 20 20 20 20 20 20 20  EY(a))"         
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9c30: 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54 45  }.  4    "CREATE
9c40: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
9c50: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 63  c, PRIMARY KEY(c
9c60: 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20 20 20  ,b,a))"         
9c70: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a             {}.}.
9c80: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
9c90: 65 73 74 73 20 34 2e 31 2e 32 20 2d 65 72 72 6f  ests 4.1.2 -erro
9ca0: 72 20 7b 0a 20 20 74 61 62 6c 65 20 22 74 35 22  r {.  table "t5"
9cb0: 20 68 61 73 20 6d 6f 72 65 20 74 68 61 6e 20 6f   has more than o
9cc0: 6e 65 20 70 72 69 6d 61 72 79 20 6b 65 79 0a 7d  ne primary key.}
9cd0: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
9ce0: 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49  E TABLE t5(a PRI
9cf0: 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d  MARY KEY, b PRIM
9d00: 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20  ARY KEY, c)"    
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
9d20: 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41   2    "CREATE TA
9d30: 42 4c 45 20 74 35 28 61 2c 20 62 20 50 52 49 4d  BLE t5(a, b PRIM
9d40: 41 52 59 20 4b 45 59 2c 20 63 2c 20 50 52 49 4d  ARY KEY, c, PRIM
9d50: 41 52 59 20 4b 45 59 28 61 29 29 22 20 20 20 20  ARY KEY(a))"    
9d60: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20          {}.  3  
9d70: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
9d80: 74 35 28 61 20 49 4e 54 45 47 45 52 20 50 52 49  t5(a INTEGER PRI
9d90: 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52 49 4d  MARY KEY, b PRIM
9da0: 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20 20  ARY KEY, c)"    
9db0: 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43      {}.  4    "C
9dc0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 61  REATE TABLE t5(a
9dd0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
9de0: 20 4b 45 59 2c 20 62 2c 20 63 2c 20 50 52 49 4d   KEY, b, c, PRIM
9df0: 41 52 59 20 4b 45 59 28 62 2c 20 63 29 29 22 20  ARY KEY(b, c))" 
9e00: 7b 7d 0a 20 20 35 20 20 20 20 22 43 52 45 41 54  {}.  5    "CREAT
9e10: 45 20 54 41 42 4c 45 20 74 35 28 61 20 50 52 49  E TABLE t5(a PRI
9e20: 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20  MARY KEY, b, c, 
9e30: 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22  PRIMARY KEY(a))"
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
9e50: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
9e60: 42 4c 45 20 74 35 28 61 20 49 4e 54 45 47 45 52  BLE t5(a INTEGER
9e70: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
9e80: 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28   c, PRIMARY KEY(
9e90: 61 29 29 22 20 20 20 20 7b 7d 0a 7d 0a 0a 70 72  a))"    {}.}..pr
9ea0: 6f 63 20 74 61 62 6c 65 5f 70 6b 20 7b 74 62 6c  oc table_pk {tbl
9eb0: 7d 20 7b 20 0a 20 20 73 65 74 20 70 6b 20 5b 6c  } { .  set pk [l
9ec0: 69 73 74 5d 0a 20 20 64 62 20 65 76 61 6c 20 22  ist].  db eval "
9ed0: 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69 6e 66  pragma table_inf
9ee0: 6f 28 24 74 62 6c 29 22 20 61 20 7b 0a 20 20 20  o($tbl)" a {.   
9ef0: 20 69 66 20 7b 24 61 28 70 6b 29 7d 20 7b 20 6c   if {$a(pk)} { l
9f00: 61 70 70 65 6e 64 20 70 6b 20 24 61 28 6e 61 6d  append pk $a(nam
9f10: 65 29 20 7d 0a 20 20 7d 0a 20 20 73 65 74 20 70  e) }.  }.  set p
9f20: 6b 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  k.}..# EVIDENCE-
9f30: 4f 46 3a 20 52 2d 34 31 34 31 31 2d 31 38 38 33  OF: R-41411-1883
9f40: 37 20 49 66 20 74 68 65 20 6b 65 79 77 6f 72 64  7 If the keyword
9f50: 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61 72  s PRIMARY KEY ar
9f60: 65 20 61 64 64 65 64 20 74 6f 20 61 0a 23 20 63  e added to a.# c
9f70: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
9f80: 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61  , then the prima
9f90: 72 79 20 6b 65 79 20 66 6f 72 20 74 68 65 20 74  ry key for the t
9fa0: 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  able consists of
9fb0: 20 74 68 61 74 0a 23 20 73 69 6e 67 6c 65 20 63   that.# single c
9fc0: 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 20 20 20 20 54  olumn..#.#     T
9fd0: 68 65 20 61 62 6f 76 65 20 69 73 20 74 65 73 74  he above is test
9fe0: 65 64 20 62 79 20 34 2e 32 2e 31 2e 2a 0a 23 0a  ed by 4.2.1.*.#.
9ff0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
a000: 2d 33 31 37 37 35 2d 34 38 32 30 34 20 4f 72 2c  -31775-48204 Or,
a010: 20 69 66 20 61 20 50 52 49 4d 41 52 59 20 4b 45   if a PRIMARY KE
a020: 59 20 63 6c 61 75 73 65 20 69 73 20 73 70 65 63  Y clause is spec
a030: 69 66 69 65 64 20 61 73 0a 23 20 61 20 74 61 62  ified as.# a tab
a040: 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 2c 20 74  le-constraint, t
a050: 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20  hen the primary 
a060: 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65  key of the table
a070: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74 68 65   consists of the
a080: 0a 23 20 6c 69 73 74 20 6f 66 20 63 6f 6c 75 6d  .# list of colum
a090: 6e 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  ns specified as 
a0a0: 70 61 72 74 20 6f 66 20 74 68 65 20 50 52 49 4d  part of the PRIM
a0b0: 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65 2e 0a  ARY KEY clause..
a0c0: 23 0a 23 20 20 20 20 20 54 68 65 20 61 62 6f 76  #.#     The abov
a0d0: 65 20 69 73 20 74 65 73 74 65 64 20 62 79 20 34  e is tested by 4
a0e0: 2e 32 2e 32 2e 2a 0a 23 0a 64 6f 5f 63 72 65 61  .2.2.*.#.do_crea
a0f0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
a100: 32 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61  2 -repair {.  ca
a110: 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  tchsql { DROP TA
a120: 42 4c 45 20 74 35 20 7d 0a 7d 20 2d 74 63 6c 71  BLE t5 }.} -tclq
a130: 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f 70  uery {.  table_p
a140: 6b 20 74 35 0a 7d 20 7b 0a 20 20 31 2e 31 20 20  k t5.} {.  1.1  
a150: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
a160: 74 35 28 61 2c 20 62 20 49 4e 54 45 47 45 52 20  t5(a, b INTEGER 
a170: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22  PRIMARY KEY, c)"
a180: 20 20 20 20 20 20 20 7b 62 7d 0a 20 20 31 2e 32         {b}.  1.2
a190: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
a1a0: 45 20 74 35 28 61 20 50 52 49 4d 41 52 59 20 4b  E t5(a PRIMARY K
a1b0: 45 59 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20  EY, b, c)"      
a1c0: 20 20 20 20 20 20 20 20 20 7b 61 7d 0a 0a 20 20           {a}..  
a1d0: 32 2e 31 20 20 20 20 22 43 52 45 41 54 45 20 54  2.1    "CREATE T
a1e0: 41 42 4c 45 20 74 35 28 61 2c 20 62 2c 20 63 2c  ABLE t5(a, b, c,
a1f0: 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29 29   PRIMARY KEY(a))
a200: 22 20 20 20 20 20 20 20 20 20 20 20 7b 61 7d 0a  "           {a}.
a210: 20 20 32 2e 32 20 20 20 20 22 43 52 45 41 54 45    2.2    "CREATE
a220: 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62 2c 20   TABLE t5(a, b, 
a230: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 63  c, PRIMARY KEY(c
a240: 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20 7b 61  ,b,a))"       {a
a250: 20 62 20 63 7d 0a 20 20 32 2e 33 20 20 20 20 22   b c}.  2.3    "
a260: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
a270: 61 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52 49  a, b INTEGER PRI
a280: 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20 20  MARY KEY, c)"   
a290: 20 20 20 20 7b 62 7d 0a 7d 0a 0a 23 20 45 56 49      {b}.}..# EVI
a2a0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 33 39 38  DENCE-OF: R-3398
a2b0: 36 2d 30 39 34 31 30 20 45 61 63 68 20 72 6f 77  6-09410 Each row
a2c0: 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69 74 68   in a table with
a2d0: 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6d   a primary key m
a2e0: 75 73 74 0a 23 20 66 65 61 74 75 72 65 20 61 20  ust.# feature a 
a2f0: 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69  unique combinati
a300: 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20  on of values in 
a310: 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65 79 20  its primary key 
a320: 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 23 20 45 56 49  columns..#.# EVI
a330: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 31 30  DENCE-OF: R-3910
a340: 32 2d 30 36 37 33 37 20 49 66 20 61 6e 20 49 4e  2-06737 If an IN
a350: 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 73  SERT or UPDATE s
a360: 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74  tatement attempt
a370: 73 0a 23 20 74 6f 20 6d 6f 64 69 66 79 20 74 68  s.# to modify th
a380: 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e 74 20  e table content 
a390: 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72 20 6d  so that two or m
a3a0: 6f 72 65 20 72 6f 77 73 20 66 65 61 74 75 72 65  ore rows feature
a3b0: 20 69 64 65 6e 74 69 63 61 6c 0a 23 20 70 72 69   identical.# pri
a3c0: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
a3d0: 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74 72 61   it is a constra
a3e0: 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e 0a 23  int violation..#
a3f0: 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73  .drop_all_tables
a400: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
a410: 20 34 2e 33 2e 30 20 7b 0a 20 20 43 52 45 41 54   4.3.0 {.  CREAT
a420: 45 20 54 41 42 4c 45 20 74 31 28 78 20 50 52 49  E TABLE t1(x PRI
a430: 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a 20 20  MARY KEY, y);.  
a440: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
a450: 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20 20 20  ALUES(0,        
a460: 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49 4e 53    'zero');.  INS
a470: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
a480: 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20 20 27  ES(45.5,       '
a490: 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  one');.  INSERT 
a4a0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
a4b0: 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77 6f 27  brambles', 'two'
a4c0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
a4d0: 20 74 31 20 56 41 4c 55 45 53 28 58 27 41 42 43   t1 VALUES(X'ABC
a4e0: 44 45 46 27 2c 20 20 27 74 68 72 65 65 27 29 3b  DEF',  'three');
a4f0: 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ..  CREATE TABLE
a500: 20 74 32 28 78 2c 20 79 2c 20 50 52 49 4d 41 52   t2(x, y, PRIMAR
a510: 59 20 4b 45 59 28 78 2c 20 79 29 29 3b 0a 20 20  Y KEY(x, y));.  
a520: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
a530: 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20 20 20  ALUES(0,        
a540: 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49 4e 53    'zero');.  INS
a550: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a560: 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20 20 27  ES(45.5,       '
a570: 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  one');.  INSERT 
a580: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
a590: 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77 6f 27  brambles', 'two'
a5a0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
a5b0: 20 74 32 20 56 41 4c 55 45 53 28 58 27 41 42 43   t2 VALUES(X'ABC
a5c0: 44 45 46 27 2c 20 20 27 74 68 72 65 65 27 29 3b  DEF',  'three');
a5d0: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65 61 74 65  .} {}..do_create
a5e0: 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 33 2e  table_tests 4.3.
a5f0: 31 20 2d 65 72 72 6f 72 20 7b 20 25 73 20 6e 6f  1 -error { %s no
a600: 74 20 75 6e 69 71 75 65 20 7d 20 7b 0a 20 20 31  t unique } {.  1
a610: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
a620: 20 74 31 20 56 41 4c 55 45 53 28 30 2c 20 30 29   t1 VALUES(0, 0)
a630: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
a640: 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22    {"column x is"
a650: 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45 52 54  }.  2    "INSERT
a660: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
a670: 34 35 2e 35 2c 20 27 61 62 63 27 29 22 20 20 20  45.5, 'abc')"   
a680: 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20         {"column 
a690: 78 20 69 73 22 7d 0a 20 20 33 20 20 20 20 22 49  x is"}.  3    "I
a6a0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
a6b0: 4c 55 45 53 28 30 2e 30 2c 20 27 61 62 63 27 29  LUES(0.0, 'abc')
a6c0: 22 20 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f  "           {"co
a6d0: 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 34 20  lumn x is"}.  4 
a6e0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
a6f0: 74 31 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62  t1 VALUES('bramb
a700: 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20 20 20  les', 'abc')"   
a710: 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d   {"column x is"}
a720: 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20  .  5    "INSERT 
a730: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58  INTO t1 VALUES(X
a740: 27 41 42 43 44 45 46 27 2c 20 27 61 62 63 27 29  'ABCDEF', 'abc')
a750: 22 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78  "     {"column x
a760: 20 69 73 22 7d 0a 0a 20 20 36 20 20 20 20 22 49   is"}..  6    "I
a770: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
a780: 4c 55 45 53 28 30 2c 20 27 7a 65 72 6f 27 29 22  LUES(0, 'zero')"
a790: 20 20 20 20 20 20 20 20 20 20 20 20 7b 22 63 6f              {"co
a7a0: 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d  lumns x, y are"}
a7b0: 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52 54 20  .  7    "INSERT 
a7c0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 34  INTO t2 VALUES(4
a7d0: 35 2e 35 2c 20 27 6f 6e 65 27 29 22 20 20 20 20  5.5, 'one')"    
a7e0: 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20        {"columns 
a7f0: 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 38 20 20  x, y are"}.  8  
a800: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
a810: 32 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 27 7a  2 VALUES(0.0, 'z
a820: 65 72 6f 27 29 22 20 20 20 20 20 20 20 20 20 20  ero')"          
a830: 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61  {"columns x, y a
a840: 72 65 22 7d 0a 20 20 39 20 20 20 20 22 49 4e 53  re"}.  9    "INS
a850: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
a860: 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27  ES('brambles', '
a870: 74 77 6f 27 29 22 20 20 20 20 7b 22 63 6f 6c 75  two')"    {"colu
a880: 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20  mns x, y are"}. 
a890: 20 31 30 20 20 20 22 49 4e 53 45 52 54 20 49 4e   10   "INSERT IN
a8a0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58 27 41  TO t2 VALUES(X'A
a8b0: 42 43 44 45 46 27 2c 20 27 74 68 72 65 65 27 29  BCDEF', 'three')
a8c0: 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c  "   {"columns x,
a8d0: 20 79 20 61 72 65 22 7d 0a 7d 0a 64 6f 5f 63 72   y are"}.}.do_cr
a8e0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
a8f0: 34 2e 33 2e 32 20 7b 0a 20 20 31 20 20 20 20 22  4.3.2 {.  1    "
a900: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
a910: 41 4c 55 45 53 28 2d 31 2c 20 30 29 22 20 20 20  ALUES(-1, 0)"   
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
a930: 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49    2    "INSERT I
a940: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 34 35  NTO t1 VALUES(45
a950: 2e 32 2c 20 27 61 62 63 27 29 22 20 20 20 20 20  .2, 'abc')"     
a960: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22       {}.  3    "
a970: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
a980: 41 4c 55 45 53 28 30 2e 30 31 2c 20 27 61 62 63  ALUES(0.01, 'abc
a990: 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  ')"          {}.
a9a0: 20 20 34 20 20 20 20 22 49 4e 53 45 52 54 20 49    4    "INSERT I
a9b0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 62  NTO t1 VALUES('b
a9c0: 72 61 6d 62 6c 65 27 2c 20 27 61 62 63 27 29 22  ramble', 'abc')"
a9d0: 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20 22       {}.  5    "
a9e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
a9f0: 41 4c 55 45 53 28 58 27 41 42 43 44 45 45 27 2c  ALUES(X'ABCDEE',
aa00: 20 27 61 62 63 27 29 22 20 20 20 20 20 7b 7d 0a   'abc')"     {}.
aa10: 0a 20 20 36 20 20 20 20 22 49 4e 53 45 52 54 20  .  6    "INSERT 
aa20: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30  INTO t2 VALUES(0
aa30: 2c 20 30 29 22 20 20 20 20 20 20 20 20 20 20 20  , 0)"           
aa40: 20 20 20 20 20 20 7b 7d 0a 20 20 37 20 20 20 20        {}.  7    
aa50: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
aa60: 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 27 61 62  VALUES(45.5, 'ab
aa70: 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d  c')"          {}
aa80: 0a 20 20 38 20 20 20 20 22 49 4e 53 45 52 54 20  .  8    "INSERT 
aa90: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 30  INTO t2 VALUES(0
aaa0: 2e 30 2c 20 27 61 62 63 27 29 22 20 20 20 20 20  .0, 'abc')"     
aab0: 20 20 20 20 20 20 7b 7d 0a 20 20 39 20 20 20 20        {}.  9    
aac0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
aad0: 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c 65 73  VALUES('brambles
aae0: 27 2c 20 27 61 62 63 27 29 22 20 20 20 20 7b 7d  ', 'abc')"    {}
aaf0: 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52 54 20  .  10   "INSERT 
ab00: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58  INTO t2 VALUES(X
ab10: 27 41 42 43 44 45 46 27 2c 20 27 61 62 63 27 29  'ABCDEF', 'abc')
ab20: 22 20 20 20 20 20 7b 7d 0a 7d 0a 64 6f 5f 63 72  "     {}.}.do_cr
ab30: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
ab40: 34 2e 33 2e 33 20 2d 65 72 72 6f 72 20 7b 20 25  4.3.3 -error { %
ab50: 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20 7b  s not unique } {
ab60: 0a 20 20 31 20 20 20 20 22 55 50 44 41 54 45 20  .  1    "UPDATE 
ab70: 74 31 20 53 45 54 20 78 3d 30 20 20 20 20 20 20  t1 SET x=0      
ab80: 20 20 20 20 20 57 48 45 52 45 20 79 3d 27 74 77       WHERE y='tw
ab90: 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20  o'"    {"column 
aba0: 78 20 69 73 22 7d 0a 20 20 32 20 20 20 20 22 55  x is"}.  2    "U
abb0: 50 44 41 54 45 20 74 31 20 53 45 54 20 78 3d 27  PDATE t1 SET x='
abc0: 62 72 61 6d 62 6c 65 73 27 20 20 57 48 45 52 45  brambles'  WHERE
abd0: 20 79 3d 27 74 68 72 65 65 27 22 20 20 7b 22 63   y='three'"  {"c
abe0: 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 33  olumn x is"}.  3
abf0: 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53      "UPDATE t1 S
ac00: 45 54 20 78 3d 34 35 2e 35 20 20 20 20 20 20 20  ET x=45.5       
ac10: 20 57 48 45 52 45 20 79 3d 27 7a 65 72 6f 27 22   WHERE y='zero'"
ac20: 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73     {"column x is
ac30: 22 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41 54  "}.  4    "UPDAT
ac40: 45 20 74 31 20 53 45 54 20 78 3d 58 27 41 42 43  E t1 SET x=X'ABC
ac50: 44 45 46 27 20 20 20 57 48 45 52 45 20 79 3d 27  DEF'   WHERE y='
ac60: 6f 6e 65 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d  one'"    {"colum
ac70: 6e 20 78 20 69 73 22 7d 0a 20 20 35 20 20 20 20  n x is"}.  5    
ac80: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 78  "UPDATE t1 SET x
ac90: 3d 30 2e 30 20 20 20 20 20 20 20 20 20 57 48 45  =0.0         WHE
aca0: 52 45 20 79 3d 27 74 68 72 65 65 27 22 20 20 7b  RE y='three'"  {
acb0: 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 0a  "column x is"}..
acc0: 20 20 36 20 20 20 20 22 55 50 44 41 54 45 20 74    6    "UPDATE t
acd0: 32 20 53 45 54 20 78 3d 30 2c 20 79 3d 27 7a 65  2 SET x=0, y='ze
ace0: 72 6f 27 20 57 48 45 52 45 20 79 3d 27 74 77 6f  ro' WHERE y='two
acf0: 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20  '"    {"columns 
ad00: 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 37 20 20  x, y are"}.  7  
ad10: 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54    "UPDATE t2 SET
ad20: 20 78 3d 27 62 72 61 6d 62 6c 65 73 27 2c 20 79   x='brambles', y
ad30: 3d 27 74 77 6f 27 20 57 48 45 52 45 20 79 3d 27  ='two' WHERE y='
ad40: 74 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20  three'"  .      
ad50: 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20   {"columns x, y 
ad60: 61 72 65 22 7d 0a 20 20 38 20 20 20 20 22 55 50  are"}.  8    "UP
ad70: 44 41 54 45 20 74 32 20 53 45 54 20 78 3d 34 35  DATE t2 SET x=45
ad80: 2e 35 2c 20 79 3d 27 6f 6e 65 27 20 57 48 45 52  .5, y='one' WHER
ad90: 45 20 79 3d 27 7a 65 72 6f 27 22 20 7b 22 63 6f  E y='zero'" {"co
ada0: 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d  lumns x, y are"}
adb0: 0a 20 20 39 20 20 20 20 22 55 50 44 41 54 45 20  .  9    "UPDATE 
adc0: 74 32 20 53 45 54 20 78 3d 58 27 41 42 43 44 45  t2 SET x=X'ABCDE
add0: 46 27 2c 20 79 3d 27 74 68 72 65 65 27 20 57 48  F', y='three' WH
ade0: 45 52 45 20 79 3d 27 6f 6e 65 27 22 20 0a 20 20  ERE y='one'" .  
adf0: 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78       {"columns x
ae00: 2c 20 79 20 61 72 65 22 7d 0a 20 20 31 30 20 20  , y are"}.  10  
ae10: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
ae20: 78 3d 30 2e 30 2c 20 79 3d 27 7a 65 72 6f 27 20  x=0.0, y='zero' 
ae30: 20 20 20 20 20 20 20 57 48 45 52 45 20 79 3d 27         WHERE y='
ae40: 74 68 72 65 65 27 22 20 20 0a 20 20 20 20 20 20  three'"  .      
ae50: 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20   {"columns x, y 
ae60: 61 72 65 22 7d 0a 7d 0a 0a 0a 23 20 45 56 49 44  are"}.}...# EVID
ae70: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 37 32  ENCE-OF: R-52572
ae80: 2d 30 32 30 37 38 20 46 6f 72 20 74 68 65 20 70  -02078 For the p
ae90: 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74 65 72  urposes of deter
aea0: 6d 69 6e 69 6e 67 20 74 68 65 0a 23 20 75 6e 69  mining the.# uni
aeb0: 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69 6d 61  queness of prima
aec0: 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c 20 4e  ry key values, N
aed0: 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63  ULL values are c
aee0: 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74 69 6e  onsidered distin
aef0: 63 74 0a 23 20 66 72 6f 6d 20 61 6c 6c 20 6f 74  ct.# from all ot
af00: 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e 63 6c  her values, incl
af10: 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55 4c 4c  uding other NULL
af20: 73 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  s..#.do_createta
af30: 62 6c 65 5f 74 65 73 74 73 20 34 2e 34 20 7b 0a  ble_tests 4.4 {.
af40: 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49    1    "INSERT I
af50: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
af60: 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20  LL, 0)"         
af70: 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22       {}.  2    "
af80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
af90: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 30 29 22 20  ALUES(NULL, 0)" 
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
afb0: 20 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49    3    "INSERT I
afc0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
afd0: 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20 20 20  LL, 0)"         
afe0: 20 20 20 20 20 7b 7d 0a 0a 20 20 34 20 20 20 20       {}..  4    
aff0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b000: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 7a 65  VALUES(NULL, 'ze
b010: 72 6f 27 29 22 20 20 20 20 20 20 20 20 20 7b 7d  ro')"         {}
b020: 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20  .  5    "INSERT 
b030: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e  INTO t2 VALUES(N
b040: 55 4c 4c 2c 20 27 6f 6e 65 27 29 22 20 20 20 20  ULL, 'one')"    
b050: 20 20 20 20 20 20 7b 7d 0a 20 20 36 20 20 20 20        {}.  6    
b060: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
b070: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 74 77  VALUES(NULL, 'tw
b080: 6f 27 29 22 20 20 20 20 20 20 20 20 20 20 7b 7d  o')"          {}
b090: 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52 54 20  .  7    "INSERT 
b0a0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 4e  INTO t2 VALUES(N
b0b0: 55 4c 4c 2c 20 27 74 68 72 65 65 27 29 22 20 20  ULL, 'three')"  
b0c0: 20 20 20 20 20 20 7b 7d 0a 0a 20 20 38 20 20 20        {}..  8   
b0d0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b0e0: 20 56 41 4c 55 45 53 28 30 2c 20 4e 55 4c 4c 29   VALUES(0, NULL)
b0f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  "              {
b100: 7d 0a 20 20 39 20 20 20 20 22 49 4e 53 45 52 54  }.  9    "INSERT
b110: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b120: 34 35 2e 35 2c 20 4e 55 4c 4c 29 22 20 20 20 20  45.5, NULL)"    
b130: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20         {}.  10  
b140: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b150: 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 4e 55 4c   VALUES(0.0, NUL
b160: 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b  L)"            {
b170: 7d 0a 20 20 31 31 20 20 20 22 49 4e 53 45 52 54  }.  11   "INSERT
b180: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
b190: 27 62 72 61 6d 62 6c 65 73 27 2c 20 4e 55 4c 4c  'brambles', NULL
b1a0: 29 22 20 20 20 20 20 7b 7d 0a 20 20 31 32 20 20  )"     {}.  12  
b1b0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32   "INSERT INTO t2
b1c0: 20 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 46   VALUES(X'ABCDEF
b1d0: 27 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 7b  ', NULL)"      {
b1e0: 7d 0a 0a 20 20 31 33 20 20 20 22 49 4e 53 45 52  }..  13   "INSER
b1f0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
b200: 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20  (NULL, NULL)"   
b210: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 34 20          {}.  14 
b220: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b230: 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e  2 VALUES(NULL, N
b240: 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20  ULL)"           
b250: 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  {}.}..# EVIDENCE
b260: 2d 4f 46 3a 20 52 2d 36 31 38 36 36 2d 33 38 30  -OF: R-61866-380
b270: 35 33 20 55 6e 6c 65 73 73 20 74 68 65 20 63 6f  53 Unless the co
b280: 6c 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54 45 47  lumn is an INTEG
b290: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 0a 23  ER PRIMARY KEY.#
b2a0: 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73 20 4e   SQLite allows N
b2b0: 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20 61 20  ULL values in a 
b2c0: 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f 6c 75  PRIMARY KEY colu
b2d0: 6d 6e 2e 0a 23 0a 23 20 20 20 20 20 49 66 20 74  mn..#.#     If t
b2e0: 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20  he column is an 
b2f0: 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72 79 20  integer primary 
b300: 6b 65 79 2c 20 61 74 74 65 6d 70 74 69 6e 67 20  key, attempting 
b310: 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55 4c 4c  to insert a NULL
b320: 0a 23 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20  .#     into the 
b330: 63 6f 6c 75 6d 6e 20 74 72 69 67 67 65 72 73 20  column triggers 
b340: 74 68 65 20 61 75 74 6f 2d 69 6e 63 72 65 6d 65  the auto-increme
b350: 6e 74 20 62 65 68 61 76 69 6f 75 72 2e 20 41 74  nt behaviour. At
b360: 74 65 6d 70 74 69 6e 67 0a 23 20 20 20 20 20 74  tempting.#     t
b370: 6f 20 75 73 65 20 55 50 44 41 54 45 20 74 6f 20  o use UPDATE to 
b380: 73 65 74 20 61 6e 20 69 70 6b 20 63 6f 6c 75 6d  set an ipk colum
b390: 6e 20 74 6f 20 61 20 4e 55 4c 4c 20 76 61 6c 75  n to a NULL valu
b3a0: 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e 0a 23  e is an error..#
b3b0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
b3c0: 74 65 73 74 73 20 34 2e 35 2e 31 20 7b 0a 20 20  tests 4.5.1 {.  
b3d0: 31 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75  1    "SELECT cou
b3e0: 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48  nt(*) FROM t1 WH
b3f0: 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 22 20 20  ERE x IS NULL"  
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b410: 20 33 0a 20 20 32 20 20 20 20 22 53 45 4c 45 43   3.  2    "SELEC
b420: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
b430: 74 32 20 57 48 45 52 45 20 78 20 49 53 20 4e 55  t2 WHERE x IS NU
b440: 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20 20 20  LL"             
b450: 20 20 20 20 20 20 36 0a 20 20 33 20 20 20 20 22        6.  3    "
b460: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20  SELECT count(*) 
b470: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 79 20  FROM t2 WHERE y 
b480: 49 53 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20  IS NULL"        
b490: 20 20 20 20 20 20 20 20 20 20 20 37 0a 20 20 34             7.  4
b4a0: 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f 75 6e      "SELECT coun
b4b0: 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57 48 45  t(*) FROM t2 WHE
b4c0: 52 45 20 78 20 49 53 20 4e 55 4c 4c 20 41 4e 44  RE x IS NULL AND
b4d0: 20 79 20 49 53 20 4e 55 4c 4c 22 20 20 20 20 20   y IS NULL"     
b4e0: 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  2.}.do_execsql_t
b4f0: 65 73 74 20 34 2e 35 2e 32 20 7b 0a 20 20 43 52  est 4.5.2 {.  CR
b500: 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 73 2c  EATE TABLE t3(s,
b510: 20 75 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   u INTEGER PRIMA
b520: 52 59 20 4b 45 59 2c 20 76 29 3b 0a 20 20 49 4e  RY KEY, v);.  IN
b530: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
b540: 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20 32 29 3b  UES(1, NULL, 2);
b550: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
b560: 33 20 56 41 4c 55 45 53 28 27 78 27 2c 20 4e 55  3 VALUES('x', NU
b570: 4c 4c 2c 20 27 79 27 29 3b 0a 20 20 53 45 4c 45  LL, 'y');.  SELE
b580: 43 54 20 75 20 46 52 4f 4d 20 74 33 3b 0a 7d 20  CT u FROM t3;.} 
b590: 7b 31 20 32 7d 0a 64 6f 5f 63 61 74 63 68 73 71  {1 2}.do_catchsq
b5a0: 6c 5f 74 65 73 74 20 34 2e 35 2e 33 20 7b 0a 20  l_test 4.5.3 {. 
b5b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
b5c0: 56 41 4c 55 45 53 28 32 2c 20 35 2c 20 33 29 3b  VALUES(2, 5, 3);
b5d0: 0a 20 20 55 50 44 41 54 45 20 74 33 20 53 45 54  .  UPDATE t3 SET
b5e0: 20 75 20 3d 20 4e 55 4c 4c 20 57 48 45 52 45 20   u = NULL WHERE 
b5f0: 73 20 3d 20 32 3b 0a 7d 20 7b 31 20 7b 64 61 74  s = 2;.} {1 {dat
b600: 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 7d 7d  atype mismatch}}
b610: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
b620: 20 52 2d 30 30 32 32 37 2d 32 31 30 38 30 20 41   R-00227-21080 A
b630: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
b640: 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  nt is similar to
b650: 20 61 20 50 52 49 4d 41 52 59 0a 23 20 4b 45 59   a PRIMARY.# KEY
b660: 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65 78 63   constraint, exc
b670: 65 70 74 20 74 68 61 74 20 61 20 73 69 6e 67 6c  ept that a singl
b680: 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61 76 65  e table may have
b690: 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66 0a 23   any number of.#
b6a0: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
b6b0: 6e 74 73 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f  nts..#.drop_all_
b6c0: 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65  tables.do_create
b6d0: 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 36 20  table_tests 4.6 
b6e0: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
b6f0: 20 54 41 42 4c 45 20 74 31 28 61 20 55 4e 49 51   TABLE t1(a UNIQ
b700: 55 45 2c 20 62 20 55 4e 49 51 55 45 29 22 20 20  UE, b UNIQUE)"  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22       {}.  2    "
b730: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
b740: 61 20 55 4e 49 51 55 45 2c 20 62 2c 20 63 2c 20  a UNIQUE, b, c, 
b750: 55 4e 49 51 55 45 28 63 2c 20 62 29 29 22 20 20  UNIQUE(c, b))"  
b760: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
b770: 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  3    "CREATE TAB
b780: 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 2c 20 55  LE t3(a, b, c, U
b790: 4e 49 51 55 45 28 61 29 2c 20 55 4e 49 51 55 45  NIQUE(a), UNIQUE
b7a0: 28 62 29 2c 20 55 4e 49 51 55 45 28 63 29 29 22  (b), UNIQUE(c))"
b7b0: 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41   {}.  4    "CREA
b7c0: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
b7d0: 2c 20 63 2c 20 55 4e 49 51 55 45 28 61 2c 20 62  , c, UNIQUE(a, b
b7e0: 2c 20 63 29 29 22 20 20 20 20 20 20 20 20 20 20  , c))"          
b7f0: 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45         {}.}..# E
b800: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 35  VIDENCE-OF: R-55
b810: 32 34 30 2d 35 38 38 37 37 20 46 6f 72 20 65 61  240-58877 For ea
b820: 63 68 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  ch UNIQUE constr
b830: 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61 62 6c  aint on the tabl
b840: 65 2c 0a 23 20 65 61 63 68 20 72 6f 77 20 6d 75  e,.# each row mu
b850: 73 74 20 66 65 61 74 75 72 65 20 61 20 75 6e 69  st feature a uni
b860: 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20  que combination 
b870: 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  of values in the
b880: 20 63 6f 6c 75 6d 6e 73 0a 23 20 69 64 65 6e 74   columns.# ident
b890: 69 66 69 65 64 20 62 79 20 74 68 65 20 55 4e 49  ified by the UNI
b8a0: 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  QUE constraint..
b8b0: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
b8c0: 20 52 2d 34 37 37 33 33 2d 35 31 34 38 30 20 49   R-47733-51480 I
b8d0: 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72 20 55  f an INSERT or U
b8e0: 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20  PDATE statement 
b8f0: 61 74 74 65 6d 70 74 73 0a 23 20 74 6f 20 6d 6f  attempts.# to mo
b900: 64 69 66 79 20 74 68 65 20 74 61 62 6c 65 20 63  dify the table c
b910: 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74 20 74  ontent so that t
b920: 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77 73 20  wo or more rows 
b930: 66 65 61 74 75 72 65 20 69 64 65 6e 74 69 63 61  feature identica
b940: 6c 0a 23 20 76 61 6c 75 65 73 20 69 6e 20 61 20  l.# values in a 
b950: 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 74  set of columns t
b960: 68 61 74 20 61 72 65 20 73 75 62 6a 65 63 74 20  hat are subject 
b970: 74 6f 20 61 20 55 4e 49 51 55 45 20 63 6f 6e 73  to a UNIQUE cons
b980: 74 72 61 69 6e 74 2c 20 69 74 0a 23 20 69 73 20  traint, it.# is 
b990: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
b9a0: 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 65 78 65  lation..#.do_exe
b9b0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 37 2e 30 20  csql_test 4.7.0 
b9c0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
b9d0: 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32 29 3b  t1 VALUES(1, 2);
b9e0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
b9f0: 31 20 56 41 4c 55 45 53 28 34 2e 33 2c 20 35 2e  1 VALUES(4.3, 5.
ba00: 35 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  5);.  INSERT INT
ba10: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 72 65 76  O t1 VALUES('rev
ba20: 65 61 6c 27 2c 20 27 76 61 72 69 61 62 6c 65 6e  eal', 'variablen
ba30: 65 73 73 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  ess');.  INSERT 
ba40: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58  INTO t1 VALUES(X
ba50: 27 31 32 33 34 35 36 27 2c 20 58 27 36 35 34 33  '123456', X'6543
ba60: 32 31 27 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20  21');..  INSERT 
ba70: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
ba80: 78 79 78 27 2c 20 31 2c 20 31 29 3b 0a 20 20 49  xyx', 1, 1);.  I
ba90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
baa0: 4c 55 45 53 28 27 78 79 78 27 2c 20 32 2c 20 31  LUES('xyx', 2, 1
bab0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
bac0: 20 74 34 20 56 41 4c 55 45 53 28 27 75 76 77 27   t4 VALUES('uvw'
bad0: 2c 20 31 2c 20 31 29 3b 0a 7d 0a 64 6f 5f 63 72  , 1, 1);.}.do_cr
bae0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
baf0: 34 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25  4.7.1 -error { %
bb00: 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20 7b  s not unique } {
bb10: 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20  .  1    "INSERT 
bb20: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
bb30: 2c 20 27 6f 6e 65 27 29 22 20 20 20 20 20 20 20  , 'one')"       
bb40: 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61        {{column a
bb50: 20 69 73 7d 7d 0a 20 20 32 20 20 20 20 22 49 4e   is}}.  2    "IN
bb60: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
bb70: 55 45 53 28 34 2e 33 2c 20 27 74 77 6f 27 29 22  UES(4.3, 'two')"
bb80: 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c             {{col
bb90: 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 33 20 20  umn a is}}.  3  
bba0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
bbb0: 31 20 56 41 4c 55 45 53 28 27 72 65 76 65 61 6c  1 VALUES('reveal
bbc0: 27 2c 20 27 74 68 72 65 65 27 29 22 20 20 20 20  ', 'three')"    
bbd0: 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a  {{column a is}}.
bbe0: 20 20 34 20 20 20 20 22 49 4e 53 45 52 54 20 49    4    "INSERT I
bbf0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58 27  NTO t1 VALUES(X'
bc00: 31 32 33 34 35 36 27 2c 20 27 66 6f 75 72 27 29  123456', 'four')
bc10: 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20  "    {{column a 
bc20: 69 73 7d 7d 0a 0a 20 20 35 20 20 20 20 22 55 50  is}}..  5    "UP
bc30: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
bc40: 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 32 22  1 WHERE rowid=2"
bc50: 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c             {{col
bc60: 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 36 20 20  umn a is}}.  6  
bc70: 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54    "UPDATE t1 SET
bc80: 20 61 20 3d 20 34 2e 33 20 57 48 45 52 45 20 72   a = 4.3 WHERE r
bc90: 6f 77 69 64 3d 33 22 20 20 20 20 20 20 20 20 20  owid=3"         
bca0: 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a  {{column a is}}.
bcb0: 20 20 37 20 20 20 20 22 55 50 44 41 54 45 20 74    7    "UPDATE t
bcc0: 31 20 53 45 54 20 61 20 3d 20 27 72 65 76 65 61  1 SET a = 'revea
bcd0: 6c 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 34  l' WHERE rowid=4
bce0: 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20  "    {{column a 
bcf0: 69 73 7d 7d 0a 20 20 38 20 20 20 20 22 55 50 44  is}}.  8    "UPD
bd00: 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20 58  ATE t1 SET a = X
bd10: 27 31 32 33 34 35 36 27 20 57 48 45 52 45 20 72  '123456' WHERE r
bd20: 6f 77 69 64 3d 31 22 20 20 20 7b 7b 63 6f 6c 75  owid=1"   {{colu
bd30: 6d 6e 20 61 20 69 73 7d 7d 0a 0a 20 20 39 20 20  mn a is}}..  9  
bd40: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
bd50: 34 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20  4 VALUES('xyx', 
bd60: 31 2c 20 31 29 22 20 20 20 20 20 20 20 20 20 20  1, 1)"          
bd70: 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20  {{columns a, b, 
bd80: 63 20 61 72 65 7d 7d 0a 20 20 31 30 20 20 20 22  c are}}.  10   "
bd90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56  INSERT INTO t4 V
bda0: 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32 2c 20  ALUES('xyx', 2, 
bdb0: 31 29 22 20 20 20 20 20 20 20 20 20 20 7b 7b 63  1)"          {{c
bdc0: 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61  olumns a, b, c a
bdd0: 72 65 7d 7d 0a 20 20 31 31 20 20 20 22 49 4e 53  re}}.  11   "INS
bde0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
bdf0: 45 53 28 27 75 76 77 27 2c 20 31 2c 20 31 29 22  ES('uvw', 1, 1)"
be00: 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75            {{colu
be10: 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61 72 65 7d  mns a, b, c are}
be20: 7d 0a 0a 20 20 31 32 20 20 20 22 55 50 44 41 54  }..  12   "UPDAT
be30: 45 20 74 34 20 53 45 54 20 61 3d 27 78 79 78 27  E t4 SET a='xyx'
be40: 20 57 48 45 52 45 20 72 6f 77 69 64 3d 33 22 20   WHERE rowid=3" 
be50: 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e          {{column
be60: 73 20 61 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a  s a, b, c are}}.
be70: 20 20 31 33 20 20 20 22 55 50 44 41 54 45 20 74    13   "UPDATE t
be80: 34 20 53 45 54 20 62 3d 31 20 57 48 45 52 45 20  4 SET b=1 WHERE 
be90: 72 6f 77 69 64 3d 32 22 20 20 20 20 20 20 20 20  rowid=2"        
bea0: 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61       {{columns a
beb0: 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a 20 20 31  , b, c are}}.  1
bec0: 34 20 20 20 22 55 50 44 41 54 45 20 74 34 20 53  4   "UPDATE t4 S
bed0: 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20 63 3d 30  ET a=0, b=0, c=0
bee0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
bef0: 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62    {{columns a, b
bf00: 2c 20 63 20 61 72 65 7d 7d 0a 7d 0a 0a 23 20 45  , c are}}.}..# E
bf10: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 31  VIDENCE-OF: R-21
bf20: 32 38 39 2d 31 31 35 35 39 20 41 73 20 77 69 74  289-11559 As wit
bf30: 68 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  h PRIMARY KEY co
bf40: 6e 73 74 72 61 69 6e 74 73 2c 20 66 6f 72 20 74  nstraints, for t
bf50: 68 65 0a 23 20 70 75 72 70 6f 73 65 73 20 6f 66  he.# purposes of
bf60: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
bf70: 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  nts NULL values 
bf80: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 64  are considered d
bf90: 69 73 74 69 6e 63 74 0a 23 20 66 72 6f 6d 20 61  istinct.# from a
bfa0: 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65 73 20  ll other values 
bfb0: 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68 65 72  (including other
bfc0: 20 4e 55 4c 4c 73 29 2e 0a 23 0a 64 6f 5f 63 72   NULLs)..#.do_cr
bfd0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
bfe0: 34 2e 38 20 7b 0a 20 20 31 20 20 20 20 22 49 4e  4.8 {.  1    "IN
bff0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
c000: 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22  UES(NULL, NULL)"
c010: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
c020: 32 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  2    "INSERT INT
c030: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
c040: 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20  , NULL)"        
c050: 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 55 50     {}.  3    "UP
c060: 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d 20  DATE t1 SET a = 
c070: 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20  NULL"           
c080: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
c090: 34 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20  4    "UPDATE t1 
c0a0: 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20 20  SET b = NULL"   
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 7b 7d 0a 0a 20 20 35 20 20 20 20 22 49     {}..  5    "I
c0d0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
c0e0: 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c  LUES(NULL, NULL,
c0f0: 20 4e 55 4c 4c 29 22 20 20 20 20 20 7b 7d 0a 20   NULL)"     {}. 
c100: 20 36 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   6    "INSERT IN
c110: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 4e 55 4c  TO t4 VALUES(NUL
c120: 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20  L, NULL, NULL)" 
c130: 20 20 20 20 7b 7d 0a 20 20 37 20 20 20 20 22 55      {}.  7    "U
c140: 50 44 41 54 45 20 74 34 20 53 45 54 20 61 20 3d  PDATE t4 SET a =
c150: 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20   NULL"          
c160: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
c170: 20 38 20 20 20 20 22 55 50 44 41 54 45 20 74 34   8    "UPDATE t4
c180: 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20 20   SET b = NULL"  
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1a0: 20 20 20 20 7b 7d 0a 20 20 39 20 20 20 20 22 55      {}.  9    "U
c1b0: 50 44 41 54 45 20 74 34 20 53 45 54 20 63 20 3d  PDATE t4 SET c =
c1c0: 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20   NULL"          
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d              {}.}
c1e0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
c1f0: 20 52 2d 32 36 39 38 33 2d 32 36 33 37 37 20 49   R-26983-26377 I
c200: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
c210: 45 59 20 63 6f 6c 75 6d 6e 73 20 61 73 69 64 65  EY columns aside
c220: 2c 20 62 6f 74 68 0a 23 20 55 4e 49 51 55 45 20  , both.# UNIQUE 
c230: 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45 59 20  and PRIMARY KEY 
c240: 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65 20  constraints are 
c250: 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 63  implemented by c
c260: 72 65 61 74 69 6e 67 20 61 6e 0a 23 20 69 6e 64  reating an.# ind
c270: 65 78 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ex in the databa
c280: 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d 65 20  se (in the same 
c290: 77 61 79 20 61 73 20 61 20 22 43 52 45 41 54 45  way as a "CREATE
c2a0: 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22 0a 23   UNIQUE INDEX".#
c2b0: 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
c2c0: 29 2e 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  )..do_createtabl
c2d0: 65 5f 74 65 73 74 73 20 34 2e 39 20 2d 72 65 70  e_tests 4.9 -rep
c2e0: 61 69 72 20 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  air drop_all_tab
c2f0: 6c 65 73 20 2d 71 75 65 72 79 20 7b 0a 20 20 53  les -query {.  S
c300: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
c310: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
c320: 72 20 57 48 45 52 45 20 74 79 70 65 3d 27 69 6e  r WHERE type='in
c330: 64 65 78 27 0a 7d 20 7b 0a 20 20 31 20 20 20 20  dex'.} {.  1    
c340: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
c350: 28 61 20 54 45 58 54 20 50 52 49 4d 41 52 59 20  (a TEXT PRIMARY 
c360: 4b 45 59 2c 20 62 29 22 20 20 20 20 20 20 20 20  KEY, b)"        
c370: 20 20 20 20 20 20 31 0a 20 20 32 20 20 20 20 22        1.  2    "
c380: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c390: 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  a INTEGER PRIMAR
c3a0: 59 20 4b 45 59 2c 20 62 29 22 20 20 20 20 20 20  Y KEY, b)"      
c3b0: 20 20 20 20 20 30 0a 20 20 33 20 20 20 20 22 43       0.  3    "C
c3c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
c3d0: 20 54 45 58 54 20 55 4e 49 51 55 45 2c 20 62 29   TEXT UNIQUE, b)
c3e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
c3f0: 20 20 20 20 31 0a 20 20 34 20 20 20 20 22 43 52      1.  4    "CR
c400: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
c410: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 54  PRIMARY KEY, b T
c420: 45 58 54 20 55 4e 49 51 55 45 29 22 20 20 20 20  EXT UNIQUE)"    
c430: 20 20 20 32 0a 20 20 35 20 20 20 20 22 43 52 45     2.  5    "CRE
c440: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 50  ATE TABLE t1(a P
c450: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
c460: 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29 29 22  , UNIQUE(c, b))"
c470: 20 20 32 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43    2.}..# EVIDENC
c480: 45 2d 4f 46 3a 20 52 2d 30 32 32 35 32 2d 33 33  E-OF: R-02252-33
c490: 31 31 36 20 53 75 63 68 20 61 6e 20 69 6e 64 65  116 Such an inde
c4a0: 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65 20 61  x is used like a
c4b0: 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78 0a 23  ny other index.#
c4c0: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
c4d0: 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71 75 65   to optimize que
c4e0: 72 69 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ries..#.do_execs
c4f0: 71 6c 5f 74 65 73 74 20 34 2e 31 30 2e 30 20 7b  ql_test 4.10.0 {
c500: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
c510: 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52 59 20  t1(a, b PRIMARY 
c520: 4b 45 59 29 3b 0a 20 20 43 52 45 41 54 45 20 54  KEY);.  CREATE T
c530: 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 2c  ABLE t2(a, b, c,
c540: 20 55 4e 49 51 55 45 28 62 2c 20 63 29 29 3b 0a   UNIQUE(b, c));.
c550: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
c560: 5f 74 65 73 74 73 20 34 2e 31 30 20 7b 0a 20 20  _tests 4.10 {.  
c570: 31 20 20 20 20 22 45 58 50 4c 41 49 4e 20 51 55  1    "EXPLAIN QU
c580: 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20  ERY PLAN SELECT 
c590: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
c5a0: 62 20 3d 20 35 22 20 0a 20 20 20 20 20 20 20 7b  b = 5" .       {
c5b0: 30 20 30 20 30 20 7b 53 45 41 52 43 48 20 54 41  0 0 0 {SEARCH TA
c5c0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44  BLE t1 USING IND
c5d0: 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  EX sqlite_autoin
c5e0: 64 65 78 5f 74 31 5f 31 20 28 62 3d 3f 29 20 28  dex_t1_1 (b=?) (
c5f0: 7e 31 20 72 6f 77 73 29 7d 7d 0a 0a 20 20 32 20  ~1 rows)}}..  2 
c600: 20 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52     "EXPLAIN QUER
c610: 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20  Y PLAN SELECT * 
c620: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
c630: 20 62 2c 20 63 22 0a 20 20 20 20 20 20 20 7b 30   b, c".       {0
c640: 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42 4c 45   0 0 {SCAN TABLE
c650: 20 74 32 20 55 53 49 4e 47 20 49 4e 44 45 58 20   t2 USING INDEX 
c660: 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78  sqlite_autoindex
c670: 5f 74 32 5f 31 20 28 7e 31 30 30 30 30 30 30 20  _t2_1 (~1000000 
c680: 72 6f 77 73 29 7d 7d 0a 0a 20 20 33 20 20 20 20  rows)}}..  3    
c690: 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50  "EXPLAIN QUERY P
c6a0: 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  LAN SELECT * FRO
c6b0: 4d 20 74 32 20 57 48 45 52 45 20 62 3d 31 30 20  M t2 WHERE b=10 
c6c0: 41 4e 44 20 63 3e 31 30 22 0a 20 20 20 20 20 20  AND c>10".      
c6d0: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
c6e0: 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 49  TABLE t2 USING I
c6f0: 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f  NDEX sqlite_auto
c700: 69 6e 64 65 78 5f 74 32 5f 31 20 28 62 3d 3f 20  index_t2_1 (b=? 
c710: 41 4e 44 20 63 3e 3f 29 20 28 7e 32 20 72 6f 77  AND c>?) (~2 row
c720: 73 29 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  s)}}.}..# EVIDEN
c730: 43 45 2d 4f 46 3a 20 52 2d 34 35 34 39 33 2d 33  CE-OF: R-45493-3
c740: 35 36 35 33 20 41 20 43 48 45 43 4b 20 63 6f 6e  5653 A CHECK con
c750: 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65 20 61  straint may be a
c760: 74 74 61 63 68 65 64 20 74 6f 20 61 0a 23 20 63  ttached to a.# c
c770: 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69 6f 6e  olumn definition
c780: 20 6f 72 20 73 70 65 63 69 66 69 65 64 20 61 73   or specified as
c790: 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74 72 61   a table constra
c7a0: 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69 63 65  int. In practice
c7b0: 20 69 74 0a 23 20 6d 61 6b 65 73 20 6e 6f 20 64   it.# makes no d
c7c0: 69 66 66 65 72 65 6e 63 65 2e 0a 23 0a 23 20 20  ifference..#.#  
c7d0: 20 41 6c 6c 20 74 68 65 20 74 65 73 74 73 20 74   All the tests t
c7e0: 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 43 48  hat deal with CH
c7f0: 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ECK constraints 
c800: 62 65 6c 6f 77 20 28 34 2e 31 31 2e 2a 20 61 6e  below (4.11.* an
c810: 64 20 0a 23 20 20 20 34 2e 31 32 2e 2a 29 20 61  d .#   4.12.*) a
c820: 72 65 20 72 75 6e 20 6f 6e 63 65 20 66 6f 72 20  re run once for 
c830: 61 20 74 61 62 6c 65 20 77 69 74 68 20 74 68 65  a table with the
c840: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
c850: 74 20 61 74 74 61 63 68 65 64 0a 23 20 20 20 74  t attached.#   t
c860: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
c870: 69 74 69 6f 6e 2c 20 61 6e 64 20 6f 6e 63 65 20  ition, and once 
c880: 77 69 74 68 20 61 20 74 61 62 6c 65 20 77 68 65  with a table whe
c890: 72 65 20 74 68 65 20 63 68 65 63 6b 20 0a 23 20  re the check .# 
c8a0: 20 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73 20 73    condition is s
c8b0: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
c8c0: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  ble constraint..
c8d0: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
c8e0: 20 52 2d 35 35 34 33 35 2d 31 34 33 30 33 20 45   R-55435-14303 E
c8f0: 61 63 68 20 74 69 6d 65 20 61 20 6e 65 77 20 72  ach time a new r
c900: 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64 20 69  ow is inserted i
c910: 6e 74 6f 20 74 68 65 0a 23 20 74 61 62 6c 65 20  nto the.# table 
c920: 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 20 72  or an existing r
c930: 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c 20 74  ow is updated, t
c940: 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73  he expression as
c950: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 23 20  sociated with.# 
c960: 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e 73 74  each CHECK const
c970: 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75 61 74  raint is evaluat
c980: 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f 20 61  ed and cast to a
c990: 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65 20 69   NUMERIC value i
c9a0: 6e 20 74 68 65 0a 23 20 73 61 6d 65 20 77 61 79  n the.# same way
c9b0: 20 61 73 20 61 20 43 41 53 54 20 65 78 70 72 65   as a CAST expre
c9c0: 73 73 69 6f 6e 2e 20 49 66 20 74 68 65 20 72 65  ssion. If the re
c9d0: 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28 69 6e  sult is zero (in
c9e0: 74 65 67 65 72 20 76 61 6c 75 65 20 30 0a 23 20  teger value 0.# 
c9f0: 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20 30 2e  or real value 0.
ca00: 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e 73 74  0), then a const
ca10: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20  raint violation 
ca20: 68 61 73 20 6f 63 63 75 72 72 65 64 2e 0a 23 0a  has occurred..#.
ca30: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
ca40: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
ca50: 34 2e 31 31 20 7b 0a 20 20 43 52 45 41 54 45 20  4.11 {.  CREATE 
ca60: 54 41 42 4c 45 20 78 31 28 61 20 54 45 58 54 2c  TABLE x1(a TEXT,
ca70: 20 62 20 49 4e 54 45 47 45 52 20 43 48 45 43 4b   b INTEGER CHECK
ca80: 28 20 62 3e 30 20 29 29 3b 0a 20 20 43 52 45 41  ( b>0 ));.  CREA
ca90: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 54 45  TE TABLE t1(a TE
caa0: 58 54 2c 20 62 20 49 4e 54 45 47 45 52 2c 20 43  XT, b INTEGER, C
cab0: 48 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20 20  HECK( b>0 ));.  
cac0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56  INSERT INTO x1 V
cad0: 41 4c 55 45 53 28 27 78 27 2c 20 27 78 78 27 29  ALUES('x', 'xx')
cae0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
caf0: 78 31 20 56 41 4c 55 45 53 28 27 79 27 2c 20 27  x1 VALUES('y', '
cb00: 79 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  yy');.  INSERT I
cb10: 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20 2a 20  NTO t1 SELECT * 
cb20: 46 52 4f 4d 20 78 31 3b 0a 0a 20 20 43 52 45 41  FROM x1;..  CREA
cb30: 54 45 20 54 41 42 4c 45 20 78 32 28 61 20 43 48  TE TABLE x2(a CH
cb40: 45 43 4b 28 20 61 7c 7c 62 20 29 2c 20 62 29 3b  ECK( a||b ), b);
cb50: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
cb60: 74 32 28 61 2c 20 62 2c 20 43 48 45 43 4b 28 20  t2(a, b, CHECK( 
cb70: 61 7c 7c 62 20 29 29 3b 0a 20 20 49 4e 53 45 52  a||b ));.  INSER
cb80: 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53  T INTO x2 VALUES
cb90: 28 31 2c 20 27 78 78 27 29 3b 0a 20 20 49 4e 53  (1, 'xx');.  INS
cba0: 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55  ERT INTO x2 VALU
cbb0: 45 53 28 31 2c 20 27 79 79 27 29 3b 0a 20 20 49  ES(1, 'yy');.  I
cbc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45  NSERT INTO t2 SE
cbd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32 3b 0a  LECT * FROM x2;.
cbe0: 7d 0a 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  }..do_createtabl
cbf0: 65 5f 74 65 73 74 73 20 34 2e 31 31 20 2d 65 72  e_tests 4.11 -er
cc00: 72 6f 72 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20  ror {constraint 
cc10: 66 61 69 6c 65 64 7d 20 7b 0a 20 20 31 61 20 20  failed} {.  1a  
cc20: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78    "INSERT INTO x
cc30: 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20  1 VALUES('one', 
cc40: 30 29 22 20 20 20 20 20 20 20 7b 7d 0a 20 20 31  0)"       {}.  1
cc50: 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  b    "INSERT INT
cc60: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t1 VALUES('one
cc70: 27 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b 7d 0a  ', -4.0)"    {}.
cc80: 0a 20 20 32 61 20 20 20 20 22 49 4e 53 45 52 54  .  2a    "INSERT
cc90: 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28   INTO x2 VALUES(
cca0: 27 61 62 63 27 2c 20 31 29 22 20 20 20 20 20 20  'abc', 1)"      
ccb0: 20 7b 7d 0a 20 20 32 62 20 20 20 20 22 49 4e 53   {}.  2b    "INS
ccc0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
ccd0: 45 53 28 27 61 62 63 27 2c 20 31 29 22 20 20 20  ES('abc', 1)"   
cce0: 20 20 20 20 7b 7d 0a 0a 20 20 33 61 20 20 20 20      {}..  3a    
ccf0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20  "INSERT INTO x2 
cd00: 56 41 4c 55 45 53 28 30 2c 20 27 61 62 63 27 29  VALUES(0, 'abc')
cd10: 22 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 62 20  "       {}.  3b 
cd20: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
cd30: 74 32 20 56 41 4c 55 45 53 28 30 2c 20 27 61 62  t2 VALUES(0, 'ab
cd40: 63 27 29 22 20 20 20 20 20 20 20 7b 7d 0a 0a 20  c')"       {}.. 
cd50: 20 34 61 20 20 20 20 22 55 50 44 41 54 45 20 74   4a    "UPDATE t
cd60: 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45 52 45  1 SET b=-1 WHERE
cd70: 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20 20 7b   rowid=1"      {
cd80: 7d 0a 20 20 34 62 20 20 20 20 22 55 50 44 41 54  }.  4b    "UPDAT
cd90: 45 20 78 31 20 53 45 54 20 62 3d 2d 31 20 57 48  E x1 SET b=-1 WH
cda0: 45 52 45 20 72 6f 77 69 64 3d 31 22 20 20 20 20  ERE rowid=1"    
cdb0: 20 20 7b 7d 0a 0a 20 20 34 61 20 20 20 20 22 55    {}..  4a    "U
cdc0: 50 44 41 54 45 20 78 32 20 53 45 54 20 61 3d 27  PDATE x2 SET a='
cdd0: 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22  ' WHERE rowid=1"
cde0: 20 20 20 20 20 20 7b 7d 0a 20 20 34 62 20 20 20        {}.  4b   
cdf0: 20 22 55 50 44 41 54 45 20 74 32 20 53 45 54 20   "UPDATE t2 SET 
ce00: 61 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69 64  a='' WHERE rowid
ce10: 3d 31 22 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23  =1"      {}.}..#
ce20: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
ce30: 33 34 31 30 39 2d 33 39 31 30 38 20 49 66 20 74  34109-39108 If t
ce40: 68 65 20 43 48 45 43 4b 20 65 78 70 72 65 73 73  he CHECK express
ce50: 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20 74 6f  ion evaluates to
ce60: 20 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61 6e 79 20   NULL,.# or any 
ce70: 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f 20 76  other non-zero v
ce80: 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f 74 20  alue, it is not 
ce90: 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  a constraint vio
cea0: 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 63 72 65  lation..#.do_cre
ceb0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34  atetable_tests 4
cec0: 2e 31 32 20 7b 0a 20 20 31 61 20 20 20 20 22 49  .12 {.  1a    "I
ced0: 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41  NSERT INTO x1 VA
cee0: 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e 55 4c 4c  LUES('one', NULL
cef0: 29 22 20 20 20 20 7b 7d 0a 20 20 31 62 20 20 20  )"    {}.  1b   
cf00: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
cf10: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e   VALUES('one', N
cf20: 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a 20 20 32  ULL)"    {}..  2
cf30: 61 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  a    "INSERT INT
cf40: 4f 20 78 31 20 56 41 4c 55 45 53 28 27 6f 6e 65  O x1 VALUES('one
cf50: 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 20 20 32  ', 2)"    {}.  2
cf60: 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  b    "INSERT INT
cf70: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t1 VALUES('one
cf80: 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 0a 20 20  ', 2)"    {}..  
cf90: 33 61 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e  3a    "INSERT IN
cfa0: 54 4f 20 78 32 20 56 41 4c 55 45 53 28 31 2c 20  TO x2 VALUES(1, 
cfb0: 27 61 62 63 27 29 22 20 20 20 20 20 20 20 7b 7d  'abc')"       {}
cfc0: 0a 20 20 33 62 20 20 20 20 22 49 4e 53 45 52 54  .  3b    "INSERT
cfd0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
cfe0: 31 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20  1, 'abc')"      
cff0: 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43   {}.}..# EVIDENC
d000: 45 2d 4f 46 3a 20 52 2d 30 32 30 36 30 2d 36 34  E-OF: R-02060-64
d010: 35 34 37 20 41 20 4e 4f 54 20 4e 55 4c 4c 20 63  547 A NOT NULL c
d020: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 6f 6e  onstraint may on
d030: 6c 79 20 62 65 20 61 74 74 61 63 68 65 64 0a 23  ly be attached.#
d040: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
d050: 69 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20 73 70 65  inition, not spe
d060: 63 69 66 69 65 64 20 61 73 20 61 20 74 61 62 6c  cified as a tabl
d070: 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 23 0a  e constraint..#.
d080: 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a  drop_all_tables.
d090: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
d0a0: 65 73 74 73 20 34 2e 31 33 2e 31 20 7b 0a 20 20  ests 4.13.1 {.  
d0b0: 31 20 20 20 20 20 22 43 52 45 41 54 45 20 54 41  1     "CREATE TA
d0c0: 42 4c 45 20 74 31 28 61 20 4e 4f 54 20 4e 55 4c  BLE t1(a NOT NUL
d0d0: 4c 2c 20 62 29 22 20 20 20 20 20 20 20 20 20 20  L, b)"          
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 20       {}.  2     
d100: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32  "CREATE TABLE t2
d110: 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4e  (a PRIMARY KEY N
d120: 4f 54 20 4e 55 4c 4c 2c 20 62 29 22 20 20 20 20  OT NULL, b)"    
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
d140: 7d 0a 20 20 33 20 20 20 20 20 22 43 52 45 41 54  }.  3     "CREAT
d150: 45 20 54 41 42 4c 45 20 74 33 28 61 20 4e 4f 54  E TABLE t3(a NOT
d160: 20 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20 4e 55 4c   NULL, b NOT NUL
d170: 4c 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c 20 55 4e  L, c NOT NULL UN
d180: 49 51 55 45 29 22 20 20 20 7b 7d 0a 7d 0a 64 6f  IQUE)"   {}.}.do
d190: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
d1a0: 74 73 20 34 2e 31 33 2e 32 20 2d 65 72 72 6f 72  ts 4.13.2 -error
d1b0: 20 7b 0a 20 20 6e 65 61 72 20 22 4e 4f 54 22 3a   {.  near "NOT":
d1c0: 20 73 79 6e 74 61 78 20 65 72 72 6f 72 0a 7d 20   syntax error.} 
d1d0: 7b 0a 20 20 31 20 20 20 20 20 22 43 52 45 41 54  {.  1     "CREAT
d1e0: 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c  E TABLE t4(a, b,
d1f0: 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20 20   NOT NULL(a))"  
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 7b 7d 0a 20 20 32 20 20 20 20 20 22 43 52 45   {}.  2     "CRE
d220: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 20 50  ATE TABLE t4(a P
d230: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 4e  RIMARY KEY, b, N
d240: 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20 20 20 20  OT NULL(a))"    
d250: 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 20 22 43     {}.  3     "C
d260: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
d270: 2c 20 62 2c 20 63 20 55 4e 49 51 55 45 2c 20 4e  , b, c UNIQUE, N
d280: 4f 54 20 4e 55 4c 4c 28 61 2c 20 62 2c 20 63 29  OT NULL(a, b, c)
d290: 29 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49  )"   {}.}..# EVI
d2a0: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31 37 39  DENCE-OF: R-3179
d2b0: 35 2d 35 37 36 34 33 20 61 20 4e 4f 54 20 4e 55  5-57643 a NOT NU
d2c0: 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 69  LL constraint di
d2d0: 63 74 61 74 65 73 20 74 68 61 74 20 74 68 65 0a  ctates that the.
d2e0: 23 20 61 73 73 6f 63 69 61 74 65 64 20 63 6f 6c  # associated col
d2f0: 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f 6e 74  umn may not cont
d300: 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65  ain a NULL value
d310: 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20  . Attempting to 
d320: 73 65 74 20 74 68 65 0a 23 20 63 6f 6c 75 6d 6e  set the.# column
d330: 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 77   value to NULL w
d340: 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20 61 20  hen inserting a 
d350: 6e 65 77 20 72 6f 77 20 6f 72 20 75 70 64 61 74  new row or updat
d360: 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  ing an existing.
d370: 23 20 6f 6e 65 20 63 61 75 73 65 73 20 61 20 63  # one causes a c
d380: 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74  onstraint violat
d390: 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20 54 68 65  ion..#.#     The
d3a0: 73 65 20 74 65 73 74 73 20 75 73 65 20 74 68 65  se tests use the
d3b0: 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   tables created 
d3c0: 62 79 20 34 2e 31 33 2e 0a 23 0a 64 6f 5f 65 78  by 4.13..#.do_ex
d3d0: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 34 2e  ecsql_test 4.14.
d3e0: 30 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  0 {.  INSERT INT
d3f0: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 78 27 2c  O t1 VALUES('x',
d400: 20 27 79 27 29 3b 0a 20 20 49 4e 53 45 52 54 20   'y');.  INSERT 
d410: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
d420: 7a 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20 49 4e  z', NULL);..  IN
d430: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
d440: 55 45 53 28 27 78 27 2c 20 27 79 27 29 3b 0a 20  UES('x', 'y');. 
d450: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
d460: 56 41 4c 55 45 53 28 27 7a 27 2c 20 4e 55 4c 4c  VALUES('z', NULL
d470: 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  );..  INSERT INT
d480: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 78 27 2c  O t3 VALUES('x',
d490: 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20 20 49 4e   'y', 'z');.  IN
d4a0: 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c  SERT INTO t3 VAL
d4b0: 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a 7d 0a  UES(1, 2, 3);.}.
d4c0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
d4d0: 65 73 74 73 20 34 2e 31 34 20 2d 65 72 72 6f 72  ests 4.14 -error
d4e0: 20 7b 0a 20 20 25 73 20 6d 61 79 20 6e 6f 74 20   {.  %s may not 
d4f0: 62 65 20 4e 55 4c 4c 0a 7d 20 7b 0a 20 20 31 20  be NULL.} {.  1 
d500: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
d510: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
d520: 27 61 27 29 22 20 20 20 20 20 20 20 20 20 7b 74  'a')"         {t
d530: 31 2e 61 7d 0a 20 20 32 20 20 20 20 22 49 4e 53  1.a}.  2    "INS
d540: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
d550: 45 53 28 4e 55 4c 4c 2c 20 27 62 27 29 22 20 20  ES(NULL, 'b')"  
d560: 20 20 20 20 20 20 20 7b 74 32 2e 61 7d 0a 20 20         {t2.a}.  
d570: 33 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  3    "INSERT INT
d580: 4f 20 74 33 20 56 41 4c 55 45 53 28 27 63 27 2c  O t3 VALUES('c',
d590: 20 27 64 27 2c 20 4e 55 4c 4c 29 22 20 20 20 20   'd', NULL)"    
d5a0: 7b 74 33 2e 63 7d 0a 20 20 34 20 20 20 20 22 49  {t3.c}.  4    "I
d5b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
d5c0: 4c 55 45 53 28 27 65 27 2c 20 4e 55 4c 4c 2c 20  LUES('e', NULL, 
d5d0: 27 66 27 29 22 20 20 20 20 7b 74 33 2e 62 7d 0a  'f')"    {t3.b}.
d5e0: 20 20 35 20 20 20 20 22 49 4e 53 45 52 54 20 49    5    "INSERT I
d5f0: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 4e 55  NTO t3 VALUES(NU
d600: 4c 4c 2c 20 27 67 27 2c 20 27 68 27 29 22 20 20  LL, 'g', 'h')"  
d610: 20 20 7b 74 33 2e 61 7d 0a 7d 0a 0a 23 20 45 56    {t3.a}.}..# EV
d620: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 32 35  IDENCE-OF: R-425
d630: 31 31 2d 33 39 34 35 39 20 50 52 49 4d 41 52 59  11-39459 PRIMARY
d640: 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61 6e 64   KEY, UNIQUE and
d650: 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 63 6f 6e 73   NOT NULL.# cons
d660: 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65 20 65  traints may be e
d670: 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69 67 6e  xplicitly assign
d680: 65 64 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6e  ed a default con
d690: 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69 6f 6e  flict resolution
d6a0: 0a 23 20 61 6c 67 6f 72 69 74 68 6d 20 62 79 20  .# algorithm by 
d6b0: 69 6e 63 6c 75 64 69 6e 67 20 61 20 63 6f 6e 66  including a conf
d6c0: 6c 69 63 74 2d 63 6c 61 75 73 65 20 69 6e 20 74  lict-clause in t
d6d0: 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f 6e 73  heir definitions
d6e0: 2e 0a 23 0a 23 20 20 20 20 20 43 6f 6e 66 6c 69  ..#.#     Confli
d6f0: 63 74 20 63 6c 61 75 73 65 73 3a 20 41 42 4f 52  ct clauses: ABOR
d700: 54 2c 20 52 4f 4c 4c 42 41 43 4b 2c 20 49 47 4e  T, ROLLBACK, IGN
d710: 4f 52 45 2c 20 46 41 49 4c 2c 20 52 45 50 4c 41  ORE, FAIL, REPLA
d720: 43 45 0a 23 0a 23 20 20 20 20 20 54 65 73 74 20  CE.#.#     Test 
d730: 63 61 73 65 73 20 34 2e 31 35 2e 2a 2c 20 34 2e  cases 4.15.*, 4.
d740: 31 36 2e 2a 20 61 6e 64 20 34 2e 31 37 2e 2a 20  16.* and 4.17.* 
d750: 66 6f 63 75 73 20 6f 6e 20 50 52 49 4d 41 52 59  focus on PRIMARY
d760: 20 4b 45 59 2c 20 4e 4f 54 20 4e 55 4c 4c 0a 23   KEY, NOT NULL.#
d770: 20 20 20 20 20 61 6e 64 20 55 4e 49 51 55 45 20       and UNIQUE 
d780: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 72 65 73  constraints, res
d790: 70 65 63 74 69 76 65 6c 79 2e 0a 23 0a 64 72 6f  pectively..#.dro
d7a0: 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f  p_all_tables.do_
d7b0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
d7c0: 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54  5.0 {.  CREATE T
d7d0: 41 42 4c 45 20 74 31 5f 61 62 28 61 20 50 52 49  ABLE t1_ab(a PRI
d7e0: 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46  MARY KEY ON CONF
d7f0: 4c 49 43 54 20 41 42 4f 52 54 2c 20 62 29 3b 0a  LICT ABORT, b);.
d800: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
d810: 31 5f 72 6f 28 61 20 50 52 49 4d 41 52 59 20 4b  1_ro(a PRIMARY K
d820: 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  EY ON CONFLICT R
d830: 4f 4c 4c 42 41 43 4b 2c 20 62 29 3b 0a 20 20 43  OLLBACK, b);.  C
d840: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 69  REATE TABLE t1_i
d850: 67 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20  g(a PRIMARY KEY 
d860: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f  ON CONFLICT IGNO
d870: 52 45 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45  RE, b);.  CREATE
d880: 20 54 41 42 4c 45 20 74 31 5f 66 61 28 61 20 50   TABLE t1_fa(a P
d890: 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f  RIMARY KEY ON CO
d8a0: 4e 46 4c 49 43 54 20 46 41 49 4c 2c 20 62 29 3b  NFLICT FAIL, b);
d8b0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
d8c0: 74 31 5f 72 65 28 61 20 50 52 49 4d 41 52 59 20  t1_re(a PRIMARY 
d8d0: 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  KEY ON CONFLICT 
d8e0: 52 45 50 4c 41 43 45 2c 20 62 29 3b 0a 20 20 43  REPLACE, b);.  C
d8f0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 5f 78  REATE TABLE t1_x
d900: 78 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  x(a PRIMARY KEY,
d910: 20 62 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49   b);..  INSERT I
d920: 4e 54 4f 20 74 31 5f 61 62 20 56 41 4c 55 45 53  NTO t1_ab VALUES
d930: 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e  (1, 'one');.  IN
d940: 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 61 62 20  SERT INTO t1_ab 
d950: 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29  VALUES(2, 'two')
d960: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
d970: 74 31 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20 46  t1_ro SELECT * F
d980: 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49 4e 53  ROM t1_ab;.  INS
d990: 45 52 54 20 49 4e 54 4f 20 74 31 5f 69 67 20 53  ERT INTO t1_ig S
d9a0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 5f  ELECT * FROM t1_
d9b0: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
d9c0: 4f 20 74 31 5f 66 61 20 53 45 4c 45 43 54 20 2a  O t1_fa SELECT *
d9d0: 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49   FROM t1_ab;.  I
d9e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 72 65  NSERT INTO t1_re
d9f0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
da00: 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  1_ab;.  INSERT I
da10: 4e 54 4f 20 74 31 5f 78 78 20 53 45 4c 45 43 54  NTO t1_xx SELECT
da20: 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 0a   * FROM t1_ab;..
da30: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
da40: 32 5f 61 62 28 61 2c 20 62 20 4e 4f 54 20 4e 55  2_ab(a, b NOT NU
da50: 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 41  LL ON CONFLICT A
da60: 42 4f 52 54 29 3b 0a 20 20 43 52 45 41 54 45 20  BORT);.  CREATE 
da70: 54 41 42 4c 45 20 74 32 5f 72 6f 28 61 2c 20 62  TABLE t2_ro(a, b
da80: 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e   NOT NULL ON CON
da90: 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b 29 3b  FLICT ROLLBACK);
daa0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
dab0: 74 32 5f 69 67 28 61 2c 20 62 20 4e 4f 54 20 4e  t2_ig(a, b NOT N
dac0: 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ULL ON CONFLICT 
dad0: 49 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45 41 54  IGNORE);.  CREAT
dae0: 45 20 54 41 42 4c 45 20 74 32 5f 66 61 28 61 2c  E TABLE t2_fa(a,
daf0: 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43   b NOT NULL ON C
db00: 4f 4e 46 4c 49 43 54 20 46 41 49 4c 29 3b 0a 20  ONFLICT FAIL);. 
db10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
db20: 5f 72 65 28 61 2c 20 62 20 4e 4f 54 20 4e 55 4c  _re(a, b NOT NUL
db30: 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52 45  L ON CONFLICT RE
db40: 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41 54 45  PLACE);.  CREATE
db50: 20 54 41 42 4c 45 20 74 32 5f 78 78 28 61 2c 20   TABLE t2_xx(a, 
db60: 62 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 0a 20 20  b NOT NULL);..  
db70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 61  INSERT INTO t2_a
db80: 62 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e 65  b VALUES(1, 'one
db90: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
dba0: 4f 20 74 32 5f 61 62 20 56 41 4c 55 45 53 28 32  O t2_ab VALUES(2
dbb0: 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53 45  , 'two');.  INSE
dbc0: 52 54 20 49 4e 54 4f 20 74 32 5f 72 6f 20 53 45  RT INTO t2_ro SE
dbd0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61  LECT * FROM t2_a
dbe0: 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  b;.  INSERT INTO
dbf0: 20 74 32 5f 69 67 20 53 45 4c 45 43 54 20 2a 20   t2_ig SELECT * 
dc00: 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20 49 4e  FROM t2_ab;.  IN
dc10: 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 66 61 20  SERT INTO t2_fa 
dc20: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
dc30: 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  _ab;.  INSERT IN
dc40: 54 4f 20 74 32 5f 72 65 20 53 45 4c 45 43 54 20  TO t2_re SELECT 
dc50: 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20  * FROM t2_ab;.  
dc60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 78  INSERT INTO t2_x
dc70: 78 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  x SELECT * FROM 
dc80: 74 32 5f 61 62 3b 0a 0a 20 20 43 52 45 41 54 45  t2_ab;..  CREATE
dc90: 20 54 41 42 4c 45 20 74 33 5f 61 62 28 61 2c 20   TABLE t3_ab(a, 
dca0: 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62 29 20  b, UNIQUE(a, b) 
dcb0: 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 41 42 4f 52  ON CONFLICT ABOR
dcc0: 54 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  T);.  CREATE TAB
dcd0: 4c 45 20 74 33 5f 72 6f 28 61 2c 20 62 2c 20 55  LE t3_ro(a, b, U
dce0: 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43  NIQUE(a, b) ON C
dcf0: 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b  ONFLICT ROLLBACK
dd00: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
dd10: 45 20 74 33 5f 69 67 28 61 2c 20 62 2c 20 55 4e  E t3_ig(a, b, UN
dd20: 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f  IQUE(a, b) ON CO
dd30: 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 29 3b 0a  NFLICT IGNORE);.
dd40: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
dd50: 33 5f 66 61 28 61 2c 20 62 2c 20 55 4e 49 51 55  3_fa(a, b, UNIQU
dd60: 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c  E(a, b) ON CONFL
dd70: 49 43 54 20 46 41 49 4c 29 3b 0a 20 20 43 52 45  ICT FAIL);.  CRE
dd80: 41 54 45 20 54 41 42 4c 45 20 74 33 5f 72 65 28  ATE TABLE t3_re(
dd90: 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20  a, b, UNIQUE(a, 
dda0: 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 52  b) ON CONFLICT R
ddb0: 45 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41 54  EPLACE);.  CREAT
ddc0: 45 20 54 41 42 4c 45 20 74 33 5f 78 78 28 61 2c  E TABLE t3_xx(a,
ddd0: 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62 29   b, UNIQUE(a, b)
dde0: 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  );..  INSERT INT
ddf0: 4f 20 74 33 5f 61 62 20 56 41 4c 55 45 53 28 31  O t3_ab VALUES(1
de00: 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45  , 'one');.  INSE
de10: 52 54 20 49 4e 54 4f 20 74 33 5f 61 62 20 56 41  RT INTO t3_ab VA
de20: 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a  LUES(2, 'two');.
de30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
de40: 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  _ro SELECT * FRO
de50: 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53 45 52  M t3_ab;.  INSER
de60: 54 20 49 4e 54 4f 20 74 33 5f 69 67 20 53 45 4c  T INTO t3_ig SEL
de70: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f 61 62  ECT * FROM t3_ab
de80: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
de90: 74 33 5f 66 61 20 53 45 4c 45 43 54 20 2a 20 46  t3_fa SELECT * F
dea0: 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53  ROM t3_ab;.  INS
deb0: 45 52 54 20 49 4e 54 4f 20 74 33 5f 72 65 20 53  ERT INTO t3_re S
dec0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f  ELECT * FROM t3_
ded0: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
dee0: 4f 20 74 33 5f 78 78 20 53 45 4c 45 43 54 20 2a  O t3_xx SELECT *
def0: 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 7d 0a 0a   FROM t3_ab;.}..
df00: 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c 20  foreach {tn tbl 
df10: 72 65 73 20 61 63 20 64 61 74 61 7d 20 7b 0a 20  res ac data} {. 
df20: 20 31 20 20 20 74 31 5f 61 62 20 20 20 20 7b 31   1   t1_ab    {1
df30: 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f   {column a is no
df40: 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20  t unique}} 0 {1 
df50: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
df60: 65 7d 0a 20 20 32 20 20 20 74 31 5f 72 6f 20 20  e}.  2   t1_ro  
df70: 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69    {1 {column a i
df80: 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31  s not unique}} 1
df90: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20   {1 one 2 two}. 
dfa0: 20 33 20 20 20 74 31 5f 66 61 20 20 20 20 7b 31   3   t1_fa    {1
dfb0: 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f   {column a is no
dfc0: 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20  t unique}} 0 {1 
dfd0: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
dfe0: 65 20 34 20 73 74 72 69 6e 67 7d 0a 20 20 34 20  e 4 string}.  4 
dff0: 20 20 74 31 5f 69 67 20 20 20 20 7b 30 20 7b 7d    t1_ig    {0 {}
e000: 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f  } 0 {1 one 2 two
e010: 20 33 20 74 68 72 65 65 20 34 20 73 74 72 69 6e   3 three 4 strin
e020: 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20 35 20  g 6 string}.  5 
e030: 20 20 74 31 5f 72 65 20 20 20 20 7b 30 20 7b 7d    t1_re    {0 {}
e040: 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f  } 0 {1 one 2 two
e050: 20 34 20 73 74 72 69 6e 67 20 33 20 73 74 72 69   4 string 3 stri
e060: 6e 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20 36  ng 6 string}.  6
e070: 20 20 20 74 31 5f 78 78 20 20 20 20 7b 31 20 7b     t1_xx    {1 {
e080: 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f 74 20  column a is not 
e090: 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20 6f 6e  unique}} 0 {1 on
e0a0: 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d  e 2 two 3 three}
e0b0: 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20  .} {.  catchsql 
e0c0: 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78 65 63  COMMIT.  do_exec
e0d0: 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 35 2e 24  sql_test  4.15.$
e0e0: 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49 4e 53  tn.1 "BEGIN; INS
e0f0: 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 56 41  ERT INTO $tbl VA
e100: 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65 27 29  LUES(3, 'three')
e110: 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73 71 6c  "..  do_catchsql
e120: 5f 74 65 73 74 20 34 2e 31 35 2e 24 74 6e 2e 32  _test 4.15.$tn.2
e130: 20 22 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49   " .    INSERT I
e140: 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45 43 54 20  NTO $tbl SELECT 
e150: 28 28 61 25 32 29 2a 61 2b 33 29 2c 20 27 73 74  ((a%2)*a+3), 'st
e160: 72 69 6e 67 27 20 46 52 4f 4d 20 24 74 62 6c 3b  ring' FROM $tbl;
e170: 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f  .  " $res..  do_
e180: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
e190: 6c 65 2d 34 2e 31 35 2e 24 74 6e 2e 33 20 7b 20  le-4.15.$tn.3 { 
e1a0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
e1b0: 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63 0a  commit db } $ac.
e1c0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
e1d0: 74 20 34 2e 31 35 2e 24 74 6e 2e 34 20 22 53 45  t 4.15.$tn.4 "SE
e1e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c  LECT * FROM $tbl
e1f0: 22 20 24 64 61 74 61 0a 7d 0a 66 6f 72 65 61 63  " $data.}.foreac
e200: 68 20 7b 74 6e 20 74 62 6c 20 72 65 73 20 61 63  h {tn tbl res ac
e210: 20 64 61 74 61 7d 20 7b 0a 20 20 31 20 20 20 74   data} {.  1   t
e220: 32 5f 61 62 20 20 20 20 7b 31 20 7b 74 32 5f 61  2_ab    {1 {t2_a
e230: 62 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65 20 4e  b.b may not be N
e240: 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32  ULL}} 0 {1 one 2
e250: 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20   two 3 three}.  
e260: 32 20 20 20 74 32 5f 72 6f 20 20 20 20 7b 31 20  2   t2_ro    {1 
e270: 7b 74 32 5f 72 6f 2e 62 20 6d 61 79 20 6e 6f 74  {t2_ro.b may not
e280: 20 62 65 20 4e 55 4c 4c 7d 7d 20 31 20 7b 31 20   be NULL}} 1 {1 
e290: 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33 20 20  one 2 two}.  3  
e2a0: 20 74 32 5f 66 61 20 20 20 20 7b 31 20 7b 74 32   t2_fa    {1 {t2
e2b0: 5f 66 61 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65  _fa.b may not be
e2c0: 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65   NULL}} 0 {1 one
e2d0: 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 20 34   2 two 3 three 4
e2e0: 20 78 78 7d 0a 20 20 34 20 20 20 74 32 5f 69 67   xx}.  4   t2_ig
e2f0: 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20 7b 31 20      {0 {}} 0 {1 
e300: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e310: 65 20 34 20 78 78 20 36 20 78 78 7d 0a 20 20 35  e 4 xx 6 xx}.  5
e320: 20 20 20 74 32 5f 72 65 20 20 20 20 7b 31 20 7b     t2_re    {1 {
e330: 74 32 5f 72 65 2e 62 20 6d 61 79 20 6e 6f 74 20  t2_re.b may not 
e340: 62 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f  be NULL}} 0 {1 o
e350: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
e360: 7d 0a 20 20 36 20 20 20 74 32 5f 78 78 20 20 20  }.  6   t2_xx   
e370: 20 7b 31 20 7b 74 32 5f 78 78 2e 62 20 6d 61 79   {1 {t2_xx.b may
e380: 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 20 30   not be NULL}} 0
e390: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20   {1 one 2 two 3 
e3a0: 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61 74  three}.} {.  cat
e3b0: 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 64  chsql COMMIT.  d
e3c0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
e3d0: 34 2e 31 36 2e 24 74 6e 2e 31 20 22 42 45 47 49  4.16.$tn.1 "BEGI
e3e0: 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24  N; INSERT INTO $
e3f0: 74 62 6c 20 56 41 4c 55 45 53 28 33 2c 20 27 74  tbl VALUES(3, 't
e400: 68 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63 61  hree')"..  do_ca
e410: 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 36  tchsql_test 4.16
e420: 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20 20 49 4e  .$tn.2 " .    IN
e430: 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 53  SERT INTO $tbl S
e440: 45 4c 45 43 54 20 61 2b 33 2c 20 43 41 53 45 20  ELECT a+3, CASE 
e450: 61 20 57 48 45 4e 20 32 20 54 48 45 4e 20 4e 55  a WHEN 2 THEN NU
e460: 4c 4c 20 45 4c 53 45 20 27 78 78 27 20 45 4e 44  LL ELSE 'xx' END
e470: 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22 20 24   FROM $tbl.  " $
e480: 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74 20 65  res..  do_test e
e490: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e 31  _createtable-4.1
e4a0: 36 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69 74 65  6.$tn.3 { sqlite
e4b0: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
e4c0: 20 64 62 20 7d 20 24 61 63 0a 20 20 64 6f 5f 65   db } $ac.  do_e
e4d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 36  xecsql_test 4.16
e4e0: 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43 54 20 2a  .$tn.4 "SELECT *
e4f0: 20 46 52 4f 4d 20 24 74 62 6c 22 20 24 64 61 74   FROM $tbl" $dat
e500: 61 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  a.}.foreach {tn 
e510: 74 62 6c 20 72 65 73 20 61 63 20 64 61 74 61 7d  tbl res ac data}
e520: 20 7b 0a 20 20 31 20 20 20 74 33 5f 61 62 20 20   {.  1   t3_ab  
e530: 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20 61 2c    {1 {columns a,
e540: 20 62 20 61 72 65 20 6e 6f 74 20 75 6e 69 71 75   b are not uniqu
e550: 65 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74  e}} 0 {1 one 2 t
e560: 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20 32 20  wo 3 three}.  2 
e570: 20 20 74 33 5f 72 6f 20 20 20 20 7b 31 20 7b 63    t3_ro    {1 {c
e580: 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20  olumns a, b are 
e590: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31 20 7b  not unique}} 1 {
e5a0: 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33  1 one 2 two}.  3
e5b0: 20 20 20 74 33 5f 66 61 20 20 20 20 7b 31 20 7b     t3_fa    {1 {
e5c0: 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65  columns a, b are
e5d0: 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20   not unique}} 0 
e5e0: 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74  {1 one 2 two 3 t
e5f0: 68 72 65 65 20 34 20 74 68 72 65 65 7d 0a 20 20  hree 4 three}.  
e600: 34 20 20 20 74 33 5f 69 67 20 20 20 20 7b 30 20  4   t3_ig    {0 
e610: 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74  {}} 0 {1 one 2 t
e620: 77 6f 20 33 20 74 68 72 65 65 20 34 20 74 68 72  wo 3 three 4 thr
e630: 65 65 20 36 20 74 68 72 65 65 7d 0a 20 20 35 20  ee 6 three}.  5 
e640: 20 20 74 33 5f 72 65 20 20 20 20 7b 30 20 7b 7d    t3_re    {0 {}
e650: 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f  } 0 {1 one 2 two
e660: 20 34 20 74 68 72 65 65 20 33 20 74 68 72 65 65   4 three 3 three
e670: 20 36 20 74 68 72 65 65 7d 0a 20 20 36 20 20 20   6 three}.  6   
e680: 74 33 5f 78 78 20 20 20 20 7b 31 20 7b 63 6f 6c  t3_xx    {1 {col
e690: 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20 6e 6f  umns a, b are no
e6a0: 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20  t unique}} 0 {1 
e6b0: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e6c0: 65 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73 71  e}.} {.  catchsq
e6d0: 6c 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78  l COMMIT.  do_ex
e6e0: 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 37  ecsql_test  4.17
e6f0: 2e 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49  .$tn.1 "BEGIN; I
e700: 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20  NSERT INTO $tbl 
e710: 56 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65  VALUES(3, 'three
e720: 27 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73  ')"..  do_catchs
e730: 71 6c 5f 74 65 73 74 20 34 2e 31 37 2e 24 74 6e  ql_test 4.17.$tn
e740: 2e 32 20 22 20 0a 20 20 20 20 49 4e 53 45 52 54  .2 " .    INSERT
e750: 20 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45 43   INTO $tbl SELEC
e760: 54 20 28 28 61 25 32 29 2a 61 2b 33 29 2c 20 27  T ((a%2)*a+3), '
e770: 74 68 72 65 65 27 20 46 52 4f 4d 20 24 74 62 6c  three' FROM $tbl
e780: 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64 6f 5f  .  " $res..  do_
e790: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
e7a0: 6c 65 2d 34 2e 31 37 2e 24 74 6e 2e 33 20 7b 20  le-4.17.$tn.3 { 
e7b0: 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f  sqlite3_get_auto
e7c0: 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61 63 0a  commit db } $ac.
e7d0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
e7e0: 74 20 34 2e 31 37 2e 24 74 6e 2e 34 20 22 53 45  t 4.17.$tn.4 "SE
e7f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c  LECT * FROM $tbl
e800: 22 20 24 64 61 74 61 0a 7d 0a 63 61 74 63 68 73  " $data.}.catchs
e810: 71 6c 20 43 4f 4d 4d 49 54 0a 0a 23 20 45 56 49  ql COMMIT..# EVI
e820: 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32 36 34  DENCE-OF: R-1264
e830: 35 2d 33 39 37 37 32 20 4f 72 2c 20 69 66 20 61  5-39772 Or, if a
e840: 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65 66 69   constraint defi
e850: 6e 69 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0a  nition does not.
e860: 23 20 69 6e 63 6c 75 64 65 20 61 20 63 6f 6e 66  # include a conf
e870: 6c 69 63 74 2d 63 6c 61 75 73 65 20 6f 72 20 69  lict-clause or i
e880: 74 20 69 73 20 61 20 43 48 45 43 4b 20 63 6f 6e  t is a CHECK con
e890: 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64 65 66  straint, the def
e8a0: 61 75 6c 74 0a 23 20 63 6f 6e 66 6c 69 63 74 20  ault.# conflict 
e8b0: 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72  resolution algor
e8c0: 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e 0a 23  ithm is ABORT..#
e8d0: 0a 23 20 20 20 20 20 54 68 65 20 66 69 72 73 74  .#     The first
e8e0: 20 68 61 6c 66 20 6f 66 20 74 68 65 20 61 62 6f   half of the abo
e8f0: 76 65 20 69 73 20 74 65 73 74 65 64 20 61 6c 6f  ve is tested alo
e900: 6e 67 20 77 69 74 68 20 65 78 70 6c 69 63 69 74  ng with explicit
e910: 20 4f 4e 20 0a 23 20 20 20 20 20 43 4f 4e 46 4c   ON .#     CONFL
e920: 49 43 54 20 63 6c 61 75 73 65 73 20 61 62 6f 76  ICT clauses abov
e930: 65 20 28 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  e (specifically,
e940: 20 74 68 65 20 74 65 73 74 73 20 69 6e 76 6f 6c   the tests invol
e950: 76 69 6e 67 20 74 31 5f 78 78 2c 20 74 32 5f 78  ving t1_xx, t2_x
e960: 78 0a 23 20 20 20 20 20 61 6e 64 20 74 33 5f 78  x.#     and t3_x
e970: 78 29 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  x). The followin
e980: 67 20 6a 75 73 74 20 74 65 73 74 73 20 74 68 61  g just tests tha
e990: 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f  t the default co
e9a0: 6e 66 6c 69 63 74 0a 23 20 20 20 20 20 68 61 6e  nflict.#     han
e9b0: 64 6c 69 6e 67 20 66 6f 72 20 43 48 45 43 4b 20  dling for CHECK 
e9c0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 73 20 41  constraints is A
e9d0: 42 4f 52 54 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  BORT..#.do_execs
e9e0: 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 31 20 7b  ql_test 4.18.1 {
e9f0: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
ea00: 74 34 28 61 2c 20 62 20 43 48 45 43 4b 20 28 62  t4(a, b CHECK (b
ea10: 21 3d 31 30 29 29 3b 0a 20 20 49 4e 53 45 52 54  !=10));.  INSERT
ea20: 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28   INTO t4 VALUES(
ea30: 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52 54 20  1, 2);.  INSERT 
ea40: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 33  INTO t4 VALUES(3
ea50: 2c 20 34 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73  , 4);.}.do_execs
ea60: 71 6c 5f 74 65 73 74 20 20 34 2e 31 38 2e 32 20  ql_test  4.18.2 
ea70: 7b 20 42 45 47 49 4e 3b 20 49 4e 53 45 52 54 20  { BEGIN; INSERT 
ea80: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 35  INTO t4 VALUES(5
ea90: 2c 20 36 29 20 7d 0a 64 6f 5f 63 61 74 63 68 73  , 6) }.do_catchs
eaa0: 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 33 20 7b  ql_test 4.18.3 {
eab0: 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   .  INSERT INTO 
eac0: 74 34 20 53 45 4c 45 43 54 20 61 2b 34 2c 20 62  t4 SELECT a+4, b
ead0: 2b 34 20 46 52 4f 4d 20 74 34 0a 7d 20 7b 31 20  +4 FROM t4.} {1 
eae0: 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c  {constraint fail
eaf0: 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 65 5f 63  ed}}.do_test e_c
eb00: 72 65 61 74 65 74 61 62 6c 65 2d 34 2e 31 38 2e  reatetable-4.18.
eb10: 34 20 7b 20 73 71 6c 69 74 65 33 5f 67 65 74 5f  4 { sqlite3_get_
eb20: 61 75 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20  autocommit db } 
eb30: 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  0.do_execsql_tes
eb40: 74 20 34 2e 31 38 2e 35 20 7b 20 53 45 4c 45 43  t 4.18.5 { SELEC
eb50: 54 20 2a 20 46 52 4f 4d 20 74 34 20 7d 20 7b 31  T * FROM t4 } {1
eb60: 20 32 20 33 20 34 20 35 20 36 7d 0a 0a 23 20 45   2 3 4 5 6}..# E
eb70: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 39  VIDENCE-OF: R-19
eb80: 31 31 34 2d 35 36 31 31 33 20 44 69 66 66 65 72  114-56113 Differ
eb90: 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ent constraints 
eba0: 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d 65 20  within the same 
ebb0: 74 61 62 6c 65 0a 23 20 6d 61 79 20 68 61 76 65  table.# may have
ebc0: 20 64 69 66 66 65 72 65 6e 74 20 64 65 66 61 75   different defau
ebd0: 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f  lt conflict reso
ebe0: 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74 68 6d  lution algorithm
ebf0: 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  s..#.do_execsql_
ec00: 74 65 73 74 20 34 2e 31 39 2e 30 20 7b 0a 20 20  test 4.19.0 {.  
ec10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
ec20: 61 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f  a NOT NULL ON CO
ec30: 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c 20 62  NFLICT IGNORE, b
ec40: 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e   NOT NULL ON CON
ec50: 46 4c 49 43 54 20 41 42 4f 52 54 29 3b 0a 7d 0a  FLICT ABORT);.}.
ec60: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
ec70: 20 34 2e 31 39 2e 31 20 7b 20 49 4e 53 45 52 54   4.19.1 { INSERT
ec80: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
ec90: 4e 55 4c 4c 2c 20 27 6e 6f 74 20 6e 75 6c 6c 27  NULL, 'not null'
eca0: 29 20 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f 65 78  ) } {0 {}}.do_ex
ecb0: 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 39  ecsql_test  4.19
ecc0: 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  .2 { SELECT * FR
ecd0: 4f 4d 20 74 35 20 7d 20 7b 7d 0a 64 6f 5f 63 61  OM t5 } {}.do_ca
ece0: 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 39  tchsql_test 4.19
ecf0: 2e 33 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  .3 { INSERT INTO
ed00: 20 74 35 20 56 41 4c 55 45 53 28 27 6e 6f 74 20   t5 VALUES('not 
ed10: 6e 75 6c 6c 27 2c 20 4e 55 4c 4c 29 20 7d 20 5c  null', NULL) } \
ed20: 0a 20 20 7b 31 20 7b 74 35 2e 62 20 6d 61 79 20  .  {1 {t5.b may 
ed30: 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a 64 6f  not be NULL}}.do
ed40: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34  _execsql_test  4
ed50: 2e 31 39 2e 34 20 7b 20 53 45 4c 45 43 54 20 2a  .19.4 { SELECT *
ed60: 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 0a 23   FROM t5 } {}..#
ed70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ed80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ed90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eda0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
edb0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 73  --------.# Tests
edc0: 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50 52 49   for INTEGER PRI
edd0: 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 72 6f 77  MARY KEY and row
ede0: 69 64 20 72 65 6c 61 74 65 64 20 73 74 61 74 65  id related state
edf0: 6d 65 6e 74 73 2e 0a 23 0a 0a 23 20 45 56 49 44  ments..#..# EVID
ee00: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35 38 34  ENCE-OF: R-52584
ee10: 2d 30 34 30 30 39 20 54 68 65 20 72 6f 77 69 64  -04009 The rowid
ee20: 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20 61 63   value can be ac
ee30: 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f 6e 65  cessed using one
ee40: 0a 23 20 6f 66 20 74 68 65 20 73 70 65 63 69 61  .# of the specia
ee50: 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e 64 65  l case-independe
ee60: 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69 64 22  nt names "rowid"
ee70: 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f 72 6f  , "oid", or "_ro
ee80: 77 69 64 5f 22 20 69 6e 0a 23 20 70 6c 61 63 65  wid_" in.# place
ee90: 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d   of a column nam
eea0: 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  e..#.drop_all_ta
eeb0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
eec0: 74 65 73 74 20 35 2e 31 2e 30 20 7b 0a 20 20 43  test 5.1.0 {.  C
eed0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 78  REATE TABLE t1(x
eee0: 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , y);.  INSERT I
eef0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f  NTO t1 VALUES('o
ef00: 6e 65 27 2c 20 27 66 69 72 73 74 27 29 3b 0a 20  ne', 'first');. 
ef10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
ef20: 56 41 4c 55 45 53 28 27 74 77 6f 27 2c 20 27 73  VALUES('two', 's
ef30: 65 63 6f 6e 64 27 29 3b 0a 20 20 49 4e 53 45 52  econd');.  INSER
ef40: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
ef50: 28 27 74 68 72 65 65 27 2c 20 27 74 68 69 72 64  ('three', 'third
ef60: 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74  ');.}.do_createt
ef70: 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 31 20 7b  able_tests 5.1 {
ef80: 0a 20 20 31 20 20 20 22 53 45 4c 45 43 54 20 72  .  1   "SELECT r
ef90: 6f 77 69 64 20 46 52 4f 4d 20 74 31 22 20 20 20  owid FROM t1"   
efa0: 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 32       {1 2 3}.  2
efb0: 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64 20 46     "SELECT oid F
efc0: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 20  ROM t1"         
efd0: 20 7b 31 20 32 20 33 7d 0a 20 20 33 20 20 20 22   {1 2 3}.  3   "
efe0: 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f 20 46  SELECT _rowid_ F
eff0: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b 31 20  ROM t1"      {1 
f000: 32 20 33 7d 0a 20 20 34 20 20 20 22 53 45 4c 45  2 3}.  4   "SELE
f010: 43 54 20 52 4f 57 49 44 20 46 52 4f 4d 20 74 31  CT ROWID FROM t1
f020: 22 20 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d  "        {1 2 3}
f030: 0a 20 20 35 20 20 20 22 53 45 4c 45 43 54 20 4f  .  5   "SELECT O
f040: 49 44 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20  ID FROM t1"     
f050: 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 36       {1 2 3}.  6
f060: 20 20 20 22 53 45 4c 45 43 54 20 5f 52 4f 57 49     "SELECT _ROWI
f070: 44 5f 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20  D_ FROM t1"     
f080: 20 7b 31 20 32 20 33 7d 0a 20 20 37 20 20 20 22   {1 2 3}.  7   "
f090: 53 45 4c 45 43 54 20 52 6f 57 69 44 20 46 52 4f  SELECT RoWiD FRO
f0a0: 4d 20 74 31 22 20 20 20 20 20 20 20 20 7b 31 20  M t1"        {1 
f0b0: 32 20 33 7d 0a 20 20 38 20 20 20 22 53 45 4c 45  2 3}.  8   "SELE
f0c0: 43 54 20 4f 69 44 20 46 52 4f 4d 20 74 31 22 20  CT OiD FROM t1" 
f0d0: 20 20 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d           {1 2 3}
f0e0: 0a 20 20 39 20 20 20 22 53 45 4c 45 43 54 20 5f  .  9   "SELECT _
f0f0: 52 6f 57 69 44 5f 20 46 52 4f 4d 20 74 31 22 20  RoWiD_ FROM t1" 
f100: 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 7d 0a 0a       {1 2 3}.}..
f110: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
f120: 2d 32 36 35 30 31 2d 31 37 33 30 36 20 49 66 20  -26501-17306 If 
f130: 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 73  a table contains
f140: 20 61 20 75 73 65 72 20 64 65 66 69 6e 65 64 20   a user defined 
f150: 63 6f 6c 75 6d 6e 0a 23 20 6e 61 6d 65 64 20 22  column.# named "
f160: 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20 6f 72  rowid", "oid" or
f170: 20 22 5f 72 6f 77 69 64 5f 22 2c 20 74 68 65 6e   "_rowid_", then
f180: 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77 61 79   that name alway
f190: 73 20 72 65 66 65 72 73 20 74 68 65 0a 23 20 65  s refers the.# e
f1a0: 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c 61 72  xplicitly declar
f1b0: 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20 63 61  ed column and ca
f1c0: 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74 6f 20  nnot be used to 
f1d0: 72 65 74 72 69 65 76 65 20 74 68 65 20 69 6e 74  retrieve the int
f1e0: 65 67 65 72 0a 23 20 72 6f 77 69 64 20 76 61 6c  eger.# rowid val
f1f0: 75 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  ue..#.do_execsql
f200: 5f 74 65 73 74 20 35 2e 32 2e 30 20 7b 0a 20 20  _test 5.2.0 {.  
f210: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
f220: 6f 69 64 2c 20 62 29 3b 0a 20 20 43 52 45 41 54  oid, b);.  CREAT
f230: 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20 5f 72  E TABLE t3(a, _r
f240: 6f 77 69 64 5f 29 3b 0a 20 20 43 52 45 41 54 45  owid_);.  CREATE
f250: 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62 2c 20   TABLE t4(a, b, 
f260: 72 6f 77 69 64 29 3b 0a 0a 20 20 49 4e 53 45 52  rowid);..  INSER
f270: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
f280: 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 29 3b 0a  ('one', 'two');.
f290: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
f2a0: 20 56 41 4c 55 45 53 28 27 74 68 72 65 65 27 2c   VALUES('three',
f2b0: 20 27 66 6f 75 72 27 29 3b 0a 0a 20 20 49 4e 53   'four');..  INS
f2c0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
f2d0: 45 53 28 27 66 69 76 65 27 2c 20 27 73 69 78 27  ES('five', 'six'
f2e0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
f2f0: 20 74 33 20 56 41 4c 55 45 53 28 27 73 65 76 65   t3 VALUES('seve
f300: 6e 27 2c 20 27 65 69 67 68 74 27 29 3b 0a 0a 20  n', 'eight');.. 
f310: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
f320: 56 41 4c 55 45 53 28 27 6e 69 6e 65 27 2c 20 27  VALUES('nine', '
f330: 74 65 6e 27 2c 20 27 65 6c 65 76 65 6e 27 29 3b  ten', 'eleven');
f340: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
f350: 34 20 56 41 4c 55 45 53 28 27 74 77 65 6c 76 65  4 VALUES('twelve
f360: 27 2c 20 27 74 68 69 72 74 65 65 6e 27 2c 20 27  ', 'thirteen', '
f370: 66 6f 75 72 74 65 65 6e 27 29 3b 0a 7d 0a 64 6f  fourteen');.}.do
f380: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
f390: 74 73 20 35 2e 32 20 7b 0a 20 20 31 20 20 20 22  ts 5.2 {.  1   "
f3a0: 53 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69  SELECT oid, rowi
f3b0: 64 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20  d, _rowid_ FROM 
f3c0: 74 32 22 20 20 20 7b 6f 6e 65 20 31 20 31 20 20  t2"   {one 1 1  
f3d0: 20 20 20 20 74 68 72 65 65 20 32 20 32 7d 0a 20      three 2 2}. 
f3e0: 20 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64   2   "SELECT oid
f3f0: 2c 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f  , rowid, _rowid_
f400: 20 46 52 4f 4d 20 74 33 22 20 20 20 7b 31 20 31   FROM t3"   {1 1
f410: 20 73 69 78 20 20 20 20 20 20 32 20 32 20 65 69   six      2 2 ei
f420: 67 68 74 7d 20 0a 20 20 33 20 20 20 22 53 45 4c  ght} .  3   "SEL
f430: 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64 2c 20  ECT oid, rowid, 
f440: 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74 34 22  _rowid_ FROM t4"
f450: 20 20 20 7b 31 20 65 6c 65 76 65 6e 20 31 20 20     {1 eleven 1  
f460: 20 32 20 66 6f 75 72 74 65 65 6e 20 32 7d 0a 7d   2 fourteen 2}.}
f470: 0a 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20 24 74  ...# Argument $t
f480: 62 6c 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  bl is the name o
f490: 66 20 61 20 74 61 62 6c 65 20 69 6e 20 74 68 65  f a table in the
f4a0: 20 64 61 74 61 62 61 73 65 2e 20 41 72 67 75 6d   database. Argum
f4b0: 65 6e 74 20 24 63 6f 6c 20 69 73 0a 23 20 74 68  ent $col is.# th
f4c0: 65 20 6e 61 6d 65 20 6f 66 20 6f 6e 65 20 6f 66  e name of one of
f4d0: 20 74 68 65 20 74 61 62 6c 65 73 20 63 6f 6c 75   the tables colu
f4e0: 6d 6e 73 2e 20 52 65 74 75 72 6e 20 31 20 69 66  mns. Return 1 if
f4f0: 20 24 63 6f 6c 20 69 73 20 61 6e 20 61 6c 69 61   $col is an alia
f500: 73 20 66 6f 72 0a 23 20 74 68 65 20 72 6f 77 69  s for.# the rowi
f510: 64 2c 20 6f 72 20 30 20 6f 74 68 65 72 77 69 73  d, or 0 otherwis
f520: 65 2e 0a 23 0a 70 72 6f 63 20 69 73 5f 69 6e 74  e..#.proc is_int
f530: 65 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79  eger_primary_key
f540: 20 7b 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20 20 6c   {tbl col} {.  l
f550: 69 6e 64 65 78 20 5b 64 62 20 65 76 61 6c 20 5b  index [db eval [
f560: 73 75 62 73 74 20 7b 0a 20 20 20 20 44 45 4c 45  subst {.    DELE
f570: 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20  TE FROM $tbl;.  
f580: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74    INSERT INTO $t
f590: 62 6c 20 28 24 63 6f 6c 29 20 56 41 4c 55 45 53  bl ($col) VALUES
f5a0: 28 30 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20  (0);.    SELECT 
f5b0: 28 72 6f 77 69 64 3d 3d 24 63 6f 6c 29 20 46 52  (rowid==$col) FR
f5c0: 4f 4d 20 24 74 62 6c 3b 0a 20 20 20 20 44 45 4c  OM $tbl;.    DEL
f5d0: 45 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a 20  ETE FROM $tbl;. 
f5e0: 20 7d 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56 49 44   }]] 0.}..# EVID
f5f0: 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 33 37 33 38  ENCE-OF: R-53738
f600: 2d 33 31 36 37 33 20 57 69 74 68 20 6f 6e 65 20  -31673 With one 
f610: 65 78 63 65 70 74 69 6f 6e 2c 20 69 66 20 61 20  exception, if a 
f620: 74 61 62 6c 65 20 68 61 73 20 61 0a 23 20 70 72  table has a.# pr
f630: 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74 20 63  imary key that c
f640: 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73 69 6e  onsists of a sin
f650: 67 6c 65 20 63 6f 6c 75 6d 6e 2c 20 61 6e 64 20  gle column, and 
f660: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
f670: 65 20 6f 66 0a 23 20 74 68 61 74 20 63 6f 6c 75  e of.# that colu
f680: 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52 22 20  mn is "INTEGER" 
f690: 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65 20 6f  in any mixture o
f6a0: 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f 77 65  f upper and lowe
f6b0: 72 20 63 61 73 65 2c 20 74 68 65 6e 0a 23 20 74  r case, then.# t
f6c0: 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f 6d 65  he column become
f6d0: 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
f6e0: 68 65 20 72 6f 77 69 64 2e 0a 23 0a 23 20 45 56  he rowid..#.# EV
f6f0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 39  IDENCE-OF: R-459
f700: 35 31 2d 30 38 33 34 37 20 69 66 20 74 68 65 20  51-08347 if the 
f710: 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66 20 61  declaration of a
f720: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 23 20 64   column with.# d
f730: 65 63 6c 61 72 65 64 20 74 79 70 65 20 22 49 4e  eclared type "IN
f740: 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65 73 20  TEGER" includes 
f750: 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45 59 20  an "PRIMARY KEY 
f760: 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20 69 74  DESC" clause, it
f770: 20 64 6f 65 73 0a 23 20 6e 6f 74 20 62 65 63 6f   does.# not beco
f780: 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  me an alias for 
f790: 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20 69 73  the rowid and is
f7a0: 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65 64 20   not classified 
f7b0: 61 73 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  as an integer.# 
f7c0: 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23 0a 64  primary key..#.d
f7d0: 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65  o_createtable_te
f7e0: 73 74 73 20 35 2e 33 20 2d 74 63 6c 71 75 65 72  sts 5.3 -tclquer
f7f0: 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
f800: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 35  r_primary_key t5
f810: 20 70 6b 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a   pk.} -repair {.
f820: 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
f830: 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 7b  P TABLE t5 }.} {
f840: 0a 20 20 31 20 20 20 22 43 52 45 41 54 45 20 54  .  1   "CREATE T
f850: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67  ABLE t5(pk integ
f860: 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 29 22  er primary key)"
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f880: 20 20 20 20 20 20 20 20 20 31 0a 20 20 32 20 20           1.  2  
f890: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
f8a0: 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20 70 72  5(pk integer, pr
f8b0: 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20  imary key(pk))" 
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 20 20 20 31 0a 20 20 33 20 20 20 22 43 52 45 41     1.  3   "CREA
f8e0: 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69  TE TABLE t5(pk i
f8f0: 6e 74 65 67 65 72 2c 20 76 20 69 6e 74 65 67 65  nteger, v intege
f900: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
f910: 6b 29 29 22 20 20 20 20 20 20 20 20 20 31 0a 20  k))"         1. 
f920: 20 34 20 20 20 22 43 52 45 41 54 45 20 54 41 42   4   "CREATE TAB
f930: 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72  LE t5(pk integer
f940: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
f950: 6d 61 72 79 20 6b 65 79 28 70 6b 2c 20 76 29 29  mary key(pk, v))
f960: 22 20 20 20 20 20 20 30 0a 20 20 35 20 20 20 22  "      0.  5   "
f970: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
f980: 70 6b 20 69 6e 74 2c 20 76 20 69 6e 74 65 67 65  pk int, v intege
f990: 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28 70  r, primary key(p
f9a0: 6b 2c 20 76 29 29 22 20 20 20 20 20 20 20 20 20  k, v))"         
f9b0: 20 30 0a 20 20 36 20 20 20 22 43 52 45 41 54 45   0.  6   "CREATE
f9c0: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
f9d0: 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69  , v integer, pri
f9e0: 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20  mary key(pk))"  
f9f0: 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 37             0.  7
fa00: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
fa10: 20 74 35 28 70 6b 20 69 6e 74 20 70 72 69 6d 61   t5(pk int prima
fa20: 72 79 20 6b 65 79 2c 20 76 20 69 6e 74 65 67 65  ry key, v intege
fa30: 72 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  r)"             
fa40: 20 20 20 20 20 30 0a 20 20 38 20 20 20 22 43 52       0.  8   "CR
fa50: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b  EATE TABLE t5(pk
fa60: 20 69 6e 54 45 67 65 72 20 70 72 69 6d 61 72 79   inTEger primary
fa70: 20 6b 65 79 29 22 20 20 20 20 20 20 20 20 20 20   key)"          
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
fa90: 0a 20 20 39 20 20 20 22 43 52 45 41 54 45 20 54  .  9   "CREATE T
faa0: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 47  ABLE t5(pk inteG
fab0: 45 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79 28  Er, primary key(
fac0: 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 20 20  pk))"           
fad0: 20 20 20 20 20 20 20 20 20 31 0a 20 20 31 30 20           1.  10 
fae0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
faf0: 35 28 70 6b 20 49 4e 54 45 47 45 52 2c 20 76 20  5(pk INTEGER, v 
fb00: 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61 72 79  integer, primary
fb10: 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20 20 20   key(pk))"      
fb20: 20 20 20 31 0a 7d 0a 0a 23 20 45 56 49 44 45 4e     1.}..# EVIDEN
fb30: 43 45 2d 4f 46 3a 20 52 2d 34 31 34 34 34 2d 34  CE-OF: R-41444-4
fb40: 39 36 36 35 20 4f 74 68 65 72 20 69 6e 74 65 67  9665 Other integ
fb50: 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20 6c 69  er type names li
fb60: 6b 65 20 22 49 4e 54 22 20 6f 72 0a 23 20 22 42  ke "INT" or.# "B
fb70: 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f 52 54  IGINT" or "SHORT
fb80: 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22 55 4e   INTEGER" or "UN
fb90: 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52 22 20  SIGNED INTEGER" 
fba0: 63 61 75 73 65 73 20 74 68 65 20 70 72 69 6d 61  causes the prima
fbb0: 72 79 0a 23 20 6b 65 79 20 63 6f 6c 75 6d 6e 20  ry.# key column 
fbc0: 74 6f 20 62 65 68 61 76 65 20 61 73 20 61 6e 20  to behave as an 
fbd0: 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20 63  ordinary table c
fbe0: 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74 65 67  olumn with integ
fbf0: 65 72 20 61 66 66 69 6e 69 74 79 0a 23 20 61 6e  er affinity.# an
fc00: 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  d a unique index
fc10: 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c 69 61  , not as an alia
fc20: 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 2e  s for the rowid.
fc30: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
fc40: 73 74 20 35 2e 34 2e 31 20 7b 0a 20 20 43 52 45  st 5.4.1 {.  CRE
fc50: 41 54 45 20 54 41 42 4c 45 20 74 36 28 70 6b 20  ATE TABLE t6(pk 
fc60: 49 4e 54 20 70 72 69 6d 61 72 79 20 6b 65 79 29  INT primary key)
fc70: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
fc80: 20 74 37 28 70 6b 20 42 49 47 49 4e 54 20 70 72   t7(pk BIGINT pr
fc90: 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43 52  imary key);.  CR
fca0: 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 70 6b  EATE TABLE t8(pk
fcb0: 20 53 48 4f 52 54 20 49 4e 54 45 47 45 52 20 70   SHORT INTEGER p
fcc0: 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20 43  rimary key);.  C
fcd0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 28 70  REATE TABLE t9(p
fce0: 6b 20 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47  k UNSIGNED INTEG
fcf0: 45 52 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b  ER primary key);
fd00: 0a 7d 20 0a 64 6f 5f 74 65 73 74 20 65 5f 63 72  .} .do_test e_cr
fd10: 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32 2e  eatetable-5.4.2.
fd20: 31 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f 70  1 { is_integer_p
fd30: 72 69 6d 61 72 79 5f 6b 65 79 20 74 36 20 70 6b  rimary_key t6 pk
fd40: 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f 63   } 0.do_test e_c
fd50: 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e 32  reatetable-5.4.2
fd60: 2e 32 20 7b 20 69 73 5f 69 6e 74 65 67 65 72 5f  .2 { is_integer_
fd70: 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 37 20 70  primary_key t7 p
fd80: 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65 5f  k } 0.do_test e_
fd90: 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e  createtable-5.4.
fda0: 32 2e 33 20 7b 20 69 73 5f 69 6e 74 65 67 65 72  2.3 { is_integer
fdb0: 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 38 20  _primary_key t8 
fdc0: 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65  pk } 0.do_test e
fdd0: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34  _createtable-5.4
fde0: 2e 32 2e 34 20 7b 20 69 73 5f 69 6e 74 65 67 65  .2.4 { is_intege
fdf0: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 39  r_primary_key t9
fe00: 20 70 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78 65 63   pk } 0..do_exec
fe10: 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 33 20 7b  sql_test 5.4.3 {
fe20: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
fe30: 36 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  6 VALUES('2.0');
fe40: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
fe50: 37 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  7 VALUES('2.0');
fe60: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
fe70: 38 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  8 VALUES('2.0');
fe80: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
fe90: 39 20 56 41 4c 55 45 53 28 27 32 2e 30 27 29 3b  9 VALUES('2.0');
fea0: 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66  .  SELECT typeof
feb0: 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74 36  (pk), pk FROM t6
fec0: 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f  ;.  SELECT typeo
fed0: 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20 74  f(pk), pk FROM t
fee0: 37 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65  7;.  SELECT type
fef0: 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20  of(pk), pk FROM 
ff00: 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  t8;.  SELECT typ
ff10: 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d  eof(pk), pk FROM
ff20: 20 74 39 3b 0a 7d 20 7b 69 6e 74 65 67 65 72 20   t9;.} {integer 
ff30: 32 20 69 6e 74 65 67 65 72 20 32 20 69 6e 74 65  2 integer 2 inte
ff40: 67 65 72 20 32 20 69 6e 74 65 67 65 72 20 32 7d  ger 2 integer 2}
ff50: 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  ..do_catchsql_te
ff60: 73 74 20 35 2e 34 2e 34 2e 31 20 7b 20 0a 20 20  st 5.4.4.1 { .  
ff70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
ff80: 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
ff90: 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f 74  column pk is not
ffa0: 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61 74   unique}}.do_cat
ffb0: 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 34  chsql_test 5.4.4
ffc0: 2e 32 20 7b 20 0a 20 20 49 4e 53 45 52 54 20 49  .2 { .  INSERT I
ffd0: 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 32 29  NTO t7 VALUES(2)
ffe0: 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 70   .} {1 {column p
fff0: 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d  k is not unique}
10000 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
10010 73 74 20 35 2e 34 2e 34 2e 33 20 7b 20 0a 20 20  st 5.4.4.3 { .  
10020 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56  INSERT INTO t8 V
10030 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31 20 7b  ALUES(2) .} {1 {
10040 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e 6f 74  column pk is not
10050 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63 61 74   unique}}.do_cat
10060 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 34  chsql_test 5.4.4
10070 2e 34 20 7b 20 0a 20 20 49 4e 53 45 52 54 20 49  .4 { .  INSERT I
10080 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28 32 29  NTO t9 VALUES(2)
10090 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 70   .} {1 {column p
100a0 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d  k is not unique}
100b0 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
100c0 3a 20 52 2d 35 36 30 39 34 2d 35 37 38 33 30 20  : R-56094-57830 
100d0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  the following th
100e0 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c 61 72  ree table declar
100f0 61 74 69 6f 6e 73 20 61 6c 6c 0a 23 20 63 61 75  ations all.# cau
10100 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20 22 78  se the column "x
10110 22 20 74 6f 20 62 65 20 61 6e 20 61 6c 69 61 73  " to be an alias
10120 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64 20 28   for the rowid (
10130 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61  an integer prima
10140 72 79 0a 23 20 6b 65 79 29 3a 20 43 52 45 41 54  ry.# key): CREAT
10150 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
10160 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20  GER PRIMARY KEY 
10170 41 53 43 2c 20 79 2c 20 7a 29 3b 20 43 52 45 41  ASC, y, z); CREA
10180 54 45 20 54 41 42 4c 45 0a 23 20 74 28 78 20 49  TE TABLE.# t(x I
10190 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
101a0 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53 43 29  IMARY KEY(x ASC)
101b0 29 3b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ); CREATE TABLE 
101c0 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79 2c 0a  t(x INTEGER, y,.
101d0 23 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  # z, PRIMARY KEY
101e0 28 78 20 44 45 53 43 29 29 3b 0a 23 0a 23 20 45  (x DESC));.#.# E
101f0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 30  VIDENCE-OF: R-20
10200 31 34 39 2d 32 35 38 38 34 20 74 68 65 20 66 6f  149-25884 the fo
10210 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72 61 74  llowing declarat
10220 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72 65 73  ion does not res
10230 75 6c 74 0a 23 20 69 6e 20 22 78 22 20 62 65 69  ult.# in "x" bei
10240 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20  ng an alias for 
10250 74 68 65 20 72 6f 77 69 64 3a 20 43 52 45 41 54  the rowid: CREAT
10260 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45  E TABLE t(x INTE
10270 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b 45  GER PRIMARY.# KE
10280 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b 0a 23  Y DESC, y, z);.#
10290 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
102a0 74 65 73 74 73 20 35 20 2d 74 63 6c 71 75 65 72  tests 5 -tclquer
102b0 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65 67 65  y { .  is_intege
102c0 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 20  r_primary_key t 
102d0 78 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  x.} -repair {.  
102e0 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
102f0 54 41 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a 20 20  TABLE t }.} {.  
10300 35 2e 31 20 20 20 20 22 43 52 45 41 54 45 20 54  5.1    "CREATE T
10310 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47 45 52  ABLE t(x INTEGER
10320 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41 53 43   PRIMARY KEY ASC
10330 2c 20 79 2c 20 7a 29 22 20 20 20 20 20 20 31 0a  , y, z)"      1.
10340 20 20 35 2e 32 20 20 20 20 22 43 52 45 41 54 45    5.2    "CREATE
10350 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
10360 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d 41 52  ER, y, z, PRIMAR
10370 59 20 4b 45 59 28 78 20 41 53 43 29 29 22 20 20  Y KEY(x ASC))"  
10380 31 0a 20 20 35 2e 33 20 20 20 20 22 43 52 45 41  1.  5.3    "CREA
10390 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
103a0 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
103b0 41 52 59 20 4b 45 59 28 78 20 44 45 53 43 29 29  ARY KEY(x DESC))
103c0 22 20 31 0a 20 20 36 2e 31 20 20 20 20 22 43 52  " 1.  6.1    "CR
103d0 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
103e0 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
103f0 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 22 20  EY DESC, y, z)" 
10400 20 20 20 20 30 0a 7d 0a 0a 23 20 45 56 49 44 45      0.}..# EVIDE
10410 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 37 33 33 2d  NCE-OF: R-03733-
10420 32 39 37 33 34 20 52 6f 77 69 64 20 76 61 6c 75  29734 Rowid valu
10430 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69 66 69  es may be modifi
10440 65 64 20 75 73 69 6e 67 20 61 6e 0a 23 20 55 50  ed using an.# UP
10450 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  DATE statement i
10460 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79 20 61  n the same way a
10470 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f 6c 75  s any other colu
10480 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20 65 69  mn value can, ei
10490 74 68 65 72 0a 23 20 75 73 69 6e 67 20 6f 6e 65  ther.# using one
104a0 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   of the built-in
104b0 20 61 6c 69 61 73 65 73 20 28 22 72 6f 77 69 64   aliases ("rowid
104c0 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f 72 6f  ", "oid" or "_ro
104d0 77 69 64 5f 22 29 20 6f 72 20 62 79 0a 23 20 75  wid_") or by.# u
104e0 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 63 72  sing an alias cr
104f0 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e 74 65  eated by an inte
10500 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2e  ger primary key.
10510 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
10520 73 74 20 35 2e 37 2e 30 20 7b 0a 20 20 43 52 45  st 5.7.0 {.  CRE
10530 41 54 45 20 54 41 42 4c 45 20 74 31 30 28 61 2c  ATE TABLE t10(a,
10540 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   b);.  INSERT IN
10550 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28 27 74  TO t10 VALUES('t
10560 65 6e 27 2c 20 31 30 29 3b 0a 0a 20 20 43 52 45  en', 10);..  CRE
10570 41 54 45 20 54 41 42 4c 45 20 74 31 31 28 61 2c  ATE TABLE t11(a,
10580 20 62 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   b INTEGER PRIMA
10590 52 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53 45 52  RY KEY);.  INSER
105a0 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45  T INTO t11 VALUE
105b0 53 28 27 74 65 6e 27 2c 20 31 30 29 3b 0a 7d 0a  S('ten', 10);.}.
105c0 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
105d0 65 73 74 73 20 35 2e 37 2e 31 20 2d 71 75 65 72  ests 5.7.1 -quer
105e0 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 72 6f  y { .  SELECT ro
105f0 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20 6f 69  wid, _rowid_, oi
10600 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b 0a  d FROM t10;.} {.
10610 20 20 31 20 20 20 20 22 55 50 44 41 54 45 20 74    1    "UPDATE t
10620 31 30 20 53 45 54 20 72 6f 77 69 64 20 3d 20 35  10 SET rowid = 5
10630 22 20 20 20 7b 35 20 35 20 35 7d 0a 20 20 32 20  "   {5 5 5}.  2 
10640 20 20 20 22 55 50 44 41 54 45 20 74 31 30 20 53     "UPDATE t10 S
10650 45 54 20 5f 72 6f 77 69 64 5f 20 3d 20 36 22 20  ET _rowid_ = 6" 
10660 7b 36 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22  {6 6 6}.  3    "
10670 55 50 44 41 54 45 20 74 31 30 20 53 45 54 20 6f  UPDATE t10 SET o
10680 69 64 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37  id = 7"     {7 7
10690 20 37 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   7}.}.do_createt
106a0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 37 2e 32  able_tests 5.7.2
106b0 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
106c0 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
106d0 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
106e0 74 31 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20 20  t11;.} {.  1    
106f0 22 55 50 44 41 54 45 20 74 31 31 20 53 45 54 20  "UPDATE t11 SET 
10700 72 6f 77 69 64 20 3d 20 35 22 20 20 20 7b 35 20  rowid = 5"   {5 
10710 35 20 35 20 35 7d 0a 20 20 32 20 20 20 20 22 55  5 5 5}.  2    "U
10720 50 44 41 54 45 20 74 31 31 20 53 45 54 20 5f 72  PDATE t11 SET _r
10730 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36 20 36 20  owid_ = 6" {6 6 
10740 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55 50 44  6 6}.  3    "UPD
10750 41 54 45 20 74 31 31 20 53 45 54 20 6f 69 64 20  ATE t11 SET oid 
10760 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20 37 20  = 7"     {7 7 7 
10770 37 7d 0a 20 20 34 20 20 20 20 22 55 50 44 41 54  7}.  4    "UPDAT
10780 45 20 74 31 31 20 53 45 54 20 62 20 3d 20 38 22  E t11 SET b = 8"
10790 20 20 20 20 20 20 20 7b 38 20 38 20 38 20 38 7d         {8 8 8 8}
107a0 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
107b0 46 3a 20 52 2d 35 38 37 30 36 2d 31 34 32 32 39  F: R-58706-14229
107c0 20 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e 20 49   Similarly, an I
107d0 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20  NSERT statement 
107e0 6d 61 79 20 70 72 6f 76 69 64 65 0a 23 20 61 20  may provide.# a 
107f0 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61 73 20  value to use as 
10800 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20 65 61  the rowid for ea
10810 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65 64 2e  ch row inserted.
10820 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
10830 65 5f 74 65 73 74 73 20 35 2e 38 2e 31 20 2d 71  e_tests 5.8.1 -q
10840 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54  uery { .  SELECT
10850 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c   rowid, _rowid_,
10860 20 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d   oid FROM t10;.}
10870 20 2d 72 65 70 61 69 72 20 7b 20 0a 20 20 65 78   -repair { .  ex
10880 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45 20 46  ecsql { DELETE F
10890 52 4f 4d 20 74 31 30 20 7d 20 0a 7d 20 7b 0a 20  ROM t10 } .} {. 
108a0 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
108b0 54 4f 20 74 31 30 28 6f 69 64 29 20 56 41 4c 55  TO t10(oid) VALU
108c0 45 53 28 31 35 29 22 20 20 20 20 20 20 20 20 20  ES(15)"         
108d0 20 20 7b 31 35 20 31 35 20 31 35 7d 0a 20 20 32    {15 15 15}.  2
108e0 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
108f0 20 74 31 30 28 72 6f 77 69 64 29 20 56 41 4c 55   t10(rowid) VALU
10900 45 53 28 31 36 29 22 20 20 20 20 20 20 20 20 20  ES(16)"         
10910 7b 31 36 20 31 36 20 31 36 7d 0a 20 20 33 20 20  {16 16 16}.  3  
10920 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
10930 31 30 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55  10(_rowid_) VALU
10940 45 53 28 31 37 29 22 20 20 20 20 20 20 20 7b 31  ES(17)"       {1
10950 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20  7 17 17}.  4    
10960 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30  "INSERT INTO t10
10970 28 61 2c 20 62 2c 20 6f 69 64 29 20 56 41 4c 55  (a, b, oid) VALU
10980 45 53 28 31 2c 32 2c 33 29 22 20 20 7b 33 20 33  ES(1,2,3)"  {3 3
10990 20 33 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74   3}.}.do_createt
109a0 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 32  able_tests 5.8.2
109b0 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c   -query { .  SEL
109c0 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  ECT rowid, _rowi
109d0 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f 4d 20  d_, oid, b FROM 
109e0 74 31 31 3b 0a 7d 20 2d 72 65 70 61 69 72 20 7b  t11;.} -repair {
109f0 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45   .  execsql { DE
10a00 4c 45 54 45 20 46 52 4f 4d 20 74 31 31 20 7d 20  LETE FROM t11 } 
10a10 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53  .} {.  1    "INS
10a20 45 52 54 20 49 4e 54 4f 20 74 31 31 28 6f 69 64  ERT INTO t11(oid
10a30 29 20 56 41 4c 55 45 53 28 31 35 29 22 20 20 20  ) VALUES(15)"   
10a40 20 20 20 20 20 20 20 20 7b 31 35 20 31 35 20 31          {15 15 1
10a50 35 20 31 35 7d 0a 20 20 32 20 20 20 20 22 49 4e  5 15}.  2    "IN
10a60 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 72 6f  SERT INTO t11(ro
10a70 77 69 64 29 20 56 41 4c 55 45 53 28 31 36 29 22  wid) VALUES(16)"
10a80 20 20 20 20 20 20 20 20 20 7b 31 36 20 31 36 20           {16 16 
10a90 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20 22 49  16 16}.  3    "I
10aa0 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 5f  NSERT INTO t11(_
10ab0 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53 28 31  rowid_) VALUES(1
10ac0 37 29 22 20 20 20 20 20 20 20 7b 31 37 20 31 37  7)"       {17 17
10ad0 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20 20 22   17 17}.  4    "
10ae0 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28  INSERT INTO t11(
10af0 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 2c 32  a, b) VALUES(1,2
10b00 29 22 20 20 20 20 20 20 20 20 20 7b 32 20 32 20  )"         {2 2 
10b10 32 20 32 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  2 2}.}..# EVIDEN
10b20 43 45 2d 4f 46 3a 20 52 2d 33 32 33 32 36 2d 34  CE-OF: R-32326-4
10b30 34 35 39 32 20 55 6e 6c 69 6b 65 20 6e 6f 72 6d  4592 Unlike norm
10b40 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75 6d 6e  al SQLite column
10b50 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 0a 23 20  s, an integer.# 
10b60 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
10b70 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75 73 74  owid column must
10b80 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67 65 72   contain integer
10b90 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67 65 72   values. Integer
10ba0 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f  .# primary key o
10bb0 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 73 20  r rowid columns 
10bc0 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74 6f 20  are not able to 
10bd0 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20 70 6f  hold floating po
10be0 69 6e 74 0a 23 20 76 61 6c 75 65 73 2c 20 73 74  int.# values, st
10bf0 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20 6f 72  rings, BLOBs, or
10c00 20 4e 55 4c 4c 73 2e 0a 23 0a 23 20 20 20 20 20   NULLs..#.#     
10c10 54 68 69 73 20 69 73 20 63 6f 6e 73 69 64 65 72  This is consider
10c20 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20  ed by the tests 
10c30 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  for the followin
10c40 67 20 33 20 73 74 61 74 65 6d 65 6e 74 73 2c 0a  g 3 statements,.
10c50 23 20 20 20 20 20 77 68 69 63 68 20 73 68 6f 77  #     which show
10c60 20 74 68 61 74 3a 0a 23 0a 23 20 20 20 20 20 20   that:.#.#      
10c70 20 31 2e 20 41 74 74 65 6d 70 74 73 20 74 6f 20   1. Attempts to 
10c80 55 50 44 41 54 45 20 61 20 72 6f 77 69 64 20 63  UPDATE a rowid c
10c90 6f 6c 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e 2d 69  olumn to a non-i
10ca0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 66 61 69  nteger value fai
10cb0 6c 2c 0a 23 20 20 20 20 20 20 20 32 2e 20 41 74  l,.#       2. At
10cc0 74 65 6d 70 74 73 20 74 6f 20 49 4e 53 45 52 54  tempts to INSERT
10cd0 20 61 20 72 65 61 6c 2c 20 73 74 72 69 6e 67 20   a real, string 
10ce0 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 20 69 6e  or blob value in
10cf0 74 6f 20 61 20 72 6f 77 69 64 20 0a 23 20 20 20  to a rowid .#   
10d00 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20 66 61         column fa
10d10 69 6c 2c 20 61 6e 64 0a 23 20 20 20 20 20 20 20  il, and.#       
10d20 33 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f  3. Attempting to
10d30 20 49 4e 53 45 52 54 20 61 20 4e 55 4c 4c 20 76   INSERT a NULL v
10d40 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f 77 69  alue into a rowi
10d50 64 20 63 6f 6c 75 6d 6e 20 63 61 75 73 65 73 20  d column causes 
10d60 74 68 65 0a 23 20 20 20 20 20 20 20 20 20 20 73  the.#          s
10d70 79 73 74 65 6d 20 74 6f 20 61 75 74 6f 6d 61 74  ystem to automat
10d80 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 61 6e  ically select an
10d90 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74   integer value t
10da0 6f 20 75 73 65 2e 0a 23 0a 0a 0a 23 20 45 56 49  o use..#...# EVI
10db0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34 32 32  DENCE-OF: R-6422
10dc0 34 2d 36 32 35 37 38 20 49 66 20 61 6e 20 55 50  4-62578 If an UP
10dd0 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 61  DATE statement a
10de0 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74 20 61  ttempts to set a
10df0 6e 0a 23 20 69 6e 74 65 67 65 72 20 70 72 69 6d  n.# integer prim
10e00 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77 69 64  ary key or rowid
10e10 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e 55 4c   column to a NUL
10e20 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 2c  L or blob value,
10e30 20 6f 72 20 74 6f 20 61 0a 23 20 73 74 72 69 6e   or to a.# strin
10e40 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  g or real value 
10e50 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 6c  that cannot be l
10e60 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76 65 72  osslessly conver
10e70 74 65 64 20 74 6f 20 61 6e 0a 23 20 69 6e 74 65  ted to an.# inte
10e80 67 65 72 2c 20 61 20 22 64 61 74 61 74 79 70 65  ger, a "datatype
10e90 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72 6f 72   mismatch" error
10ea0 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68 65 20   occurs and the 
10eb0 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 23 20 61  statement is.# a
10ec0 62 6f 72 74 65 64 2e 0a 23 0a 64 72 6f 70 5f 61  borted..#.drop_a
10ed0 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65  ll_tables.do_exe
10ee0 63 73 71 6c 5f 74 65 73 74 20 35 2e 39 2e 30 20  csql_test 5.9.0 
10ef0 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
10f00 20 74 31 32 28 78 20 49 4e 54 45 47 45 52 20 50   t12(x INTEGER P
10f10 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a  RIMARY KEY, y);.
10f20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
10f30 32 20 56 41 4c 55 45 53 28 35 2c 20 27 66 69 76  2 VALUES(5, 'fiv
10f40 65 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  e');.}.do_create
10f50 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 39 2e  table_tests 5.9.
10f60 31 20 2d 71 75 65 72 79 20 7b 20 53 45 4c 45 43  1 -query { SELEC
10f70 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46  T typeof(x), x F
10f80 52 4f 4d 20 74 31 32 20 7d 20 7b 0a 20 20 31 20  ROM t12 } {.  1 
10f90 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
10fa0 54 20 78 20 3d 20 34 22 20 20 20 20 20 20 20 7b  T x = 4"       {
10fb0 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20 20  integer 4}.  2  
10fc0 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
10fd0 20 78 20 3d 20 31 30 2e 30 22 20 20 20 20 7b 69   x = 10.0"    {i
10fe0 6e 74 65 67 65 72 20 31 30 7d 0a 20 20 33 20 20  nteger 10}.  3  
10ff0 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11000 20 78 20 3d 20 27 31 32 2e 30 27 22 20 20 7b 69   x = '12.0'"  {i
11010 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20 20  nteger 12}.  4  
11020 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54   "UPDATE t12 SET
11030 20 78 20 3d 20 27 2d 31 35 2e 30 27 22 20 7b 69   x = '-15.0'" {i
11040 6e 74 65 67 65 72 20 2d 31 35 7d 0a 7d 0a 64 6f  nteger -15}.}.do
11050 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
11060 74 73 20 35 2e 39 2e 32 20 2d 65 72 72 6f 72 20  ts 5.9.2 -error 
11070 7b 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73  {.  datatype mis
11080 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20  match.} {.  1   
11090 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
110a0 78 20 3d 20 34 2e 31 22 20 20 20 20 20 20 20 20  x = 4.1"        
110b0 20 7b 7d 0a 20 20 32 20 20 20 22 55 50 44 41 54   {}.  2   "UPDAT
110c0 45 20 74 31 32 20 53 45 54 20 78 20 3d 20 27 68  E t12 SET x = 'h
110d0 65 6c 6c 6f 27 22 20 20 20 20 20 7b 7d 0a 20 20  ello'"     {}.  
110e0 33 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20  3   "UPDATE t12 
110f0 53 45 54 20 78 20 3d 20 4e 55 4c 4c 22 20 20 20  SET x = NULL"   
11100 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 22 55       {}.  4   "U
11110 50 44 41 54 45 20 74 31 32 20 53 45 54 20 78 20  PDATE t12 SET x 
11120 3d 20 58 27 41 42 43 44 27 22 20 20 20 20 20 7b  = X'ABCD'"     {
11130 7d 0a 20 20 35 20 20 20 22 55 50 44 41 54 45 20  }.  5   "UPDATE 
11140 74 31 32 20 53 45 54 20 78 20 3d 20 58 27 33 39  t12 SET x = X'39
11150 30 30 27 22 20 20 20 20 20 7b 7d 0a 20 20 36 20  00'"     {}.  6 
11160 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
11170 54 20 78 20 3d 20 58 27 33 39 27 22 20 20 20 20  T x = X'39'"    
11180 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45     {}.}..# EVIDE
11190 4e 43 45 2d 4f 46 3a 20 52 2d 30 35 37 33 34 2d  NCE-OF: R-05734-
111a0 31 33 36 32 39 20 49 66 20 61 6e 20 49 4e 53 45  13629 If an INSE
111b0 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74  RT statement att
111c0 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72 74 20  empts to insert 
111d0 61 0a 23 20 62 6c 6f 62 20 76 61 6c 75 65 2c 20  a.# blob value, 
111e0 6f 72 20 61 20 73 74 72 69 6e 67 20 6f 72 20 72  or a string or r
111f0 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74 20 63  eal value that c
11200 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c 65 73  annot be lossles
11210 73 6c 79 0a 23 20 63 6f 6e 76 65 72 74 65 64 20  sly.# converted 
11220 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 69 6e  to an integer in
11230 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 70 72  to an integer pr
11240 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
11250 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23 20 22  id column, a.# "
11260 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63  datatype mismatc
11270 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72 73 20  h" error occurs 
11280 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d 65 6e  and the statemen
11290 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 23 0a  t is aborted..#.
112a0 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
112b0 35 2e 31 30 2e 30 20 7b 20 44 45 4c 45 54 45 20  5.10.0 { DELETE 
112c0 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72  FROM t12 }.do_cr
112d0 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
112e0 35 2e 31 30 2e 31 20 2d 65 72 72 6f 72 20 7b 20  5.10.1 -error { 
112f0 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69 73 6d  .  datatype mism
11300 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20 20 22  atch.} {.  1   "
11310 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11320 78 29 20 56 41 4c 55 45 53 28 34 2e 31 29 22 20  x) VALUES(4.1)" 
11330 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 22 49 4e      {}.  2   "IN
11340 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11350 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27 29   VALUES('hello')
11360 22 20 7b 7d 0a 20 20 33 20 20 20 22 49 4e 53 45  " {}.  3   "INSE
11370 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
11380 41 4c 55 45 53 28 58 27 41 42 43 44 27 29 22 20  ALUES(X'ABCD')" 
11390 7b 7d 0a 20 20 34 20 20 20 22 49 4e 53 45 52 54  {}.  4   "INSERT
113a0 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
113b0 55 45 53 28 58 27 33 39 30 30 27 29 22 20 7b 7d  UES(X'3900')" {}
113c0 0a 20 20 35 20 20 20 22 49 4e 53 45 52 54 20 49  .  5   "INSERT I
113d0 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c 55 45  NTO t12(x) VALUE
113e0 53 28 58 27 33 39 27 29 22 20 20 20 7b 7d 0a 7d  S(X'39')"   {}.}
113f0 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
11400 74 65 73 74 73 20 35 2e 31 30 2e 32 20 2d 71 75  tests 5.10.2 -qu
11410 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  ery { .  SELECT 
11420 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46 52 4f  typeof(x), x FRO
11430 4d 20 74 31 32 20 0a 7d 20 2d 72 65 70 61 69 72  M t12 .} -repair
11440 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44   {.  execsql { D
11450 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 32 20 7d  ELETE FROM t12 }
11460 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
11470 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
11480 41 4c 55 45 53 28 34 29 22 20 20 20 20 20 20 20  ALUES(4)"       
11490 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32 20  {integer 4}.  2 
114a0 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
114b0 31 32 28 78 29 20 56 41 4c 55 45 53 28 31 30 2e  12(x) VALUES(10.
114c0 30 29 22 20 20 20 20 7b 69 6e 74 65 67 65 72 20  0)"    {integer 
114d0 31 30 7d 0a 20 20 33 20 20 20 22 49 4e 53 45 52  10}.  3   "INSER
114e0 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41  T INTO t12(x) VA
114f0 4c 55 45 53 28 27 31 32 2e 30 27 29 22 20 20 7b  LUES('12.0')"  {
11500 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34 20  integer 12}.  4 
11510 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
11520 31 32 28 78 29 20 56 41 4c 55 45 53 28 27 34 65  12(x) VALUES('4e
11530 33 27 29 22 20 20 20 7b 69 6e 74 65 67 65 72 20  3')"   {integer 
11540 34 30 30 30 7d 0a 20 20 35 20 20 20 22 49 4e 53  4000}.  5   "INS
11550 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
11560 56 41 4c 55 45 53 28 27 2d 31 34 2e 30 27 29 22  VALUES('-14.0')"
11570 20 7b 69 6e 74 65 67 65 72 20 2d 31 34 7d 0a 7d   {integer -14}.}
11580 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
11590 20 52 2d 30 37 39 38 36 2d 34 36 30 32 34 20 49   R-07986-46024 I
115a0 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74 61 74  f an INSERT stat
115b0 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73 20 74  ement attempts t
115c0 6f 20 69 6e 73 65 72 74 20 61 0a 23 20 4e 55 4c  o insert a.# NUL
115d0 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72  L value into a r
115e0 6f 77 69 64 20 6f 72 20 69 6e 74 65 67 65 72 20  owid or integer 
115f0 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f 6c 75  primary key colu
11600 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d 0a 23  mn, the system.#
11610 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e 74 65   chooses an inte
11620 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75 73 65  ger value to use
11630 20 61 73 20 74 68 65 20 72 6f 77 69 64 20 61 75   as the rowid au
11640 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 23 0a 64  tomatically..#.d
11650 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
11660 2e 31 31 2e 30 20 7b 20 44 45 4c 45 54 45 20 46  .11.0 { DELETE F
11670 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63 72 65  ROM t12 }.do_cre
11680 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35  atetable_tests 5
11690 2e 31 31 20 2d 71 75 65 72 79 20 7b 20 0a 20 20  .11 -query { .  
116a0 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 78 29  SELECT typeof(x)
116b0 2c 20 78 20 46 52 4f 4d 20 74 31 32 20 57 48 45  , x FROM t12 WHE
116c0 52 45 20 79 20 49 53 20 28 53 45 4c 45 43 54 20  RE y IS (SELECT 
116d0 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31 32 29  max(y) FROM t12)
116e0 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45  .} {.  1   "INSE
116f0 52 54 20 49 4e 54 4f 20 74 31 32 20 44 45 46 41  RT INTO t12 DEFA
11700 55 4c 54 20 56 41 4c 55 45 53 22 20 20 20 20 20  ULT VALUES"     
11710 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e 74 65             {inte
11720 67 65 72 20 31 7d 0a 20 20 32 20 20 20 22 49 4e  ger 1}.  2   "IN
11730 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79 29  SERT INTO t12(y)
11740 20 20 20 56 41 4c 55 45 53 28 35 29 22 20 20 20     VALUES(5)"   
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e               {in
11760 74 65 67 65 72 20 32 7d 0a 20 20 33 20 20 20 22  teger 2}.  3   "
11770 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11780 78 2c 79 29 20 56 41 4c 55 45 53 28 4e 55 4c 4c  x,y) VALUES(NULL
11790 2c 20 31 30 29 22 20 20 20 20 20 20 20 20 20 7b  , 10)"         {
117a0 69 6e 74 65 67 65 72 20 33 7d 0a 20 20 34 20 20  integer 3}.  4  
117b0 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
117c0 32 28 78 2c 79 29 20 53 45 4c 45 43 54 20 4e 55  2(x,y) SELECT NU
117d0 4c 4c 2c 20 31 35 20 46 52 4f 4d 20 74 31 32 22  LL, 15 FROM t12"
117e0 20 0a 20 20 20 20 20 20 7b 69 6e 74 65 67 65 72   .      {integer
117f0 20 34 20 69 6e 74 65 67 65 72 20 35 20 69 6e 74   4 integer 5 int
11800 65 67 65 72 20 36 7d 0a 20 20 35 20 20 20 22 49  eger 6}.  5   "I
11810 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 79  NSERT INTO t12(y
11820 29 20 53 45 4c 45 43 54 20 32 30 20 46 52 4f 4d  ) SELECT 20 FROM
11830 20 74 31 32 20 4c 49 4d 49 54 20 33 22 0a 20 20   t12 LIMIT 3".  
11840 20 20 20 20 7b 69 6e 74 65 67 65 72 20 37 20 69      {integer 7 i
11850 6e 74 65 67 65 72 20 38 20 69 6e 74 65 67 65 72  nteger 8 integer
11860 20 39 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65   9}.}..finish_te
11870 73 74 0a                                         st.