/ Hex Artifact Content
Login

Artifact 4771686a586b6ae414f927c389b2c101cc05c028:


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 32 35 32 36 32 2d 30 31 38 38 31 20 2d 2d 20  -25262-01881 -- 
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 31  EVIDENCE-OF: R-1
0990: 38 37 36 32 2d 31 32 34 32 38 20 2d 2d 20 73 79  8762-12428 -- 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 23 20 20 20 4e 6f 74 65 3a 20 4e 6f 74 20 73  .#   Note: Not s
09d0: 68 6f 77 6e 20 69 6e 20 74 68 65 20 73 79 6e 74  hown in the synt
09e0: 61 78 20 64 69 61 67 72 61 6d 20 69 73 20 74 68  ax diagram is th
09f0: 65 20 22 4e 55 4c 4c 22 20 63 6f 6e 73 74 72 61  e "NULL" constra
0a00: 69 6e 74 2e 20 54 68 69 73 0a 23 20 20 20 20 20  int. This.#     
0a10: 20 20 20 20 69 73 20 74 68 65 20 6f 70 70 6f 73      is the oppos
0a20: 69 74 65 20 6f 66 20 22 4e 4f 54 20 4e 55 4c 4c  ite of "NOT NULL
0a30: 22 20 2d 20 69 74 20 69 6d 70 6c 69 65 73 20 74  " - it implies t
0a40: 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d  hat the column m
0a50: 61 79 0a 23 20 20 20 20 20 20 20 20 20 74 61 6b  ay.#         tak
0a60: 65 20 61 20 4e 55 4c 4c 20 76 61 6c 75 65 2e 20  e a NULL value. 
0a70: 54 68 69 73 20 69 73 20 74 68 65 20 64 65 66 61  This is the defa
0a80: 75 6c 74 20 61 6e 79 77 61 79 2c 20 73 6f 20 74  ult anyway, so t
0a90: 68 69 73 20 74 79 70 65 20 6f 66 0a 23 20 20 20  his type of.#   
0aa0: 20 20 20 20 20 20 63 6f 6e 73 74 72 61 69 6e 74        constraint
0ab0: 20 69 73 20 72 61 72 65 6c 79 20 75 73 65 64 2e   is rarely used.
0ac0: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
0ad0: 65 5f 74 65 73 74 73 20 30 2e 32 2e 31 20 2d 72  e_tests 0.2.1 -r
0ae0: 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61  epair {.  drop_a
0af0: 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65 78 65  ll_tables .  exe
0b00: 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 54 41  csql { CREATE TA
0b10: 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41 52 59  BLE t2(x PRIMARY
0b20: 20 4b 45 59 29 20 7d 0a 7d 20 7b 0a 20 20 31 2e   KEY) }.} {.  1.
0b30: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
0b40: 45 20 74 31 28 63 31 20 74 65 78 74 20 50 52 49  E t1(c1 text PRI
0b50: 4d 41 52 59 20 4b 45 59 29 22 20 20 20 20 20 20  MARY KEY)"      
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b70: 20 20 20 7b 7d 0a 20 20 31 2e 32 20 20 20 22 43     {}.  1.2   "C
0b80: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0b90: 31 20 74 65 78 74 20 50 52 49 4d 41 52 59 20 4b  1 text PRIMARY K
0ba0: 45 59 20 41 53 43 29 22 20 20 20 20 20 20 20 20  EY ASC)"        
0bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0bc0: 20 20 31 2e 33 20 20 20 22 43 52 45 41 54 45 20    1.3   "CREATE 
0bd0: 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74  TABLE t1(c1 text
0be0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 44 45 53   PRIMARY KEY DES
0bf0: 43 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  C)"             
0c00: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 34 20         {}.  1.4 
0c10: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
0c20: 74 31 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54  t1(c1 text CONST
0c30: 52 41 49 4e 54 20 63 6f 6e 73 20 50 52 49 4d 41  RAINT cons PRIMA
0c40: 52 59 20 4b 45 59 20 44 45 53 43 29 22 20 20 20  RY KEY DESC)"   
0c50: 20 7b 7d 0a 0a 20 20 32 2e 31 20 20 20 22 43 52   {}..  2.1   "CR
0c60: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
0c70: 20 74 65 78 74 20 4e 4f 54 20 4e 55 4c 4c 29 22   text NOT NULL)"
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
0ca0: 20 32 2e 32 20 20 20 22 43 52 45 41 54 45 20 54   2.2   "CREATE T
0cb0: 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20  ABLE t1(c1 text 
0cc0: 43 4f 4e 53 54 52 41 49 4e 54 20 6e 6d 20 4e 4f  CONSTRAINT nm NO
0cd0: 54 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20  T NULL)"        
0ce0: 20 20 20 20 20 20 7b 7d 0a 20 20 32 2e 33 20 20        {}.  2.3  
0cf0: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
0d00: 31 28 63 31 20 74 65 78 74 20 4e 55 4c 4c 29 22  1(c1 text NULL)"
0d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d30: 7b 7d 0a 20 20 32 2e 34 20 20 20 22 43 52 45 41  {}.  2.4   "CREA
0d40: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0d50: 65 78 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 6e  ext CONSTRAINT n
0d60: 6d 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20  m NULL)"        
0d70: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20            {}..  
0d80: 33 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41  3.1   "CREATE TA
0d90: 42 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 55  BLE t1(c1 text U
0da0: 4e 49 51 55 45 29 22 20 20 20 20 20 20 20 20 20  NIQUE)"         
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 20 20 20 20 20 7b 7d 0a 20 20 33 2e 32 20 20 20       {}.  3.2   
0dd0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0de0: 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54 52 41  (c1 text CONSTRA
0df0: 49 4e 54 20 75 6e 20 55 4e 49 51 55 45 29 22 20  INT un UNIQUE)" 
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0e10: 7d 0a 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41  }..  4.1   "CREA
0e20: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74  TE TABLE t1(c1 t
0e30: 65 78 74 20 43 48 45 43 4b 28 63 31 21 3d 30 29  ext CHECK(c1!=0)
0e40: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
0e50: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 34            {}.  4
0e60: 2e 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42  .2   "CREATE TAB
0e70: 4c 45 20 74 31 28 63 31 20 74 65 78 74 20 43 4f  LE t1(c1 text CO
0e80: 4e 53 54 52 41 49 4e 54 20 63 68 6b 20 43 48 45  NSTRAINT chk CHE
0e90: 43 4b 28 63 31 21 3d 30 29 29 22 20 20 20 20 20  CK(c1!=0))"     
0ea0: 20 20 20 20 7b 7d 0a 0a 20 20 35 2e 31 20 20 20      {}..  5.1   
0eb0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
0ec0: 28 63 31 20 74 65 78 74 20 44 45 46 41 55 4c 54  (c1 text DEFAULT
0ed0: 20 31 29 22 20 20 20 20 20 20 20 20 20 20 20 20   1)"            
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0ef0: 7d 0a 20 20 35 2e 32 20 20 20 22 43 52 45 41 54  }.  5.2   "CREAT
0f00: 45 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65  E TABLE t1(c1 te
0f10: 78 74 20 44 45 46 41 55 4c 54 20 2d 31 29 22 20  xt DEFAULT -1)" 
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f30: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e           {}.  5.
0f40: 33 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  3   "CREATE TABL
0f50: 45 20 74 31 28 63 31 20 74 65 78 74 20 44 45 46  E t1(c1 text DEF
0f60: 41 55 4c 54 20 2b 31 29 22 20 20 20 20 20 20 20  AULT +1)"       
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 7b 7d 0a 20 20 35 2e 34 20 20 20 22 43     {}.  5.4   "C
0f90: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
0fa0: 31 20 74 65 78 74 20 44 45 46 41 55 4c 54 20 2d  1 text DEFAULT -
0fb0: 34 35 2e 38 65 32 32 29 22 20 20 20 20 20 20 20  45.8e22)"       
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
0fd0: 20 20 35 2e 35 20 20 20 22 43 52 45 41 54 45 20    5.5   "CREATE 
0fe0: 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78 74  TABLE t1(c1 text
0ff0: 20 44 45 46 41 55 4c 54 20 28 31 2b 31 29 29 22   DEFAULT (1+1))"
1000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1010: 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 2e 36 20         {}.  5.6 
1020: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1030: 74 31 28 63 31 20 74 65 78 74 20 43 4f 4e 53 54  t1(c1 text CONST
1040: 52 41 49 4e 54 20 5c 22 31 20 32 5c 22 20 44 45  RAINT \"1 2\" DE
1050: 46 41 55 4c 54 20 28 31 2b 31 29 29 22 20 20 20  FAULT (1+1))"   
1060: 20 7b 7d 0a 0a 20 20 36 2e 31 20 20 20 22 43 52   {}..  6.1   "CR
1070: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
1080: 20 74 65 78 74 20 43 4f 4c 4c 41 54 45 20 6e 6f   text COLLATE no
1090: 63 61 73 65 29 22 20 20 20 20 20 20 20 20 7b 7d  case)"        {}
10a0: 0a 20 20 36 2e 32 20 20 20 22 43 52 45 41 54 45  .  6.2   "CREATE
10b0: 20 54 41 42 4c 45 20 74 31 28 63 31 20 74 65 78   TABLE t1(c1 tex
10c0: 74 20 43 4f 4e 53 54 52 41 49 4e 54 20 27 61 20  t CONSTRAINT 'a 
10d0: 78 27 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73  x' COLLATE nocas
10e0: 65 29 22 20 20 20 20 20 7b 7d 0a 0a 20 20 37 2e  e)"     {}..  7.
10f0: 31 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  1   "CREATE TABL
1100: 45 20 74 31 28 63 31 20 52 45 46 45 52 45 4e 43  E t1(c1 REFERENC
1110: 45 53 20 74 32 29 22 20 20 20 20 20 20 20 20 20  ES t2)"         
1120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1130: 20 20 20 7b 7d 0a 20 20 37 2e 32 20 20 20 22 43     {}.  7.2   "C
1140: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
1150: 31 20 43 4f 4e 53 54 52 41 49 4e 54 20 61 62 63  1 CONSTRAINT abc
1160: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 29 22   REFERENCES t2)"
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
1180: 0a 20 20 38 2e 31 20 20 20 7b 0a 20 20 20 20 43  .  8.1   {.    C
1190: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63  REATE TABLE t1(c
11a0: 31 20 0a 20 20 20 20 20 20 50 52 49 4d 41 52 59  1 .      PRIMARY
11b0: 20 4b 45 59 20 4e 4f 54 20 4e 55 4c 4c 20 55 4e   KEY NOT NULL UN
11c0: 49 51 55 45 20 43 48 45 43 4b 28 63 31 20 49 53  IQUE CHECK(c1 IS
11d0: 20 27 74 65 6e 27 29 20 44 45 46 41 55 4c 54 20   'ten') DEFAULT 
11e0: 31 32 33 20 52 45 46 45 52 45 4e 43 45 53 20 74  123 REFERENCES t
11f0: 31 0a 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a  1.    );.  } {}.
1200: 20 20 38 2e 32 20 20 20 7b 0a 20 20 20 20 43 52    8.2   {.    CR
1210: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
1220: 20 0a 20 20 20 20 20 20 52 45 46 45 52 45 4e 43   .      REFERENC
1230: 45 53 20 74 31 20 44 45 46 41 55 4c 54 20 31 32  ES t1 DEFAULT 12
1240: 33 20 43 48 45 43 4b 28 63 31 20 49 53 20 27 74  3 CHECK(c1 IS 't
1250: 65 6e 27 29 20 55 4e 49 51 55 45 20 4e 4f 54 20  en') UNIQUE NOT 
1260: 4e 55 4c 4c 20 50 52 49 4d 41 52 59 20 4b 45 59  NULL PRIMARY KEY
1270: 20 0a 20 20 20 20 29 3b 0a 20 20 7d 20 7b 7d 0a   .    );.  } {}.
1280: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
1290: 3a 20 52 2d 31 37 39 30 35 2d 33 31 39 32 33 20  : R-17905-31923 
12a0: 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61  -- syntax diagra
12b0: 6d 20 74 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69  m table-constrai
12c0: 6e 74 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  nt.#.do_createta
12d0: 62 6c 65 5f 74 65 73 74 73 20 30 2e 33 2e 31 20  ble_tests 0.3.1 
12e0: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
12f0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1300: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1310: 54 41 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41  TABLE t2(x PRIMA
1320: 52 59 20 4b 45 59 29 20 7d 0a 7d 20 7b 0a 20 20  RY KEY) }.} {.  
1330: 31 2e 31 20 20 20 22 43 52 45 41 54 45 20 54 41  1.1   "CREATE TA
1340: 42 4c 45 20 74 31 28 63 31 2c 20 63 32 2c 20 50  BLE t1(c1, c2, P
1350: 52 49 4d 41 52 59 20 4b 45 59 28 63 31 29 29 22  RIMARY KEY(c1))"
1360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1370: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e           {}.  1.
1380: 32 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c  2   "CREATE TABL
1390: 45 20 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49  E t1(c1, c2, PRI
13a0: 4d 41 52 59 20 4b 45 59 28 63 31 2c 20 63 32 29  MARY KEY(c1, c2)
13b0: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
13c0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 2e 33 20         {}.  1.3 
13d0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
13e0: 74 31 28 63 31 2c 20 63 32 2c 20 50 52 49 4d 41  t1(c1, c2, PRIMA
13f0: 52 59 20 4b 45 59 28 63 31 2c 20 63 32 29 20 4f  RY KEY(c1, c2) O
1400: 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52  N CONFLICT IGNOR
1410: 45 29 22 20 20 7b 7d 0a 0a 20 20 32 2e 31 20 20  E)"  {}..  2.1  
1420: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
1430: 31 28 63 31 2c 20 63 32 2c 20 55 4e 49 51 55 45  1(c1, c2, UNIQUE
1440: 28 63 31 29 29 22 20 20 20 20 20 20 20 20 20 20  (c1))"          
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1460: 20 20 20 20 7b 7d 0a 20 20 32 2e 32 20 20 20 22      {}.  2.2   "
1470: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1480: 63 31 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63  c1, c2, UNIQUE(c
1490: 31 2c 20 63 32 29 29 22 20 20 20 20 20 20 20 20  1, c2))"        
14a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b0: 20 20 7b 7d 0a 20 20 32 2e 33 20 20 20 22 43 52    {}.  2.3   "CR
14c0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31  EATE TABLE t1(c1
14d0: 2c 20 63 32 2c 20 55 4e 49 51 55 45 28 63 31 2c  , c2, UNIQUE(c1,
14e0: 20 63 32 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   c2) ON CONFLICT
14f0: 20 49 47 4e 4f 52 45 29 22 20 20 20 20 20 20 20   IGNORE)"       
1500: 7b 7d 0a 0a 20 20 33 2e 31 20 20 20 22 43 52 45  {}..  3.1   "CRE
1510: 41 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c  ATE TABLE t1(c1,
1520: 20 63 32 2c 20 43 48 45 43 4b 28 63 31 20 49 53   c2, CHECK(c1 IS
1530: 20 4e 4f 54 20 63 32 29 29 22 20 20 20 20 20 20   NOT c2))"      
1540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1550: 7d 0a 0a 20 20 34 2e 31 20 20 20 22 43 52 45 41  }..  4.1   "CREA
1560: 54 45 20 54 41 42 4c 45 20 74 31 28 63 31 2c 20  TE TABLE t1(c1, 
1570: 63 32 2c 20 46 4f 52 45 49 47 4e 20 4b 45 59 28  c2, FOREIGN KEY(
1580: 63 31 29 20 52 45 46 45 52 45 4e 43 45 53 20 74  c1) REFERENCES t
1590: 32 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d  2)"           {}
15a0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
15b0: 46 3a 20 52 2d 31 38 37 36 35 2d 33 31 31 37 31  F: R-18765-31171
15c0: 20 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72   -- syntax diagr
15d0: 61 6d 20 63 6f 6c 75 6d 6e 2d 64 65 66 0a 23 0a  am column-def.#.
15e0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
15f0: 65 73 74 73 20 30 2e 34 2e 31 20 2d 72 65 70 61  ests 0.4.1 -repa
1600: 69 72 20 7b 0a 20 20 64 72 6f 70 5f 61 6c 6c 5f  ir {.  drop_all_
1610: 74 61 62 6c 65 73 20 0a 7d 20 7b 0a 20 20 31 20  tables .} {.  1 
1620: 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c      {CREATE TABL
1630: 45 20 74 31 28 0a 20 20 20 20 20 20 20 20 20 20  E t1(.          
1640: 20 63 6f 6c 31 2c 0a 20 20 20 20 20 20 20 20 20   col1,.         
1650: 20 20 63 6f 6c 32 20 54 45 58 54 2c 0a 20 20 20    col2 TEXT,.   
1660: 20 20 20 20 20 20 20 20 63 6f 6c 33 20 49 4e 54          col3 INT
1670: 45 47 45 52 20 55 4e 49 51 55 45 2c 0a 20 20 20  EGER UNIQUE,.   
1680: 20 20 20 20 20 20 20 20 63 6f 6c 34 20 56 41 52          col4 VAR
1690: 43 48 41 52 28 31 30 2c 20 31 30 29 20 50 52 49  CHAR(10, 10) PRI
16a0: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20  MARY KEY,.      
16b0: 20 20 20 20 20 22 6e 61 6d 65 20 77 69 74 68 20       "name with 
16c0: 73 70 61 63 65 73 22 20 52 45 46 45 52 45 4e 43  spaces" REFERENC
16d0: 45 53 20 74 31 0a 20 20 20 20 20 20 20 20 20 29  ES t1.         )
16e0: 3b 0a 20 20 20 20 20 20 20 20 7d 20 7b 7d 0a 7d  ;.        } {}.}
16f0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
1700: 20 52 2d 35 39 35 37 33 2d 31 31 30 37 35 20 2d   R-59573-11075 -
1710: 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72 61 6d  - syntax diagram
1720: 20 63 72 65 61 74 65 2d 74 61 62 6c 65 2d 73 74   create-table-st
1730: 6d 74 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  mt.#.do_createta
1740: 62 6c 65 5f 74 65 73 74 73 20 30 2e 35 2e 31 20  ble_tests 0.5.1 
1750: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
1760: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1770: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1780: 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63  TABLE t2(a, b, c
1790: 29 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 20 20  ) }.} {.  1     
17a0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
17b0: 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20  (a, b, c)"      
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
17e0: 0a 20 20 32 20 20 20 20 20 22 43 52 45 41 54 45  .  2     "CREATE
17f0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61   TEMP TABLE t1(a
1800: 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20 20  , b, c)"        
1810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1820: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
1830: 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52    "CREATE TEMPOR
1840: 41 52 59 20 54 41 42 4c 45 20 74 31 28 61 2c 20  ARY TABLE t1(a, 
1850: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1870: 7b 7d 0a 20 20 34 20 20 20 20 20 22 43 52 45 41  {}.  4     "CREA
1880: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
1890: 45 58 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20  EXISTS t1(a, b, 
18a0: 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  c)"             
18b0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 35 20           {}.  5 
18c0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
18d0: 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58   TABLE IF NOT EX
18e0: 49 53 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29  ISTS t1(a, b, c)
18f0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
1900: 20 20 7b 7d 0a 20 20 36 20 20 20 20 20 22 43 52    {}.  6     "CR
1910: 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
1920: 41 42 4c 45 20 49 46 20 4e 4f 54 20 45 58 49 53  ABLE IF NOT EXIS
1930: 54 53 20 74 31 28 61 2c 20 62 2c 20 63 29 22 20  TS t1(a, b, c)" 
1940: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20             {}.. 
1950: 20 37 20 20 20 20 20 22 43 52 45 41 54 45 20 54   7     "CREATE T
1960: 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c 20  ABLE main.t1(a, 
1970: 62 2c 20 63 29 22 20 20 20 20 20 20 20 20 20 20  b, c)"          
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 20 20 20 7b 7d 0a 20 20 38 20 20 20 20 20       {}.  8     
19a0: 22 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42  "CREATE TEMP TAB
19b0: 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c  LE temp.t1(a, b,
19c0: 20 63 29 22 20 20 20 20 20 20 20 20 20 20 20 20   c)"            
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
19e0: 0a 20 20 39 20 20 20 20 20 22 43 52 45 41 54 45  .  9     "CREATE
19f0: 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45   TEMPORARY TABLE
1a00: 20 74 65 6d 70 2e 74 31 28 61 2c 20 62 2c 20 63   temp.t1(a, b, c
1a10: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
1a20: 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 30 20 20         {}.  10  
1a30: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
1a40: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 6d 61  IF NOT EXISTS ma
1a50: 69 6e 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20  in.t1(a, b, c)" 
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a70: 7b 7d 0a 20 20 31 31 20 20 20 20 22 43 52 45 41  {}.  11    "CREA
1a80: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 49 46  TE TEMP TABLE IF
1a90: 20 4e 4f 54 20 45 58 49 53 54 53 20 74 65 6d 70   NOT EXISTS temp
1aa0: 2e 74 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20  .t1(a, b, c)"   
1ab0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 32           {}.  12
1ac0: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
1ad0: 4f 52 41 52 59 20 54 41 42 4c 45 20 49 46 20 4e  ORARY TABLE IF N
1ae0: 4f 54 20 45 58 49 53 54 53 20 74 65 6d 70 2e 74  OT EXISTS temp.t
1af0: 31 28 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20  1(a, b, c)"     
1b00: 20 20 7b 7d 0a 0a 20 20 31 33 20 20 20 20 22 43    {}..  13    "C
1b10: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 20 41  REATE TABLE t1 A
1b20: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
1b30: 74 32 22 20 20 20 20 20 20 20 20 20 20 20 20 20  t2"             
1b40: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20              {}. 
1b50: 20 31 34 20 20 20 20 22 43 52 45 41 54 45 20 54   14    "CREATE T
1b60: 45 4d 50 20 54 41 42 4c 45 20 74 31 20 41 53 20  EMP TABLE t1 AS 
1b70: 53 45 4c 45 43 54 20 63 2c 20 62 2c 20 61 20 46  SELECT c, b, a F
1b80: 52 4f 4d 20 74 32 22 20 20 20 20 20 20 20 20 20  ROM t2"         
1b90: 20 20 20 20 20 7b 7d 0a 20 20 31 35 20 20 20 20       {}.  15    
1ba0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
1bb0: 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e 74   AS SELECT count
1bc0: 28 2a 29 2c 20 6d 61 78 28 62 29 2c 20 6d 69 6e  (*), max(b), min
1bd0: 28 61 29 20 46 52 4f 4d 20 74 32 22 20 20 7b 7d  (a) FROM t2"  {}
1be0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
1bf0: 46 3a 20 52 2d 33 32 31 33 38 2d 30 32 32 32 38  F: R-32138-02228
1c00: 20 2d 2d 20 73 79 6e 74 61 78 20 64 69 61 67 72   -- syntax diagr
1c10: 61 6d 20 66 6f 72 65 69 67 6e 2d 6b 65 79 2d 63  am foreign-key-c
1c20: 6c 61 75 73 65 0a 23 0a 23 20 20 20 31 3a 20 20  lause.#.#   1:  
1c30: 20 20 20 20 20 20 20 45 78 70 6c 69 63 69 74 20         Explicit 
1c40: 70 61 72 65 6e 74 2d 6b 65 79 20 63 6f 6c 75 6d  parent-key colum
1c50: 6e 73 2e 0a 23 20 20 20 32 3a 20 20 20 20 20 20  ns..#   2:      
1c60: 20 20 20 49 6d 70 6c 69 63 69 74 20 63 68 69 6c     Implicit chil
1c70: 64 2d 6b 65 79 20 63 6f 6c 75 6d 6e 73 2e 0a 23  d-key columns..#
1c80: 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20 20 20  .#   1:         
1c90: 4d 41 54 43 48 20 46 55 4c 4c 0a 23 20 20 20 32  MATCH FULL.#   2
1ca0: 3a 20 20 20 20 20 20 20 20 20 4d 41 54 43 48 20  :         MATCH 
1cb0: 50 41 52 54 49 41 4c 0a 23 20 20 20 33 3a 20 20  PARTIAL.#   3:  
1cc0: 20 20 20 20 20 20 20 4d 41 54 43 48 20 53 49 4d         MATCH SIM
1cd0: 50 4c 45 0a 23 20 20 20 34 3a 20 20 20 20 20 20  PLE.#   4:      
1ce0: 20 20 20 4d 41 54 43 48 20 53 54 49 43 4b 0a 23     MATCH STICK.#
1cf0: 20 20 20 35 3a 20 20 20 20 20 20 20 20 20 0a 23     5:         .#
1d00: 0a 23 20 20 20 31 3a 20 20 20 20 20 20 20 20 20  .#   1:         
1d10: 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55  ON DELETE SET NU
1d20: 4c 4c 0a 23 20 20 20 32 3a 20 20 20 20 20 20 20  LL.#   2:       
1d30: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
1d40: 44 45 46 41 55 4c 54 0a 23 20 20 20 33 3a 20 20  DEFAULT.#   3:  
1d50: 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54 45         ON DELETE
1d60: 20 43 41 53 43 41 44 45 0a 23 20 20 20 34 3a 20   CASCADE.#   4: 
1d70: 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c 45 54          ON DELET
1d80: 45 20 52 45 53 54 52 49 43 54 0a 23 20 20 20 35  E RESTRICT.#   5
1d90: 3a 20 20 20 20 20 20 20 20 20 4f 4e 20 44 45 4c  :         ON DEL
1da0: 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e 0a 23 20  ETE NO ACTION.# 
1db0: 20 20 36 3a 0a 23 0a 23 20 20 20 31 3a 20 20 20    6:.#.#   1:   
1dc0: 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20        ON UPDATE 
1dd0: 53 45 54 20 4e 55 4c 4c 0a 23 20 20 20 32 3a 20  SET NULL.#   2: 
1de0: 20 20 20 20 20 20 20 20 4f 4e 20 55 50 44 41 54          ON UPDAT
1df0: 45 20 53 45 54 20 44 45 46 41 55 4c 54 0a 23 20  E SET DEFAULT.# 
1e00: 20 20 33 3a 20 20 20 20 20 20 20 20 20 4f 4e 20    3:         ON 
1e10: 55 50 44 41 54 45 20 43 41 53 43 41 44 45 0a 23  UPDATE CASCADE.#
1e20: 20 20 20 34 3a 20 20 20 20 20 20 20 20 20 4f 4e     4:         ON
1e30: 20 55 50 44 41 54 45 20 52 45 53 54 52 49 43 54   UPDATE RESTRICT
1e40: 0a 23 20 20 20 35 3a 20 20 20 20 20 20 20 20 20  .#   5:         
1e50: 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41 43 54  ON UPDATE NO ACT
1e60: 49 4f 4e 0a 23 20 20 20 36 3a 0a 23 0a 23 20 20  ION.#   6:.#.#  
1e70: 20 31 3a 20 20 20 20 20 20 20 20 20 4e 4f 54 20   1:         NOT 
1e80: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
1e90: 41 4c 4c 59 20 44 45 46 45 52 52 45 44 0a 23 20  ALLY DEFERRED.# 
1ea0: 20 20 32 3a 20 20 20 20 20 20 20 20 20 4e 4f 54    2:         NOT
1eb0: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
1ec0: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a  IALLY IMMEDIATE.
1ed0: 23 20 20 20 33 3a 20 20 20 20 20 20 20 20 20 4e  #   3:         N
1ee0: 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 23 20  OT DEFERRABLE.# 
1ef0: 20 20 34 3a 20 20 20 20 20 20 20 20 20 44 45 46    4:         DEF
1f00: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
1f10: 59 20 44 45 46 45 52 52 45 44 0a 23 20 20 20 35  Y DEFERRED.#   5
1f20: 3a 20 20 20 20 20 20 20 20 20 44 45 46 45 52 52  :         DEFERR
1f30: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49  ABLE INITIALLY I
1f40: 4d 4d 45 44 49 41 54 45 0a 23 20 20 20 36 3a 20  MMEDIATE.#   6: 
1f50: 20 20 20 20 20 20 20 20 44 45 46 45 52 52 41 42          DEFERRAB
1f60: 4c 45 0a 23 20 20 20 37 3a 20 20 20 20 20 20 20  LE.#   7:       
1f70: 20 20 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61    .#.do_createta
1f80: 62 6c 65 5f 74 65 73 74 73 20 30 2e 36 2e 31 20  ble_tests 0.6.1 
1f90: 2d 72 65 70 61 69 72 20 7b 0a 20 20 64 72 6f 70  -repair {.  drop
1fa0: 5f 61 6c 6c 5f 74 61 62 6c 65 73 20 0a 20 20 65  _all_tables .  e
1fb0: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1fc0: 54 41 42 4c 45 20 74 32 28 78 20 50 52 49 4d 41  TABLE t2(x PRIMA
1fd0: 52 59 20 4b 45 59 2c 20 79 29 20 7d 0a 20 20 65  RY KEY, y) }.  e
1fe0: 78 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20  xecsql { CREATE 
1ff0: 54 41 42 4c 45 20 74 33 28 69 2c 20 6a 2c 20 55  TABLE t3(i, j, U
2000: 4e 49 51 55 45 28 69 2c 20 6a 29 20 29 20 7d 0a  NIQUE(i, j) ) }.
2010: 7d 20 7b 0a 20 20 31 31 31 34 36 20 7b 20 43 52  } {.  11146 { CR
2020: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2030: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
2040: 74 32 28 78 29 20 4d 41 54 43 48 20 46 55 4c 4c  t2(x) MATCH FULL
2050: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
2060: 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44 41  SET NULL ON UPDA
2070: 54 45 20 52 45 53 54 52 49 43 54 20 44 45 46 45  TE RESTRICT DEFE
2080: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
2090: 20 31 31 34 31 32 20 7b 20 43 52 45 41 54 45 20   11412 { CREATE 
20a0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
20b0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29  REFERENCES t2(x)
20c0: 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20   .    ON DELETE 
20d0: 52 45 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41  RESTRICT ON UPDA
20e0: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4d 41 54 43  TE SET NULL MATC
20f0: 48 20 46 55 4c 4c 20 0a 20 20 20 20 4e 4f 54 20  H FULL .    NOT 
2100: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
2110: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
2120: 20 29 7d 20 7b 7d 0a 20 20 31 32 31 33 35 20 7b   )} {}.  12135 {
2130: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2140: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2150: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 50  ES t2(x) MATCH P
2160: 41 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20 44  ARTIAL .    ON D
2170: 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f  ELETE SET NULL O
2180: 4e 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45  N UPDATE CASCADE
2190: 20 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54   DEFERRABLE INIT
21a0: 49 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a  IALLY IMMEDIATE.
21b0: 20 20 29 7d 20 7b 7d 0a 20 20 31 32 34 32 37 20    )} {}.  12427 
21c0: 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74  { CREATE TABLE t
21d0: 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e  1(a .    REFEREN
21e0: 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20  CES t2(x) MATCH 
21f0: 50 41 52 54 49 41 4c 20 0a 20 20 20 20 4f 4e 20  PARTIAL .    ON 
2200: 44 45 4c 45 54 45 20 52 45 53 54 52 49 43 54 20  DELETE RESTRICT 
2210: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2220: 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20  FAULT .  )} {}. 
2230: 20 31 32 34 34 36 20 7b 20 43 52 45 41 54 45 20   12446 { CREATE 
2240: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2250: 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78 29  REFERENCES t2(x)
2260: 20 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a   MATCH PARTIAL .
2270: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45      ON DELETE RE
2280: 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45  STRICT ON UPDATE
2290: 20 52 45 53 54 52 49 43 54 20 44 45 46 45 52 52   RESTRICT DEFERR
22a0: 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 31  ABLE.  )} {}.  1
22b0: 32 35 32 32 20 7b 20 43 52 45 41 54 45 20 54 41  2522 { CREATE TA
22c0: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
22d0: 46 45 52 45 4e 43 45 53 20 74 32 28 78 29 20 4d  FERENCES t2(x) M
22e0: 41 54 43 48 20 50 41 52 54 49 41 4c 20 0a 20 20  ATCH PARTIAL .  
22f0: 20 20 4f 4e 20 44 45 4c 45 54 45 20 4e 4f 20 41    ON DELETE NO A
2300: 43 54 49 4f 4e 20 4f 4e 20 55 50 44 41 54 45 20  CTION ON UPDATE 
2310: 53 45 54 20 44 45 46 41 55 4c 54 20 4e 4f 54 20  SET DEFAULT NOT 
2320: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
2330: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
2340: 20 29 7d 20 7b 7d 0a 20 20 31 33 31 33 33 20 7b   )} {}.  13133 {
2350: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2360: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2370: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2380: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2390: 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e  LETE SET NULL ON
23a0: 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45 20   UPDATE CASCADE 
23b0: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
23c0: 20 29 7d 20 7b 7d 0a 20 20 31 33 32 31 36 20 7b   )} {}.  13216 {
23d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
23e0: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
23f0: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2400: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2410: 4c 45 54 45 20 53 45 54 20 44 45 46 41 55 4c 54  LETE SET DEFAULT
2420: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 4e   ON UPDATE SET N
2430: 55 4c 4c 20 44 45 46 45 52 52 41 42 4c 45 0a 20  ULL DEFERRABLE. 
2440: 20 29 7d 20 7b 7d 0a 20 20 31 33 32 36 33 20 7b   )} {}.  13263 {
2450: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2460: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2470: 45 53 20 74 32 28 78 29 20 4d 41 54 43 48 20 53  ES t2(x) MATCH S
2480: 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45  IMPLE .    ON DE
2490: 4c 45 54 45 20 53 45 54 20 44 45 46 41 55 4c 54  LETE SET DEFAULT
24a0: 20 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45    NOT DEFERRABLE
24b0: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 33 34 32 31  .  )} {}.  13421
24c0: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
24d0: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
24e0: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
24f0: 20 53 49 4d 50 4c 45 20 0a 20 20 20 20 4f 4e 20   SIMPLE .    ON 
2500: 44 45 4c 45 54 45 20 52 45 53 54 52 49 43 54 20  DELETE RESTRICT 
2510: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2520: 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52 52  FAULT NOT DEFERR
2530: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44  ABLE INITIALLY D
2540: 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a  EFERRED.  )} {}.
2550: 20 20 31 33 34 33 32 20 7b 20 43 52 45 41 54 45    13432 { CREATE
2560: 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20   TABLE t1(a .   
2570: 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 28 78   REFERENCES t2(x
2580: 29 20 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a  ) MATCH SIMPLE .
2590: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45      ON DELETE RE
25a0: 53 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45  STRICT ON UPDATE
25b0: 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44 45 46   CASCADE NOT DEF
25c0: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
25d0: 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d  Y IMMEDIATE.  )}
25e0: 20 7b 7d 0a 20 20 31 33 35 32 33 20 7b 20 43 52   {}.  13523 { CR
25f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
2600: 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20  .    REFERENCES 
2610: 74 32 28 78 29 20 4d 41 54 43 48 20 53 49 4d 50  t2(x) MATCH SIMP
2620: 4c 45 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  LE .    ON DELET
2630: 45 20 4e 4f 20 41 43 54 49 4f 4e 20 4f 4e 20 55  E NO ACTION ON U
2640: 50 44 41 54 45 20 53 45 54 20 44 45 46 41 55 4c  PDATE SET DEFAUL
2650: 54 20 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45  T NOT DEFERRABLE
2660: 0a 20 20 29 7d 20 7b 7d 0a 20 20 31 34 33 33 36  .  )} {}.  14336
2670: 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45 20   { CREATE TABLE 
2680: 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52 45  t1(a .    REFERE
2690: 4e 43 45 53 20 74 32 28 78 29 20 4d 41 54 43 48  NCES t2(x) MATCH
26a0: 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20 44   STICK .    ON D
26b0: 45 4c 45 54 45 20 43 41 53 43 41 44 45 20 4f 4e  ELETE CASCADE ON
26c0: 20 55 50 44 41 54 45 20 43 41 53 43 41 44 45 20   UPDATE CASCADE 
26d0: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
26e0: 7b 7d 0a 20 20 31 34 36 31 31 20 7b 20 43 52 45  {}.  14611 { CRE
26f0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2700: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2710: 32 28 78 29 20 4d 41 54 43 48 20 53 54 49 43 4b  2(x) MATCH STICK
2720: 20 0a 20 20 20 20 4f 4e 20 55 50 44 41 54 45 20   .    ON UPDATE 
2730: 53 45 54 20 4e 55 4c 4c 20 4e 4f 54 20 44 45 46  SET NULL NOT DEF
2740: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
2750: 59 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20  Y DEFERRED.  )} 
2760: 7b 7d 0a 20 20 31 35 31 35 35 20 7b 20 43 52 45  {}.  15155 { CRE
2770: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2780: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2790: 32 28 78 29 0a 20 20 20 20 4f 4e 20 44 45 4c 45  2(x).    ON DELE
27a0: 54 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55  TE SET NULL ON U
27b0: 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20  PDATE NO ACTION 
27c0: 44 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49  DEFERRABLE INITI
27d0: 41 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20  ALLY IMMEDIATE. 
27e0: 20 29 7d 20 7b 7d 0a 20 20 31 35 34 35 33 20 7b   )} {}.  15453 {
27f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2800: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2810: 45 53 20 74 32 28 78 29 20 4f 4e 20 44 45 4c 45  ES t2(x) ON DELE
2820: 54 45 20 52 45 53 54 52 49 43 54 20 4f 4e 20 55  TE RESTRICT ON U
2830: 50 44 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20  PDATE NO ACTION 
2840: 4e 4f 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20  NOT DEFERRABLE. 
2850: 20 29 7d 20 7b 7d 0a 20 20 31 35 36 36 31 20 7b   )} {}.  15661 {
2860: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2870: 28 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43  (a .    REFERENC
2880: 45 53 20 74 32 28 78 29 20 4e 4f 54 20 44 45 46  ES t2(x) NOT DEF
2890: 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c  ERRABLE INITIALL
28a0: 59 20 44 45 46 45 52 52 45 44 0a 20 20 29 7d 20  Y DEFERRED.  )} 
28b0: 7b 7d 0a 20 20 32 31 31 31 35 20 7b 20 43 52 45  {}.  21115 { CRE
28c0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
28d0: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
28e0: 32 20 4d 41 54 43 48 20 46 55 4c 4c 20 0a 20 20  2 MATCH FULL .  
28f0: 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45 54 20    ON DELETE SET 
2900: 4e 55 4c 4c 20 4f 4e 20 55 50 44 41 54 45 20 53  NULL ON UPDATE S
2910: 45 54 20 4e 55 4c 4c 20 44 45 46 45 52 52 41 42  ET NULL DEFERRAB
2920: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
2930: 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20  EDIATE.  )} {}. 
2940: 20 32 31 31 32 33 20 7b 20 43 52 45 41 54 45 20   21123 { CREATE 
2950: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2960: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2970: 54 43 48 20 46 55 4c 4c 20 0a 20 20 20 20 4f 4e  TCH FULL .    ON
2980: 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c 4c   DELETE SET NULL
2990: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
29a0: 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52  EFAULT NOT DEFER
29b0: 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20 20  RABLE.  )} {}.  
29c0: 32 31 32 31 37 20 7b 20 43 52 45 41 54 45 20 54  21217 { CREATE T
29d0: 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52  ABLE t1(a .    R
29e0: 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54  EFERENCES t2 MAT
29f0: 43 48 20 46 55 4c 4c 20 4f 4e 20 44 45 4c 45 54  CH FULL ON DELET
2a00: 45 20 53 45 54 20 44 45 46 41 55 4c 54 20 4f 4e  E SET DEFAULT ON
2a10: 20 55 50 44 41 54 45 20 53 45 54 20 4e 55 4c 4c   UPDATE SET NULL
2a20: 20 0a 20 20 29 7d 20 7b 7d 0a 20 20 32 31 33 36   .  )} {}.  2136
2a30: 32 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c 45  2 { CREATE TABLE
2a40: 20 74 31 28 61 20 0a 20 20 20 20 52 45 46 45 52   t1(a .    REFER
2a50: 45 4e 43 45 53 20 74 32 20 4d 41 54 43 48 20 46  ENCES t2 MATCH F
2a60: 55 4c 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45  ULL .    ON DELE
2a70: 54 45 20 43 41 53 43 41 44 45 20 4e 4f 54 20 44  TE CASCADE NOT D
2a80: 45 46 45 52 52 41 42 4c 45 20 49 4e 49 54 49 41  EFERRABLE INITIA
2a90: 4c 4c 59 20 49 4d 4d 45 44 49 41 54 45 0a 20 20  LLY IMMEDIATE.  
2aa0: 29 7d 20 7b 7d 0a 20 20 32 32 31 34 33 20 7b 20  )} {}.  22143 { 
2ab0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
2ac0: 61 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45  a .    REFERENCE
2ad0: 53 20 74 32 20 4d 41 54 43 48 20 50 41 52 54 49  S t2 MATCH PARTI
2ae0: 41 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54  AL .    ON DELET
2af0: 45 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50  E SET NULL ON UP
2b00: 44 41 54 45 20 52 45 53 54 52 49 43 54 20 4e 4f  DATE RESTRICT NO
2b10: 54 20 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29  T DEFERRABLE.  )
2b20: 7d 20 7b 7d 0a 20 20 32 32 31 35 36 20 7b 20 43  } {}.  22156 { C
2b30: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
2b40: 20 0a 20 20 20 20 52 45 46 45 52 45 4e 43 45 53   .    REFERENCES
2b50: 20 74 32 20 4d 41 54 43 48 20 50 41 52 54 49 41   t2 MATCH PARTIA
2b60: 4c 20 0a 20 20 20 20 4f 4e 20 44 45 4c 45 54 45  L .    ON DELETE
2b70: 20 53 45 54 20 4e 55 4c 4c 20 4f 4e 20 55 50 44   SET NULL ON UPD
2b80: 41 54 45 20 4e 4f 20 41 43 54 49 4f 4e 20 44 45  ATE NO ACTION DE
2b90: 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d  FERRABLE.  )} {}
2ba0: 0a 20 20 32 32 33 32 37 20 7b 20 43 52 45 41 54  .  22327 { CREAT
2bb0: 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20  E TABLE t1(a .  
2bc0: 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32 20    REFERENCES t2 
2bd0: 4d 41 54 43 48 20 50 41 52 54 49 41 4c 20 4f 4e  MATCH PARTIAL ON
2be0: 20 44 45 4c 45 54 45 20 43 41 53 43 41 44 45 20   DELETE CASCADE 
2bf0: 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44 45  ON UPDATE SET DE
2c00: 46 41 55 4c 54 20 0a 20 20 29 7d 20 7b 7d 0a 20  FAULT .  )} {}. 
2c10: 20 32 32 36 36 33 20 7b 20 43 52 45 41 54 45 20   22663 { CREATE 
2c20: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2c30: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2c40: 54 43 48 20 50 41 52 54 49 41 4c 20 4e 4f 54 20  TCH PARTIAL NOT 
2c50: 44 45 46 45 52 52 41 42 4c 45 0a 20 20 29 7d 20  DEFERRABLE.  )} 
2c60: 7b 7d 0a 20 20 32 33 32 33 36 20 7b 20 43 52 45  {}.  23236 { CRE
2c70: 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a  ATE TABLE t1(a .
2c80: 20 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74      REFERENCES t
2c90: 32 20 4d 41 54 43 48 20 53 49 4d 50 4c 45 20 0a  2 MATCH SIMPLE .
2ca0: 20 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 53 45      ON DELETE SE
2cb0: 54 20 44 45 46 41 55 4c 54 20 4f 4e 20 55 50 44  T DEFAULT ON UPD
2cc0: 41 54 45 20 43 41 53 43 41 44 45 20 44 45 46 45  ATE CASCADE DEFE
2cd0: 52 52 41 42 4c 45 0a 20 20 29 7d 20 7b 7d 0a 20  RRABLE.  )} {}. 
2ce0: 20 32 34 31 35 35 20 7b 20 43 52 45 41 54 45 20   24155 { CREATE 
2cf0: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2d00: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41  REFERENCES t2 MA
2d10: 54 43 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f  TCH STICK .    O
2d20: 4e 20 44 45 4c 45 54 45 20 53 45 54 20 4e 55 4c  N DELETE SET NUL
2d30: 4c 20 4f 4e 20 55 50 44 41 54 45 20 4e 4f 20 41  L ON UPDATE NO A
2d40: 43 54 49 4f 4e 20 44 45 46 45 52 52 41 42 4c 45  CTION DEFERRABLE
2d50: 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d 45 44   INITIALLY IMMED
2d60: 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20 20 32  IATE.  )} {}.  2
2d70: 34 35 32 32 20 7b 20 43 52 45 41 54 45 20 54 41  4522 { CREATE TA
2d80: 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20 52 45  BLE t1(a .    RE
2d90: 46 45 52 45 4e 43 45 53 20 74 32 20 4d 41 54 43  FERENCES t2 MATC
2da0: 48 20 53 54 49 43 4b 20 0a 20 20 20 20 4f 4e 20  H STICK .    ON 
2db0: 44 45 4c 45 54 45 20 4e 4f 20 41 43 54 49 4f 4e  DELETE NO ACTION
2dc0: 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20 44   ON UPDATE SET D
2dd0: 45 46 41 55 4c 54 20 4e 4f 54 20 44 45 46 45 52  EFAULT NOT DEFER
2de0: 52 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20  RABLE INITIALLY 
2df0: 49 4d 4d 45 44 49 41 54 45 0a 20 20 29 7d 20 7b  IMMEDIATE.  )} {
2e00: 7d 0a 20 20 32 34 36 32 35 20 7b 20 43 52 45 41  }.  24625 { CREA
2e10: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 0a 20  TE TABLE t1(a . 
2e20: 20 20 20 52 45 46 45 52 45 4e 43 45 53 20 74 32     REFERENCES t2
2e30: 20 4d 41 54 43 48 20 53 54 49 43 4b 20 0a 20 20   MATCH STICK .  
2e40: 20 20 4f 4e 20 55 50 44 41 54 45 20 53 45 54 20    ON UPDATE SET 
2e50: 44 45 46 41 55 4c 54 20 44 45 46 45 52 52 41 42  DEFAULT DEFERRAB
2e60: 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 49 4d 4d  LE INITIALLY IMM
2e70: 45 44 49 41 54 45 0a 20 20 29 7d 20 7b 7d 0a 20  EDIATE.  )} {}. 
2e80: 20 32 35 34 35 34 20 7b 20 43 52 45 41 54 45 20   25454 { CREATE 
2e90: 54 41 42 4c 45 20 74 31 28 61 20 0a 20 20 20 20  TABLE t1(a .    
2ea0: 52 45 46 45 52 45 4e 43 45 53 20 74 32 20 0a 20  REFERENCES t2 . 
2eb0: 20 20 20 4f 4e 20 44 45 4c 45 54 45 20 52 45 53     ON DELETE RES
2ec0: 54 52 49 43 54 20 4f 4e 20 55 50 44 41 54 45 20  TRICT ON UPDATE 
2ed0: 4e 4f 20 41 43 54 49 4f 4e 20 44 45 46 45 52 52  NO ACTION DEFERR
2ee0: 41 42 4c 45 20 49 4e 49 54 49 41 4c 4c 59 20 44  ABLE INITIALLY D
2ef0: 45 46 45 52 52 45 44 0a 20 20 29 7d 20 7b 7d 0a  EFERRED.  )} {}.
2f00: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
2f50: 54 65 73 74 20 63 61 73 65 73 20 65 5f 63 72 65  Test cases e_cre
2f60: 61 74 65 74 61 62 6c 65 2d 31 2e 2a 20 2d 20 74  atetable-1.* - t
2f70: 65 73 74 20 73 74 61 74 65 6d 65 6e 74 73 20 72  est statements r
2f80: 65 6c 61 74 65 64 20 74 6f 20 74 61 62 6c 65 20  elated to table 
2f90: 61 6e 64 0a 23 20 64 61 74 61 62 61 73 65 20 6e  and.# database n
2fa0: 61 6d 65 73 2c 20 74 68 65 20 54 45 4d 50 20 61  ames, the TEMP a
2fb0: 6e 64 20 54 45 4d 50 4f 52 41 52 59 20 6b 65 79  nd TEMPORARY key
2fc0: 77 6f 72 64 73 2c 20 61 6e 64 20 74 68 65 20 49  words, and the I
2fd0: 46 20 4e 4f 54 20 45 58 49 53 54 53 0a 23 20 63  F NOT EXISTS.# c
2fe0: 6c 61 75 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c  lause..#.drop_al
2ff0: 6c 5f 74 61 62 6c 65 73 0a 66 6f 72 63 65 64 65  l_tables.forcede
3000: 6c 65 74 65 20 74 65 73 74 2e 64 62 32 20 74 65  lete test.db2 te
3010: 73 74 2e 64 62 33 0a 0a 64 6f 5f 65 78 65 63 73  st.db3..do_execs
3020: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
3030: 74 61 62 6c 65 2d 31 2e 30 20 7b 0a 20 20 41 54  table-1.0 {.  AT
3040: 54 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20  TACH 'test.db2' 
3050: 41 53 20 61 75 78 61 3b 0a 20 20 41 54 54 41 43  AS auxa;.  ATTAC
3060: 48 20 27 74 65 73 74 2e 64 62 33 27 20 41 53 20  H 'test.db3' AS 
3070: 61 75 78 62 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56  auxb;.} {}..# EV
3080: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 37 38  IDENCE-OF: R-178
3090: 39 39 2d 30 34 35 35 34 20 54 61 62 6c 65 20 6e  99-04554 Table n
30a0: 61 6d 65 73 20 74 68 61 74 20 62 65 67 69 6e 20  ames that begin 
30b0: 77 69 74 68 20 22 73 71 6c 69 74 65 5f 22 20 61  with "sqlite_" a
30c0: 72 65 0a 23 20 72 65 73 65 72 76 65 64 20 66 6f  re.# reserved fo
30d0: 72 20 69 6e 74 65 72 6e 61 6c 20 75 73 65 2e 20  r internal use. 
30e0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 74  It is an error t
30f0: 6f 20 61 74 74 65 6d 70 74 20 74 6f 20 63 72 65  o attempt to cre
3100: 61 74 65 20 61 20 74 61 62 6c 65 0a 23 20 77 69  ate a table.# wi
3110: 74 68 20 61 20 6e 61 6d 65 20 74 68 61 74 20 73  th a name that s
3120: 74 61 72 74 73 20 77 69 74 68 20 22 73 71 6c 69  tarts with "sqli
3130: 74 65 5f 22 2e 0a 23 0a 64 6f 5f 63 72 65 61 74  te_"..#.do_creat
3140: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 31  etable_tests 1.1
3150: 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20 6f 62  .1 -error {.  ob
3160: 6a 65 63 74 20 6e 61 6d 65 20 72 65 73 65 72 76  ject name reserv
3170: 65 64 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c 20  ed for internal 
3180: 75 73 65 3a 20 25 73 0a 7d 20 7b 0a 20 20 31 20  use: %s.} {.  1 
3190: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
31a0: 20 73 71 6c 69 74 65 5f 61 62 63 28 61 2c 20 62   sqlite_abc(a, b
31b0: 2c 20 63 29 22 20 20 20 20 20 20 20 20 73 71 6c  , c)"        sql
31c0: 69 74 65 5f 61 62 63 0a 20 20 32 20 20 20 20 22  ite_abc.  2    "
31d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d  CREATE TABLE tem
31e0: 70 2e 73 71 6c 69 74 65 5f 68 65 6c 6c 6f 77 6f  p.sqlite_hellowo
31f0: 72 6c 64 28 78 29 22 20 20 73 71 6c 69 74 65 5f  rld(x)"  sqlite_
3200: 68 65 6c 6c 6f 77 6f 72 6c 64 0a 20 20 33 20 20  helloworld.  3  
3210: 20 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20    {CREATE TABLE 
3220: 61 75 78 61 2e 22 73 71 6c 69 74 65 5f 5f 22 28  auxa."sqlite__"(
3230: 78 2c 20 79 29 7d 20 20 20 20 20 20 73 71 6c 69  x, y)}      sqli
3240: 74 65 5f 5f 0a 20 20 34 20 20 20 20 7b 43 52 45  te__.  4    {CRE
3250: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22  ATE TABLE auxb."
3260: 73 71 6c 69 74 65 5f 22 28 7a 29 7d 20 20 20 20  sqlite_"(z)}    
3270: 20 20 20 20 20 20 73 71 6c 69 74 65 5f 0a 20 20        sqlite_.  
3280: 35 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42  5    {CREATE TAB
3290: 4c 45 20 22 53 51 4c 49 54 45 5f 54 42 4c 22 28  LE "SQLITE_TBL"(
32a0: 7a 29 7d 20 20 20 20 20 20 20 20 20 20 20 20 53  z)}            S
32b0: 51 4c 49 54 45 5f 54 42 4c 0a 7d 0a 64 6f 5f 63  QLITE_TBL.}.do_c
32c0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
32d0: 20 31 2e 31 2e 32 20 7b 0a 20 20 31 20 20 20 20   1.1.2 {.  1    
32e0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 71  "CREATE TABLE sq
32f0: 6c 69 74 5f 61 62 63 28 61 2c 20 62 2c 20 63 29  lit_abc(a, b, c)
3300: 22 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32  "         {}.  2
3310: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
3320: 45 20 74 65 6d 70 2e 73 71 6c 69 74 65 68 65 6c  E temp.sqlitehel
3330: 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20 20 7b 7d  loworld(x)"   {}
3340: 0a 20 20 33 20 20 20 20 7b 43 52 45 41 54 45 20  .  3    {CREATE 
3350: 54 41 42 4c 45 20 61 75 78 61 2e 22 73 71 6c 69  TABLE auxa."sqli
3360: 74 65 22 28 78 2c 20 79 29 7d 20 20 20 20 20 20  te"(x, y)}      
3370: 20 20 7b 7d 0a 20 20 34 20 20 20 20 7b 43 52 45    {}.  4    {CRE
3380: 41 54 45 20 54 41 42 4c 45 20 61 75 78 62 2e 22  ATE TABLE auxb."
3390: 73 71 6c 69 74 65 2d 22 28 7a 29 7d 20 20 20 20  sqlite-"(z)}    
33a0: 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20        {}.  5    
33b0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 22 53  {CREATE TABLE "S
33c0: 51 4c 49 54 45 2d 54 42 4c 22 28 7a 29 7d 20 20  QLITE-TBL"(z)}  
33d0: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a            {}.}..
33e0: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
33f0: 52 2d 31 30 31 39 35 2d 33 31 30 32 33 20 49 66  R-10195-31023 If
3400: 20 61 20 3c 64 61 74 61 62 61 73 65 2d 6e 61 6d   a <database-nam
3410: 65 3e 20 69 73 20 73 70 65 63 69 66 69 65 64 2c  e> is specified,
3420: 20 69 74 0a 23 20 6d 75 73 74 20 62 65 20 65 69   it.# must be ei
3430: 74 68 65 72 20 22 6d 61 69 6e 22 2c 20 22 74 65  ther "main", "te
3440: 6d 70 22 2c 20 6f 72 20 74 68 65 20 6e 61 6d 65  mp", or the name
3450: 20 6f 66 20 61 6e 20 61 74 74 61 63 68 65 64 20   of an attached 
3460: 64 61 74 61 62 61 73 65 2e 0a 23 0a 23 20 45 56  database..#.# EV
3470: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39 38  IDENCE-OF: R-398
3480: 32 32 2d 30 37 38 32 32 20 49 6e 20 74 68 69 73  22-07822 In this
3490: 20 63 61 73 65 20 74 68 65 20 6e 65 77 20 74 61   case the new ta
34a0: 62 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69  ble is created i
34b0: 6e 0a 23 20 74 68 65 20 6e 61 6d 65 64 20 64 61  n.# the named da
34c0: 74 61 62 61 73 65 2e 0a 23 0a 23 20 20 20 54 65  tabase..#.#   Te
34d0: 73 74 20 63 61 73 65 73 20 31 2e 32 2e 2a 20 74  st cases 1.2.* t
34e0: 65 73 74 20 74 68 65 20 66 69 72 73 74 20 6f 66  est the first of
34f0: 20 74 68 65 20 74 77 6f 20 72 65 71 75 69 72 65   the two require
3500: 6d 65 6e 74 73 20 61 62 6f 76 65 2e 20 54 68 65  ments above. The
3510: 0a 23 20 20 20 73 65 63 6f 6e 64 20 69 73 20 76  .#   second is v
3520: 65 72 69 66 69 65 64 20 62 79 20 63 61 73 65 73  erified by cases
3530: 20 31 2e 33 2e 2a 2e 0a 23 0a 64 6f 5f 63 72 65   1.3.*..#.do_cre
3540: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31  atetable_tests 1
3550: 2e 32 2e 31 20 2d 65 72 72 6f 72 20 7b 0a 20 20  .2.1 -error {.  
3560: 75 6e 6b 6e 6f 77 6e 20 64 61 74 61 62 61 73 65  unknown database
3570: 20 25 73 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22   %s.} {.  1    "
3580: 43 52 45 41 54 45 20 54 41 42 4c 45 20 67 65 6f  CREATE TABLE geo
3590: 72 67 65 2e 74 31 28 61 2c 20 62 29 22 20 20 20  rge.t1(a, b)"   
35a0: 20 20 20 20 20 20 20 20 20 67 65 6f 72 67 65 0a           george.
35b0: 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20 54    2    "CREATE T
35c0: 41 42 4c 45 20 5f 2e 74 31 28 61 2c 20 62 29 22  ABLE _.t1(a, b)"
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 5f 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61   _.}.do_createta
35f0: 62 6c 65 5f 74 65 73 74 73 20 31 2e 32 2e 32 20  ble_tests 1.2.2 
3600: 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45  {.  1    "CREATE
3610: 20 54 41 42 4c 45 20 6d 61 69 6e 2e 61 62 63 28   TABLE main.abc(
3620: 61 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20  a, b, c)"       
3630: 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52     {}.  2    "CR
3640: 45 41 54 45 20 54 41 42 4c 45 20 74 65 6d 70 2e  EATE TABLE temp.
3650: 68 65 6c 6c 6f 77 6f 72 6c 64 28 78 29 22 20 20  helloworld(x)"  
3660: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
3670: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 61   {CREATE TABLE a
3680: 75 78 61 2e 22 74 20 31 22 28 78 2c 20 79 29 7d  uxa."t 1"(x, y)}
3690: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20             {}.  
36a0: 34 20 20 20 20 7b 43 52 45 41 54 45 20 54 41 42  4    {CREATE TAB
36b0: 4c 45 20 61 75 78 62 2e 78 79 7a 28 7a 29 7d 20  LE auxb.xyz(z)} 
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
36d0: 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  }.}.drop_all_tab
36e0: 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  les.do_createtab
36f0: 6c 65 5f 74 65 73 74 73 20 31 2e 33 20 2d 74 63  le_tests 1.3 -tc
3700: 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e 73 65 74  lquery {.  unset
3710: 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 58 0a 20   -nocomplain X. 
3720: 20 61 72 72 61 79 20 73 65 74 20 58 20 5b 74 61   array set X [ta
3730: 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c 69 73 74  ble_list].  list
3740: 20 24 58 28 6d 61 69 6e 29 20 24 58 28 74 65 6d   $X(main) $X(tem
3750: 70 29 20 24 58 28 61 75 78 61 29 20 24 58 28 61  p) $X(auxa) $X(a
3760: 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20 20 20 20  uxb).} {.  1    
3770: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 6d 61  "CREATE TABLE ma
3780: 69 6e 2e 61 62 63 28 61 2c 20 62 2c 20 63 29 22  in.abc(a, b, c)"
3790: 20 20 7b 61 62 63 20 7b 7d 20 7b 7d 20 7b 7d 7d    {abc {} {} {}}
37a0: 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20  .  2    "CREATE 
37b0: 54 41 42 4c 45 20 6d 61 69 6e 2e 74 31 28 61 2c  TABLE main.t1(a,
37c0: 20 62 2c 20 63 29 22 20 20 20 7b 7b 61 62 63 20   b, c)"   {{abc 
37d0: 74 31 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20  t1} {} {} {}}.  
37e0: 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  3    "CREATE TAB
37f0: 4c 45 20 74 65 6d 70 2e 74 6d 70 28 61 2c 20 62  LE temp.tmp(a, b
3800: 2c 20 63 29 22 20 20 7b 7b 61 62 63 20 74 31 7d  , c)"  {{abc t1}
3810: 20 74 6d 70 20 7b 7d 20 7b 7d 7d 0a 20 20 34 20   tmp {} {}}.  4 
3820: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
3830: 20 61 75 78 62 2e 74 62 6c 28 78 2c 20 79 29 22   auxb.tbl(x, y)"
3840: 20 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74       {{abc t1} t
3850: 6d 70 20 7b 7d 20 74 62 6c 7d 0a 20 20 35 20 20  mp {} tbl}.  5  
3860: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
3870: 61 75 78 62 2e 74 31 28 6b 2c 20 76 29 22 20 20  auxb.t1(k, v)"  
3880: 20 20 20 20 7b 7b 61 62 63 20 74 31 7d 20 74 6d      {{abc t1} tm
3890: 70 20 7b 7d 20 7b 74 31 20 74 62 6c 7d 7d 0a 20  p {} {t1 tbl}}. 
38a0: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
38b0: 42 4c 45 20 61 75 78 61 2e 6e 65 78 74 28 63 2c  BLE auxa.next(c,
38c0: 20 64 29 22 20 20 20 20 7b 7b 61 62 63 20 74 31   d)"    {{abc t1
38d0: 7d 20 74 6d 70 20 6e 65 78 74 20 7b 74 31 20 74  } tmp next {t1 t
38e0: 62 6c 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e  bl}}.}..# EVIDEN
38f0: 43 45 2d 4f 46 3a 20 52 2d 31 38 38 39 35 2d 32  CE-OF: R-18895-2
3900: 37 33 36 35 20 49 66 20 74 68 65 20 22 54 45 4d  7365 If the "TEM
3910: 50 22 20 6f 72 20 22 54 45 4d 50 4f 52 41 52 59  P" or "TEMPORARY
3920: 22 20 6b 65 79 77 6f 72 64 20 6f 63 63 75 72 73  " keyword occurs
3930: 0a 23 20 62 65 74 77 65 65 6e 20 74 68 65 20 22  .# between the "
3940: 43 52 45 41 54 45 22 20 61 6e 64 20 22 54 41 42  CREATE" and "TAB
3950: 4c 45 22 20 74 68 65 6e 20 74 68 65 20 6e 65 77  LE" then the new
3960: 20 74 61 62 6c 65 20 69 73 20 63 72 65 61 74 65   table is create
3970: 64 20 69 6e 20 74 68 65 0a 23 20 74 65 6d 70 20  d in the.# temp 
3980: 64 61 74 61 62 61 73 65 2e 0a 23 0a 64 72 6f 70  database..#.drop
3990: 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63  _all_tables.do_c
39a0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
39b0: 20 31 2e 34 20 2d 74 63 6c 71 75 65 72 79 20 7b   1.4 -tclquery {
39c0: 0a 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70  .  unset -nocomp
39d0: 6c 61 69 6e 20 58 0a 20 20 61 72 72 61 79 20 73  lain X.  array s
39e0: 65 74 20 58 20 5b 74 61 62 6c 65 5f 6c 69 73 74  et X [table_list
39f0: 5d 0a 20 20 6c 69 73 74 20 24 58 28 6d 61 69 6e  ].  list $X(main
3a00: 29 20 24 58 28 74 65 6d 70 29 20 24 58 28 61 75  ) $X(temp) $X(au
3a10: 78 61 29 20 24 58 28 61 75 78 62 29 0a 7d 20 7b  xa) $X(auxb).} {
3a20: 0a 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20  .  1    "CREATE 
3a30: 54 45 4d 50 20 54 41 42 4c 45 20 74 31 28 61 2c  TEMP TABLE t1(a,
3a40: 20 62 29 22 20 20 20 20 20 20 7b 7b 7d 20 74 31   b)"      {{} t1
3a50: 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20 20 22   {} {}}.  2    "
3a60: 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
3a70: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 29 22   TABLE t2(a, b)"
3a80: 20 7b 7b 7d 20 7b 74 31 20 74 32 7d 20 7b 7d 20   {{} {t1 t2} {} 
3a90: 7b 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43  {}}.}..# EVIDENC
3aa0: 45 2d 4f 46 3a 20 52 2d 34 39 34 33 39 2d 34 37  E-OF: R-49439-47
3ab0: 35 36 31 20 49 74 20 69 73 20 61 6e 20 65 72 72  561 It is an err
3ac0: 6f 72 20 74 6f 20 73 70 65 63 69 66 79 20 62 6f  or to specify bo
3ad0: 74 68 20 61 0a 23 20 3c 64 61 74 61 62 61 73 65  th a.# <database
3ae0: 2d 6e 61 6d 65 3e 20 61 6e 64 20 74 68 65 20 54  -name> and the T
3af0: 45 4d 50 20 6f 72 20 54 45 4d 50 4f 52 41 52 59  EMP or TEMPORARY
3b00: 20 6b 65 79 77 6f 72 64 2c 20 75 6e 6c 65 73 73   keyword, unless
3b10: 20 74 68 65 0a 23 20 3c 64 61 74 61 62 61 73 65   the.# <database
3b20: 2d 6e 61 6d 65 3e 20 69 73 20 22 74 65 6d 70 22  -name> is "temp"
3b30: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
3b40: 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  les.do_createtab
3b50: 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e 31 20 2d  le_tests 1.5.1 -
3b60: 65 72 72 6f 72 20 7b 0a 20 20 74 65 6d 70 6f 72  error {.  tempor
3b70: 61 72 79 20 74 61 62 6c 65 20 6e 61 6d 65 20 6d  ary table name m
3b80: 75 73 74 20 62 65 20 75 6e 71 75 61 6c 69 66 69  ust be unqualifi
3b90: 65 64 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  ed.} {.  1    "C
3ba0: 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c 45  REATE TEMP TABLE
3bb0: 20 6d 61 69 6e 2e 74 31 28 61 2c 20 62 29 22 20   main.t1(a, b)" 
3bc0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
3bd0: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
3be0: 52 59 20 54 41 42 4c 45 20 61 75 78 61 2e 74 32  RY TABLE auxa.t2
3bf0: 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33  (a, b)"   {}.  3
3c00: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
3c10: 20 54 41 42 4c 45 20 61 75 78 62 2e 74 33 28 61   TABLE auxb.t3(a
3c20: 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7d 0a  , b)"        {}.
3c30: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
3c40: 45 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 20 6d  EMPORARY TABLE m
3c50: 61 69 6e 2e 78 78 78 28 78 29 22 20 20 20 20 20  ain.xxx(x)"     
3c60: 7b 7d 0a 7d 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  {}.}.drop_all_ta
3c70: 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61  bles.do_createta
3c80: 62 6c 65 5f 74 65 73 74 73 20 31 2e 35 2e 32 20  ble_tests 1.5.2 
3c90: 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75 6e  -tclquery {.  un
3ca0: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain 
3cb0: 58 0a 20 20 61 72 72 61 79 20 73 65 74 20 58 20  X.  array set X 
3cc0: 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20 6c  [table_list].  l
3cd0: 69 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58 28  ist $X(main) $X(
3ce0: 74 65 6d 70 29 20 24 58 28 61 75 78 61 29 20 24  temp) $X(auxa) $
3cf0: 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31 20  X(auxb).} {.  1 
3d00: 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50 20     "CREATE TEMP 
3d10: 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 28 61 2c  TABLE temp.t1(a,
3d20: 20 62 29 22 20 20 20 20 20 20 20 20 7b 7b 7d 20   b)"        {{} 
3d30: 74 31 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20 20 20  t1 {} {}}.  2   
3d40: 20 22 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41   "CREATE TEMPORA
3d50: 52 59 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 32  RY TABLE temp.t2
3d60: 28 61 2c 20 62 29 22 20 20 20 7b 7b 7d 20 7b 74  (a, b)"   {{} {t
3d70: 31 20 74 32 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 33  1 t2} {} {}}.  3
3d80: 20 20 20 20 22 43 52 45 41 54 45 20 54 45 4d 50      "CREATE TEMP
3d90: 20 54 41 42 4c 45 20 54 45 4d 50 2e 74 33 28 61   TABLE TEMP.t3(a
3da0: 2c 20 62 29 22 20 20 20 20 20 20 20 20 7b 7b 7d  , b)"        {{}
3db0: 20 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d 20 7b   {t1 t2 t3} {} {
3dc0: 7d 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54  }}.  4    "CREAT
3dd0: 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
3de0: 45 20 54 45 4d 50 2e 78 78 78 28 78 29 22 20 20  E TEMP.xxx(x)"  
3df0: 20 20 20 7b 7b 7d 20 7b 74 31 20 74 32 20 74 33     {{} {t1 t2 t3
3e00: 20 78 78 78 7d 20 7b 7d 20 7b 7d 7d 0a 7d 0a 0a   xxx} {} {}}.}..
3e10: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
3e20: 2d 30 30 39 31 37 2d 30 39 33 39 33 20 49 66 20  -00917-09393 If 
3e30: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
3e40: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 61 6e   is specified an
3e50: 64 20 74 68 65 0a 23 20 54 45 4d 50 20 6b 65 79  d the.# TEMP key
3e60: 77 6f 72 64 20 69 73 20 6e 6f 74 20 70 72 65 73  word is not pres
3e70: 65 6e 74 20 74 68 65 6e 20 74 68 65 20 74 61 62  ent then the tab
3e80: 6c 65 20 69 73 20 63 72 65 61 74 65 64 20 69 6e  le is created in
3e90: 20 74 68 65 20 6d 61 69 6e 0a 23 20 64 61 74 61   the main.# data
3ea0: 62 61 73 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c  base..#.drop_all
3eb0: 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61 74  _tables.do_creat
3ec0: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 36  etable_tests 1.6
3ed0: 20 2d 74 63 6c 71 75 65 72 79 20 7b 0a 20 20 75   -tclquery {.  u
3ee0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
3ef0: 20 58 0a 20 20 61 72 72 61 79 20 73 65 74 20 58   X.  array set X
3f00: 20 5b 74 61 62 6c 65 5f 6c 69 73 74 5d 0a 20 20   [table_list].  
3f10: 6c 69 73 74 20 24 58 28 6d 61 69 6e 29 20 24 58  list $X(main) $X
3f20: 28 74 65 6d 70 29 20 24 58 28 61 75 78 61 29 20  (temp) $X(auxa) 
3f30: 24 58 28 61 75 78 62 29 0a 7d 20 7b 0a 20 20 31  $X(auxb).} {.  1
3f40: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
3f50: 45 20 74 31 28 61 2c 20 62 29 22 20 20 20 7b 74  E t1(a, b)"   {t
3f60: 31 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a 20 20 32 20  1 {} {} {}}.  2 
3f70: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
3f80: 20 74 32 28 61 2c 20 62 29 22 20 20 20 7b 7b 74   t2(a, b)"   {{t
3f90: 31 20 74 32 7d 20 7b 7d 20 7b 7d 20 7b 7d 7d 0a  1 t2} {} {} {}}.
3fa0: 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54    3    "CREATE T
3fb0: 41 42 4c 45 20 74 33 28 61 2c 20 62 29 22 20 20  ABLE t3(a, b)"  
3fc0: 20 7b 7b 74 31 20 74 32 20 74 33 7d 20 7b 7d 20   {{t1 t2 t3} {} 
3fd0: 7b 7d 20 7b 7d 7d 0a 20 20 34 20 20 20 20 22 43  {} {}}.  4    "C
3fe0: 52 45 41 54 45 20 54 41 42 4c 45 20 78 78 78 28  REATE TABLE xxx(
3ff0: 78 29 22 20 20 20 20 20 7b 7b 74 31 20 74 32 20  x)"     {{t1 t2 
4000: 74 33 20 78 78 78 7d 20 7b 7d 20 7b 7d 20 7b 7d  t3 xxx} {} {} {}
4010: 7d 0a 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  }.}..drop_all_ta
4020: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
4030: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
4040: 6c 65 2d 31 2e 37 2e 30 20 7b 0a 20 20 43 52 45  le-1.7.0 {.  CRE
4050: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
4060: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44  y);.  CREATE IND
4070: 45 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a  EX i1 ON t1(x);.
4080: 20 20 43 52 45 41 54 45 20 56 49 45 57 20 20 76    CREATE VIEW  v
4090: 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52  1 AS SELECT * FR
40a0: 4f 4d 20 74 31 3b 0a 0a 20 20 43 52 45 41 54 45  OM t1;..  CREATE
40b0: 20 54 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31   TABLE auxa.tbl1
40c0: 28 78 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45  (x, y);.  CREATE
40d0: 20 49 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31   INDEX auxa.idx1
40e0: 20 4f 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43   ON tbl1(x);.  C
40f0: 52 45 41 54 45 20 56 49 45 57 20 61 75 78 61 2e  REATE VIEW auxa.
4100: 76 69 65 77 31 20 41 53 20 53 45 4c 45 43 54 20  view1 AS SELECT 
4110: 2a 20 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b  * FROM tbl1;.} {
4120: 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  }..# EVIDENCE-OF
4130: 3a 20 52 2d 30 31 32 33 32 2d 35 34 38 33 38 20  : R-01232-54838 
4140: 49 74 20 69 73 20 75 73 75 61 6c 6c 79 20 61 6e  It is usually an
4150: 20 65 72 72 6f 72 20 74 6f 20 61 74 74 65 6d 70   error to attemp
4160: 74 20 74 6f 20 63 72 65 61 74 65 0a 23 20 61 20  t to create.# a 
4170: 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 61 20 64  new table in a d
4180: 61 74 61 62 61 73 65 20 74 68 61 74 20 61 6c 72  atabase that alr
4190: 65 61 64 79 20 63 6f 6e 74 61 69 6e 73 20 61 20  eady contains a 
41a0: 74 61 62 6c 65 2c 20 69 6e 64 65 78 20 6f 72 20  table, index or 
41b0: 76 69 65 77 0a 23 20 6f 66 20 74 68 65 20 73 61  view.# of the sa
41c0: 6d 65 20 6e 61 6d 65 2e 0a 23 0a 23 20 20 20 54  me name..#.#   T
41d0: 65 73 74 20 63 61 73 65 73 20 31 2e 37 2e 31 2e  est cases 1.7.1.
41e0: 2a 20 76 65 72 69 66 79 20 74 68 61 74 20 63 72  * verify that cr
41f0: 65 61 74 69 6e 67 20 61 20 74 61 62 6c 65 20 69  eating a table i
4200: 6e 20 61 20 64 61 74 61 62 61 73 65 20 77 69 74  n a database wit
4210: 68 20 61 0a 23 20 20 20 74 61 62 6c 65 2f 69 6e  h a.#   table/in
4220: 64 65 78 2f 76 69 65 77 20 6f 66 20 74 68 65 20  dex/view of the 
4230: 73 61 6d 65 20 6e 61 6d 65 20 64 6f 65 73 20 66  same name does f
4240: 61 69 6c 2e 20 31 2e 37 2e 32 2e 2a 20 74 65 73  ail. 1.7.2.* tes
4250: 74 73 20 74 68 61 74 20 63 72 65 61 74 69 6e 67  ts that creating
4260: 0a 23 20 20 20 61 20 74 61 62 6c 65 20 77 69 74  .#   a table wit
4270: 68 20 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20  h the same name 
4280: 61 73 20 61 20 74 61 62 6c 65 2f 69 6e 64 65 78  as a table/index
4290: 2f 76 69 65 77 20 69 6e 20 61 20 64 69 66 66 65  /view in a diffe
42a0: 72 65 6e 74 20 64 61 74 61 62 61 73 65 0a 23 20  rent database.# 
42b0: 20 20 69 73 20 4f 6b 2e 0a 23 0a 64 6f 5f 63 72    is Ok..#.do_cr
42c0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
42d0: 31 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25  1.7.1 -error { %
42e0: 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52  s } {.  1    "CR
42f0: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 2c  EATE TABLE t1(a,
4300: 20 62 29 22 20 20 20 7b 7b 74 61 62 6c 65 20 74   b)"   {{table t
4310: 31 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73  1 already exists
4320: 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41 54  }}.  2    "CREAT
4330: 45 20 54 41 42 4c 45 20 69 31 28 61 2c 20 62 29  E TABLE i1(a, b)
4340: 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61  "   {{there is a
4350: 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20  lready an index 
4360: 6e 61 6d 65 64 20 69 31 7d 7d 0a 20 20 33 20 20  named i1}}.  3  
4370: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4380: 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7b 74 61  v1(a, b)"   {{ta
4390: 62 6c 65 20 76 31 20 61 6c 72 65 61 64 79 20 65  ble v1 already e
43a0: 78 69 73 74 73 7d 7d 0a 20 20 34 20 20 20 20 22  xists}}.  4    "
43b0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78  CREATE TABLE aux
43c0: 61 2e 74 62 6c 31 28 61 2c 20 62 29 22 20 20 20  a.tbl1(a, b)"   
43d0: 7b 7b 74 61 62 6c 65 20 74 62 6c 31 20 61 6c 72  {{table tbl1 alr
43e0: 65 61 64 79 20 65 78 69 73 74 73 7d 7d 0a 20 20  eady exists}}.  
43f0: 35 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  5    "CREATE TAB
4400: 4c 45 20 61 75 78 61 2e 69 64 78 31 28 61 2c 20  LE auxa.idx1(a, 
4410: 62 29 22 20 20 20 7b 7b 74 68 65 72 65 20 69 73  b)"   {{there is
4420: 20 61 6c 72 65 61 64 79 20 61 6e 20 69 6e 64 65   already an inde
4430: 78 20 6e 61 6d 65 64 20 69 64 78 31 7d 7d 0a 20  x named idx1}}. 
4440: 20 36 20 20 20 20 22 43 52 45 41 54 45 20 54 41   6    "CREATE TA
4450: 42 4c 45 20 61 75 78 61 2e 76 69 65 77 31 28 61  BLE auxa.view1(a
4460: 2c 20 62 29 22 20 20 7b 7b 74 61 62 6c 65 20 76  , b)"  {{table v
4470: 69 65 77 31 20 61 6c 72 65 61 64 79 20 65 78 69  iew1 already exi
4480: 73 74 73 7d 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74  sts}}.}.do_creat
4490: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 31 2e 37  etable_tests 1.7
44a0: 2e 32 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .2 {.  1    "CRE
44b0: 41 54 45 20 54 41 42 4c 45 20 61 75 78 61 2e 74  ATE TABLE auxa.t
44c0: 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20  1(a, b)"   {}.  
44d0: 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  2    "CREATE TAB
44e0: 4c 45 20 61 75 78 61 2e 69 31 28 61 2c 20 62 29  LE auxa.i1(a, b)
44f0: 22 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43  "   {}.  3    "C
4500: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
4510: 2e 76 31 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a  .v1(a, b)"   {}.
4520: 20 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54    4    "CREATE T
4530: 41 42 4c 45 20 74 62 6c 31 28 61 2c 20 62 29 22  ABLE tbl1(a, b)"
4540: 20 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20 20        {}.  5    
4550: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 64  "CREATE TABLE id
4560: 78 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 7b  x1(a, b)"      {
4570: 7d 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45  }.  6    "CREATE
4580: 20 54 41 42 4c 45 20 76 69 65 77 31 28 61 2c 20   TABLE view1(a, 
4590: 62 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20  b)"     {}.}..# 
45a0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33  EVIDENCE-OF: R-3
45b0: 33 39 31 37 2d 32 34 30 38 36 20 48 6f 77 65 76  3917-24086 Howev
45c0: 65 72 2c 20 69 66 20 74 68 65 20 22 49 46 20 4e  er, if the "IF N
45d0: 4f 54 20 45 58 49 53 54 53 22 20 63 6c 61 75 73  OT EXISTS" claus
45e0: 65 20 69 73 0a 23 20 73 70 65 63 69 66 69 65 64  e is.# specified
45f0: 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 65 20   as part of the 
4600: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
4610: 74 65 6d 65 6e 74 20 61 6e 64 20 61 20 74 61 62  tement and a tab
4620: 6c 65 20 6f 72 20 76 69 65 77 20 6f 66 0a 23 20  le or view of.# 
4630: 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 61 6c  the same name al
4640: 72 65 61 64 79 20 65 78 69 73 74 73 2c 20 74 68  ready exists, th
4650: 65 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63  e CREATE TABLE c
4660: 6f 6d 6d 61 6e 64 20 73 69 6d 70 6c 79 20 68 61  ommand simply ha
4670: 73 20 6e 6f 0a 23 20 65 66 66 65 63 74 20 28 61  s no.# effect (a
4680: 6e 64 20 6e 6f 20 65 72 72 6f 72 20 6d 65 73 73  nd no error mess
4690: 61 67 65 20 69 73 20 72 65 74 75 72 6e 65 64 29  age is returned)
46a0: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
46b0: 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  les.do_execsql_t
46c0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
46d0: 65 2d 31 2e 38 2e 30 20 7b 0a 20 20 43 52 45 41  e-1.8.0 {.  CREA
46e0: 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20 79  TE TABLE t1(x, y
46f0: 29 3b 0a 20 20 43 52 45 41 54 45 20 49 4e 44 45  );.  CREATE INDE
4700: 58 20 69 31 20 4f 4e 20 74 31 28 78 29 3b 0a 20  X i1 ON t1(x);. 
4710: 20 43 52 45 41 54 45 20 56 49 45 57 20 20 76 31   CREATE VIEW  v1
4720: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
4730: 4d 20 74 31 3b 0a 20 20 43 52 45 41 54 45 20 54  M t1;.  CREATE T
4740: 41 42 4c 45 20 61 75 78 61 2e 74 62 6c 31 28 78  ABLE auxa.tbl1(x
4750: 2c 20 79 29 3b 0a 20 20 43 52 45 41 54 45 20 49  , y);.  CREATE I
4760: 4e 44 45 58 20 61 75 78 61 2e 69 64 78 31 20 4f  NDEX auxa.idx1 O
4770: 4e 20 74 62 6c 31 28 78 29 3b 0a 20 20 43 52 45  N tbl1(x);.  CRE
4780: 41 54 45 20 56 49 45 57 20 61 75 78 61 2e 76 69  ATE VIEW auxa.vi
4790: 65 77 31 20 41 53 20 53 45 4c 45 43 54 20 2a 20  ew1 AS SELECT * 
47a0: 46 52 4f 4d 20 74 62 6c 31 3b 0a 7d 20 7b 7d 0a  FROM tbl1;.} {}.
47b0: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
47c0: 65 73 74 73 20 31 2e 38 20 7b 0a 20 20 31 20 20  ests 1.8 {.  1  
47d0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
47e0: 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20 74 31  IF NOT EXISTS t1
47f0: 28 61 2c 20 62 29 22 20 20 20 20 20 20 20 20 20  (a, b)"         
4800: 20 7b 7d 0a 20 20 32 20 20 20 20 22 43 52 45 41   {}.  2    "CREA
4810: 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54 20  TE TABLE IF NOT 
4820: 45 58 49 53 54 53 20 61 75 78 61 2e 74 62 6c 31  EXISTS auxa.tbl1
4830: 28 61 2c 20 62 29 22 20 20 20 7b 7d 0a 20 20 33  (a, b)"   {}.  3
4840: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
4850: 45 20 49 46 20 4e 4f 54 20 45 58 49 53 54 53 20  E IF NOT EXISTS 
4860: 76 31 28 61 2c 20 62 29 22 20 20 20 20 20 20 20  v1(a, b)"       
4870: 20 20 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52     {}.  4    "CR
4880: 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f  EATE TABLE IF NO
4890: 54 20 45 58 49 53 54 53 20 61 75 78 61 2e 76 69  T EXISTS auxa.vi
48a0: 65 77 31 28 61 2c 20 62 29 22 20 20 7b 7d 0a 7d  ew1(a, b)"  {}.}
48b0: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
48c0: 20 52 2d 31 36 34 36 35 2d 34 30 30 37 38 20 41   R-16465-40078 A
48d0: 6e 20 65 72 72 6f 72 20 69 73 20 73 74 69 6c 6c  n error is still
48e0: 20 72 65 74 75 72 6e 65 64 20 69 66 20 74 68 65   returned if the
48f0: 20 74 61 62 6c 65 0a 23 20 63 61 6e 6e 6f 74 20   table.# cannot 
4900: 62 65 20 63 72 65 61 74 65 64 20 62 65 63 61 75  be created becau
4910: 73 65 20 6f 66 20 61 6e 20 65 78 69 73 74 69 6e  se of an existin
4920: 67 20 69 6e 64 65 78 2c 20 65 76 65 6e 20 69 66  g index, even if
4930: 20 74 68 65 20 22 49 46 20 4e 4f 54 0a 23 20 45   the "IF NOT.# E
4940: 58 49 53 54 53 22 20 63 6c 61 75 73 65 20 69 73  XISTS" clause is
4950: 20 73 70 65 63 69 66 69 65 64 2e 0a 23 0a 64 6f   specified..#.do
4960: 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73  _createtable_tes
4970: 74 73 20 31 2e 39 20 2d 65 72 72 6f 72 20 7b 20  ts 1.9 -error { 
4980: 25 73 20 7d 20 7b 0a 20 20 31 20 20 20 20 22 43  %s } {.  1    "C
4990: 52 45 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e  REATE TABLE IF N
49a0: 4f 54 20 45 58 49 53 54 53 20 69 31 28 61 2c 20  OT EXISTS i1(a, 
49b0: 62 29 22 20 20 20 0a 20 20 20 20 20 20 20 7b 7b  b)"   .       {{
49c0: 74 68 65 72 65 20 69 73 20 61 6c 72 65 61 64 79  there is already
49d0: 20 61 6e 20 69 6e 64 65 78 20 6e 61 6d 65 64 20   an index named 
49e0: 69 31 7d 7d 0a 20 20 32 20 20 20 20 22 43 52 45  i1}}.  2    "CRE
49f0: 41 54 45 20 54 41 42 4c 45 20 49 46 20 4e 4f 54  ATE TABLE IF NOT
4a00: 20 45 58 49 53 54 53 20 61 75 78 61 2e 69 64 78   EXISTS auxa.idx
4a10: 31 28 61 2c 20 62 29 22 20 20 20 0a 20 20 20 20  1(a, b)"   .    
4a20: 20 20 20 7b 7b 74 68 65 72 65 20 69 73 20 61 6c     {{there is al
4a30: 72 65 61 64 79 20 61 6e 20 69 6e 64 65 78 20 6e  ready an index n
4a40: 61 6d 65 64 20 69 64 78 31 7d 7d 0a 7d 0a 0a 23  amed idx1}}.}..#
4a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
4a60: 30 35 35 31 33 2d 33 33 38 31 39 20 49 74 20 69  05513-33819 It i
4a70: 73 20 6e 6f 74 20 61 6e 20 65 72 72 6f 72 20 74  s not an error t
4a80: 6f 20 63 72 65 61 74 65 20 61 20 74 61 62 6c 65  o create a table
4a90: 20 74 68 61 74 0a 23 20 68 61 73 20 74 68 65 20   that.# has the 
4aa0: 73 61 6d 65 20 6e 61 6d 65 20 61 73 20 61 6e 20  same name as an 
4ab0: 65 78 69 73 74 69 6e 67 20 74 72 69 67 67 65 72  existing trigger
4ac0: 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62  ..#.drop_all_tab
4ad0: 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  les.do_execsql_t
4ae0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
4af0: 65 2d 31 2e 31 30 2e 30 20 7b 0a 20 20 43 52 45  e-1.10.0 {.  CRE
4b00: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
4b10: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  y);.  CREATE TAB
4b20: 4c 45 20 61 75 78 62 2e 74 32 28 78 2c 20 79 29  LE auxb.t2(x, y)
4b30: 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 52 49 47  ;..  CREATE TRIG
4b40: 47 45 52 20 74 72 31 20 41 46 54 45 52 20 49 4e  GER tr1 AFTER IN
4b50: 53 45 52 54 20 4f 4e 20 74 31 20 42 45 47 49 4e  SERT ON t1 BEGIN
4b60: 0a 20 20 20 20 53 45 4c 45 43 54 20 31 3b 0a 20  .    SELECT 1;. 
4b70: 20 45 4e 44 3b 0a 20 20 43 52 45 41 54 45 20 54   END;.  CREATE T
4b80: 52 49 47 47 45 52 20 61 75 78 62 2e 74 72 32 20  RIGGER auxb.tr2 
4b90: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
4ba0: 74 32 20 42 45 47 49 4e 0a 20 20 20 20 53 45 4c  t2 BEGIN.    SEL
4bb0: 45 43 54 20 31 3b 0a 20 20 45 4e 44 3b 0a 7d 20  ECT 1;.  END;.} 
4bc0: 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  {}.do_createtabl
4bd0: 65 5f 74 65 73 74 73 20 31 2e 31 30 20 7b 0a 20  e_tests 1.10 {. 
4be0: 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54 41   1    "CREATE TA
4bf0: 42 4c 45 20 74 72 31 28 61 2c 20 62 29 22 20 20  BLE tr1(a, b)"  
4c00: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20          {}.  2  
4c10: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
4c20: 74 72 32 28 61 2c 20 62 29 22 20 20 20 20 20 20  tr2(a, b)"      
4c30: 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22 43      {}.  3    "C
4c40: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 62  REATE TABLE auxb
4c50: 2e 74 72 31 28 61 2c 20 62 29 22 20 20 20 20 20  .tr1(a, b)"     
4c60: 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41 54  {}.  4    "CREAT
4c70: 45 20 54 41 42 4c 45 20 61 75 78 62 2e 74 72 32  E TABLE auxb.tr2
4c80: 28 61 2c 20 62 29 22 20 20 20 20 20 7b 7d 0a 7d  (a, b)"     {}.}
4c90: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
4ca0: 20 52 2d 32 32 32 38 33 2d 31 34 31 37 39 20 54   R-22283-14179 T
4cb0: 61 62 6c 65 73 20 61 72 65 20 72 65 6d 6f 76 65  ables are remove
4cc0: 64 20 75 73 69 6e 67 20 74 68 65 20 44 52 4f 50  d using the DROP
4cd0: 20 54 41 42 4c 45 0a 23 20 73 74 61 74 65 6d 65   TABLE.# stateme
4ce0: 6e 74 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74  nt..#.drop_all_t
4cf0: 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c  ables.do_execsql
4d00: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
4d10: 62 6c 65 2d 31 2e 31 31 2e 30 20 7b 0a 20 20 43  ble-1.11.0 {.  C
4d20: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
4d30: 2c 20 62 29 3b 0a 20 20 43 52 45 41 54 45 20 54  , b);.  CREATE T
4d40: 41 42 4c 45 20 74 32 28 61 2c 20 62 29 3b 0a 20  ABLE t2(a, b);. 
4d50: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 61 75   CREATE TABLE au
4d60: 78 61 2e 74 33 28 61 2c 20 62 29 3b 0a 20 20 43  xa.t3(a, b);.  C
4d70: 52 45 41 54 45 20 54 41 42 4c 45 20 61 75 78 61  REATE TABLE auxa
4d80: 2e 74 34 28 61 2c 20 62 29 3b 0a 7d 20 7b 7d 0a  .t4(a, b);.} {}.
4d90: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4da0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31   e_createtable-1
4db0: 2e 31 31 2e 31 2e 31 20 7b 0a 20 20 53 45 4c 45  .11.1.1 {.  SELE
4dc0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
4dd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
4de0: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
4df0: 4d 20 74 33 3b 0a 20 20 53 45 4c 45 43 54 20 2a  M t3;.  SELECT *
4e00: 20 46 52 4f 4d 20 74 34 3b 0a 7d 20 7b 7d 0a 64   FROM t4;.} {}.d
4e10: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20  o_execsql_test  
4e20: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 31 2e  e_createtable-1.
4e30: 31 31 2e 31 2e 32 20 7b 20 44 52 4f 50 20 54 41  11.1.2 { DROP TA
4e40: 42 4c 45 20 74 31 20 7d 20 7b 7d 0a 64 6f 5f 63  BLE t1 } {}.do_c
4e50: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63  atchsql_test e_c
4e60: 72 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e  reatetable-1.11.
4e70: 31 2e 33 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  1.3 { .  SELECT 
4e80: 2a 20 46 52 4f 4d 20 74 31 20 0a 7d 20 7b 31 20  * FROM t1 .} {1 
4e90: 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20  {no such table: 
4ea0: 74 31 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t1}}.do_execsql_
4eb0: 74 65 73 74 20 20 65 5f 63 72 65 61 74 65 74 61  test  e_createta
4ec0: 62 6c 65 2d 31 2e 31 31 2e 31 2e 34 20 7b 20 44  ble-1.11.1.4 { D
4ed0: 52 4f 50 20 54 41 42 4c 45 20 74 33 20 7d 20 7b  ROP TABLE t3 } {
4ee0: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
4ef0: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
4f00: 2d 31 2e 31 31 2e 31 2e 35 20 7b 20 0a 20 20 53  -1.11.1.5 { .  S
4f10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
4f20: 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74  .} {1 {no such t
4f30: 61 62 6c 65 3a 20 74 33 7d 7d 0a 0a 64 6f 5f 65  able: t3}}..do_e
4f40: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
4f50: 65 61 74 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32  eatetable-1.11.2
4f60: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 6e 61  .1 {.  SELECT na
4f70: 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  me FROM sqlite_m
4f80: 61 73 74 65 72 3b 0a 20 20 53 45 4c 45 43 54 20  aster;.  SELECT 
4f90: 6e 61 6d 65 20 46 52 4f 4d 20 61 75 78 61 2e 73  name FROM auxa.s
4fa0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 7d 20  qlite_master;.} 
4fb0: 7b 74 32 20 74 34 7d 0a 64 6f 5f 65 78 65 63 73  {t2 t4}.do_execs
4fc0: 71 6c 5f 74 65 73 74 20 20 65 5f 63 72 65 61 74  ql_test  e_creat
4fd0: 65 74 61 62 6c 65 2d 31 2e 31 31 2e 32 2e 32 20  etable-1.11.2.2 
4fe0: 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74 32 20  { DROP TABLE t2 
4ff0: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
5000: 74 65 73 74 20 20 65 5f 63 72 65 61 74 65 74 61  test  e_createta
5010: 62 6c 65 2d 31 2e 31 31 2e 32 2e 33 20 7b 20 44  ble-1.11.2.3 { D
5020: 52 4f 50 20 54 41 42 4c 45 20 74 34 20 7d 20 7b  ROP TABLE t4 } {
5030: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
5040: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
5050: 31 2e 31 31 2e 32 2e 34 20 7b 0a 20 20 53 45 4c  1.11.2.4 {.  SEL
5060: 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71  ECT name FROM sq
5070: 6c 69 74 65 5f 6d 61 73 74 65 72 3b 0a 20 20 53  lite_master;.  S
5080: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
5090: 61 75 78 61 2e 73 71 6c 69 74 65 5f 6d 61 73 74  auxa.sqlite_mast
50a0: 65 72 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d  er;.} {}..#-----
50b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50f0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
5100: 73 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  s e_createtable-
5110: 32 2e 2a 20 2d 20 74 65 73 74 20 73 74 61 74 65  2.* - test state
5120: 6d 65 6e 74 73 20 72 65 6c 61 74 65 64 20 74 6f  ments related to
5130: 20 74 68 65 20 43 52 45 41 54 45 0a 23 20 54 41   the CREATE.# TA
5140: 42 4c 45 20 41 53 20 2e 2e 2e 20 53 45 4c 45 43  BLE AS ... SELEC
5150: 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 0a  T statement..#..
5160: 23 20 54 68 72 65 65 20 54 63 6c 20 63 6f 6d 6d  # Three Tcl comm
5170: 61 6e 64 73 3a 0a 23 0a 23 20 20 20 73 65 6c 65  ands:.#.#   sele
5180: 63 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20  ct_column_names 
5190: 53 51 4c 0a 23 20 20 20 20 20 54 68 65 20 61 72  SQL.#     The ar
51a0: 67 75 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 61  gument must be a
51b0: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
51c0: 74 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  t. Return a list
51d0: 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 0a 23 20   of the names.# 
51e0: 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d      of the colum
51f0: 6e 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  ns of the result
5200: 2d 73 65 74 20 74 68 61 74 20 77 6f 75 6c 64 20  -set that would 
5210: 62 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 65  be returned by e
5220: 78 65 63 75 74 69 6e 67 0a 23 20 20 20 20 20 74  xecuting.#     t
5230: 68 65 20 53 45 4c 45 43 54 2e 0a 23 0a 23 20 20  he SELECT..#.#  
5240: 20 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6e 61   table_column_na
5250: 6d 65 73 20 54 42 4c 0a 23 20 20 20 20 20 54 68  mes TBL.#     Th
5260: 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73 74 20  e argument must 
5270: 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 2e  be a table name.
5280: 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f   Return a list o
5290: 66 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20  f column names, 
52a0: 66 72 6f 6d 0a 23 20 20 20 20 20 6c 65 66 74 20  from.#     left 
52b0: 74 6f 20 72 69 67 68 74 2c 20 66 6f 72 20 74 68  to right, for th
52c0: 65 20 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 74  e table..#.#   t
52d0: 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c  able_column_decl
52e0: 74 79 70 65 73 20 54 42 4c 0a 23 20 20 20 20 20  types TBL.#     
52f0: 54 68 65 20 61 72 67 75 6d 65 6e 74 20 6d 75 73  The argument mus
5300: 74 20 62 65 20 61 20 74 61 62 6c 65 20 6e 61 6d  t be a table nam
5310: 65 2e 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74  e. Return a list
5320: 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c 61   of column decla
5330: 72 65 64 0a 23 20 20 20 20 20 74 79 70 65 73 2c  red.#     types,
5340: 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69   from left to ri
5350: 67 68 74 2c 20 66 6f 72 20 74 68 65 20 74 61 62  ght, for the tab
5360: 6c 65 2e 0a 23 0a 70 72 6f 63 20 73 63 69 20 7b  le..#.proc sci {
5370: 73 65 6c 65 63 74 20 63 6d 64 7d 20 7b 0a 20 20  select cmd} {.  
5380: 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20  set res [list]. 
5390: 20 73 65 74 20 53 54 4d 54 20 5b 73 71 6c 69 74   set STMT [sqlit
53a0: 65 33 5f 70 72 65 70 61 72 65 5f 76 32 20 64 62  e3_prepare_v2 db
53b0: 20 24 73 65 6c 65 63 74 20 2d 31 20 64 75 6d 6d   $select -1 dumm
53c0: 79 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  y].  for {set i 
53d0: 30 7d 20 7b 24 69 20 3c 20 5b 73 71 6c 69 74 65  0} {$i < [sqlite
53e0: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 20 24  3_column_count $
53f0: 53 54 4d 54 5d 7d 20 7b 69 6e 63 72 20 69 7d 20  STMT]} {incr i} 
5400: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  {.    lappend re
5410: 73 20 5b 24 63 6d 64 20 24 53 54 4d 54 20 24 69  s [$cmd $STMT $i
5420: 5d 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f  ].  }.  sqlite3_
5430: 66 69 6e 61 6c 69 7a 65 20 24 53 54 4d 54 0a 20  finalize $STMT. 
5440: 20 73 65 74 20 72 65 73 0a 7d 0a 70 72 6f 63 20   set res.}.proc 
5450: 74 63 69 20 7b 74 62 6c 20 63 6d 64 7d 20 7b 20  tci {tbl cmd} { 
5460: 73 63 69 20 22 53 45 4c 45 43 54 20 2a 20 46 52  sci "SELECT * FR
5470: 4f 4d 20 24 74 62 6c 22 20 24 63 6d 64 20 7d 0a  OM $tbl" $cmd }.
5480: 70 72 6f 63 20 73 65 6c 65 63 74 5f 63 6f 6c 75  proc select_colu
5490: 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 7b 73 71 6c  mn_names    {sql
54a0: 7d 20 7b 20 73 63 69 20 24 73 71 6c 20 73 71 6c  } { sci $sql sql
54b0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  ite3_column_name
54c0: 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65 5f 63 6f   }.proc table_co
54d0: 6c 75 6d 6e 5f 6e 61 6d 65 73 20 20 20 20 20 7b  lumn_names     {
54e0: 74 62 6c 7d 20 7b 20 74 63 69 20 24 74 62 6c 20  tbl} { tci $tbl 
54f0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e  sqlite3_column_n
5500: 61 6d 65 20 7d 0a 70 72 6f 63 20 74 61 62 6c 65  ame }.proc table
5510: 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70 65  _column_decltype
5520: 73 20 7b 74 62 6c 7d 20 7b 20 74 63 69 20 24 74  s {tbl} { tci $t
5530: 62 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  bl sqlite3_colum
5540: 6e 5f 64 65 63 6c 74 79 70 65 20 7d 0a 0a 23 20  n_decltype }..# 
5550: 43 72 65 61 74 65 20 61 20 64 61 74 61 62 61 73  Create a databas
5560: 65 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 73  e schema. This s
5570: 63 68 65 6d 61 20 69 73 20 75 73 65 64 20 62 79  chema is used by
5580: 20 74 65 73 74 73 20 32 2e 31 2e 2a 20 74 68 72   tests 2.1.* thr
5590: 6f 75 67 68 20 32 2e 33 2e 2a 2e 0a 23 0a 64 72  ough 2.3.*..#.dr
55a0: 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f  op_all_tables.do
55b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
55c0: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 30 20  createtable-2.0 
55d0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
55e0: 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20   t1(a, b, c);.  
55f0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32 28  CREATE TABLE t2(
5600: 64 2c 20 65 2c 20 66 29 3b 0a 20 20 43 52 45 41  d, e, f);.  CREA
5610: 54 45 20 54 41 42 4c 45 20 74 33 28 67 20 42 49  TE TABLE t3(g BI
5620: 47 49 4e 54 2c 20 68 20 56 41 52 43 48 41 52 28  GINT, h VARCHAR(
5630: 31 30 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54  10));.  CREATE T
5640: 41 42 4c 45 20 74 34 28 69 20 42 4c 4f 42 2c 20  ABLE t4(i BLOB, 
5650: 6a 20 41 4e 59 4f 4c 44 41 54 41 29 3b 0a 20 20  j ANYOLDATA);.  
5660: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
5670: 6b 20 46 4c 4f 41 54 2c 20 6c 20 49 4e 54 45 47  k FLOAT, l INTEG
5680: 45 52 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  ER);.  CREATE TA
5690: 42 4c 45 20 74 36 28 6d 20 44 45 46 41 55 4c 54  BLE t6(m DEFAULT
56a0: 20 31 30 2c 20 6e 20 44 45 46 41 55 4c 54 20 35   10, n DEFAULT 5
56b0: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 6d 2c  , PRIMARY KEY(m,
56c0: 20 6e 29 29 3b 0a 20 20 43 52 45 41 54 45 20 54   n));.  CREATE T
56d0: 41 42 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45  ABLE t7(x INTEGE
56e0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b 0a  R PRIMARY KEY);.
56f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
5700: 38 28 6f 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  8(o COLLATE noca
5710: 73 65 20 44 45 46 41 55 4c 54 20 27 61 62 63 27  se DEFAULT 'abc'
5720: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
5730: 45 20 74 39 28 70 20 4e 4f 54 20 4e 55 4c 4c 2c  E t9(p NOT NULL,
5740: 20 71 20 44 4f 55 42 4c 45 20 43 48 45 43 4b 20   q DOUBLE CHECK 
5750: 28 71 21 3d 30 29 2c 20 72 20 53 54 52 49 4e 47  (q!=0), r STRING
5760: 20 55 4e 49 51 55 45 29 3b 0a 7d 20 7b 7d 0a 0a   UNIQUE);.} {}..
5770: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
5780: 2d 36 34 38 32 38 2d 35 39 35 36 38 20 54 68 65  -64828-59568 The
5790: 20 74 61 62 6c 65 20 68 61 73 20 74 68 65 20 73   table has the s
57a0: 61 6d 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  ame number of co
57b0: 6c 75 6d 6e 73 20 61 73 0a 23 20 74 68 65 20 72  lumns as.# the r
57c0: 6f 77 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  ows returned by 
57d0: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
57e0: 6d 65 6e 74 2e 20 54 68 65 20 6e 61 6d 65 20 6f  ment. The name o
57f0: 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 73  f each column is
5800: 0a 23 20 74 68 65 20 73 61 6d 65 20 61 73 20 74  .# the same as t
5810: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
5820: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 63 6f 6c  orresponding col
5830: 75 6d 6e 20 69 6e 20 74 68 65 20 72 65 73 75 6c  umn in the resul
5840: 74 20 73 65 74 20 6f 66 0a 23 20 74 68 65 20 53  t set of.# the S
5850: 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
5860: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
5870: 65 5f 74 65 73 74 73 20 32 2e 31 20 2d 74 63 6c  e_tests 2.1 -tcl
5880: 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65 5f  query {.  table_
5890: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 20 78 31 0a  column_names x1.
58a0: 7d 20 2d 72 65 70 61 69 72 20 7b 0a 20 20 63 61  } -repair {.  ca
58b0: 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20 54 41  tchsql { DROP TA
58c0: 42 4c 45 20 78 31 20 7d 0a 7d 20 7b 0a 20 20 31  BLE x1 }.} {.  1
58d0: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
58e0: 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20 2a  E x1 AS SELECT *
58f0: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
5900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 61                {a
5910: 20 62 20 63 7d 0a 20 20 32 20 20 20 20 22 43 52   b c}.  2    "CR
5920: 45 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53  EATE TABLE x1 AS
5930: 20 53 45 4c 45 43 54 20 63 2c 20 62 2c 20 61 20   SELECT c, b, a 
5940: 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20  FROM t1"        
5950: 20 20 20 20 20 20 20 7b 63 20 62 20 61 7d 0a 20         {c b a}. 
5960: 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54 41   3    "CREATE TA
5970: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
5980: 20 2a 20 46 52 4f 4d 20 74 31 2c 20 74 32 22 20   * FROM t1, t2" 
5990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
59a0: 7b 61 20 62 20 63 20 64 20 65 20 66 7d 0a 20 20  {a b c d e f}.  
59b0: 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42  4    "CREATE TAB
59c0: 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54 20  LE x1 AS SELECT 
59d0: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31  count(*) FROM t1
59e0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  "              {
59f0: 63 6f 75 6e 74 28 2a 29 7d 0a 20 20 35 20 20 20  count(*)}.  5   
5a00: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78   "CREATE TABLE x
5a10: 31 20 41 53 20 53 45 4c 45 43 54 20 63 6f 75 6e  1 AS SELECT coun
5a20: 74 28 61 29 20 41 53 20 61 2c 20 6d 61 78 28 62  t(a) AS a, max(b
5a30: 29 20 46 52 4f 4d 20 74 31 22 20 7b 61 20 6d 61  ) FROM t1" {a ma
5a40: 78 28 62 29 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  x(b)}.}..# EVIDE
5a50: 4e 43 45 2d 4f 46 3a 20 52 2d 33 37 31 31 31 2d  NCE-OF: R-37111-
5a60: 32 32 38 35 35 20 54 68 65 20 64 65 63 6c 61 72  22855 The declar
5a70: 65 64 20 74 79 70 65 20 6f 66 20 65 61 63 68 20  ed type of each 
5a80: 63 6f 6c 75 6d 6e 20 69 73 0a 23 20 64 65 74 65  column is.# dete
5a90: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 20 65 78  rmined by the ex
5aa0: 70 72 65 73 73 69 6f 6e 20 61 66 66 69 6e 69 74  pression affinit
5ab0: 79 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  y of the corresp
5ac0: 6f 6e 64 69 6e 67 20 65 78 70 72 65 73 73 69 6f  onding expressio
5ad0: 6e 0a 23 20 69 6e 20 74 68 65 20 72 65 73 75 6c  n.# in the resul
5ae0: 74 20 73 65 74 20 6f 66 20 74 68 65 20 53 45 4c  t set of the SEL
5af0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2c 20 61  ECT statement, a
5b00: 73 20 66 6f 6c 6c 6f 77 73 3a 20 45 78 70 72 65  s follows: Expre
5b10: 73 73 69 6f 6e 0a 23 20 41 66 66 69 6e 69 74 79  ssion.# Affinity
5b20: 20 43 6f 6c 75 6d 6e 20 44 65 63 6c 61 72 65 64   Column Declared
5b30: 20 54 79 70 65 20 54 45 58 54 20 22 54 45 58 54   Type TEXT "TEXT
5b40: 22 20 4e 55 4d 45 52 49 43 20 22 4e 55 4d 22 20  " NUMERIC "NUM" 
5b50: 49 4e 54 45 47 45 52 20 22 49 4e 54 22 0a 23 20  INTEGER "INT".# 
5b60: 52 45 41 4c 20 22 52 45 41 4c 22 20 4e 4f 4e 45  REAL "REAL" NONE
5b70: 20 22 22 20 28 65 6d 70 74 79 20 73 74 72 69 6e   "" (empty strin
5b80: 67 29 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  g).#.do_createta
5b90: 62 6c 65 5f 74 65 73 74 73 20 32 2e 32 20 2d 74  ble_tests 2.2 -t
5ba0: 63 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c  clquery {.  tabl
5bb0: 65 5f 63 6f 6c 75 6d 6e 5f 64 65 63 6c 74 79 70  e_column_decltyp
5bc0: 65 73 20 78 31 0a 7d 20 2d 72 65 70 61 69 72 20  es x1.} -repair 
5bd0: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44  {.  catchsql { D
5be0: 52 4f 50 20 54 41 42 4c 45 20 78 31 20 7d 0a 7d  ROP TABLE x1 }.}
5bf0: 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41 54   {.  1    "CREAT
5c00: 45 20 54 41 42 4c 45 20 78 31 20 41 53 20 53 45  E TABLE x1 AS SE
5c10: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 31 22 20  LECT a FROM t1" 
5c20: 20 20 20 20 7b 22 22 7d 0a 20 20 32 20 20 20 20      {""}.  2    
5c30: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31  "CREATE TABLE x1
5c40: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
5c50: 4d 20 74 33 22 20 20 20 20 20 7b 49 4e 54 20 54  M t3"     {INT T
5c60: 45 58 54 7d 0a 20 20 33 20 20 20 20 22 43 52 45  EXT}.  3    "CRE
5c70: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5c80: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34  SELECT * FROM t4
5c90: 22 20 20 20 20 20 7b 22 22 20 4e 55 4d 7d 0a 20  "     {"" NUM}. 
5ca0: 20 34 20 20 20 20 22 43 52 45 41 54 45 20 54 41   4    "CREATE TA
5cb0: 42 4c 45 20 78 31 20 41 53 20 53 45 4c 45 43 54  BLE x1 AS SELECT
5cc0: 20 2a 20 46 52 4f 4d 20 74 35 22 20 20 20 20 20   * FROM t5"     
5cd0: 7b 52 45 41 4c 20 49 4e 54 7d 0a 7d 0a 0a 23 20  {REAL INT}.}..# 
5ce0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31  EVIDENCE-OF: R-1
5cf0: 36 36 36 37 2d 30 39 37 37 32 20 41 20 74 61 62  6667-09772 A tab
5d00: 6c 65 20 63 72 65 61 74 65 64 20 75 73 69 6e 67  le created using
5d10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 41 53   CREATE TABLE AS
5d20: 20 68 61 73 0a 23 20 6e 6f 20 50 52 49 4d 41 52   has.# no PRIMAR
5d30: 59 20 4b 45 59 20 61 6e 64 20 6e 6f 20 63 6f 6e  Y KEY and no con
5d40: 73 74 72 61 69 6e 74 73 20 6f 66 20 61 6e 79 20  straints of any 
5d50: 6b 69 6e 64 2e 20 54 68 65 20 64 65 66 61 75 6c  kind. The defaul
5d60: 74 20 76 61 6c 75 65 20 6f 66 0a 23 20 65 61 63  t value of.# eac
5d70: 68 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c  h column is NULL
5d80: 2e 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  . The default co
5d90: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
5da0: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
5db0: 20 6f 66 0a 23 20 74 68 65 20 6e 65 77 20 74 61   of.# the new ta
5dc0: 62 6c 65 20 69 73 20 42 49 4e 41 52 59 2e 0a 23  ble is BINARY..#
5dd0: 0a 23 20 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69  .#   The followi
5de0: 6e 67 20 74 65 73 74 73 20 63 72 65 61 74 65 20  ng tests create 
5df0: 74 61 62 6c 65 73 20 62 61 73 65 64 20 6f 6e 20  tables based on 
5e00: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
5e10: 73 20 74 68 61 74 20 72 65 61 64 0a 23 20 20 20  s that read.#   
5e20: 66 72 6f 6d 20 74 61 62 6c 65 73 20 74 68 61 74  from tables that
5e30: 20 68 61 76 65 20 70 72 69 6d 61 72 79 20 6b 65   have primary ke
5e40: 79 73 2c 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  ys, constraints 
5e50: 61 6e 64 20 65 78 70 6c 69 63 69 74 20 64 65 66  and explicit def
5e60: 61 75 6c 74 20 0a 23 20 20 20 63 6f 6c 6c 61 74  ault .#   collat
5e70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 20 4e  ion sequences. N
5e80: 6f 6e 65 20 6f 66 20 74 68 69 73 20 69 73 20 74  one of this is t
5e90: 72 61 6e 73 66 65 72 65 64 20 74 6f 20 74 68 65  ransfered to the
5ea0: 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 0a 23   definition of.#
5eb0: 20 20 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65     the new table
5ec0: 20 61 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68   as stored in th
5ed0: 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  e sqlite_master 
5ee0: 74 61 62 6c 65 2e 0a 23 0a 23 20 20 20 54 65 73  table..#.#   Tes
5ef0: 74 73 20 32 2e 33 2e 32 2e 2a 20 73 68 6f 77 20  ts 2.3.2.* show 
5f00: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
5f10: 20 76 61 6c 75 65 20 6f 66 20 65 61 63 68 20 63   value of each c
5f20: 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 2e 0a 23  olumn is NULL..#
5f30: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
5f40: 74 65 73 74 73 20 32 2e 33 2e 31 20 2d 71 75 65  tests 2.3.1 -que
5f50: 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 71  ry {.  SELECT sq
5f60: 6c 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  l FROM sqlite_ma
5f70: 73 74 65 72 20 4f 52 44 45 52 20 42 59 20 72 6f  ster ORDER BY ro
5f80: 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 31  wid DESC LIMIT 1
5f90: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
5fa0: 41 54 45 20 54 41 42 4c 45 20 78 31 20 41 53 20  ATE TABLE x1 AS 
5fb0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36  SELECT * FROM t6
5fc0: 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45  " {{CREATE TABLE
5fd0: 20 78 31 28 6d 2c 6e 29 7d 7d 0a 20 20 32 20 20   x1(m,n)}}.  2  
5fe0: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
5ff0: 78 32 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46  x2 AS SELECT * F
6000: 52 4f 4d 20 74 37 22 20 7b 7b 43 52 45 41 54 45  ROM t7" {{CREATE
6010: 20 54 41 42 4c 45 20 78 32 28 78 20 49 4e 54 29   TABLE x2(x INT)
6020: 7d 7d 0a 20 20 33 20 20 20 20 22 43 52 45 41 54  }}.  3    "CREAT
6030: 45 20 54 41 42 4c 45 20 78 33 20 41 53 20 53 45  E TABLE x3 AS SE
6040: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 38 22 20  LECT * FROM t8" 
6050: 7b 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 78  {{CREATE TABLE x
6060: 33 28 6f 29 7d 7d 0a 20 20 34 20 20 20 20 22 43  3(o)}}.  4    "C
6070: 52 45 41 54 45 20 54 41 42 4c 45 20 78 34 20 41  REATE TABLE x4 A
6080: 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  S SELECT * FROM 
6090: 74 39 22 20 7b 7b 43 52 45 41 54 45 20 54 41 42  t9" {{CREATE TAB
60a0: 4c 45 20 78 34 28 70 2c 71 20 52 45 41 4c 2c 72  LE x4(p,q REAL,r
60b0: 20 4e 55 4d 29 7d 7d 0a 7d 0a 64 6f 5f 65 78 65   NUM)}}.}.do_exe
60c0: 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61  csql_test e_crea
60d0: 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 31 20  tetable-2.3.2.1 
60e0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
60f0: 78 31 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45  x1 DEFAULT VALUE
6100: 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  S;.  INSERT INTO
6110: 20 78 32 20 44 45 46 41 55 4c 54 20 56 41 4c 55   x2 DEFAULT VALU
6120: 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ES;.  INSERT INT
6130: 4f 20 78 33 20 44 45 46 41 55 4c 54 20 56 41 4c  O x3 DEFAULT VAL
6140: 55 45 53 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  UES;.  INSERT IN
6150: 54 4f 20 78 34 20 44 45 46 41 55 4c 54 20 56 41  TO x4 DEFAULT VA
6160: 4c 55 45 53 3b 0a 7d 20 7b 7d 0a 64 62 20 6e 75  LUES;.} {}.db nu
6170: 6c 6c 76 61 6c 75 65 20 6e 75 6c 6c 0a 64 6f 5f  llvalue null.do_
6180: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63  execsql_test e_c
6190: 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 33 2e 32  reatetable-2.3.2
61a0: 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52  .2 { SELECT * FR
61b0: 4f 4d 20 78 31 20 7d 20 7b 6e 75 6c 6c 20 6e 75  OM x1 } {null nu
61c0: 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ll}.do_execsql_t
61d0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
61e0: 65 2d 32 2e 33 2e 32 2e 33 20 7b 20 53 45 4c 45  e-2.3.2.3 { SELE
61f0: 43 54 20 2a 20 46 52 4f 4d 20 78 32 20 7d 20 7b  CT * FROM x2 } {
6200: 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  null}.do_execsql
6210: 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61  _test e_createta
6220: 62 6c 65 2d 32 2e 33 2e 32 2e 34 20 7b 20 53 45  ble-2.3.2.4 { SE
6230: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 33 20 7d  LECT * FROM x3 }
6240: 20 7b 6e 75 6c 6c 7d 0a 64 6f 5f 65 78 65 63 73   {null}.do_execs
6250: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6260: 74 61 62 6c 65 2d 32 2e 33 2e 32 2e 35 20 7b 20  table-2.3.2.5 { 
6270: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 34  SELECT * FROM x4
6280: 20 7d 20 7b 6e 75 6c 6c 20 6e 75 6c 6c 20 6e 75   } {null null nu
6290: 6c 6c 7d 0a 64 62 20 6e 75 6c 6c 76 61 6c 75 65  ll}.db nullvalue
62a0: 20 7b 7d 0a 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61   {}..drop_all_ta
62b0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
62c0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
62d0: 6c 65 2d 32 2e 34 2e 30 20 7b 0a 20 20 43 52 45  le-2.4.0 {.  CRE
62e0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 2c 20  ATE TABLE t1(x, 
62f0: 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  y);.  INSERT INT
6300: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 69 27 2c  O t1 VALUES('i',
6310: 20 20 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53     'one');.  INS
6320: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
6330: 45 53 28 27 69 69 27 2c 20 20 27 74 77 6f 27 29  ES('ii',  'two')
6340: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
6350: 74 31 20 56 41 4c 55 45 53 28 27 69 69 69 27 2c  t1 VALUES('iii',
6360: 20 27 74 68 72 65 65 27 29 3b 0a 7d 20 7b 7d 0a   'three');.} {}.
6370: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6380: 52 2d 32 34 31 35 33 2d 32 38 33 35 32 20 54 61  R-24153-28352 Ta
6390: 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
63a0: 6e 67 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  ng CREATE TABLE 
63b0: 41 53 20 61 72 65 0a 23 20 69 6e 69 74 69 61 6c  AS are.# initial
63c0: 6c 79 20 70 6f 70 75 6c 61 74 65 64 20 77 69 74  ly populated wit
63d0: 68 20 74 68 65 20 72 6f 77 73 20 6f 66 20 64 61  h the rows of da
63e0: 74 61 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  ta returned by t
63f0: 68 65 20 53 45 4c 45 43 54 0a 23 20 73 74 61 74  he SELECT.# stat
6400: 65 6d 65 6e 74 2e 0a 23 0a 23 20 45 56 49 44 45  ement..#.# EVIDE
6410: 4e 43 45 2d 4f 46 3a 20 52 2d 30 38 32 32 34 2d  NCE-OF: R-08224-
6420: 33 30 32 34 39 20 52 6f 77 73 20 61 72 65 20 61  30249 Rows are a
6430: 73 73 69 67 6e 65 64 20 63 6f 6e 74 69 67 75 6f  ssigned contiguo
6440: 75 73 6c 79 20 61 73 63 65 6e 64 69 6e 67 0a 23  usly ascending.#
6450: 20 72 6f 77 69 64 20 76 61 6c 75 65 73 2c 20 73   rowid values, s
6460: 74 61 72 74 69 6e 67 20 77 69 74 68 20 31 2c 20  tarting with 1, 
6470: 69 6e 20 74 68 65 20 6f 72 64 65 72 20 74 68 61  in the order tha
6480: 74 20 74 68 65 79 20 61 72 65 20 72 65 74 75 72  t they are retur
6490: 6e 65 64 20 62 79 0a 23 20 74 68 65 20 53 45 4c  ned by.# the SEL
64a0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23  ECT statement..#
64b0: 0a 23 20 20 20 45 61 63 68 20 74 65 73 74 20 63  .#   Each test c
64c0: 61 73 65 20 62 65 6c 6f 77 20 69 73 20 73 70 65  ase below is spe
64d0: 63 69 66 69 65 64 20 61 73 20 74 68 65 20 6e 61  cified as the na
64e0: 6d 65 20 6f 66 20 61 20 74 61 62 6c 65 20 74 6f  me of a table to
64f0: 20 63 72 65 61 74 65 0a 23 20 20 20 75 73 69 6e   create.#   usin
6500: 67 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20  g "CREATE TABLE 
6510: 2e 2e 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e  ... AS SELECT ..
6520: 2e 22 20 61 6e 64 20 61 20 53 45 4c 45 43 54 20  ." and a SELECT 
6530: 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 75 73 65  statement to use
6540: 20 69 6e 0a 23 20 20 20 63 72 65 61 74 69 6e 67   in.#   creating
6550: 20 69 74 2e 20 54 68 65 20 74 61 62 6c 65 20 69   it. The table i
6560: 73 20 63 72 65 61 74 65 64 2e 20 0a 23 0a 23 20  s created. .#.# 
6570: 20 20 54 65 73 74 20 63 61 73 65 73 20 32 2e 34    Test cases 2.4
6580: 2e 2a 2e 31 20 63 68 65 63 6b 20 74 68 61 74 20  .*.1 check that 
6590: 61 66 74 65 72 20 69 74 20 68 61 73 20 62 65 65  after it has bee
65a0: 6e 20 63 72 65 61 74 65 64 2c 20 74 68 65 20 64  n created, the d
65b0: 61 74 61 20 69 6e 20 74 68 65 0a 23 20 20 20 74  ata in the.#   t
65c0: 61 62 6c 65 20 69 73 20 74 68 65 20 73 61 6d 65  able is the same
65d0: 20 61 73 20 74 68 65 20 64 61 74 61 20 72 65 74   as the data ret
65e0: 75 72 6e 65 64 20 62 79 20 74 68 65 20 53 45 4c  urned by the SEL
65f0: 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20 65 78  ECT statement ex
6600: 65 63 75 74 65 64 20 61 73 0a 23 20 20 20 61 20  ecuted as.#   a 
6610: 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d 6d 61  standalone comma
6620: 6e 64 2c 20 76 65 72 69 66 79 69 6e 67 20 74 68  nd, verifying th
6630: 65 20 66 69 72 73 74 20 74 65 73 74 61 62 6c 65  e first testable
6640: 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65   statement above
6650: 2e 0a 23 0a 23 20 20 20 54 65 73 74 20 63 61 73  ..#.#   Test cas
6660: 65 73 20 32 2e 34 2e 2a 2e 32 20 63 68 65 63 6b  es 2.4.*.2 check
6670: 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 73   that the rowids
6680: 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65 64 20   were allocated 
6690: 63 6f 6e 74 69 67 75 6f 75 73 6c 79 0a 23 20 20  contiguously.#  
66a0: 20 61 73 20 72 65 71 75 69 72 65 64 20 62 79 20   as required by 
66b0: 74 68 65 20 73 65 63 6f 6e 64 20 74 65 73 74 61  the second testa
66c0: 62 6c 65 20 73 74 61 74 65 6d 65 6e 74 20 61 62  ble statement ab
66d0: 6f 76 65 2e 20 54 68 61 74 20 74 68 65 20 72 6f  ove. That the ro
66e0: 77 69 64 73 0a 23 20 20 20 66 72 6f 6d 20 74 68  wids.#   from th
66f0: 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 6c 6f  e contiguous blo
6700: 63 6b 20 77 65 72 65 20 61 6c 6c 6f 63 61 74 65  ck were allocate
6710: 64 20 74 6f 20 72 6f 77 73 20 69 6e 20 74 68 65  d to rows in the
6720: 20 6f 72 64 65 72 20 72 6f 77 73 20 61 72 65 0a   order rows are.
6730: 23 20 20 20 72 65 74 75 72 6e 65 64 20 62 79 20  #   returned by 
6740: 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
6750: 6d 65 6e 74 20 69 73 20 76 65 72 69 66 69 65 64  ment is verified
6760: 20 62 79 20 32 2e 34 2e 2a 2e 31 2e 0a 23 0a 23   by 2.4.*.1..#.#
6770: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
6780: 33 32 33 36 35 2d 30 39 30 34 33 20 41 20 22 43  32365-09043 A "C
6790: 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e 2e 20  REATE TABLE ... 
67a0: 41 53 20 53 45 4c 45 43 54 22 20 73 74 61 74 65  AS SELECT" state
67b0: 6d 65 6e 74 0a 23 20 63 72 65 61 74 65 73 20 61  ment.# creates a
67c0: 6e 64 20 70 6f 70 75 6c 61 74 65 73 20 61 20 64  nd populates a d
67d0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 62 61  atabase table ba
67e0: 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75 6c  sed on the resul
67f0: 74 73 20 6f 66 20 61 0a 23 20 53 45 4c 45 43 54  ts of a.# SELECT
6800: 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 23 20   statement..#.# 
6810: 20 20 54 68 65 20 61 62 6f 76 65 20 69 73 20 61    The above is a
6820: 6c 73 6f 20 63 6f 6e 73 69 64 65 72 65 64 20 74  lso considered t
6830: 6f 20 62 65 20 74 65 73 74 65 64 20 62 79 20 74  o be tested by t
6840: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 2e 20 49 74  he following. It
6850: 20 69 73 0a 23 20 20 20 63 6c 65 61 72 20 74 68   is.#   clear th
6860: 61 74 20 74 61 62 6c 65 73 20 61 72 65 20 62 65  at tables are be
6870: 69 6e 67 20 63 72 65 61 74 65 64 20 61 6e 64 20  ing created and 
6880: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 74 68 65  populated by the
6890: 20 63 6f 6d 6d 61 6e 64 20 69 6e 0a 23 20 20 20   command in.#   
68a0: 71 75 65 73 74 69 6f 6e 2e 0a 23 0a 66 6f 72 65  question..#.fore
68b0: 61 63 68 20 7b 74 6e 20 74 62 6c 20 73 65 6c 65  ach {tn tbl sele
68c0: 63 74 7d 20 7b 0a 20 20 31 20 20 20 78 31 20 20  ct} {.  1   x1  
68d0: 20 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   "SELECT * FROM 
68e0: 74 31 22 0a 20 20 32 20 20 20 78 32 20 20 20 22  t1".  2   x2   "
68f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
6900: 20 4f 52 44 45 52 20 42 59 20 78 20 44 45 53 43   ORDER BY x DESC
6910: 22 0a 20 20 33 20 20 20 78 33 20 20 20 22 53 45  ".  3   x3   "SE
6920: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f  LECT * FROM t1 O
6930: 52 44 45 52 20 42 59 20 78 20 41 53 43 22 0a 7d  RDER BY x ASC".}
6940: 20 7b 0a 20 20 23 20 43 72 65 61 74 65 20 74 68   {.  # Create th
6950: 65 20 74 61 62 6c 65 20 75 73 69 6e 67 20 61 20  e table using a 
6960: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 2e 2e  "CREATE TABLE ..
6970: 2e 20 41 53 20 53 45 4c 45 43 54 20 2e 2e 2e 22  . AS SELECT ..."
6980: 20 63 6f 6d 6d 61 6e 64 2e 0a 20 20 65 78 65 63   command..  exec
6990: 73 71 6c 20 5b 73 75 62 73 74 20 7b 43 52 45 41  sql [subst {CREA
69a0: 54 45 20 54 41 42 4c 45 20 24 74 62 6c 20 41 53  TE TABLE $tbl AS
69b0: 20 24 73 65 6c 65 63 74 7d 5d 0a 0a 20 20 23 20   $select}]..  # 
69c0: 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20 72  Check that the r
69d0: 6f 77 73 20 69 6e 73 65 72 74 65 64 20 69 6e 74  ows inserted int
69e0: 6f 20 74 68 65 20 74 61 62 6c 65 2c 20 73 6f 72  o the table, sor
69f0: 74 65 64 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ted in ascending
6a00: 20 72 6f 77 69 64 0a 20 20 23 20 6f 72 64 65 72   rowid.  # order
6a10: 2c 20 6d 61 74 63 68 20 74 68 6f 73 65 20 72 65  , match those re
6a20: 74 75 72 6e 65 64 20 62 79 20 65 78 65 63 75 74  turned by execut
6a30: 69 6e 67 20 74 68 65 20 53 45 4c 45 43 54 20 73  ing the SELECT s
6a40: 74 61 74 65 6d 65 6e 74 20 61 73 20 61 0a 20 20  tatement as a.  
6a50: 23 20 73 74 61 6e 64 61 6c 6f 6e 65 20 63 6f 6d  # standalone com
6a60: 6d 61 6e 64 2e 0a 20 20 64 6f 5f 65 78 65 63 73  mand..  do_execs
6a70: 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65  ql_test e_create
6a80: 74 61 62 6c 65 2d 32 2e 34 2e 24 74 6e 2e 31 20  table-2.4.$tn.1 
6a90: 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 53 45 4c  [subst {.    SEL
6aa0: 45 43 54 20 2a 20 46 52 4f 4d 20 24 74 62 6c 20  ECT * FROM $tbl 
6ab0: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a  ORDER BY rowid;.
6ac0: 20 20 7d 5d 20 5b 65 78 65 63 73 71 6c 20 24 73    }] [execsql $s
6ad0: 65 6c 65 63 74 5d 0a 0a 20 20 23 20 43 68 65 63  elect]..  # Chec
6ae0: 6b 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64  k that the rowid
6af0: 73 20 69 6e 20 74 68 65 20 6e 65 77 20 74 61 62  s in the new tab
6b00: 6c 65 20 61 72 65 20 61 20 63 6f 6e 74 69 67 75  le are a contigu
6b10: 6f 75 73 20 62 6c 6f 63 6b 20 73 74 61 72 74 69  ous block starti
6b20: 6e 67 0a 20 20 23 20 77 69 74 68 20 72 6f 77 69  ng.  # with rowi
6b30: 64 20 31 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  d 1. Note that t
6b40: 68 69 73 20 77 69 6c 6c 20 66 61 69 6c 20 69 66  his will fail if
6b50: 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
6b60: 74 20 24 73 65 6c 65 63 74 20 0a 20 20 23 20 72  t $select .  # r
6b70: 65 74 75 72 6e 73 20 30 20 72 6f 77 73 20 28 61  eturns 0 rows (a
6b80: 73 20 6d 61 78 28 72 6f 77 69 64 29 20 77 69 6c  s max(rowid) wil
6b90: 6c 20 62 65 20 4e 55 4c 4c 29 2e 0a 20 20 64 6f  l be NULL)..  do
6ba0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
6bb0: 63 72 65 61 74 65 74 61 62 6c 65 2d 32 2e 34 2e  createtable-2.4.
6bc0: 24 74 6e 2e 32 20 5b 73 75 62 73 74 20 7b 0a 20  $tn.2 [subst {. 
6bd0: 20 20 20 53 45 4c 45 43 54 20 6d 69 6e 28 72 6f     SELECT min(ro
6be0: 77 69 64 29 2c 20 63 6f 75 6e 74 28 72 6f 77 69  wid), count(rowi
6bf0: 64 29 3d 3d 6d 61 78 28 72 6f 77 69 64 29 20 46  d)==max(rowid) F
6c00: 52 4f 4d 20 24 74 62 6c 0a 20 20 7d 5d 20 7b 31  ROM $tbl.  }] {1
6c10: 20 31 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d   1}.}..#--------
6c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6c60: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
6c70: 66 6f 72 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  for column defin
6c80: 74 69 6f 6e 73 20 69 6e 20 43 52 45 41 54 45 20  tions in CREATE 
6c90: 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74 73  TABLE statements
6ca0: 20 74 68 61 74 20 64 6f 20 6e 6f 74 0a 23 20 75   that do not.# u
6cb0: 73 65 20 61 20 53 45 4c 45 43 54 20 73 74 61 74  se a SELECT stat
6cc0: 65 6d 65 6e 74 2e 20 4e 6f 74 20 69 6e 63 6c 75  ement. Not inclu
6cd0: 64 69 6e 67 20 64 61 74 61 20 63 6f 6e 73 74 72  ding data constr
6ce0: 61 69 6e 74 73 2e 20 49 6e 20 6f 74 68 65 72 20  aints. In other 
6cf0: 77 6f 72 64 73 2c 0a 23 20 74 65 73 74 73 20 66  words,.# tests f
6d00: 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 63 61  or the specifica
6d10: 74 69 6f 6e 20 6f 66 3a 0a 23 0a 23 20 20 20 2a  tion of:.#.#   *
6d20: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 73 2c   declared types,
6d30: 0a 23 20 20 20 2a 20 64 65 66 61 75 6c 74 20 76  .#   * default v
6d40: 61 6c 75 65 73 2c 20 61 6e 64 0a 23 20 20 20 2a  alues, and.#   *
6d50: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
6d60: 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e 0a 23 0a  on sequences..#.
6d70: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
6d80: 52 2d 32 37 32 31 39 2d 34 39 30 35 37 20 55 6e  R-27219-49057 Un
6d90: 6c 69 6b 65 20 6d 6f 73 74 20 53 51 4c 20 64 61  like most SQL da
6da0: 74 61 62 61 73 65 73 2c 20 53 51 4c 69 74 65 20  tabases, SQLite 
6db0: 64 6f 65 73 20 6e 6f 74 0a 23 20 72 65 73 74 72  does not.# restr
6dc0: 69 63 74 20 74 68 65 20 74 79 70 65 20 6f 66 20  ict the type of 
6dd0: 64 61 74 61 20 74 68 61 74 20 6d 61 79 20 62 65  data that may be
6de0: 20 69 6e 73 65 72 74 65 64 20 69 6e 74 6f 20 61   inserted into a
6df0: 20 63 6f 6c 75 6d 6e 20 62 61 73 65 64 20 6f 6e   column based on
6e00: 0a 23 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20 64  .# the columns d
6e10: 65 63 6c 61 72 65 64 20 74 79 70 65 2e 0a 23 0a  eclared type..#.
6e20: 23 20 20 20 54 65 73 74 20 74 68 69 73 20 62 79  #   Test this by
6e30: 20 63 72 65 61 74 69 6e 67 20 61 20 66 65 77 20   creating a few 
6e40: 74 61 62 6c 65 73 20 77 69 74 68 20 76 61 72 69  tables with vari
6e50: 65 64 20 64 65 63 6c 61 72 65 64 20 74 79 70 65  ed declared type
6e60: 73 2c 20 74 68 65 6e 0a 23 20 20 20 69 6e 73 65  s, then.#   inse
6e70: 72 74 69 6e 67 20 76 61 72 69 6f 75 73 20 64 69  rting various di
6e80: 66 66 65 72 65 6e 74 20 74 79 70 65 73 20 6f 66  fferent types of
6e90: 20 76 61 6c 75 65 73 20 69 6e 74 6f 20 74 68 65   values into the
6ea0: 6d 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61  m..#.drop_all_ta
6eb0: 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  bles.do_execsql_
6ec0: 74 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62  test e_createtab
6ed0: 6c 65 2d 33 2e 31 2e 30 20 7b 0a 20 20 43 52 45  le-3.1.0 {.  CRE
6ee0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 56  ATE TABLE t1(x V
6ef0: 41 52 43 48 41 52 28 31 30 29 2c 20 79 20 49 4e  ARCHAR(10), y IN
6f00: 54 45 47 45 52 2c 20 7a 20 44 4f 55 42 4c 45 29  TEGER, z DOUBLE)
6f10: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
6f20: 20 74 32 28 61 20 44 41 54 45 54 49 4d 45 2c 20   t2(a DATETIME, 
6f30: 62 20 53 54 52 49 4e 47 2c 20 63 20 52 45 41 4c  b STRING, c REAL
6f40: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
6f50: 45 20 74 33 28 6f 2c 20 74 29 3b 0a 7d 20 7b 7d  E t3(o, t);.} {}
6f60: 0a 0a 23 20 76 61 6c 75 65 20 74 79 70 65 20 2d  ..# value type -
6f70: 3e 20 64 65 63 6c 61 72 65 64 20 63 6f 6c 75 6d  > declared colum
6f80: 6e 20 74 79 70 65 0a 23 20 2d 2d 2d 2d 2d 2d 2d  n type.# -------
6f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 69 6e  -----------.# in
6fb0: 74 65 67 65 72 20 20 20 20 2d 3e 20 56 41 52 43  teger    -> VARC
6fc0: 48 41 52 28 31 30 29 0a 23 20 73 74 72 69 6e 67  HAR(10).# string
6fd0: 20 20 20 20 20 2d 3e 20 49 4e 54 45 47 45 52 0a       -> INTEGER.
6fe0: 23 20 62 6c 6f 62 20 20 20 20 20 20 20 2d 3e 20  # blob       -> 
6ff0: 44 4f 55 42 4c 45 0a 23 0a 64 6f 5f 65 78 65 63  DOUBLE.#.do_exec
7000: 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74  sql_test e_creat
7010: 65 74 61 62 6c 65 2d 33 2e 31 2e 31 20 7b 0a 20  etable-3.1.1 {. 
7020: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
7030: 56 41 4c 55 45 53 28 31 34 2c 20 27 71 75 69 74  VALUES(14, 'quit
7040: 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69  e a lengthy stri
7050: 6e 67 27 2c 20 58 27 35 35 35 36 35 35 27 29 3b  ng', X'555655');
7060: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
7070: 20 74 31 3b 0a 7d 20 7b 31 34 20 7b 71 75 69 74   t1;.} {14 {quit
7080: 65 20 61 20 6c 65 6e 67 74 68 79 20 73 74 72 69  e a lengthy stri
7090: 6e 67 7d 20 55 56 55 7d 0a 0a 23 20 73 74 72 69  ng} UVU}..# stri
70a0: 6e 67 20 20 20 20 20 2d 3e 20 44 41 54 45 54 49  ng     -> DATETI
70b0: 4d 45 0a 23 20 69 6e 74 65 67 65 72 20 20 20 20  ME.# integer    
70c0: 2d 3e 20 53 54 52 49 4e 47 0a 23 20 74 69 6d 65  -> STRING.# time
70d0: 20 20 20 20 20 20 20 2d 3e 20 52 45 41 4c 0a 23         -> REAL.#
70e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
70f0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33   e_createtable-3
7100: 2e 31 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20  .1.2 {.  INSERT 
7110: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
7120: 6e 6f 74 20 61 20 64 61 74 65 74 69 6d 65 27 2c  not a datetime',
7130: 20 31 33 2c 20 27 31 32 3a 34 31 3a 35 39 27 29   13, '12:41:59')
7140: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
7150: 4d 20 74 32 3b 0a 7d 20 7b 7b 6e 6f 74 20 61 20  M t2;.} {{not a 
7160: 64 61 74 65 74 69 6d 65 7d 20 31 33 20 31 32 3a  datetime} 13 12:
7170: 34 31 3a 35 39 7d 0a 0a 23 20 45 56 49 44 45 4e  41:59}..# EVIDEN
7180: 43 45 2d 4f 46 3a 20 52 2d 31 30 35 36 35 2d 30  CE-OF: R-10565-0
7190: 39 35 35 37 20 54 68 65 20 64 65 63 6c 61 72 65  9557 The declare
71a0: 64 20 74 79 70 65 20 6f 66 20 61 20 63 6f 6c 75  d type of a colu
71b0: 6d 6e 20 69 73 20 75 73 65 64 20 74 6f 0a 23 20  mn is used to.# 
71c0: 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 61 66  determine the af
71d0: 66 69 6e 69 74 79 20 6f 66 20 74 68 65 20 63 6f  finity of the co
71e0: 6c 75 6d 6e 20 6f 6e 6c 79 2e 0a 23 0a 23 20 20  lumn only..#.#  
71f0: 20 20 20 41 66 66 69 6e 69 74 69 65 73 20 61 72     Affinities ar
7200: 65 20 74 65 73 74 65 64 20 69 6e 20 6d 6f 72 65  e tested in more
7210: 20 64 65 74 61 69 6c 20 65 6c 73 65 77 68 65 72   detail elsewher
7220: 65 20 28 73 65 65 20 64 6f 63 75 6d 65 6e 74 0a  e (see document.
7230: 23 20 20 20 20 20 64 61 74 61 74 79 70 65 33 2e  #     datatype3.
7240: 68 74 6d 6c 29 2e 20 48 65 72 65 2c 20 6a 75 73  html). Here, jus
7250: 74 20 74 65 73 74 20 74 68 61 74 20 61 66 66 69  t test that affi
7260: 6e 69 74 79 20 74 72 61 6e 73 66 6f 72 6d 61 74  nity transformat
7270: 69 6f 6e 73 0a 23 20 20 20 20 20 63 6f 6e 73 69  ions.#     consi
7280: 73 74 65 6e 74 20 77 69 74 68 20 74 68 65 20 65  stent with the e
7290: 78 70 65 63 74 65 64 20 61 66 66 69 6e 69 74 79  xpected affinity
72a0: 20 6f 66 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20   of each column 
72b0: 28 62 61 73 65 64 20 6f 6e 0a 23 20 20 20 20 20  (based on.#     
72c0: 74 68 65 20 64 65 63 6c 61 72 65 64 20 74 79 70  the declared typ
72d0: 65 29 20 61 70 70 65 61 72 20 74 6f 20 74 61 6b  e) appear to tak
72e0: 65 20 70 6c 61 63 65 2e 0a 23 0a 23 20 41 66 66  e place..#.# Aff
72f0: 69 6e 69 74 69 65 73 20 6f 66 20 74 31 20 28 74  inities of t1 (t
7300: 65 73 74 20 63 61 73 65 73 20 33 2e 32 2e 31 2e  est cases 3.2.1.
7310: 2a 29 3a 20 54 45 58 54 2c 20 49 4e 54 45 47 45  *): TEXT, INTEGE
7320: 52 2c 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69  R, REAL.# Affini
7330: 74 69 65 73 20 6f 66 20 74 32 20 28 74 65 73 74  ties of t2 (test
7340: 20 63 61 73 65 73 20 33 2e 32 2e 32 2e 2a 29 3a   cases 3.2.2.*):
7350: 20 4e 55 4d 45 52 49 43 2c 20 4e 55 4d 45 52 49   NUMERIC, NUMERI
7360: 43 2c 20 52 45 41 4c 0a 23 20 41 66 66 69 6e 69  C, REAL.# Affini
7370: 74 69 65 73 20 6f 66 20 74 33 20 28 74 65 73 74  ties of t3 (test
7380: 20 63 61 73 65 73 20 33 2e 32 2e 33 2e 2a 29 3a   cases 3.2.3.*):
7390: 20 4e 4f 4e 45 2c 20 4e 4f 4e 45 0a 23 0a 64 6f   NONE, NONE.#.do
73a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
73b0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 32 2e  createtable-3.2.
73c0: 30 20 7b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  0 { DELETE FROM 
73d0: 74 31 3b 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  t1; DELETE FROM 
73e0: 74 32 3b 20 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65  t2; } {}..do_cre
73f0: 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 33  atetable_tests 3
7400: 2e 32 2e 31 20 2d 71 75 65 72 79 20 7b 0a 20 20  .2.1 -query {.  
7410: 53 45 4c 45 43 54 20 71 75 6f 74 65 28 78 29 2c  SELECT quote(x),
7420: 20 71 75 6f 74 65 28 79 29 2c 20 71 75 6f 74 65   quote(y), quote
7430: 28 7a 29 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  (z) FROM t1 ORDE
7440: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20  R BY rowid DESC 
7450: 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31  LIMIT 1;.} {.  1
7460: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
7470: 74 31 20 56 41 4c 55 45 53 28 31 35 2c 20 20 20  t1 VALUES(15,   
7480: 27 32 32 2e 30 27 2c 20 27 31 34 27 29 22 20 20  '22.0', '14')"  
7490: 20 7b 27 31 35 27 20 32 32 20 31 34 2e 30 7d 0a   {'15' 22 14.0}.
74a0: 20 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e    2   "INSERT IN
74b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 32 32 2e  TO t1 VALUES(22.
74c0: 30 2c 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20  0, 22.0, 22.0)" 
74d0: 20 20 20 20 7b 27 32 32 2e 30 27 20 32 32 20 32      {'22.0' 22 2
74e0: 32 2e 30 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65  2.0}.}.do_create
74f0: 74 61 62 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e  table_tests 3.2.
7500: 32 20 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c  2 -query {.  SEL
7510: 45 43 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75  ECT quote(a), qu
7520: 6f 74 65 28 62 29 2c 20 71 75 6f 74 65 28 63 29  ote(b), quote(c)
7530: 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42   FROM t2 ORDER B
7540: 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49 4d  Y rowid DESC LIM
7550: 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31 20 20 20  IT 1;.} {.  1   
7560: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
7570: 56 41 4c 55 45 53 28 31 35 2c 20 20 20 27 32 32  VALUES(15,   '22
7580: 2e 30 27 2c 20 27 31 34 27 29 22 20 20 20 7b 31  .0', '14')"   {1
7590: 35 20 20 20 32 32 20 20 31 34 2e 30 7d 0a 20 20  5   22  14.0}.  
75a0: 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  2   "INSERT INTO
75b0: 20 74 32 20 56 41 4c 55 45 53 28 32 32 2e 30 2c   t2 VALUES(22.0,
75c0: 20 32 32 2e 30 2c 20 32 32 2e 30 29 22 20 20 20   22.0, 22.0)"   
75d0: 20 20 7b 32 32 20 20 20 32 32 20 20 32 32 2e 30    {22   22  22.0
75e0: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
75f0: 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d  le_tests 3.2.3 -
7600: 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54  query {.  SELECT
7610: 20 71 75 6f 74 65 28 6f 29 2c 20 71 75 6f 74 65   quote(o), quote
7620: 28 74 29 20 46 52 4f 4d 20 74 33 20 4f 52 44 45  (t) FROM t3 ORDE
7630: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20  R BY rowid DESC 
7640: 4c 49 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 31  LIMIT 1;.} {.  1
7650: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
7660: 74 33 20 56 41 4c 55 45 53 28 27 31 35 27 2c 20  t3 VALUES('15', 
7670: 27 32 32 2e 30 27 29 22 20 20 20 20 20 20 20 20  '22.0')"        
7680: 20 7b 27 31 35 27 20 27 32 32 2e 30 27 7d 0a 20   {'15' '22.0'}. 
7690: 20 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54   2   "INSERT INT
76a0: 4f 20 74 33 20 56 41 4c 55 45 53 28 31 35 2c 20  O t3 VALUES(15, 
76b0: 32 32 2e 30 29 22 20 20 20 20 20 20 20 20 20 20  22.0)"          
76c0: 20 20 20 7b 31 35 20 32 32 2e 30 7d 0a 7d 0a 0a     {15 22.0}.}..
76d0: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
76e0: 2d 34 32 33 31 36 2d 30 39 35 38 32 20 49 66 20  -42316-09582 If 
76f0: 74 68 65 72 65 20 69 73 20 6e 6f 20 65 78 70 6c  there is no expl
7700: 69 63 69 74 20 44 45 46 41 55 4c 54 20 63 6c 61  icit DEFAULT cla
7710: 75 73 65 0a 23 20 61 74 74 61 63 68 65 64 20 74  use.# attached t
7720: 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e  o a column defin
7730: 69 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20  ition, then the 
7740: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66  default value of
7750: 20 74 68 65 20 63 6f 6c 75 6d 6e 0a 23 20 69 73   the column.# is
7760: 20 4e 55 4c 4c 2e 0a 23 0a 23 20 20 20 20 20 4e   NULL..#.#     N
7770: 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d  one of the colum
7780: 6e 73 20 69 6e 20 74 61 62 6c 65 20 74 31 20 68  ns in table t1 h
7790: 61 76 65 20 61 6e 20 65 78 70 6c 69 63 69 74 20  ave an explicit 
77a0: 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2e 0a  DEFAULT clause..
77b0: 23 20 20 20 20 20 53 6f 20 74 65 73 74 69 6e 67  #     So testing
77c0: 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c   that the defaul
77d0: 74 20 76 61 6c 75 65 20 6f 66 20 61 6c 6c 20 63  t value of all c
77e0: 6f 6c 75 6d 6e 73 20 69 6e 20 74 61 62 6c 65 20  olumns in table 
77f0: 74 31 20 69 73 0a 23 20 20 20 20 20 4e 55 4c 4c  t1 is.#     NULL
7800: 20 73 65 72 76 65 73 20 74 6f 20 76 65 72 69 66   serves to verif
7810: 79 20 74 68 65 20 61 62 6f 76 65 2e 0a 23 20 20  y the above..#  
7820: 20 20 20 0a 64 6f 5f 63 72 65 61 74 65 74 61 62     .do_createtab
7830: 6c 65 5f 74 65 73 74 73 20 33 2e 32 2e 33 20 2d  le_tests 3.2.3 -
7840: 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54  query {.  SELECT
7850: 20 71 75 6f 74 65 28 78 29 2c 20 71 75 6f 74 65   quote(x), quote
7860: 28 79 29 2c 20 71 75 6f 74 65 28 7a 29 20 46 52  (y), quote(z) FR
7870: 4f 4d 20 74 31 0a 7d 20 2d 72 65 70 61 69 72 20  OM t1.} -repair 
7880: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45  {.  execsql { DE
7890: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 7d 0a 7d  LETE FROM t1 }.}
78a0: 20 7b 0a 20 20 31 20 20 20 22 49 4e 53 45 52 54   {.  1   "INSERT
78b0: 20 49 4e 54 4f 20 74 31 28 78 2c 20 79 29 20 56   INTO t1(x, y) V
78c0: 41 4c 55 45 53 28 27 61 62 63 27 2c 20 27 78 79  ALUES('abc', 'xy
78d0: 7a 27 29 22 20 20 20 7b 27 61 62 63 27 20 27 78  z')"   {'abc' 'x
78e0: 79 7a 27 20 4e 55 4c 4c 7d 0a 20 20 32 20 20 20  yz' NULL}.  2   
78f0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28  "INSERT INTO t1(
7900: 78 2c 20 7a 29 20 56 41 4c 55 45 53 28 27 61 62  x, z) VALUES('ab
7910: 63 27 2c 20 27 78 79 7a 27 29 22 20 20 20 7b 27  c', 'xyz')"   {'
7920: 61 62 63 27 20 4e 55 4c 4c 20 27 78 79 7a 27 7d  abc' NULL 'xyz'}
7930: 0a 20 20 33 20 20 20 22 49 4e 53 45 52 54 20 49  .  3   "INSERT I
7940: 4e 54 4f 20 74 31 20 44 45 46 41 55 4c 54 20 56  NTO t1 DEFAULT V
7950: 41 4c 55 45 53 22 20 20 20 20 20 20 20 20 20 20  ALUES"          
7960: 20 20 20 20 20 7b 4e 55 4c 4c 20 4e 55 4c 4c 20       {NULL NULL 
7970: 4e 55 4c 4c 7d 0a 7d 0a 0a 23 20 45 56 49 44 45  NULL}.}..# EVIDE
7980: 4e 43 45 2d 4f 46 3a 20 52 2d 36 32 39 34 30 2d  NCE-OF: R-62940-
7990: 34 33 30 30 35 20 41 6e 20 65 78 70 6c 69 63 69  43005 An explici
79a0: 74 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65  t DEFAULT clause
79b0: 20 6d 61 79 20 73 70 65 63 69 66 79 20 74 68 61   may specify tha
79c0: 74 0a 23 20 74 68 65 20 64 65 66 61 75 6c 74 20  t.# the default 
79d0: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 61  value is NULL, a
79e0: 20 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74   string constant
79f0: 2c 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 61 6e  , a blob constan
7a00: 74 2c 20 61 0a 23 20 73 69 67 6e 65 64 2d 6e 75  t, a.# signed-nu
7a10: 6d 62 65 72 2c 20 6f 72 20 61 6e 79 20 63 6f 6e  mber, or any con
7a20: 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f 6e  stant expression
7a30: 20 65 6e 63 6c 6f 73 65 64 20 69 6e 20 70 61 72   enclosed in par
7a40: 65 6e 74 68 65 73 65 73 2e 20 41 6e 0a 23 20 65  entheses. An.# e
7a50: 78 70 6c 69 63 69 74 20 64 65 66 61 75 6c 74 20  xplicit default 
7a60: 76 61 6c 75 65 20 6d 61 79 20 61 6c 73 6f 20 62  value may also b
7a70: 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 70 65  e one of the spe
7a80: 63 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65  cial case-indepe
7a90: 6e 64 65 6e 74 0a 23 20 6b 65 79 77 6f 72 64 73  ndent.# keywords
7aa0: 20 43 55 52 52 45 4e 54 5f 54 49 4d 45 2c 20 43   CURRENT_TIME, C
7ab0: 55 52 52 45 4e 54 5f 44 41 54 45 20 6f 72 20 43  URRENT_DATE or C
7ac0: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
7ad0: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
7ae0: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
7af0: 65 2d 33 2e 33 2e 31 20 7b 0a 20 20 43 52 45 41  e-3.3.1 {.  CREA
7b00: 54 45 20 54 41 42 4c 45 20 74 34 28 0a 20 20 20  TE TABLE t4(.   
7b10: 20 61 20 44 45 46 41 55 4c 54 20 4e 55 4c 4c 2c   a DEFAULT NULL,
7b20: 0a 20 20 20 20 62 20 44 45 46 41 55 4c 54 20 27  .    b DEFAULT '
7b30: 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 27  string constant'
7b40: 2c 0a 20 20 20 20 63 20 44 45 46 41 55 4c 54 20  ,.    c DEFAULT 
7b50: 58 27 34 32 34 43 34 46 34 32 27 2c 0a 20 20 20  X'424C4F42',.   
7b60: 20 64 20 44 45 46 41 55 4c 54 20 31 2c 0a 20 20   d DEFAULT 1,.  
7b70: 20 20 65 20 44 45 46 41 55 4c 54 20 2d 31 2c 0a    e DEFAULT -1,.
7b80: 20 20 20 20 66 20 44 45 46 41 55 4c 54 20 33 2e      f DEFAULT 3.
7b90: 31 34 2c 0a 20 20 20 20 67 20 44 45 46 41 55 4c  14,.    g DEFAUL
7ba0: 54 20 2d 33 2e 31 34 2c 0a 20 20 20 20 68 20 44  T -3.14,.    h D
7bb0: 45 46 41 55 4c 54 20 28 20 73 75 62 73 74 72 28  EFAULT ( substr(
7bc0: 27 61 62 63 64 27 2c 20 30 2c 20 32 29 20 7c 7c  'abcd', 0, 2) ||
7bd0: 20 27 63 64 27 20 29 2c 0a 20 20 20 20 69 20 44   'cd' ),.    i D
7be0: 45 46 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54  EFAULT CURRENT_T
7bf0: 49 4d 45 2c 0a 20 20 20 20 6a 20 44 45 46 41 55  IME,.    j DEFAU
7c00: 4c 54 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c  LT CURRENT_DATE,
7c10: 0a 20 20 20 20 6b 20 44 45 46 41 55 4c 54 20 43  .    k DEFAULT C
7c20: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
7c30: 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 0a 23 20 45 56  .  );.} {}..# EV
7c40: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 30 32  IDENCE-OF: R-102
7c50: 38 38 2d 34 33 31 36 39 20 46 6f 72 20 74 68 65  88-43169 For the
7c60: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
7c70: 20 44 45 46 41 55 4c 54 20 63 6c 61 75 73 65 2c   DEFAULT clause,
7c80: 20 61 6e 0a 23 20 65 78 70 72 65 73 73 69 6f 6e   an.# expression
7c90: 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 63   is considered c
7ca0: 6f 6e 73 74 61 6e 74 20 70 72 6f 76 69 64 65 64  onstant provided
7cb0: 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f   that it does no
7cc0: 74 20 63 6f 6e 74 61 69 6e 0a 23 20 61 6e 79 20  t contain.# any 
7cd0: 73 75 62 2d 71 75 65 72 69 65 73 20 6f 72 20 73  sub-queries or s
7ce0: 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 20  tring constants 
7cf0: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 64 6f 75 62  enclosed in doub
7d00: 6c 65 20 71 75 6f 74 65 73 2e 0a 23 0a 64 6f 5f  le quotes..#.do_
7d10: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
7d20: 73 20 33 2e 34 2e 31 20 2d 65 72 72 6f 72 20 7b  s 3.4.1 -error {
7d30: 0a 20 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  .  default value
7d40: 20 6f 66 20 63 6f 6c 75 6d 6e 20 5b 78 5d 20 69   of column [x] i
7d50: 73 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 0a 7d  s not constant.}
7d60: 20 7b 0a 20 20 31 20 20 20 7b 43 52 45 41 54 45   {.  1   {CREATE
7d70: 20 54 41 42 4c 45 20 74 35 28 78 20 44 45 46 41   TABLE t5(x DEFA
7d80: 55 4c 54 20 28 20 28 53 45 4c 45 43 54 20 31 29  ULT ( (SELECT 1)
7d90: 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20 20 7b   ))}  {}.  2   {
7da0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
7db0: 78 20 44 45 46 41 55 4c 54 20 28 20 22 61 62 63  x DEFAULT ( "abc
7dc0: 22 20 29 29 7d 20 20 7b 7d 0a 20 20 33 20 20 20  " ))}  {}.  3   
7dd0: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  {CREATE TABLE t5
7de0: 28 78 20 44 45 46 41 55 4c 54 20 28 20 31 20 49  (x DEFAULT ( 1 I
7df0: 4e 20 28 53 45 4c 45 43 54 20 31 29 20 29 29 7d  N (SELECT 1) ))}
7e00: 20 20 7b 7d 0a 20 20 34 20 20 20 7b 43 52 45 41    {}.  4   {CREA
7e10: 54 45 20 54 41 42 4c 45 20 74 35 28 78 20 44 45  TE TABLE t5(x DE
7e20: 46 41 55 4c 54 20 28 20 45 58 49 53 54 53 20 28  FAULT ( EXISTS (
7e30: 53 45 4c 45 43 54 20 31 29 20 29 29 7d 20 20 7b  SELECT 1) ))}  {
7e40: 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  }.}.do_createtab
7e50: 6c 65 5f 74 65 73 74 73 20 33 2e 34 2e 32 20 2d  le_tests 3.4.2 -
7e60: 72 65 70 61 69 72 20 7b 0a 20 20 63 61 74 63 68  repair {.  catch
7e70: 73 71 6c 20 7b 20 44 52 4f 50 20 54 41 42 4c 45  sql { DROP TABLE
7e80: 20 74 35 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20   t5 }.} {.  1   
7e90: 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  {CREATE TABLE t5
7ea0: 28 78 20 44 45 46 41 55 4c 54 20 28 20 27 61 62  (x DEFAULT ( 'ab
7eb0: 63 27 20 29 29 7d 20 20 7b 7d 0a 20 20 32 20 20  c' ))}  {}.  2  
7ec0: 20 7b 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   {CREATE TABLE t
7ed0: 35 28 78 20 44 45 46 41 55 4c 54 20 28 20 31 20  5(x DEFAULT ( 1 
7ee0: 49 4e 20 28 31 2c 20 32 2c 20 33 29 20 29 29 7d  IN (1, 2, 3) ))}
7ef0: 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e    {}.}..# EVIDEN
7f00: 43 45 2d 4f 46 3a 20 52 2d 31 38 38 31 34 2d 32  CE-OF: R-18814-2
7f10: 33 35 30 31 20 45 61 63 68 20 74 69 6d 65 20 61  3501 Each time a
7f20: 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64   row is inserted
7f30: 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 0a   into the table.
7f40: 23 20 62 79 20 61 6e 20 49 4e 53 45 52 54 20 73  # by an INSERT s
7f50: 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20 64 6f  tatement that do
7f60: 65 73 20 6e 6f 74 20 70 72 6f 76 69 64 65 20 65  es not provide e
7f70: 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73 20 66  xplicit values f
7f80: 6f 72 20 61 6c 6c 0a 23 20 74 61 62 6c 65 20 63  or all.# table c
7f90: 6f 6c 75 6d 6e 73 20 74 68 65 20 76 61 6c 75 65  olumns the value
7fa0: 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
7fb0: 6e 65 77 20 72 6f 77 20 61 72 65 20 64 65 74 65  new row are dete
7fc0: 72 6d 69 6e 65 64 20 62 79 20 74 68 65 69 72 0a  rmined by their.
7fd0: 23 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73  # default values
7fe0: 0a 23 0a 23 20 20 20 20 20 56 65 72 69 66 79 20  .#.#     Verify 
7ff0: 74 68 69 73 20 77 69 74 68 20 73 6f 6d 65 20 61  this with some a
8000: 73 73 65 72 74 20 73 74 61 74 65 6d 65 6e 74 73  ssert statements
8010: 20 66 6f 72 20 77 68 69 63 68 20 61 6c 6c 2c 20   for which all, 
8020: 73 6f 6d 65 20 61 6e 64 20 6e 6f 0a 23 20 20 20  some and no.#   
8030: 20 20 63 6f 6c 75 6d 6e 73 20 6c 61 63 6b 20 65    columns lack e
8040: 78 70 6c 69 63 69 74 20 76 61 6c 75 65 73 2e 0a  xplicit values..
8050: 23 0a 73 65 74 20 73 71 6c 69 74 65 5f 63 75 72  #.set sqlite_cur
8060: 72 65 6e 74 5f 74 69 6d 65 20 31 30 30 30 30 30  rent_time 100000
8070: 30 30 30 30 0a 64 6f 5f 63 72 65 61 74 65 74 61  0000.do_createta
8080: 62 6c 65 5f 74 65 73 74 73 20 33 2e 35 20 2d 71  ble_tests 3.5 -q
8090: 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43 54 20  uery {.  SELECT 
80a0: 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28  quote(a), quote(
80b0: 62 29 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75  b), quote(c), qu
80c0: 6f 74 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29  ote(d), quote(e)
80d0: 2c 20 71 75 6f 74 65 28 66 29 2c 20 0a 20 20 20  , quote(f), .   
80e0: 20 20 20 20 20 20 71 75 6f 74 65 28 67 29 2c 20        quote(g), 
80f0: 71 75 6f 74 65 28 68 29 2c 20 71 75 6f 74 65 28  quote(h), quote(
8100: 69 29 2c 20 71 75 6f 74 65 28 6a 29 2c 20 71 75  i), quote(j), qu
8110: 6f 74 65 28 6b 29 0a 20 20 46 52 4f 4d 20 74 34  ote(k).  FROM t4
8120: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
8130: 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d 20  DESC LIMIT 1;.} 
8140: 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49 4e  {.  1 "INSERT IN
8150: 54 4f 20 74 34 20 44 45 46 41 55 4c 54 20 56 41  TO t4 DEFAULT VA
8160: 4c 55 45 53 22 20 7b 0a 20 20 20 20 4e 55 4c 4c  LUES" {.    NULL
8170: 20 7b 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61   {'string consta
8180: 6e 74 27 7d 20 58 27 34 32 34 43 34 46 34 32 27  nt'} X'424C4F42'
8190: 20 31 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34   1 -1 3.14 -3.14
81a0: 20 0a 20 20 20 20 27 61 63 64 27 20 27 30 31 3a   .    'acd' '01:
81b0: 34 36 3a 34 30 27 20 27 32 30 30 31 2d 30 39 2d  46:40' '2001-09-
81c0: 30 39 27 20 7b 27 32 30 30 31 2d 30 39 2d 30 39  09' {'2001-09-09
81d0: 20 30 31 3a 34 36 3a 34 30 27 7d 0a 20 20 7d 0a   01:46:40'}.  }.
81e0: 0a 20 20 32 20 22 49 4e 53 45 52 54 20 49 4e 54  .  2 "INSERT INT
81f0: 4f 20 74 34 28 61 2c 20 62 2c 20 63 29 20 56 41  O t4(a, b, c) VA
8200: 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 22 20 7b  LUES(1, 2, 3)" {
8210: 0a 20 20 20 20 31 20 32 20 33 20 31 20 2d 31 20  .    1 2 3 1 -1 
8220: 33 2e 31 34 20 2d 33 2e 31 34 20 27 61 63 64 27  3.14 -3.14 'acd'
8230: 20 27 30 31 3a 34 36 3a 34 30 27 20 27 32 30 30   '01:46:40' '200
8240: 31 2d 30 39 2d 30 39 27 20 7b 27 32 30 30 31 2d  1-09-09' {'2001-
8250: 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30 27 7d  09-09 01:46:40'}
8260: 0a 20 20 7d 0a 0a 20 20 33 20 22 49 4e 53 45 52  .  }..  3 "INSER
8270: 54 20 49 4e 54 4f 20 74 34 28 6b 2c 20 6a 2c 20  T INTO t4(k, j, 
8280: 69 29 20 56 41 4c 55 45 53 28 31 2c 20 32 2c 20  i) VALUES(1, 2, 
8290: 33 29 22 20 7b 0a 20 20 20 20 4e 55 4c 4c 20 7b  3)" {.    NULL {
82a0: 27 73 74 72 69 6e 67 20 63 6f 6e 73 74 61 6e 74  'string constant
82b0: 27 7d 20 58 27 34 32 34 43 34 46 34 32 27 20 31  '} X'424C4F42' 1
82c0: 20 2d 31 20 33 2e 31 34 20 2d 33 2e 31 34 20 27   -1 3.14 -3.14 '
82d0: 61 63 64 27 20 33 20 32 20 31 0a 20 20 7d 0a 0a  acd' 3 2 1.  }..
82e0: 20 20 34 20 22 49 4e 53 45 52 54 20 49 4e 54 4f    4 "INSERT INTO
82f0: 20 74 34 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 2c   t4(a,b,c,d,e,f,
8300: 67 2c 68 2c 69 2c 6a 2c 6b 29 20 56 41 4c 55 45  g,h,i,j,k) VALUE
8310: 53 28 31 2c 32 2c 33 2c 34 2c 35 2c 36 2c 37 2c  S(1,2,3,4,5,6,7,
8320: 38 2c 39 2c 31 30 2c 31 31 29 22 20 7b 0a 20 20  8,9,10,11)" {.  
8330: 20 20 31 20 32 20 33 20 34 20 35 20 36 20 37 20    1 2 3 4 5 6 7 
8340: 38 20 39 20 31 30 20 31 31 0a 20 20 7d 0a 7d 0a  8 9 10 11.  }.}.
8350: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
8360: 52 2d 31 32 35 37 32 2d 36 32 35 30 31 20 49 66  R-12572-62501 If
8370: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
8380: 75 65 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ue of the column
8390: 20 69 73 20 61 0a 23 20 63 6f 6e 73 74 61 6e 74   is a.# constant
83a0: 20 4e 55 4c 4c 2c 20 74 65 78 74 2c 20 62 6c 6f   NULL, text, blo
83b0: 62 20 6f 72 20 73 69 67 6e 65 64 2d 6e 75 6d 62  b or signed-numb
83c0: 65 72 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 74  er value, then t
83d0: 68 61 74 20 76 61 6c 75 65 20 69 73 0a 23 20 75  hat value is.# u
83e0: 73 65 64 20 64 69 72 65 63 74 6c 79 20 69 6e 20  sed directly in 
83f0: 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 23 0a 64  the new row..#.d
8400: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65  o_execsql_test e
8410: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 36  _createtable-3.6
8420: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
8430: 42 4c 45 20 74 35 28 0a 20 20 20 20 61 20 44 45  BLE t5(.    a DE
8440: 46 41 55 4c 54 20 4e 55 4c 4c 2c 20 20 0a 20 20  FAULT NULL,  .  
8450: 20 20 62 20 44 45 46 41 55 4c 54 20 27 74 65 78    b DEFAULT 'tex
8460: 74 20 76 61 6c 75 65 27 2c 20 20 0a 20 20 20 20  t value',  .    
8470: 63 20 44 45 46 41 55 4c 54 20 58 27 34 32 34 43  c DEFAULT X'424C
8480: 34 46 34 32 27 2c 0a 20 20 20 20 64 20 44 45 46  4F42',.    d DEF
8490: 41 55 4c 54 20 2d 34 35 36 37 38 2e 36 2c 0a 20  AULT -45678.6,. 
84a0: 20 20 20 65 20 44 45 46 41 55 4c 54 20 33 39 34     e DEFAULT 394
84b0: 35 30 37 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f  507.  );.} {}.do
84c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
84d0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 36 2e  createtable-3.6.
84e0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
84f0: 4f 20 74 35 20 44 45 46 41 55 4c 54 20 56 41 4c  O t5 DEFAULT VAL
8500: 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75  UES;.  SELECT qu
8510: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
8520: 2c 20 71 75 6f 74 65 28 63 29 2c 20 71 75 6f 74  , quote(c), quot
8530: 65 28 64 29 2c 20 71 75 6f 74 65 28 65 29 20 46  e(d), quote(e) F
8540: 52 4f 4d 20 74 35 3b 0a 7d 20 7b 4e 55 4c 4c 20  ROM t5;.} {NULL 
8550: 7b 27 74 65 78 74 20 76 61 6c 75 65 27 7d 20 58  {'text value'} X
8560: 27 34 32 34 43 34 46 34 32 27 20 2d 34 35 36 37  '424C4F42' -4567
8570: 38 2e 36 20 33 39 34 35 30 37 7d 0a 0a 23 20 45  8.6 394507}..# E
8580: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 30  VIDENCE-OF: R-60
8590: 36 31 36 2d 35 30 32 35 31 20 49 66 20 74 68 65  616-50251 If the
85a0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
85b0: 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 61 6e  f a column is an
85c0: 0a 23 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  .# expression in
85d0: 20 70 61 72 65 6e 74 68 65 73 65 73 2c 20 74 68   parentheses, th
85e0: 65 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  en the expressio
85f0: 6e 20 69 73 20 65 76 61 6c 75 61 74 65 64 20 6f  n is evaluated o
8600: 6e 63 65 20 66 6f 72 0a 23 20 65 61 63 68 20 72  nce for.# each r
8610: 6f 77 20 69 6e 73 65 72 74 65 64 20 61 6e 64 20  ow inserted and 
8620: 74 68 65 20 72 65 73 75 6c 74 73 20 75 73 65 64  the results used
8630: 20 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e   in the new row.
8640: 0a 23 0a 23 20 20 20 54 65 73 74 20 63 61 73 65  .#.#   Test case
8650: 20 33 2e 36 2e 34 20 64 65 6d 6f 6e 73 74 72 61   3.6.4 demonstra
8660: 74 65 73 20 74 68 61 74 20 74 68 65 20 65 78 70  tes that the exp
8670: 72 65 73 73 69 6f 6e 20 69 73 20 65 76 61 6c 75  ression is evalu
8680: 61 74 65 64 20 0a 23 20 20 20 73 65 70 61 72 61  ated .#   separa
8690: 74 65 6c 79 20 66 6f 72 20 65 61 63 68 20 72 6f  tely for each ro
86a0: 77 20 69 66 20 74 68 65 20 49 4e 53 45 52 54 20  w if the INSERT 
86b0: 69 73 20 61 6e 20 22 49 4e 53 45 52 54 20 49 4e  is an "INSERT IN
86c0: 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
86d0: 2e 22 0a 23 20 20 20 63 6f 6d 6d 61 6e 64 2e 0a  .".#   command..
86e0: 23 0a 73 65 74 20 3a 3a 6e 65 78 74 69 6e 74 20  #.set ::nextint 
86f0: 30 0a 70 72 6f 63 20 6e 65 78 74 69 6e 74 20 7b  0.proc nextint {
8700: 7d 20 7b 20 69 6e 63 72 20 3a 3a 6e 65 78 74 69  } { incr ::nexti
8710: 6e 74 20 7d 0a 64 62 20 66 75 6e 63 20 6e 65 78  nt }.db func nex
8720: 74 69 6e 74 20 6e 65 78 74 69 6e 74 0a 0a 64 6f  tint nextint..do
8730: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
8740: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e  createtable-3.7.
8750: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
8760: 4c 45 20 74 36 28 61 20 44 45 46 41 55 4c 54 20  LE t6(a DEFAULT 
8770: 28 20 6e 65 78 74 69 6e 74 28 29 20 29 2c 20 62  ( nextint() ), b
8780: 20 44 45 46 41 55 4c 54 20 28 20 6e 65 78 74 69   DEFAULT ( nexti
8790: 6e 74 28 29 20 29 29 3b 0a 7d 20 7b 7d 0a 64 6f  nt() ));.} {}.do
87a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
87b0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e  createtable-3.7.
87c0: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
87d0: 4f 20 74 36 20 44 45 46 41 55 4c 54 20 56 41 4c  O t6 DEFAULT VAL
87e0: 55 45 53 3b 0a 20 20 53 45 4c 45 43 54 20 71 75  UES;.  SELECT qu
87f0: 6f 74 65 28 61 29 2c 20 71 75 6f 74 65 28 62 29  ote(a), quote(b)
8800: 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b 31 20 32   FROM t6;.} {1 2
8810: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
8820: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
8830: 33 2e 37 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54  3.7.3 {.  INSERT
8840: 20 49 4e 54 4f 20 74 36 28 61 29 20 56 41 4c 55   INTO t6(a) VALU
8850: 45 53 28 27 58 27 29 3b 0a 20 20 53 45 4c 45 43  ES('X');.  SELEC
8860: 54 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74  T quote(a), quot
8870: 65 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20  e(b) FROM t6;.} 
8880: 7b 31 20 32 20 27 58 27 20 33 7d 0a 64 6f 5f 65  {1 2 'X' 3}.do_e
8890: 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  xecsql_test e_cr
88a0: 65 61 74 65 74 61 62 6c 65 2d 33 2e 37 2e 34 20  eatetable-3.7.4 
88b0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
88c0: 74 36 28 61 29 20 53 45 4c 45 43 54 20 61 20 46  t6(a) SELECT a F
88d0: 52 4f 4d 20 74 36 3b 0a 20 20 53 45 4c 45 43 54  ROM t6;.  SELECT
88e0: 20 71 75 6f 74 65 28 61 29 2c 20 71 75 6f 74 65   quote(a), quote
88f0: 28 62 29 20 46 52 4f 4d 20 74 36 3b 0a 7d 20 7b  (b) FROM t6;.} {
8900: 31 20 32 20 27 58 27 20 33 20 31 20 34 20 27 58  1 2 'X' 3 1 4 'X
8910: 27 20 35 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  ' 5}..# EVIDENCE
8920: 2d 4f 46 3a 20 52 2d 31 35 33 36 33 2d 35 35 32  -OF: R-15363-552
8930: 33 30 20 49 66 20 74 68 65 20 64 65 66 61 75 6c  30 If the defaul
8940: 74 20 76 61 6c 75 65 20 6f 66 20 61 20 63 6f 6c  t value of a col
8950: 75 6d 6e 20 69 73 0a 23 20 43 55 52 52 45 4e 54  umn is.# CURRENT
8960: 5f 54 49 4d 45 2c 20 43 55 52 52 45 4e 54 5f 44  _TIME, CURRENT_D
8970: 41 54 45 20 6f 72 20 43 55 52 52 45 4e 54 5f 54  ATE or CURRENT_T
8980: 49 4d 45 53 54 41 4d 50 2c 20 74 68 65 6e 20 74  IMESTAMP, then t
8990: 68 65 20 76 61 6c 75 65 20 75 73 65 64 0a 23 20  he value used.# 
89a0: 69 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 20 69  in the new row i
89b0: 73 20 61 20 74 65 78 74 20 72 65 70 72 65 73 65  s a text represe
89c0: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  ntation of the c
89d0: 75 72 72 65 6e 74 20 55 54 43 20 64 61 74 65 20  urrent UTC date 
89e0: 61 6e 64 2f 6f 72 0a 23 20 74 69 6d 65 2e 0a 23  and/or.# time..#
89f0: 0a 23 20 20 20 20 20 54 68 69 73 20 69 73 20 64  .#     This is d
8a00: 69 66 66 69 63 75 6c 74 20 74 6f 20 74 65 73 74  ifficult to test
8a10: 20 6c 69 74 65 72 61 6c 6c 79 20 77 69 74 68 6f   literally witho
8a20: 75 74 20 6b 6e 6f 77 69 6e 67 20 77 68 61 74 20  ut knowing what 
8a30: 74 69 6d 65 20 74 68 65 20 0a 23 20 20 20 20 20  time the .#     
8a40: 75 73 65 72 20 77 69 6c 6c 20 72 75 6e 20 74 68  user will run th
8a50: 65 20 74 65 73 74 73 2e 20 49 6e 73 74 65 61 64  e tests. Instead
8a60: 2c 20 77 65 20 74 65 73 74 20 74 68 61 74 20 74  , we test that t
8a70: 68 65 20 74 68 72 65 65 20 63 61 73 65 73 0a 23  he three cases.#
8a80: 20 20 20 20 20 61 62 6f 76 65 20 73 65 74 20 74       above set t
8a90: 68 65 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20  he value to the 
8aa0: 63 75 72 72 65 6e 74 20 64 61 74 65 20 61 6e 64  current date and
8ab0: 2f 6f 72 20 74 69 6d 65 20 61 63 63 6f 72 64 69  /or time accordi
8ac0: 6e 67 20 74 6f 0a 23 20 20 20 20 20 74 68 65 20  ng to.#     the 
8ad0: 78 43 75 72 72 65 6e 74 54 69 6d 65 28 29 20 6d  xCurrentTime() m
8ae0: 65 74 68 6f 64 20 6f 66 20 74 68 65 20 56 46 53  ethod of the VFS
8af0: 2e 20 57 68 69 63 68 20 69 73 20 75 73 75 61 6c  . Which is usual
8b00: 6c 79 20 74 68 65 20 73 61 6d 65 0a 23 20 20 20  ly the same.#   
8b10: 20 20 61 73 20 55 54 43 2e 20 49 6e 20 74 68 69    as UTC. In thi
8b20: 73 20 63 61 73 65 2c 20 68 6f 77 65 76 65 72 2c  s case, however,
8b30: 20 77 65 20 69 6e 73 74 72 75 6d 65 6e 74 20 69   we instrument i
8b40: 74 20 74 6f 20 61 6c 77 61 79 73 20 72 65 74 75  t to always retu
8b50: 72 6e 0a 23 20 20 20 20 20 61 20 74 69 6d 65 20  rn.#     a time 
8b60: 65 71 75 69 76 61 6c 65 6e 74 20 74 6f 20 22 32  equivalent to "2
8b70: 30 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a  001-09-09 01:46:
8b80: 34 30 20 55 54 43 22 2e 0a 23 0a 73 65 74 20 73  40 UTC"..#.set s
8b90: 71 6c 69 74 65 5f 63 75 72 72 65 6e 74 5f 74 69  qlite_current_ti
8ba0: 6d 65 20 31 30 30 30 30 30 30 30 30 30 0a 64 6f  me 1000000000.do
8bb0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
8bc0: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e  createtable-3.8.
8bd0: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
8be0: 4c 45 20 74 37 28 0a 20 20 20 20 61 20 44 45 46  LE t7(.    a DEF
8bf0: 41 55 4c 54 20 43 55 52 52 45 4e 54 5f 54 49 4d  AULT CURRENT_TIM
8c00: 45 2c 20 0a 20 20 20 20 62 20 44 45 46 41 55 4c  E, .    b DEFAUL
8c10: 54 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  T CURRENT_DATE, 
8c20: 0a 20 20 20 20 63 20 44 45 46 41 55 4c 54 20 43  .    c DEFAULT C
8c30: 55 52 52 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50  URRENT_TIMESTAMP
8c40: 0a 20 20 29 3b 0a 7d 20 7b 7d 0a 64 6f 5f 65 78  .  );.} {}.do_ex
8c50: 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  ecsql_test e_cre
8c60: 61 74 65 74 61 62 6c 65 2d 33 2e 38 2e 32 20 7b  atetable-3.8.2 {
8c70: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
8c80: 37 20 44 45 46 41 55 4c 54 20 56 41 4c 55 45 53  7 DEFAULT VALUES
8c90: 3b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65  ;.  SELECT quote
8ca0: 28 61 29 2c 20 71 75 6f 74 65 28 62 29 2c 20 71  (a), quote(b), q
8cb0: 75 6f 74 65 28 63 29 20 46 52 4f 4d 20 74 37 3b  uote(c) FROM t7;
8cc0: 0a 7d 20 7b 27 30 31 3a 34 36 3a 34 30 27 20 27  .} {'01:46:40' '
8cd0: 32 30 30 31 2d 30 39 2d 30 39 27 20 7b 27 32 30  2001-09-09' {'20
8ce0: 30 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34  01-09-09 01:46:4
8cf0: 30 27 7d 7d 0a 0a 0a 23 20 45 56 49 44 45 4e 43  0'}}...# EVIDENC
8d00: 45 2d 4f 46 3a 20 52 2d 36 32 33 32 37 2d 35 33  E-OF: R-62327-53
8d10: 38 34 33 20 46 6f 72 20 43 55 52 52 45 4e 54 5f  843 For CURRENT_
8d20: 54 49 4d 45 2c 20 74 68 65 20 66 6f 72 6d 61 74  TIME, the format
8d30: 20 6f 66 20 74 68 65 20 76 61 6c 75 65 0a 23 20   of the value.# 
8d40: 69 73 20 22 48 48 3a 4d 4d 3a 53 53 22 2e 0a 23  is "HH:MM:SS"..#
8d50: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
8d60: 52 2d 30 33 37 37 35 2d 34 33 34 37 31 20 46 6f  R-03775-43471 Fo
8d70: 72 20 43 55 52 52 45 4e 54 5f 44 41 54 45 2c 20  r CURRENT_DATE, 
8d80: 22 59 59 59 59 2d 4d 4d 2d 44 44 22 2e 0a 23 0a  "YYYY-MM-DD"..#.
8d90: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
8da0: 2d 30 37 36 37 37 2d 34 34 39 32 36 20 54 68 65  -07677-44926 The
8db0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 43 55 52 52   format for CURR
8dc0: 45 4e 54 5f 54 49 4d 45 53 54 41 4d 50 20 69 73  ENT_TIMESTAMP is
8dd0: 0a 23 20 22 59 59 59 59 2d 4d 4d 2d 44 44 20 48  .# "YYYY-MM-DD H
8de0: 48 3a 4d 4d 3a 53 53 22 2e 0a 23 0a 23 20 20 20  H:MM:SS"..#.#   
8df0: 20 20 54 68 65 20 74 68 72 65 65 20 61 62 6f 76    The three abov
8e00: 65 20 61 72 65 20 64 65 6d 6f 6e 73 74 72 61 74  e are demonstrat
8e10: 65 64 20 62 79 20 74 65 73 74 73 20 31 2c 20 32  ed by tests 1, 2
8e20: 20 61 6e 64 20 33 20 62 65 6c 6f 77 2e 20 0a 23   and 3 below. .#
8e30: 20 20 20 20 20 52 65 73 70 65 63 74 69 76 65 6c       Respectivel
8e40: 79 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  y..#.do_createta
8e50: 62 6c 65 5f 74 65 73 74 73 20 33 2e 38 2e 33 20  ble_tests 3.8.3 
8e60: 2d 71 75 65 72 79 20 7b 0a 20 20 53 45 4c 45 43  -query {.  SELEC
8e70: 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74  T a, b, c FROM t
8e80: 37 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  7 ORDER BY rowid
8e90: 20 44 45 53 43 20 4c 49 4d 49 54 20 31 3b 0a 7d   DESC LIMIT 1;.}
8ea0: 20 7b 0a 20 20 31 20 22 49 4e 53 45 52 54 20 49   {.  1 "INSERT I
8eb0: 4e 54 4f 20 74 37 28 62 2c 20 63 29 20 56 41 4c  NTO t7(b, c) VAL
8ec0: 55 45 53 28 27 78 27 2c 20 27 79 27 29 22 20 7b  UES('x', 'y')" {
8ed0: 30 31 3a 34 36 3a 34 30 20 78 20 79 7d 0a 20 20  01:46:40 x y}.  
8ee0: 32 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  2 "INSERT INTO t
8ef0: 37 28 63 2c 20 61 29 20 56 41 4c 55 45 53 28 27  7(c, a) VALUES('
8f00: 78 27 2c 20 27 79 27 29 22 20 7b 79 20 32 30 30  x', 'y')" {y 200
8f10: 31 2d 30 39 2d 30 39 20 78 7d 0a 20 20 33 20 22  1-09-09 x}.  3 "
8f20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 28 61  INSERT INTO t7(a
8f30: 2c 20 62 29 20 56 41 4c 55 45 53 28 27 78 27 2c  , b) VALUES('x',
8f40: 20 27 79 27 29 22 20 7b 78 20 79 20 7b 32 30 30   'y')" {x y {200
8f50: 31 2d 30 39 2d 30 39 20 30 31 3a 34 36 3a 34 30  1-09-09 01:46:40
8f60: 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  }}.}..# EVIDENCE
8f70: 2d 4f 46 3a 20 52 2d 35 35 30 36 31 2d 34 37 37  -OF: R-55061-477
8f80: 35 34 20 54 68 65 20 43 4f 4c 4c 41 54 45 20 63  54 The COLLATE c
8f90: 6c 61 75 73 65 20 73 70 65 63 69 66 69 65 73 20  lause specifies 
8fa0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 0a 23 20  the name of a.# 
8fb0: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
8fc0: 63 65 20 74 6f 20 75 73 65 20 61 73 20 74 68 65  ce to use as the
8fd0: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
8fe0: 6f 6e 20 73 65 71 75 65 6e 63 65 20 66 6f 72 20  on sequence for 
8ff0: 74 68 65 0a 23 20 63 6f 6c 75 6d 6e 2e 0a 23 0a  the.# column..#.
9000: 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  # EVIDENCE-OF: R
9010: 2d 34 30 32 37 35 2d 35 34 33 36 33 20 49 66 20  -40275-54363 If 
9020: 6e 6f 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  no COLLATE claus
9030: 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2c 20  e is specified, 
9040: 74 68 65 0a 23 20 64 65 66 61 75 6c 74 20 63 6f  the.# default co
9050: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
9060: 20 69 73 20 42 49 4e 41 52 59 2e 0a 23 0a 64 6f   is BINARY..#.do
9070: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 65 5f  _execsql_test e_
9080: 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2d 39 2e  createtable-3-9.
9090: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  1 {.  CREATE TAB
90a0: 4c 45 20 74 38 28 61 20 43 4f 4c 4c 41 54 45 20  LE t8(a COLLATE 
90b0: 6e 6f 63 61 73 65 2c 20 62 20 43 4f 4c 4c 41 54  nocase, b COLLAT
90c0: 45 20 72 74 72 69 6d 2c 20 63 20 43 4f 4c 4c 41  E rtrim, c COLLA
90d0: 54 45 20 62 69 6e 61 72 79 2c 20 64 29 3b 0a 20  TE binary, d);. 
90e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20   INSERT INTO t8 
90f0: 56 41 4c 55 45 53 28 27 61 62 63 27 2c 20 20 20  VALUES('abc',   
9100: 27 61 62 63 27 2c 20 20 20 27 61 62 63 27 2c 20  'abc',   'abc', 
9110: 20 20 27 61 62 63 27 29 3b 0a 20 20 49 4e 53 45    'abc');.  INSE
9120: 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45  RT INTO t8 VALUE
9130: 53 28 27 61 62 63 20 20 27 2c 20 27 61 62 63 20  S('abc  ', 'abc 
9140: 20 27 2c 20 27 61 62 63 20 20 27 2c 20 27 61 62   ', 'abc  ', 'ab
9150: 63 20 20 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  c  ');.  INSERT 
9160: 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 27  INTO t8 VALUES('
9170: 41 42 43 20 20 27 2c 20 27 41 42 43 20 20 27 2c  ABC  ', 'ABC  ',
9180: 20 27 41 42 43 20 20 27 2c 20 27 41 42 43 20 20   'ABC  ', 'ABC  
9190: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
91a0: 4f 20 74 38 20 56 41 4c 55 45 53 28 27 41 42 43  O t8 VALUES('ABC
91b0: 27 2c 20 20 20 27 41 42 43 27 2c 20 20 20 27 41  ',   'ABC',   'A
91c0: 42 43 27 2c 20 20 20 27 41 42 43 27 29 3b 0a 7d  BC',   'ABC');.}
91d0: 20 7b 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62   {}.do_createtab
91e0: 6c 65 5f 74 65 73 74 73 20 33 2e 39 20 7b 0a 20  le_tests 3.9 {. 
91f0: 20 32 20 20 20 20 22 53 45 4c 45 43 54 20 61 20   2    "SELECT a 
9200: 46 52 4f 4d 20 74 38 20 4f 52 44 45 52 20 42 59  FROM t8 ORDER BY
9210: 20 61 2c 20 72 6f 77 69 64 22 20 20 20 20 7b 61   a, rowid"    {a
9220: 62 63 20 41 42 43 20 7b 61 62 63 20 20 7d 20 7b  bc ABC {abc  } {
9230: 41 42 43 20 20 7d 7d 0a 20 20 33 20 20 20 20 22  ABC  }}.  3    "
9240: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 38  SELECT b FROM t8
9250: 20 4f 52 44 45 52 20 42 59 20 62 2c 20 72 6f 77   ORDER BY b, row
9260: 69 64 22 20 20 20 20 7b 7b 41 42 43 20 20 7d 20  id"    {{ABC  } 
9270: 41 42 43 20 61 62 63 20 7b 61 62 63 20 20 7d 7d  ABC abc {abc  }}
9280: 0a 20 20 34 20 20 20 20 22 53 45 4c 45 43 54 20  .  4    "SELECT 
9290: 63 20 46 52 4f 4d 20 74 38 20 4f 52 44 45 52 20  c FROM t8 ORDER 
92a0: 42 59 20 63 2c 20 72 6f 77 69 64 22 20 20 20 20  BY c, rowid"    
92b0: 7b 41 42 43 20 7b 41 42 43 20 20 7d 20 61 62 63  {ABC {ABC  } abc
92c0: 20 7b 61 62 63 20 20 7d 7d 0a 20 20 35 20 20 20   {abc  }}.  5   
92d0: 20 22 53 45 4c 45 43 54 20 64 20 46 52 4f 4d 20   "SELECT d FROM 
92e0: 74 38 20 4f 52 44 45 52 20 42 59 20 64 2c 20 72  t8 ORDER BY d, r
92f0: 6f 77 69 64 22 20 20 20 20 7b 41 42 43 20 7b 41  owid"    {ABC {A
9300: 42 43 20 20 7d 20 61 62 63 20 7b 61 62 63 20 20  BC  } abc {abc  
9310: 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  }}.}..# EVIDENCE
9320: 2d 4f 46 3a 20 52 2d 32 35 34 37 33 2d 32 30 35  -OF: R-25473-205
9330: 35 37 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  57 The number of
9340: 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 61 20 74 61   columns in a ta
9350: 62 6c 65 20 69 73 20 6c 69 6d 69 74 65 64 0a 23  ble is limited.#
9360: 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f 4d   by the SQLITE_M
9370: 41 58 5f 43 4f 4c 55 4d 4e 20 63 6f 6d 70 69 6c  AX_COLUMN compil
9380: 65 2d 74 69 6d 65 20 70 61 72 61 6d 65 74 65 72  e-time parameter
9390: 2e 0a 23 0a 70 72 6f 63 20 63 6f 6c 75 6d 6e 73  ..#.proc columns
93a0: 20 7b 6e 7d 20 7b 0a 20 20 73 65 74 20 72 65 73   {n} {.  set res
93b0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73   [list].  for {s
93c0: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e  et i 0} {$i < $n
93d0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 20 6c 61 70  } {incr i} { lap
93e0: 70 65 6e 64 20 72 65 73 20 22 63 24 69 22 20 7d  pend res "c$i" }
93f0: 0a 20 20 6a 6f 69 6e 20 24 72 65 73 20 22 2c 20  .  join $res ", 
9400: 22 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ".}.do_execsql_t
9410: 65 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c  est e_createtabl
9420: 65 2d 33 2e 31 30 2e 31 20 5b 73 75 62 73 74 20  e-3.10.1 [subst 
9430: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
9440: 20 74 39 28 5b 63 6f 6c 75 6d 6e 73 20 24 3a 3a   t9([columns $::
9450: 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d  SQLITE_MAX_COLUM
9460: 4e 5d 29 3b 0a 7d 5d 20 7b 7d 0a 64 6f 5f 63 61  N]);.}] {}.do_ca
9470: 74 63 68 73 71 6c 5f 74 65 73 74 20 65 5f 63 72  tchsql_test e_cr
9480: 65 61 74 65 74 61 62 6c 65 2d 33 2e 31 30 2e 32  eatetable-3.10.2
9490: 20 5b 73 75 62 73 74 20 7b 0a 20 20 43 52 45 41   [subst {.  CREA
94a0: 54 45 20 54 41 42 4c 45 20 74 31 30 28 5b 63 6f  TE TABLE t10([co
94b0: 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24 3a 3a 53  lumns [expr $::S
94c0: 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c 55 4d 4e  QLITE_MAX_COLUMN
94d0: 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f  +1]]);.}] {1 {to
94e0: 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f  o many columns o
94f0: 6e 20 74 31 30 7d 7d 0a 0a 23 20 45 56 49 44 45  n t10}}..# EVIDE
9500: 4e 43 45 2d 4f 46 3a 20 52 2d 32 37 37 37 35 2d  NCE-OF: R-27775-
9510: 36 34 37 32 31 20 42 6f 74 68 20 6f 66 20 74 68  64721 Both of th
9520: 65 73 65 20 6c 69 6d 69 74 73 20 63 61 6e 20 62  ese limits can b
9530: 65 20 6c 6f 77 65 72 65 64 20 61 74 0a 23 20 72  e lowered at.# r
9540: 75 6e 74 69 6d 65 20 75 73 69 6e 67 20 74 68 65  untime using the
9550: 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29   sqlite3_limit()
9560: 20 43 2f 43 2b 2b 20 69 6e 74 65 72 66 61 63 65   C/C++ interface
9570: 2e 0a 23 0a 23 20 20 20 41 20 33 30 2c 30 30 30  ..#.#   A 30,000
9580: 20 62 79 74 65 20 62 6c 6f 62 20 63 6f 6e 73 75   byte blob consu
9590: 6d 65 73 20 33 30 2c 30 30 33 20 62 79 74 65 73  mes 30,003 bytes
95a0: 20 6f 66 20 72 65 63 6f 72 64 20 73 70 61 63 65   of record space
95b0: 2e 20 41 20 72 65 63 6f 72 64 20 0a 23 20 20 20  . A record .#   
95c0: 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 33 20  that contains 3 
95d0: 73 75 63 68 20 62 6c 6f 62 73 20 63 6f 6e 73 75  such blobs consu
95e0: 6d 65 73 20 28 33 30 2c 30 30 30 2a 33 29 2b 31  mes (30,000*3)+1
95f0: 20 62 79 74 65 73 20 6f 66 20 73 70 61 63 65 2e   bytes of space.
9600: 20 54 65 73 74 73 0a 23 20 20 20 33 2e 31 31 2e   Tests.#   3.11.
9610: 34 20 61 6e 64 20 33 2e 31 31 2e 35 2c 20 77 68  4 and 3.11.5, wh
9620: 69 63 68 20 76 65 72 69 66 79 20 74 68 61 74 20  ich verify that 
9630: 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54  SQLITE_MAX_LENGT
9640: 48 20 6d 61 79 20 62 65 20 6c 6f 77 65 72 65 64  H may be lowered
9650: 0a 23 20 20 20 61 74 20 72 75 6e 74 69 6d 65 2c  .#   at runtime,
9660: 20 61 72 65 20 62 61 73 65 64 20 6f 6e 20 74 68   are based on th
9670: 69 73 20 63 61 6c 63 75 6c 61 74 69 6f 6e 2e 0a  is calculation..
9680: 23 0a 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 20  #.sqlite3_limit 
9690: 64 62 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  db SQLITE_LIMIT_
96a0: 43 4f 4c 55 4d 4e 20 35 30 30 0a 64 6f 5f 65 78  COLUMN 500.do_ex
96b0: 65 63 73 71 6c 5f 74 65 73 74 20 65 5f 63 72 65  ecsql_test e_cre
96c0: 61 74 65 74 61 62 6c 65 2d 33 2e 31 31 2e 31 20  atetable-3.11.1 
96d0: 5b 73 75 62 73 74 20 7b 0a 20 20 43 52 45 41 54  [subst {.  CREAT
96e0: 45 20 54 41 42 4c 45 20 74 31 30 28 5b 63 6f 6c  E TABLE t10([col
96f0: 75 6d 6e 73 20 35 30 30 5d 29 3b 0a 7d 5d 20 7b  umns 500]);.}] {
9700: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
9710: 73 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65  st e_createtable
9720: 2d 33 2e 31 31 2e 32 20 5b 73 75 62 73 74 20 7b  -3.11.2 [subst {
9730: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
9740: 74 31 31 28 5b 63 6f 6c 75 6d 6e 73 20 35 30 31  t11([columns 501
9750: 5d 29 3b 0a 7d 5d 20 7b 31 20 7b 74 6f 6f 20 6d  ]);.}] {1 {too m
9760: 61 6e 79 20 63 6f 6c 75 6d 6e 73 20 6f 6e 20 74  any columns on t
9770: 31 31 7d 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68  11}}..# Check th
9780: 61 74 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73  at it is not pos
9790: 73 69 62 6c 65 20 74 6f 20 72 61 69 73 65 20 74  sible to raise t
97a0: 68 65 20 63 6f 6c 75 6d 6e 20 6c 69 6d 69 74 20  he column limit 
97b0: 61 62 6f 76 65 20 69 74 73 20 0a 23 20 64 65 66  above its .# def
97c0: 61 75 6c 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d  ault compile tim
97d0: 65 20 76 61 6c 75 65 2e 0a 23 0a 73 71 6c 69 74  e value..#.sqlit
97e0: 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c 49  e3_limit db SQLI
97f0: 54 45 5f 4c 49 4d 49 54 5f 43 4f 4c 55 4d 4e 20  TE_LIMIT_COLUMN 
9800: 5b 65 78 70 72 20 24 3a 3a 53 51 4c 49 54 45 5f  [expr $::SQLITE_
9810: 4d 41 58 5f 43 4f 4c 55 4d 4e 2b 32 5d 0a 64 6f  MAX_COLUMN+2].do
9820: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 65  _catchsql_test e
9830: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 33 2e 31  _createtable-3.1
9840: 31 2e 33 20 5b 73 75 62 73 74 20 7b 0a 20 20 43  1.3 [subst {.  C
9850: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 28  REATE TABLE t11(
9860: 5b 63 6f 6c 75 6d 6e 73 20 5b 65 78 70 72 20 24  [columns [expr $
9870: 3a 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 43 4f 4c  ::SQLITE_MAX_COL
9880: 55 4d 4e 2b 31 5d 5d 29 3b 0a 7d 5d 20 7b 31 20  UMN+1]]);.}] {1 
9890: 7b 74 6f 6f 20 6d 61 6e 79 20 63 6f 6c 75 6d 6e  {too many column
98a0: 73 20 6f 6e 20 74 31 31 7d 7d 0a 0a 73 71 6c 69  s on t11}}..sqli
98b0: 74 65 33 5f 6c 69 6d 69 74 20 64 62 20 53 51 4c  te3_limit db SQL
98c0: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
98d0: 20 39 30 30 31 30 0a 64 6f 5f 65 78 65 63 73 71   90010.do_execsq
98e0: 6c 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  l_test e_createt
98f0: 61 62 6c 65 2d 33 2e 31 31 2e 34 20 7b 0a 20 20  able-3.11.4 {.  
9900: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 32  CREATE TABLE t12
9910: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 49 4e 53  (a, b, c);.  INS
9920: 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41 4c  ERT INTO t12 VAL
9930: 55 45 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  UES(randomblob(3
9940: 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62  0000),randomblob
9950: 28 33 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c  (30000),randombl
9960: 6f 62 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b 7d  ob(30000));.} {}
9970: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
9980: 74 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d  t e_createtable-
9990: 33 2e 31 31 2e 35 20 7b 0a 20 20 49 4e 53 45 52  3.11.5 {.  INSER
99a0: 54 20 49 4e 54 4f 20 74 31 32 20 56 41 4c 55 45  T INTO t12 VALUE
99b0: 53 28 72 61 6e 64 6f 6d 62 6c 6f 62 28 33 30 30  S(randomblob(300
99c0: 30 31 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62 28 33  01),randomblob(3
99d0: 30 30 30 30 29 2c 72 61 6e 64 6f 6d 62 6c 6f 62  0000),randomblob
99e0: 28 33 30 30 30 30 29 29 3b 0a 7d 20 7b 31 20 7b  (30000));.} {1 {
99f0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74  string or blob t
9a00: 6f 6f 20 62 69 67 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  oo big}}..#-----
9a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
9a50: 2d 2d 2d 2d 0a 23 20 54 65 73 74 73 20 66 6f 72  ----.# Tests for
9a60: 20 73 74 61 74 65 6d 65 6e 74 73 20 72 65 67 61   statements rega
9a70: 72 64 69 6e 67 20 63 6f 6e 73 74 72 61 69 6e 74  rding constraint
9a80: 73 20 28 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  s (PRIMARY KEY, 
9a90: 55 4e 49 51 55 45 2c 20 4e 4f 54 20 0a 23 20 4e  UNIQUE, NOT .# N
9aa0: 55 4c 4c 20 61 6e 64 20 43 48 45 43 4b 20 63 6f  ULL and CHECK co
9ab0: 6e 73 74 72 61 69 6e 74 73 29 2e 0a 23 0a 0a 23  nstraints)..#..#
9ac0: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
9ad0: 35 32 33 38 32 2d 35 34 32 34 38 20 45 61 63 68  52382-54248 Each
9ae0: 20 74 61 62 6c 65 20 69 6e 20 53 51 4c 69 74 65   table in SQLite
9af0: 20 6d 61 79 20 68 61 76 65 20 61 74 20 6d 6f 73   may have at mos
9b00: 74 20 6f 6e 65 0a 23 20 50 52 49 4d 41 52 59 20  t one.# PRIMARY 
9b10: 4b 45 59 2e 0a 23 20 0a 23 20 45 56 49 44 45 4e  KEY..# .# EVIDEN
9b20: 43 45 2d 4f 46 3a 20 52 2d 31 38 30 38 30 2d 34  CE-OF: R-18080-4
9b30: 37 32 37 31 20 49 66 20 74 68 65 72 65 20 69 73  7271 If there is
9b40: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 50   more than one P
9b50: 52 49 4d 41 52 59 20 4b 45 59 0a 23 20 63 6c 61  RIMARY KEY.# cla
9b60: 75 73 65 20 69 6e 20 61 20 73 69 6e 67 6c 65 20  use in a single 
9b70: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
9b80: 74 65 6d 65 6e 74 2c 20 69 74 20 69 73 20 61 6e  tement, it is an
9b90: 20 65 72 72 6f 72 2e 0a 23 0a 23 20 20 20 20 20   error..#.#     
9ba0: 54 6f 20 74 65 73 74 20 74 68 65 20 74 77 6f 20  To test the two 
9bb0: 61 62 6f 76 65 2c 20 73 68 6f 77 20 74 68 61 74  above, show that
9bc0: 20 7a 65 72 6f 20 70 72 69 6d 61 72 79 20 6b 65   zero primary ke
9bd0: 79 73 20 69 73 20 4f 6b 2c 20 6f 6e 65 20 70 72  ys is Ok, one pr
9be0: 69 6d 61 72 79 0a 23 20 20 20 20 20 6b 65 79 20  imary.#     key 
9bf0: 69 73 20 4f 6b 2c 20 61 6e 64 20 74 77 6f 20 6f  is Ok, and two o
9c00: 72 20 6d 6f 72 65 20 70 72 69 6d 61 72 79 20 6b  r more primary k
9c10: 65 79 73 20 69 73 20 61 6e 20 65 72 72 6f 72 2e  eys is an error.
9c20: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
9c30: 65 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  es.do_createtabl
9c40: 65 5f 74 65 73 74 73 20 34 2e 31 2e 31 20 7b 0a  e_tests 4.1.1 {.
9c50: 20 20 31 20 20 20 20 22 43 52 45 41 54 45 20 54    1    "CREATE T
9c60: 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63 29  ABLE t1(a, b, c)
9c70: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20           {}.  2 
9ca0: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
9cb0: 20 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45   t2(a PRIMARY KE
9cc0: 59 2c 20 62 2c 20 63 29 22 20 20 20 20 20 20 20  Y, b, c)"       
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ce0: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22       {}.  3    "
9cf0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
9d00: 61 2c 20 62 2c 20 63 2c 20 50 52 49 4d 41 52 59  a, b, c, PRIMARY
9d10: 20 4b 45 59 28 61 29 29 22 20 20 20 20 20 20 20   KEY(a))"       
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52 45 41   {}.  4    "CREA
9d40: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
9d50: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
9d60: 28 63 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20  (c,b,a))"       
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
9d80: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
9d90: 5f 74 65 73 74 73 20 34 2e 31 2e 32 20 2d 65 72  _tests 4.1.2 -er
9da0: 72 6f 72 20 7b 0a 20 20 74 61 62 6c 65 20 22 74  ror {.  table "t
9db0: 35 22 20 68 61 73 20 6d 6f 72 65 20 74 68 61 6e  5" has more than
9dc0: 20 6f 6e 65 20 70 72 69 6d 61 72 79 20 6b 65 79   one primary key
9dd0: 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45  .} {.  1    "CRE
9de0: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 50  ATE TABLE t5(a P
9df0: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52  RIMARY KEY, b PR
9e00: 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20  IMARY KEY, c)"  
9e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
9e20: 0a 20 20 32 20 20 20 20 22 43 52 45 41 54 45 20  .  2    "CREATE 
9e30: 54 41 42 4c 45 20 74 35 28 61 2c 20 62 20 50 52  TABLE t5(a, b PR
9e40: 49 4d 41 52 59 20 4b 45 59 2c 20 63 2c 20 50 52  IMARY KEY, c, PR
9e50: 49 4d 41 52 59 20 4b 45 59 28 61 29 29 22 20 20  IMARY KEY(a))"  
9e60: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 33            {}.  3
9e70: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
9e80: 45 20 74 35 28 61 20 49 4e 54 45 47 45 52 20 50  E t5(a INTEGER P
9e90: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 50 52  RIMARY KEY, b PR
9ea0: 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20 20  IMARY KEY, c)"  
9eb0: 20 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20 20        {}.  4    
9ec0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35  "CREATE TABLE t5
9ed0: 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41  (a INTEGER PRIMA
9ee0: 52 59 20 4b 45 59 2c 20 62 2c 20 63 2c 20 50 52  RY KEY, b, c, PR
9ef0: 49 4d 41 52 59 20 4b 45 59 28 62 2c 20 63 29 29  IMARY KEY(b, c))
9f00: 22 20 7b 7d 0a 20 20 35 20 20 20 20 22 43 52 45  " {}.  5    "CRE
9f10: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 50  ATE TABLE t5(a P
9f20: 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c 20 63  RIMARY KEY, b, c
9f30: 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61 29  , PRIMARY KEY(a)
9f40: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  )"            {}
9f50: 0a 20 20 36 20 20 20 20 22 43 52 45 41 54 45 20  .  6    "CREATE 
9f60: 54 41 42 4c 45 20 74 35 28 61 20 49 4e 54 45 47  TABLE t5(a INTEG
9f70: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
9f80: 62 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45  b, c, PRIMARY KE
9f90: 59 28 61 29 29 22 20 20 20 20 7b 7d 0a 7d 0a 0a  Y(a))"    {}.}..
9fa0: 70 72 6f 63 20 74 61 62 6c 65 5f 70 6b 20 7b 74  proc table_pk {t
9fb0: 62 6c 7d 20 7b 20 0a 20 20 73 65 74 20 70 6b 20  bl} { .  set pk 
9fc0: 5b 6c 69 73 74 5d 0a 20 20 64 62 20 65 76 61 6c  [list].  db eval
9fd0: 20 22 70 72 61 67 6d 61 20 74 61 62 6c 65 5f 69   "pragma table_i
9fe0: 6e 66 6f 28 24 74 62 6c 29 22 20 61 20 7b 0a 20  nfo($tbl)" a {. 
9ff0: 20 20 20 69 66 20 7b 24 61 28 70 6b 29 7d 20 7b     if {$a(pk)} {
a000: 20 6c 61 70 70 65 6e 64 20 70 6b 20 24 61 28 6e   lappend pk $a(n
a010: 61 6d 65 29 20 7d 0a 20 20 7d 0a 20 20 73 65 74  ame) }.  }.  set
a020: 20 70 6b 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43   pk.}..# EVIDENC
a030: 45 2d 4f 46 3a 20 52 2d 34 31 34 31 31 2d 31 38  E-OF: R-41411-18
a040: 38 33 37 20 49 66 20 74 68 65 20 6b 65 79 77 6f  837 If the keywo
a050: 72 64 73 20 50 52 49 4d 41 52 59 20 4b 45 59 20  rds PRIMARY KEY 
a060: 61 72 65 20 61 64 64 65 64 20 74 6f 20 61 0a 23  are added to a.#
a070: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
a080: 6f 6e 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  on, then the pri
a090: 6d 61 72 79 20 6b 65 79 20 66 6f 72 20 74 68 65  mary key for the
a0a0: 20 74 61 62 6c 65 20 63 6f 6e 73 69 73 74 73 20   table consists 
a0b0: 6f 66 20 74 68 61 74 0a 23 20 73 69 6e 67 6c 65  of that.# single
a0c0: 20 63 6f 6c 75 6d 6e 2e 0a 23 0a 23 20 20 20 20   column..#.#    
a0d0: 20 54 68 65 20 61 62 6f 76 65 20 69 73 20 74 65   The above is te
a0e0: 73 74 65 64 20 62 79 20 34 2e 32 2e 31 2e 2a 0a  sted by 4.2.1.*.
a0f0: 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  #.# EVIDENCE-OF:
a100: 20 52 2d 33 31 37 37 35 2d 34 38 32 30 34 20 4f   R-31775-48204 O
a110: 72 2c 20 69 66 20 61 20 50 52 49 4d 41 52 59 20  r, if a PRIMARY 
a120: 4b 45 59 20 63 6c 61 75 73 65 20 69 73 20 73 70  KEY clause is sp
a130: 65 63 69 66 69 65 64 20 61 73 0a 23 20 61 20 74  ecified as.# a t
a140: 61 62 6c 65 2d 63 6f 6e 73 74 72 61 69 6e 74 2c  able-constraint,
a150: 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d 61 72   then the primar
a160: 79 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62  y key of the tab
a170: 6c 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 74  le consists of t
a180: 68 65 0a 23 20 6c 69 73 74 20 6f 66 20 63 6f 6c  he.# list of col
a190: 75 6d 6e 73 20 73 70 65 63 69 66 69 65 64 20 61  umns specified a
a1a0: 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 50 52  s part of the PR
a1b0: 49 4d 41 52 59 20 4b 45 59 20 63 6c 61 75 73 65  IMARY KEY clause
a1c0: 2e 0a 23 0a 23 20 20 20 20 20 54 68 65 20 61 62  ..#.#     The ab
a1d0: 6f 76 65 20 69 73 20 74 65 73 74 65 64 20 62 79  ove is tested by
a1e0: 20 34 2e 32 2e 32 2e 2a 0a 23 0a 64 6f 5f 63 72   4.2.2.*.#.do_cr
a1f0: 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20  eatetable_tests 
a200: 34 2e 32 20 2d 72 65 70 61 69 72 20 7b 0a 20 20  4.2 -repair {.  
a210: 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f 50 20  catchsql { DROP 
a220: 54 41 42 4c 45 20 74 35 20 7d 0a 7d 20 2d 74 63  TABLE t5 }.} -tc
a230: 6c 71 75 65 72 79 20 7b 0a 20 20 74 61 62 6c 65  lquery {.  table
a240: 5f 70 6b 20 74 35 0a 7d 20 7b 0a 20 20 31 2e 31  _pk t5.} {.  1.1
a250: 20 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c      "CREATE TABL
a260: 45 20 74 35 28 61 2c 20 62 20 49 4e 54 45 47 45  E t5(a, b INTEGE
a270: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 63  R PRIMARY KEY, c
a280: 29 22 20 20 20 20 20 20 20 7b 62 7d 0a 20 20 31  )"       {b}.  1
a290: 2e 32 20 20 20 20 22 43 52 45 41 54 45 20 54 41  .2    "CREATE TA
a2a0: 42 4c 45 20 74 35 28 61 20 50 52 49 4d 41 52 59  BLE t5(a PRIMARY
a2b0: 20 4b 45 59 2c 20 62 2c 20 63 29 22 20 20 20 20   KEY, b, c)"    
a2c0: 20 20 20 20 20 20 20 20 20 20 20 7b 61 7d 0a 0a             {a}..
a2d0: 20 20 32 2e 31 20 20 20 20 22 43 52 45 41 54 45    2.1    "CREATE
a2e0: 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62 2c 20   TABLE t5(a, b, 
a2f0: 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59 28 61  c, PRIMARY KEY(a
a300: 29 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 61  ))"           {a
a310: 7d 0a 20 20 32 2e 32 20 20 20 20 22 43 52 45 41  }.  2.2    "CREA
a320: 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20 62  TE TABLE t5(a, b
a330: 2c 20 63 2c 20 50 52 49 4d 41 52 59 20 4b 45 59  , c, PRIMARY KEY
a340: 28 63 2c 62 2c 61 29 29 22 20 20 20 20 20 20 20  (c,b,a))"       
a350: 7b 61 20 62 20 63 7d 0a 20 20 32 2e 33 20 20 20  {a b c}.  2.3   
a360: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
a370: 35 28 61 2c 20 62 20 49 4e 54 45 47 45 52 20 50  5(a, b INTEGER P
a380: 52 49 4d 41 52 59 20 4b 45 59 2c 20 63 29 22 20  RIMARY KEY, c)" 
a390: 20 20 20 20 20 20 7b 62 7d 0a 7d 0a 0a 23 20 45        {b}.}..# E
a3a0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 33  VIDENCE-OF: R-33
a3b0: 39 38 36 2d 30 39 34 31 30 20 45 61 63 68 20 72  986-09410 Each r
a3c0: 6f 77 20 69 6e 20 61 20 74 61 62 6c 65 20 77 69  ow in a table wi
a3d0: 74 68 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79  th a primary key
a3e0: 20 6d 75 73 74 0a 23 20 66 65 61 74 75 72 65 20   must.# feature 
a3f0: 61 20 75 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61  a unique combina
a400: 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 69  tion of values i
a410: 6e 20 69 74 73 20 70 72 69 6d 61 72 79 20 6b 65  n its primary ke
a420: 79 20 63 6f 6c 75 6d 6e 73 2e 0a 23 0a 23 20 45  y columns..#.# E
a430: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 39  VIDENCE-OF: R-39
a440: 31 30 32 2d 30 36 37 33 37 20 49 66 20 61 6e 20  102-06737 If an 
a450: 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
a460: 20 73 74 61 74 65 6d 65 6e 74 20 61 74 74 65 6d   statement attem
a470: 70 74 73 0a 23 20 74 6f 20 6d 6f 64 69 66 79 20  pts.# to modify 
a480: 74 68 65 20 74 61 62 6c 65 20 63 6f 6e 74 65 6e  the table conten
a490: 74 20 73 6f 20 74 68 61 74 20 74 77 6f 20 6f 72  t so that two or
a4a0: 20 6d 6f 72 65 20 72 6f 77 73 20 66 65 61 74 75   more rows featu
a4b0: 72 65 20 69 64 65 6e 74 69 63 61 6c 0a 23 20 70  re identical.# p
a4c0: 72 69 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65  rimary key value
a4d0: 73 2c 20 69 74 20 69 73 20 61 20 63 6f 6e 73 74  s, it is a const
a4e0: 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 2e  raint violation.
a4f0: 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c  .#.drop_all_tabl
a500: 65 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  es.do_execsql_te
a510: 73 74 20 34 2e 33 2e 30 20 7b 0a 20 20 43 52 45  st 4.3.0 {.  CRE
a520: 41 54 45 20 54 41 42 4c 45 20 74 31 28 78 20 50  ATE TABLE t1(x P
a530: 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29 3b 0a  RIMARY KEY, y);.
a540: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
a550: 20 56 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20   VALUES(0,      
a560: 20 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49      'zero');.  I
a570: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
a580: 4c 55 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20  LUES(45.5,      
a590: 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52   'one');.  INSER
a5a0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
a5b0: 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77  ('brambles', 'tw
a5c0: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
a5d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 58 27 41  TO t1 VALUES(X'A
a5e0: 42 43 44 45 46 27 2c 20 20 27 74 68 72 65 65 27  BCDEF',  'three'
a5f0: 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42  );..  CREATE TAB
a600: 4c 45 20 74 32 28 78 2c 20 79 2c 20 50 52 49 4d  LE t2(x, y, PRIM
a610: 41 52 59 20 4b 45 59 28 78 2c 20 79 29 29 3b 0a  ARY KEY(x, y));.
a620: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
a630: 20 56 41 4c 55 45 53 28 30 2c 20 20 20 20 20 20   VALUES(0,      
a640: 20 20 20 20 27 7a 65 72 6f 27 29 3b 0a 20 20 49      'zero');.  I
a650: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
a660: 4c 55 45 53 28 34 35 2e 35 2c 20 20 20 20 20 20  LUES(45.5,      
a670: 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52   'one');.  INSER
a680: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
a690: 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 27 74 77  ('brambles', 'tw
a6a0: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
a6b0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58 27 41  TO t2 VALUES(X'A
a6c0: 42 43 44 45 46 27 2c 20 20 27 74 68 72 65 65 27  BCDEF',  'three'
a6d0: 29 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 63 72 65 61  );.} {}..do_crea
a6e0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
a6f0: 33 2e 31 20 2d 65 72 72 6f 72 20 7b 20 25 73 20  3.1 -error { %s 
a700: 6e 6f 74 20 75 6e 69 71 75 65 20 7d 20 7b 0a 20  not unique } {. 
a710: 20 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   1    "INSERT IN
a720: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 30 2c 20  TO t1 VALUES(0, 
a730: 30 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  0)"             
a740: 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69      {"column x i
a750: 73 22 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45  s"}.  2    "INSE
a760: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
a770: 53 28 34 35 2e 35 2c 20 27 61 62 63 27 29 22 20  S(45.5, 'abc')" 
a780: 20 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d           {"colum
a790: 6e 20 78 20 69 73 22 7d 0a 20 20 33 20 20 20 20  n x is"}.  3    
a7a0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
a7b0: 56 41 4c 55 45 53 28 30 2e 30 2c 20 27 61 62 63  VALUES(0.0, 'abc
a7c0: 27 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 22  ')"           {"
a7d0: 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20  column x is"}.  
a7e0: 34 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  4    "INSERT INT
a7f0: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 62 72 61  O t1 VALUES('bra
a800: 6d 62 6c 65 73 27 2c 20 27 61 62 63 27 29 22 20  mbles', 'abc')" 
a810: 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73     {"column x is
a820: 22 7d 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52  "}.  5    "INSER
a830: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
a840: 28 58 27 41 42 43 44 45 46 27 2c 20 27 61 62 63  (X'ABCDEF', 'abc
a850: 27 29 22 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e  ')"     {"column
a860: 20 78 20 69 73 22 7d 0a 0a 20 20 36 20 20 20 20   x is"}..  6    
a870: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20  "INSERT INTO t2 
a880: 56 41 4c 55 45 53 28 30 2c 20 27 7a 65 72 6f 27  VALUES(0, 'zero'
a890: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 7b 22  )"            {"
a8a0: 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65  columns x, y are
a8b0: 22 7d 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52  "}.  7    "INSER
a8c0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
a8d0: 28 34 35 2e 35 2c 20 27 6f 6e 65 27 29 22 20 20  (45.5, 'one')"  
a8e0: 20 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e          {"column
a8f0: 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 38  s x, y are"}.  8
a900: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
a910: 20 74 32 20 56 41 4c 55 45 53 28 30 2e 30 2c 20   t2 VALUES(0.0, 
a920: 27 7a 65 72 6f 27 29 22 20 20 20 20 20 20 20 20  'zero')"        
a930: 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20 79    {"columns x, y
a940: 20 61 72 65 22 7d 0a 20 20 39 20 20 20 20 22 49   are"}.  9    "I
a950: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
a960: 4c 55 45 53 28 27 62 72 61 6d 62 6c 65 73 27 2c  LUES('brambles',
a970: 20 27 74 77 6f 27 29 22 20 20 20 20 7b 22 63 6f   'two')"    {"co
a980: 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65 22 7d  lumns x, y are"}
a990: 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52 54 20  .  10   "INSERT 
a9a0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 58  INTO t2 VALUES(X
a9b0: 27 41 42 43 44 45 46 27 2c 20 27 74 68 72 65 65  'ABCDEF', 'three
a9c0: 27 29 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20  ')"   {"columns 
a9d0: 78 2c 20 79 20 61 72 65 22 7d 0a 7d 0a 64 6f 5f  x, y are"}.}.do_
a9e0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
a9f0: 73 20 34 2e 33 2e 32 20 7b 0a 20 20 31 20 20 20  s 4.3.2 {.  1   
aa00: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
aa10: 20 56 41 4c 55 45 53 28 2d 31 2c 20 30 29 22 20   VALUES(-1, 0)" 
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
aa30: 7d 0a 20 20 32 20 20 20 20 22 49 4e 53 45 52 54  }.  2    "INSERT
aa40: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
aa50: 34 35 2e 32 2c 20 27 61 62 63 27 29 22 20 20 20  45.2, 'abc')"   
aa60: 20 20 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20         {}.  3   
aa70: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
aa80: 20 56 41 4c 55 45 53 28 30 2e 30 31 2c 20 27 61   VALUES(0.01, 'a
aa90: 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20 7b  bc')"          {
aaa0: 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54  }.  4    "INSERT
aab0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
aac0: 27 62 72 61 6d 62 6c 65 27 2c 20 27 61 62 63 27  'bramble', 'abc'
aad0: 29 22 20 20 20 20 20 7b 7d 0a 20 20 35 20 20 20  )"     {}.  5   
aae0: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
aaf0: 20 56 41 4c 55 45 53 28 58 27 41 42 43 44 45 45   VALUES(X'ABCDEE
ab00: 27 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 7b  ', 'abc')"     {
ab10: 7d 0a 0a 20 20 36 20 20 20 20 22 49 4e 53 45 52  }..  6    "INSER
ab20: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
ab30: 28 30 2c 20 30 29 22 20 20 20 20 20 20 20 20 20  (0, 0)"         
ab40: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 37 20 20          {}.  7  
ab50: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
ab60: 32 20 56 41 4c 55 45 53 28 34 35 2e 35 2c 20 27  2 VALUES(45.5, '
ab70: 61 62 63 27 29 22 20 20 20 20 20 20 20 20 20 20  abc')"          
ab80: 7b 7d 0a 20 20 38 20 20 20 20 22 49 4e 53 45 52  {}.  8    "INSER
ab90: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
aba0: 28 30 2e 30 2c 20 27 61 62 63 27 29 22 20 20 20  (0.0, 'abc')"   
abb0: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 39 20 20          {}.  9  
abc0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
abd0: 32 20 56 41 4c 55 45 53 28 27 62 72 61 6d 62 6c  2 VALUES('brambl
abe0: 65 73 27 2c 20 27 61 62 63 27 29 22 20 20 20 20  es', 'abc')"    
abf0: 7b 7d 0a 20 20 31 30 20 20 20 22 49 4e 53 45 52  {}.  10   "INSER
ac00: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
ac10: 28 58 27 41 42 43 44 45 46 27 2c 20 27 61 62 63  (X'ABCDEF', 'abc
ac20: 27 29 22 20 20 20 20 20 7b 7d 0a 7d 0a 64 6f 5f  ')"     {}.}.do_
ac30: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
ac40: 73 20 34 2e 33 2e 33 20 2d 65 72 72 6f 72 20 7b  s 4.3.3 -error {
ac50: 20 25 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d   %s not unique }
ac60: 20 7b 0a 20 20 31 20 20 20 20 22 55 50 44 41 54   {.  1    "UPDAT
ac70: 45 20 74 31 20 53 45 54 20 78 3d 30 20 20 20 20  E t1 SET x=0    
ac80: 20 20 20 20 20 20 20 57 48 45 52 45 20 79 3d 27         WHERE y='
ac90: 74 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d  two'"    {"colum
aca0: 6e 20 78 20 69 73 22 7d 0a 20 20 32 20 20 20 20  n x is"}.  2    
acb0: 22 55 50 44 41 54 45 20 74 31 20 53 45 54 20 78  "UPDATE t1 SET x
acc0: 3d 27 62 72 61 6d 62 6c 65 73 27 20 20 57 48 45  ='brambles'  WHE
acd0: 52 45 20 79 3d 27 74 68 72 65 65 27 22 20 20 7b  RE y='three'"  {
ace0: 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d 0a 20  "column x is"}. 
acf0: 20 33 20 20 20 20 22 55 50 44 41 54 45 20 74 31   3    "UPDATE t1
ad00: 20 53 45 54 20 78 3d 34 35 2e 35 20 20 20 20 20   SET x=45.5     
ad10: 20 20 20 57 48 45 52 45 20 79 3d 27 7a 65 72 6f     WHERE y='zero
ad20: 27 22 20 20 20 7b 22 63 6f 6c 75 6d 6e 20 78 20  '"   {"column x 
ad30: 69 73 22 7d 0a 20 20 34 20 20 20 20 22 55 50 44  is"}.  4    "UPD
ad40: 41 54 45 20 74 31 20 53 45 54 20 78 3d 58 27 41  ATE t1 SET x=X'A
ad50: 42 43 44 45 46 27 20 20 20 57 48 45 52 45 20 79  BCDEF'   WHERE y
ad60: 3d 27 6f 6e 65 27 22 20 20 20 20 7b 22 63 6f 6c  ='one'"    {"col
ad70: 75 6d 6e 20 78 20 69 73 22 7d 0a 20 20 35 20 20  umn x is"}.  5  
ad80: 20 20 22 55 50 44 41 54 45 20 74 31 20 53 45 54    "UPDATE t1 SET
ad90: 20 78 3d 30 2e 30 20 20 20 20 20 20 20 20 20 57   x=0.0         W
ada0: 48 45 52 45 20 79 3d 27 74 68 72 65 65 27 22 20  HERE y='three'" 
adb0: 20 7b 22 63 6f 6c 75 6d 6e 20 78 20 69 73 22 7d   {"column x is"}
adc0: 0a 0a 20 20 36 20 20 20 20 22 55 50 44 41 54 45  ..  6    "UPDATE
add0: 20 74 32 20 53 45 54 20 78 3d 30 2c 20 79 3d 27   t2 SET x=0, y='
ade0: 7a 65 72 6f 27 20 57 48 45 52 45 20 79 3d 27 74  zero' WHERE y='t
adf0: 77 6f 27 22 20 20 20 20 7b 22 63 6f 6c 75 6d 6e  wo'"    {"column
ae00: 73 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 37  s x, y are"}.  7
ae10: 20 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53      "UPDATE t2 S
ae20: 45 54 20 78 3d 27 62 72 61 6d 62 6c 65 73 27 2c  ET x='brambles',
ae30: 20 79 3d 27 74 77 6f 27 20 57 48 45 52 45 20 79   y='two' WHERE y
ae40: 3d 27 74 68 72 65 65 27 22 20 20 0a 20 20 20 20  ='three'"  .    
ae50: 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20     {"columns x, 
ae60: 79 20 61 72 65 22 7d 0a 20 20 38 20 20 20 20 22  y are"}.  8    "
ae70: 55 50 44 41 54 45 20 74 32 20 53 45 54 20 78 3d  UPDATE t2 SET x=
ae80: 34 35 2e 35 2c 20 79 3d 27 6f 6e 65 27 20 57 48  45.5, y='one' WH
ae90: 45 52 45 20 79 3d 27 7a 65 72 6f 27 22 20 7b 22  ERE y='zero'" {"
aea0: 63 6f 6c 75 6d 6e 73 20 78 2c 20 79 20 61 72 65  columns x, y are
aeb0: 22 7d 0a 20 20 39 20 20 20 20 22 55 50 44 41 54  "}.  9    "UPDAT
aec0: 45 20 74 32 20 53 45 54 20 78 3d 58 27 41 42 43  E t2 SET x=X'ABC
aed0: 44 45 46 27 2c 20 79 3d 27 74 68 72 65 65 27 20  DEF', y='three' 
aee0: 57 48 45 52 45 20 79 3d 27 6f 6e 65 27 22 20 0a  WHERE y='one'" .
aef0: 20 20 20 20 20 20 20 7b 22 63 6f 6c 75 6d 6e 73         {"columns
af00: 20 78 2c 20 79 20 61 72 65 22 7d 0a 20 20 31 30   x, y are"}.  10
af10: 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45     "UPDATE t2 SE
af20: 54 20 78 3d 30 2e 30 2c 20 79 3d 27 7a 65 72 6f  T x=0.0, y='zero
af30: 27 20 20 20 20 20 20 20 20 57 48 45 52 45 20 79  '        WHERE y
af40: 3d 27 74 68 72 65 65 27 22 20 20 0a 20 20 20 20  ='three'"  .    
af50: 20 20 20 7b 22 63 6f 6c 75 6d 6e 73 20 78 2c 20     {"columns x, 
af60: 79 20 61 72 65 22 7d 0a 7d 0a 0a 0a 23 20 45 56  y are"}.}...# EV
af70: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35  IDENCE-OF: R-525
af80: 37 32 2d 30 32 30 37 38 20 46 6f 72 20 74 68 65  72-02078 For the
af90: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 65 74   purposes of det
afa0: 65 72 6d 69 6e 69 6e 67 20 74 68 65 0a 23 20 75  ermining the.# u
afb0: 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 72 69  niqueness of pri
afc0: 6d 61 72 79 20 6b 65 79 20 76 61 6c 75 65 73 2c  mary key values,
afd0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65   NULL values are
afe0: 20 63 6f 6e 73 69 64 65 72 65 64 20 64 69 73 74   considered dist
aff0: 69 6e 63 74 0a 23 20 66 72 6f 6d 20 61 6c 6c 20  inct.# from all 
b000: 6f 74 68 65 72 20 76 61 6c 75 65 73 2c 20 69 6e  other values, in
b010: 63 6c 75 64 69 6e 67 20 6f 74 68 65 72 20 4e 55  cluding other NU
b020: 4c 4c 73 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65  LLs..#.do_create
b030: 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e 34 20  table_tests 4.4 
b040: 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54  {.  1    "INSERT
b050: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
b060: 4e 55 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20  NULL, 0)"       
b070: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
b080: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
b090: 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 30 29   VALUES(NULL, 0)
b0a0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  "              {
b0b0: 7d 0a 20 20 33 20 20 20 20 22 49 4e 53 45 52 54  }.  3    "INSERT
b0c0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
b0d0: 4e 55 4c 4c 2c 20 30 29 22 20 20 20 20 20 20 20  NULL, 0)"       
b0e0: 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 34 20 20         {}..  4  
b0f0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b100: 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27  2 VALUES(NULL, '
b110: 7a 65 72 6f 27 29 22 20 20 20 20 20 20 20 20 20  zero')"         
b120: 7b 7d 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52  {}.  5    "INSER
b130: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
b140: 28 4e 55 4c 4c 2c 20 27 6f 6e 65 27 29 22 20 20  (NULL, 'one')"  
b150: 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 36 20 20          {}.  6  
b160: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
b170: 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 27  2 VALUES(NULL, '
b180: 74 77 6f 27 29 22 20 20 20 20 20 20 20 20 20 20  two')"          
b190: 7b 7d 0a 20 20 37 20 20 20 20 22 49 4e 53 45 52  {}.  7    "INSER
b1a0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
b1b0: 28 4e 55 4c 4c 2c 20 27 74 68 72 65 65 27 29 22  (NULL, 'three')"
b1c0: 20 20 20 20 20 20 20 20 7b 7d 0a 0a 20 20 38 20          {}..  8 
b1d0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
b1e0: 74 32 20 56 41 4c 55 45 53 28 30 2c 20 4e 55 4c  t2 VALUES(0, NUL
b1f0: 4c 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  L)"             
b200: 20 7b 7d 0a 20 20 39 20 20 20 20 22 49 4e 53 45   {}.  9    "INSE
b210: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
b220: 53 28 34 35 2e 35 2c 20 4e 55 4c 4c 29 22 20 20  S(45.5, NULL)"  
b230: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31 30           {}.  10
b240: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
b250: 74 32 20 56 41 4c 55 45 53 28 30 2e 30 2c 20 4e  t2 VALUES(0.0, N
b260: 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20 20 20  ULL)"           
b270: 20 7b 7d 0a 20 20 31 31 20 20 20 22 49 4e 53 45   {}.  11   "INSE
b280: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
b290: 53 28 27 62 72 61 6d 62 6c 65 73 27 2c 20 4e 55  S('brambles', NU
b2a0: 4c 4c 29 22 20 20 20 20 20 7b 7d 0a 20 20 31 32  LL)"     {}.  12
b2b0: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
b2c0: 74 32 20 56 41 4c 55 45 53 28 58 27 41 42 43 44  t2 VALUES(X'ABCD
b2d0: 45 46 27 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20  EF', NULL)"     
b2e0: 20 7b 7d 0a 0a 20 20 31 33 20 20 20 22 49 4e 53   {}..  13   "INS
b2f0: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
b300: 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 22 20  ES(NULL, NULL)" 
b310: 20 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 31            {}.  1
b320: 34 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  4   "INSERT INTO
b330: 20 74 32 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c   t2 VALUES(NULL,
b340: 20 4e 55 4c 4c 29 22 20 20 20 20 20 20 20 20 20   NULL)"         
b350: 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e    {}.}..# EVIDEN
b360: 43 45 2d 4f 46 3a 20 52 2d 36 31 38 36 36 2d 33  CE-OF: R-61866-3
b370: 38 30 35 33 20 55 6e 6c 65 73 73 20 74 68 65 20  8053 Unless the 
b380: 63 6f 6c 75 6d 6e 20 69 73 20 61 6e 20 49 4e 54  column is an INT
b390: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
b3a0: 0a 23 20 53 51 4c 69 74 65 20 61 6c 6c 6f 77 73  .# SQLite allows
b3b0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 69 6e 20   NULL values in 
b3c0: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 20 63 6f  a PRIMARY KEY co
b3d0: 6c 75 6d 6e 2e 0a 23 0a 23 20 20 20 20 20 49 66  lumn..#.#     If
b3e0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 73 20 61   the column is a
b3f0: 6e 20 69 6e 74 65 67 65 72 20 70 72 69 6d 61 72  n integer primar
b400: 79 20 6b 65 79 2c 20 61 74 74 65 6d 70 74 69 6e  y key, attemptin
b410: 67 20 74 6f 20 69 6e 73 65 72 74 20 61 20 4e 55  g to insert a NU
b420: 4c 4c 0a 23 20 20 20 20 20 69 6e 74 6f 20 74 68  LL.#     into th
b430: 65 20 63 6f 6c 75 6d 6e 20 74 72 69 67 67 65 72  e column trigger
b440: 73 20 74 68 65 20 61 75 74 6f 2d 69 6e 63 72 65  s the auto-incre
b450: 6d 65 6e 74 20 62 65 68 61 76 69 6f 75 72 2e 20  ment behaviour. 
b460: 41 74 74 65 6d 70 74 69 6e 67 0a 23 20 20 20 20  Attempting.#    
b470: 20 74 6f 20 75 73 65 20 55 50 44 41 54 45 20 74   to use UPDATE t
b480: 6f 20 73 65 74 20 61 6e 20 69 70 6b 20 63 6f 6c  o set an ipk col
b490: 75 6d 6e 20 74 6f 20 61 20 4e 55 4c 4c 20 76 61  umn to a NULL va
b4a0: 6c 75 65 20 69 73 20 61 6e 20 65 72 72 6f 72 2e  lue is an error.
b4b0: 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
b4c0: 65 5f 74 65 73 74 73 20 34 2e 35 2e 31 20 7b 0a  e_tests 4.5.1 {.
b4d0: 20 20 31 20 20 20 20 22 53 45 4c 45 43 54 20 63    1    "SELECT c
b4e0: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
b4f0: 57 48 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 22  WHERE x IS NULL"
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b510: 20 20 20 33 0a 20 20 32 20 20 20 20 22 53 45 4c     3.  2    "SEL
b520: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
b530: 4d 20 74 32 20 57 48 45 52 45 20 78 20 49 53 20  M t2 WHERE x IS 
b540: 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20 20 20  NULL"           
b550: 20 20 20 20 20 20 20 20 36 0a 20 20 33 20 20 20          6.  3   
b560: 20 22 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   "SELECT count(*
b570: 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  ) FROM t2 WHERE 
b580: 79 20 49 53 20 4e 55 4c 4c 22 20 20 20 20 20 20  y IS NULL"      
b590: 20 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 20               7. 
b5a0: 20 34 20 20 20 20 22 53 45 4c 45 43 54 20 63 6f   4    "SELECT co
b5b0: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 32 20 57  unt(*) FROM t2 W
b5c0: 48 45 52 45 20 78 20 49 53 20 4e 55 4c 4c 20 41  HERE x IS NULL A
b5d0: 4e 44 20 79 20 49 53 20 4e 55 4c 4c 22 20 20 20  ND y IS NULL"   
b5e0: 20 20 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c    2.}.do_execsql
b5f0: 5f 74 65 73 74 20 34 2e 35 2e 32 20 7b 0a 20 20  _test 4.5.2 {.  
b600: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
b610: 73 2c 20 75 20 49 4e 54 45 47 45 52 20 50 52 49  s, u INTEGER PRI
b620: 4d 41 52 59 20 4b 45 59 2c 20 76 29 3b 0a 20 20  MARY KEY, v);.  
b630: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
b640: 41 4c 55 45 53 28 31 2c 20 4e 55 4c 4c 2c 20 32  ALUES(1, NULL, 2
b650: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
b660: 20 74 33 20 56 41 4c 55 45 53 28 27 78 27 2c 20   t3 VALUES('x', 
b670: 4e 55 4c 4c 2c 20 27 79 27 29 3b 0a 20 20 53 45  NULL, 'y');.  SE
b680: 4c 45 43 54 20 75 20 46 52 4f 4d 20 74 33 3b 0a  LECT u FROM t3;.
b690: 7d 20 7b 31 20 32 7d 0a 64 6f 5f 63 61 74 63 68  } {1 2}.do_catch
b6a0: 73 71 6c 5f 74 65 73 74 20 34 2e 35 2e 33 20 7b  sql_test 4.5.3 {
b6b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
b6c0: 33 20 56 41 4c 55 45 53 28 32 2c 20 35 2c 20 33  3 VALUES(2, 5, 3
b6d0: 29 3b 0a 20 20 55 50 44 41 54 45 20 74 33 20 53  );.  UPDATE t3 S
b6e0: 45 54 20 75 20 3d 20 4e 55 4c 4c 20 57 48 45 52  ET u = NULL WHER
b6f0: 45 20 73 20 3d 20 32 3b 0a 7d 20 7b 31 20 7b 64  E s = 2;.} {1 {d
b700: 61 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68  atatype mismatch
b710: 7d 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  }}..# EVIDENCE-O
b720: 46 3a 20 52 2d 30 30 32 32 37 2d 32 31 30 38 30  F: R-00227-21080
b730: 20 41 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72   A UNIQUE constr
b740: 61 69 6e 74 20 69 73 20 73 69 6d 69 6c 61 72 20  aint is similar 
b750: 74 6f 20 61 20 50 52 49 4d 41 52 59 0a 23 20 4b  to a PRIMARY.# K
b760: 45 59 20 63 6f 6e 73 74 72 61 69 6e 74 2c 20 65  EY constraint, e
b770: 78 63 65 70 74 20 74 68 61 74 20 61 20 73 69 6e  xcept that a sin
b780: 67 6c 65 20 74 61 62 6c 65 20 6d 61 79 20 68 61  gle table may ha
b790: 76 65 20 61 6e 79 20 6e 75 6d 62 65 72 20 6f 66  ve any number of
b7a0: 0a 23 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  .# UNIQUE constr
b7b0: 61 69 6e 74 73 2e 0a 23 0a 64 72 6f 70 5f 61 6c  aints..#.drop_al
b7c0: 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 63 72 65 61  l_tables.do_crea
b7d0: 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 34 2e  tetable_tests 4.
b7e0: 36 20 7b 0a 20 20 31 20 20 20 20 22 43 52 45 41  6 {.  1    "CREA
b7f0: 54 45 20 54 41 42 4c 45 20 74 31 28 61 20 55 4e  TE TABLE t1(a UN
b800: 49 51 55 45 2c 20 62 20 55 4e 49 51 55 45 29 22  IQUE, b UNIQUE)"
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
b830: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
b840: 32 28 61 20 55 4e 49 51 55 45 2c 20 62 2c 20 63  2(a UNIQUE, b, c
b850: 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29 29 22  , UNIQUE(c, b))"
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
b870: 20 20 33 20 20 20 20 22 43 52 45 41 54 45 20 54    3    "CREATE T
b880: 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 2c  ABLE t3(a, b, c,
b890: 20 55 4e 49 51 55 45 28 61 29 2c 20 55 4e 49 51   UNIQUE(a), UNIQ
b8a0: 55 45 28 62 29 2c 20 55 4e 49 51 55 45 28 63 29  UE(b), UNIQUE(c)
b8b0: 29 22 20 7b 7d 0a 20 20 34 20 20 20 20 22 43 52  )" {}.  4    "CR
b8c0: 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c  EATE TABLE t4(a,
b8d0: 20 62 2c 20 63 2c 20 55 4e 49 51 55 45 28 61 2c   b, c, UNIQUE(a,
b8e0: 20 62 2c 20 63 29 29 22 20 20 20 20 20 20 20 20   b, c))"        
b8f0: 20 20 20 20 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23           {}.}..#
b900: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
b910: 35 35 32 34 30 2d 35 38 38 37 37 20 46 6f 72 20  55240-58877 For 
b920: 65 61 63 68 20 55 4e 49 51 55 45 20 63 6f 6e 73  each UNIQUE cons
b930: 74 72 61 69 6e 74 20 6f 6e 20 74 68 65 20 74 61  traint on the ta
b940: 62 6c 65 2c 0a 23 20 65 61 63 68 20 72 6f 77 20  ble,.# each row 
b950: 6d 75 73 74 20 66 65 61 74 75 72 65 20 61 20 75  must feature a u
b960: 6e 69 71 75 65 20 63 6f 6d 62 69 6e 61 74 69 6f  nique combinatio
b970: 6e 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  n of values in t
b980: 68 65 20 63 6f 6c 75 6d 6e 73 0a 23 20 69 64 65  he columns.# ide
b990: 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20 55  ntified by the U
b9a0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
b9b0: 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..#.# EVIDENCE-O
b9c0: 46 3a 20 52 2d 34 37 37 33 33 2d 35 31 34 38 30  F: R-47733-51480
b9d0: 20 49 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   If an INSERT or
b9e0: 20 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e   UPDATE statemen
b9f0: 74 20 61 74 74 65 6d 70 74 73 0a 23 20 74 6f 20  t attempts.# to 
ba00: 6d 6f 64 69 66 79 20 74 68 65 20 74 61 62 6c 65  modify the table
ba10: 20 63 6f 6e 74 65 6e 74 20 73 6f 20 74 68 61 74   content so that
ba20: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 72 6f 77   two or more row
ba30: 73 20 66 65 61 74 75 72 65 20 69 64 65 6e 74 69  s feature identi
ba40: 63 61 6c 0a 23 20 76 61 6c 75 65 73 20 69 6e 20  cal.# values in 
ba50: 61 20 73 65 74 20 6f 66 20 63 6f 6c 75 6d 6e 73  a set of columns
ba60: 20 74 68 61 74 20 61 72 65 20 73 75 62 6a 65 63   that are subjec
ba70: 74 20 74 6f 20 61 20 55 4e 49 51 55 45 20 63 6f  t to a UNIQUE co
ba80: 6e 73 74 72 61 69 6e 74 2c 20 69 74 0a 23 20 69  nstraint, it.# i
ba90: 73 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  s a constraint v
baa0: 69 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 65  iolation..#.do_e
bab0: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 37 2e  xecsql_test 4.7.
bac0: 30 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  0 {.  INSERT INT
bad0: 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 20 32  O t1 VALUES(1, 2
bae0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
baf0: 20 74 31 20 56 41 4c 55 45 53 28 34 2e 33 2c 20   t1 VALUES(4.3, 
bb00: 35 2e 35 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  5.5);.  INSERT I
bb10: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 72  NTO t1 VALUES('r
bb20: 65 76 65 61 6c 27 2c 20 27 76 61 72 69 61 62 6c  eveal', 'variabl
bb30: 65 6e 65 73 73 27 29 3b 0a 20 20 49 4e 53 45 52  eness');.  INSER
bb40: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
bb50: 28 58 27 31 32 33 34 35 36 27 2c 20 58 27 36 35  (X'123456', X'65
bb60: 34 33 32 31 27 29 3b 0a 0a 20 20 49 4e 53 45 52  4321');..  INSER
bb70: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
bb80: 28 27 78 79 78 27 2c 20 31 2c 20 31 29 3b 0a 20  ('xyx', 1, 1);. 
bb90: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
bba0: 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32 2c  VALUES('xyx', 2,
bbb0: 20 31 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   1);.  INSERT IN
bbc0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 75 76  TO t4 VALUES('uv
bbd0: 77 27 2c 20 31 2c 20 31 29 3b 0a 7d 0a 64 6f 5f  w', 1, 1);.}.do_
bbe0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
bbf0: 73 20 34 2e 37 2e 31 20 2d 65 72 72 6f 72 20 7b  s 4.7.1 -error {
bc00: 20 25 73 20 6e 6f 74 20 75 6e 69 71 75 65 20 7d   %s not unique }
bc10: 20 7b 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52   {.  1    "INSER
bc20: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
bc30: 28 31 2c 20 27 6f 6e 65 27 29 22 20 20 20 20 20  (1, 'one')"     
bc40: 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e          {{column
bc50: 20 61 20 69 73 7d 7d 0a 20 20 32 20 20 20 20 22   a is}}.  2    "
bc60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
bc70: 41 4c 55 45 53 28 34 2e 33 2c 20 27 74 77 6f 27  ALUES(4.3, 'two'
bc80: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63  )"           {{c
bc90: 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 33  olumn a is}}.  3
bca0: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
bcb0: 20 74 31 20 56 41 4c 55 45 53 28 27 72 65 76 65   t1 VALUES('reve
bcc0: 61 6c 27 2c 20 27 74 68 72 65 65 27 29 22 20 20  al', 'three')"  
bcd0: 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d    {{column a is}
bce0: 7d 0a 20 20 34 20 20 20 20 22 49 4e 53 45 52 54  }.  4    "INSERT
bcf0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
bd00: 58 27 31 32 33 34 35 36 27 2c 20 27 66 6f 75 72  X'123456', 'four
bd10: 27 29 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20  ')"    {{column 
bd20: 61 20 69 73 7d 7d 0a 0a 20 20 35 20 20 20 20 22  a is}}..  5    "
bd30: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
bd40: 3d 20 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d  = 1 WHERE rowid=
bd50: 32 22 20 20 20 20 20 20 20 20 20 20 20 7b 7b 63  2"           {{c
bd60: 6f 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 20 20 36  olumn a is}}.  6
bd70: 20 20 20 20 22 55 50 44 41 54 45 20 74 31 20 53      "UPDATE t1 S
bd80: 45 54 20 61 20 3d 20 34 2e 33 20 57 48 45 52 45  ET a = 4.3 WHERE
bd90: 20 72 6f 77 69 64 3d 33 22 20 20 20 20 20 20 20   rowid=3"       
bda0: 20 20 7b 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 7d    {{column a is}
bdb0: 7d 0a 20 20 37 20 20 20 20 22 55 50 44 41 54 45  }.  7    "UPDATE
bdc0: 20 74 31 20 53 45 54 20 61 20 3d 20 27 72 65 76   t1 SET a = 'rev
bdd0: 65 61 6c 27 20 57 48 45 52 45 20 72 6f 77 69 64  eal' WHERE rowid
bde0: 3d 34 22 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 20  =4"    {{column 
bdf0: 61 20 69 73 7d 7d 0a 20 20 38 20 20 20 20 22 55  a is}}.  8    "U
be00: 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20 3d  PDATE t1 SET a =
be10: 20 58 27 31 32 33 34 35 36 27 20 57 48 45 52 45   X'123456' WHERE
be20: 20 72 6f 77 69 64 3d 31 22 20 20 20 7b 7b 63 6f   rowid=1"   {{co
be30: 6c 75 6d 6e 20 61 20 69 73 7d 7d 0a 0a 20 20 39  lumn a is}}..  9
be40: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
be50: 20 74 34 20 56 41 4c 55 45 53 28 27 78 79 78 27   t4 VALUES('xyx'
be60: 2c 20 31 2c 20 31 29 22 20 20 20 20 20 20 20 20  , 1, 1)"        
be70: 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62    {{columns a, b
be80: 2c 20 63 20 61 72 65 7d 7d 0a 20 20 31 30 20 20  , c are}}.  10  
be90: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34   "INSERT INTO t4
bea0: 20 56 41 4c 55 45 53 28 27 78 79 78 27 2c 20 32   VALUES('xyx', 2
beb0: 2c 20 31 29 22 20 20 20 20 20 20 20 20 20 20 7b  , 1)"          {
bec0: 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 2c 20 63  {columns a, b, c
bed0: 20 61 72 65 7d 7d 0a 20 20 31 31 20 20 20 22 49   are}}.  11   "I
bee0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41  NSERT INTO t4 VA
bef0: 4c 55 45 53 28 27 75 76 77 27 2c 20 31 2c 20 31  LUES('uvw', 1, 1
bf00: 29 22 20 20 20 20 20 20 20 20 20 20 7b 7b 63 6f  )"          {{co
bf10: 6c 75 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61 72  lumns a, b, c ar
bf20: 65 7d 7d 0a 0a 20 20 31 32 20 20 20 22 55 50 44  e}}..  12   "UPD
bf30: 41 54 45 20 74 34 20 53 45 54 20 61 3d 27 78 79  ATE t4 SET a='xy
bf40: 78 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d 33  x' WHERE rowid=3
bf50: 22 20 20 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75  "         {{colu
bf60: 6d 6e 73 20 61 2c 20 62 2c 20 63 20 61 72 65 7d  mns a, b, c are}
bf70: 7d 0a 20 20 31 33 20 20 20 22 55 50 44 41 54 45  }.  13   "UPDATE
bf80: 20 74 34 20 53 45 54 20 62 3d 31 20 57 48 45 52   t4 SET b=1 WHER
bf90: 45 20 72 6f 77 69 64 3d 32 22 20 20 20 20 20 20  E rowid=2"      
bfa0: 20 20 20 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73         {{columns
bfb0: 20 61 2c 20 62 2c 20 63 20 61 72 65 7d 7d 0a 20   a, b, c are}}. 
bfc0: 20 31 34 20 20 20 22 55 50 44 41 54 45 20 74 34   14   "UPDATE t4
bfd0: 20 53 45 54 20 61 3d 30 2c 20 62 3d 30 2c 20 63   SET a=0, b=0, c
bfe0: 3d 30 22 20 20 20 20 20 20 20 20 20 20 20 20 20  =0"             
bff0: 20 20 20 20 7b 7b 63 6f 6c 75 6d 6e 73 20 61 2c      {{columns a,
c000: 20 62 2c 20 63 20 61 72 65 7d 7d 0a 7d 0a 0a 23   b, c are}}.}..#
c010: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
c020: 32 31 32 38 39 2d 31 31 35 35 39 20 41 73 20 77  21289-11559 As w
c030: 69 74 68 20 50 52 49 4d 41 52 59 20 4b 45 59 20  ith PRIMARY KEY 
c040: 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 66 6f 72  constraints, for
c050: 20 74 68 65 0a 23 20 70 75 72 70 6f 73 65 73 20   the.# purposes 
c060: 6f 66 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  of UNIQUE constr
c070: 61 69 6e 74 73 20 4e 55 4c 4c 20 76 61 6c 75 65  aints NULL value
c080: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
c090: 20 64 69 73 74 69 6e 63 74 0a 23 20 66 72 6f 6d   distinct.# from
c0a0: 20 61 6c 6c 20 6f 74 68 65 72 20 76 61 6c 75 65   all other value
c0b0: 73 20 28 69 6e 63 6c 75 64 69 6e 67 20 6f 74 68  s (including oth
c0c0: 65 72 20 4e 55 4c 4c 73 29 2e 0a 23 0a 64 6f 5f  er NULLs)..#.do_
c0d0: 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
c0e0: 73 20 34 2e 38 20 7b 0a 20 20 31 20 20 20 20 22  s 4.8 {.  1    "
c0f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56  INSERT INTO t1 V
c100: 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c  ALUES(NULL, NULL
c110: 29 22 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a  )"           {}.
c120: 20 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49    2    "INSERT I
c130: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55  NTO t1 VALUES(NU
c140: 4c 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 20  LL, NULL)"      
c150: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 22       {}.  3    "
c160: 55 50 44 41 54 45 20 74 31 20 53 45 54 20 61 20  UPDATE t1 SET a 
c170: 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20 20  = NULL"         
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 0a               {}.
c190: 20 20 34 20 20 20 20 22 55 50 44 41 54 45 20 74    4    "UPDATE t
c1a0: 31 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22 20  1 SET b = NULL" 
c1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1c0: 20 20 20 20 20 7b 7d 0a 0a 20 20 35 20 20 20 20       {}..  5    
c1d0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20  "INSERT INTO t4 
c1e0: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c  VALUES(NULL, NUL
c1f0: 4c 2c 20 4e 55 4c 4c 29 22 20 20 20 20 20 7b 7d  L, NULL)"     {}
c200: 0a 20 20 36 20 20 20 20 22 49 4e 53 45 52 54 20  .  6    "INSERT 
c210: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 4e  INTO t4 VALUES(N
c220: 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  ULL, NULL, NULL)
c230: 22 20 20 20 20 20 7b 7d 0a 20 20 37 20 20 20 20  "     {}.  7    
c240: 22 55 50 44 41 54 45 20 74 34 20 53 45 54 20 61  "UPDATE t4 SET a
c250: 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20   = NULL"        
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
c270: 0a 20 20 38 20 20 20 20 22 55 50 44 41 54 45 20  .  8    "UPDATE 
c280: 74 34 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 22  t4 SET b = NULL"
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 20 20 20 7b 7d 0a 20 20 39 20 20 20 20        {}.  9    
c2b0: 22 55 50 44 41 54 45 20 74 34 20 53 45 54 20 63  "UPDATE t4 SET c
c2c0: 20 3d 20 4e 55 4c 4c 22 20 20 20 20 20 20 20 20   = NULL"        
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d                {}
c2e0: 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
c2f0: 46 3a 20 52 2d 32 36 39 38 33 2d 32 36 33 37 37  F: R-26983-26377
c300: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
c310: 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 20 61 73 69   KEY columns asi
c320: 64 65 2c 20 62 6f 74 68 0a 23 20 55 4e 49 51 55  de, both.# UNIQU
c330: 45 20 61 6e 64 20 50 52 49 4d 41 52 59 20 4b 45  E and PRIMARY KE
c340: 59 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72  Y constraints ar
c350: 65 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  e implemented by
c360: 20 63 72 65 61 74 69 6e 67 20 61 6e 0a 23 20 69   creating an.# i
c370: 6e 64 65 78 20 69 6e 20 74 68 65 20 64 61 74 61  ndex in the data
c380: 62 61 73 65 20 28 69 6e 20 74 68 65 20 73 61 6d  base (in the sam
c390: 65 20 77 61 79 20 61 73 20 61 20 22 43 52 45 41  e way as a "CREA
c3a0: 54 45 20 55 4e 49 51 55 45 20 49 4e 44 45 58 22  TE UNIQUE INDEX"
c3b0: 0a 23 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75  .# statement wou
c3c0: 6c 64 29 2e 0a 64 6f 5f 63 72 65 61 74 65 74 61  ld)..do_createta
c3d0: 62 6c 65 5f 74 65 73 74 73 20 34 2e 39 20 2d 72  ble_tests 4.9 -r
c3e0: 65 70 61 69 72 20 64 72 6f 70 5f 61 6c 6c 5f 74  epair drop_all_t
c3f0: 61 62 6c 65 73 20 2d 71 75 65 72 79 20 7b 0a 20  ables -query {. 
c400: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
c410: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
c420: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 3d 27  ter WHERE type='
c430: 69 6e 64 65 78 27 0a 7d 20 7b 0a 20 20 31 20 20  index'.} {.  1  
c440: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
c450: 74 31 28 61 20 54 45 58 54 20 50 52 49 4d 41 52  t1(a TEXT PRIMAR
c460: 59 20 4b 45 59 2c 20 62 29 22 20 20 20 20 20 20  Y KEY, b)"      
c470: 20 20 20 20 20 20 20 20 31 0a 20 20 32 20 20 20          1.  2   
c480: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
c490: 31 28 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d  1(a INTEGER PRIM
c4a0: 41 52 59 20 4b 45 59 2c 20 62 29 22 20 20 20 20  ARY KEY, b)"    
c4b0: 20 20 20 20 20 20 20 30 0a 20 20 33 20 20 20 20         0.  3    
c4c0: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31  "CREATE TABLE t1
c4d0: 28 61 20 54 45 58 54 20 55 4e 49 51 55 45 2c 20  (a TEXT UNIQUE, 
c4e0: 62 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20  b)"             
c4f0: 20 20 20 20 20 20 31 0a 20 20 34 20 20 20 20 22        1.  4    "
c500: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
c510: 61 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62  a PRIMARY KEY, b
c520: 20 54 45 58 54 20 55 4e 49 51 55 45 29 22 20 20   TEXT UNIQUE)"  
c530: 20 20 20 20 20 32 0a 20 20 35 20 20 20 20 22 43       2.  5    "C
c540: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61  REATE TABLE t1(a
c550: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
c560: 20 63 2c 20 55 4e 49 51 55 45 28 63 2c 20 62 29   c, UNIQUE(c, b)
c570: 29 22 20 20 32 0a 7d 0a 0a 23 20 45 56 49 44 45  )"  2.}..# EVIDE
c580: 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 32 35 32 2d  NCE-OF: R-02252-
c590: 33 33 31 31 36 20 53 75 63 68 20 61 6e 20 69 6e  33116 Such an in
c5a0: 64 65 78 20 69 73 20 75 73 65 64 20 6c 69 6b 65  dex is used like
c5b0: 20 61 6e 79 20 6f 74 68 65 72 20 69 6e 64 65 78   any other index
c5c0: 0a 23 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  .# in the databa
c5d0: 73 65 20 74 6f 20 6f 70 74 69 6d 69 7a 65 20 71  se to optimize q
c5e0: 75 65 72 69 65 73 2e 0a 23 0a 64 6f 5f 65 78 65  ueries..#.do_exe
c5f0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 30 2e 30  csql_test 4.10.0
c600: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
c610: 45 20 74 31 28 61 2c 20 62 20 50 52 49 4d 41 52  E t1(a, b PRIMAR
c620: 59 20 4b 45 59 29 3b 0a 20 20 43 52 45 41 54 45  Y KEY);.  CREATE
c630: 20 54 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20   TABLE t2(a, b, 
c640: 63 2c 20 55 4e 49 51 55 45 28 62 2c 20 63 29 29  c, UNIQUE(b, c))
c650: 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62  ;.}.do_createtab
c660: 6c 65 5f 74 65 73 74 73 20 34 2e 31 30 20 7b 0a  le_tests 4.10 {.
c670: 20 20 31 20 20 20 20 22 45 58 50 4c 41 49 4e 20    1    "EXPLAIN 
c680: 51 55 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43  QUERY PLAN SELEC
c690: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
c6a0: 45 20 62 20 3d 20 35 22 20 0a 20 20 20 20 20 20  E b = 5" .      
c6b0: 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43 48 20   {0 0 0 {SEARCH 
c6c0: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
c6d0: 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75 74 6f  NDEX sqlite_auto
c6e0: 69 6e 64 65 78 5f 74 31 5f 31 20 28 62 3d 3f 29  index_t1_1 (b=?)
c6f0: 20 28 7e 31 20 72 6f 77 73 29 7d 7d 0a 0a 20 20   (~1 rows)}}..  
c700: 32 20 20 20 20 22 45 58 50 4c 41 49 4e 20 51 55  2    "EXPLAIN QU
c710: 45 52 59 20 50 4c 41 4e 20 53 45 4c 45 43 54 20  ERY PLAN SELECT 
c720: 2a 20 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20  * FROM t2 ORDER 
c730: 42 59 20 62 2c 20 63 22 0a 20 20 20 20 20 20 20  BY b, c".       
c740: 7b 30 20 30 20 30 20 7b 53 43 41 4e 20 54 41 42  {0 0 0 {SCAN TAB
c750: 4c 45 20 74 32 20 55 53 49 4e 47 20 49 4e 44 45  LE t2 USING INDE
c760: 58 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e 64  X sqlite_autoind
c770: 65 78 5f 74 32 5f 31 20 28 7e 31 30 30 30 30 30  ex_t2_1 (~100000
c780: 30 20 72 6f 77 73 29 7d 7d 0a 0a 20 20 33 20 20  0 rows)}}..  3  
c790: 20 20 22 45 58 50 4c 41 49 4e 20 51 55 45 52 59    "EXPLAIN QUERY
c7a0: 20 50 4c 41 4e 20 53 45 4c 45 43 54 20 2a 20 46   PLAN SELECT * F
c7b0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 62 3d 31  ROM t2 WHERE b=1
c7c0: 30 20 41 4e 44 20 63 3e 31 30 22 0a 20 20 20 20  0 AND c>10".    
c7d0: 20 20 20 7b 30 20 30 20 30 20 7b 53 45 41 52 43     {0 0 0 {SEARC
c7e0: 48 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47  H TABLE t2 USING
c7f0: 20 49 4e 44 45 58 20 73 71 6c 69 74 65 5f 61 75   INDEX sqlite_au
c800: 74 6f 69 6e 64 65 78 5f 74 32 5f 31 20 28 62 3d  toindex_t2_1 (b=
c810: 3f 20 41 4e 44 20 63 3e 3f 29 20 28 7e 32 20 72  ? AND c>?) (~2 r
c820: 6f 77 73 29 7d 7d 0a 7d 0a 0a 23 20 45 56 49 44  ows)}}.}..# EVID
c830: 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 35 34 39 33  ENCE-OF: R-45493
c840: 2d 33 35 36 35 33 20 41 20 43 48 45 43 4b 20 63  -35653 A CHECK c
c850: 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20 62 65  onstraint may be
c860: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 0a 23   attached to a.#
c870: 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74 69   column definiti
c880: 6f 6e 20 6f 72 20 73 70 65 63 69 66 69 65 64 20  on or specified 
c890: 61 73 20 61 20 74 61 62 6c 65 20 63 6f 6e 73 74  as a table const
c8a0: 72 61 69 6e 74 2e 20 49 6e 20 70 72 61 63 74 69  raint. In practi
c8b0: 63 65 20 69 74 0a 23 20 6d 61 6b 65 73 20 6e 6f  ce it.# makes no
c8c0: 20 64 69 66 66 65 72 65 6e 63 65 2e 0a 23 0a 23   difference..#.#
c8d0: 20 20 20 41 6c 6c 20 74 68 65 20 74 65 73 74 73     All the tests
c8e0: 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
c8f0: 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74  CHECK constraint
c900: 73 20 62 65 6c 6f 77 20 28 34 2e 31 31 2e 2a 20  s below (4.11.* 
c910: 61 6e 64 20 0a 23 20 20 20 34 2e 31 32 2e 2a 29  and .#   4.12.*)
c920: 20 61 72 65 20 72 75 6e 20 6f 6e 63 65 20 66 6f   are run once fo
c930: 72 20 61 20 74 61 62 6c 65 20 77 69 74 68 20 74  r a table with t
c940: 68 65 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  he check constra
c950: 69 6e 74 20 61 74 74 61 63 68 65 64 0a 23 20 20  int attached.#  
c960: 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64 65 66   to a column def
c970: 69 6e 69 74 69 6f 6e 2c 20 61 6e 64 20 6f 6e 63  inition, and onc
c980: 65 20 77 69 74 68 20 61 20 74 61 62 6c 65 20 77  e with a table w
c990: 68 65 72 65 20 74 68 65 20 63 68 65 63 6b 20 0a  here the check .
c9a0: 23 20 20 20 63 6f 6e 64 69 74 69 6f 6e 20 69 73  #   condition is
c9b0: 20 73 70 65 63 69 66 69 65 64 20 61 73 20 61 20   specified as a 
c9c0: 74 61 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74  table constraint
c9d0: 2e 0a 23 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  ..#.# EVIDENCE-O
c9e0: 46 3a 20 52 2d 35 35 34 33 35 2d 31 34 33 30 33  F: R-55435-14303
c9f0: 20 45 61 63 68 20 74 69 6d 65 20 61 20 6e 65 77   Each time a new
ca00: 20 72 6f 77 20 69 73 20 69 6e 73 65 72 74 65 64   row is inserted
ca10: 20 69 6e 74 6f 20 74 68 65 0a 23 20 74 61 62 6c   into the.# tabl
ca20: 65 20 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67  e or an existing
ca30: 20 72 6f 77 20 69 73 20 75 70 64 61 74 65 64 2c   row is updated,
ca40: 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
ca50: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a  associated with.
ca60: 23 20 65 61 63 68 20 43 48 45 43 4b 20 63 6f 6e  # each CHECK con
ca70: 73 74 72 61 69 6e 74 20 69 73 20 65 76 61 6c 75  straint is evalu
ca80: 61 74 65 64 20 61 6e 64 20 63 61 73 74 20 74 6f  ated and cast to
ca90: 20 61 20 4e 55 4d 45 52 49 43 20 76 61 6c 75 65   a NUMERIC value
caa0: 20 69 6e 20 74 68 65 0a 23 20 73 61 6d 65 20 77   in the.# same w
cab0: 61 79 20 61 73 20 61 20 43 41 53 54 20 65 78 70  ay as a CAST exp
cac0: 72 65 73 73 69 6f 6e 2e 20 49 66 20 74 68 65 20  ression. If the 
cad0: 72 65 73 75 6c 74 20 69 73 20 7a 65 72 6f 20 28  result is zero (
cae0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 30 0a  integer value 0.
caf0: 23 20 6f 72 20 72 65 61 6c 20 76 61 6c 75 65 20  # or real value 
cb00: 30 2e 30 29 2c 20 74 68 65 6e 20 61 20 63 6f 6e  0.0), then a con
cb10: 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
cb20: 6e 20 68 61 73 20 6f 63 63 75 72 72 65 64 2e 0a  n has occurred..
cb30: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
cb40: 73 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  s.do_execsql_tes
cb50: 74 20 34 2e 31 31 20 7b 0a 20 20 43 52 45 41 54  t 4.11 {.  CREAT
cb60: 45 20 54 41 42 4c 45 20 78 31 28 61 20 54 45 58  E TABLE x1(a TEX
cb70: 54 2c 20 62 20 49 4e 54 45 47 45 52 20 43 48 45  T, b INTEGER CHE
cb80: 43 4b 28 20 62 3e 30 20 29 29 3b 0a 20 20 43 52  CK( b>0 ));.  CR
cb90: 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 61 20  EATE TABLE t1(a 
cba0: 54 45 58 54 2c 20 62 20 49 4e 54 45 47 45 52 2c  TEXT, b INTEGER,
cbb0: 20 43 48 45 43 4b 28 20 62 3e 30 20 29 29 3b 0a   CHECK( b>0 ));.
cbc0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31    INSERT INTO x1
cbd0: 20 56 41 4c 55 45 53 28 27 78 27 2c 20 27 78 78   VALUES('x', 'xx
cbe0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
cbf0: 4f 20 78 31 20 56 41 4c 55 45 53 28 27 79 27 2c  O x1 VALUES('y',
cc00: 20 27 79 79 27 29 3b 0a 20 20 49 4e 53 45 52 54   'yy');.  INSERT
cc10: 20 49 4e 54 4f 20 74 31 20 53 45 4c 45 43 54 20   INTO t1 SELECT 
cc20: 2a 20 46 52 4f 4d 20 78 31 3b 0a 0a 20 20 43 52  * FROM x1;..  CR
cc30: 45 41 54 45 20 54 41 42 4c 45 20 78 32 28 61 20  EATE TABLE x2(a 
cc40: 43 48 45 43 4b 28 20 61 7c 7c 62 20 29 2c 20 62  CHECK( a||b ), b
cc50: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
cc60: 45 20 74 32 28 61 2c 20 62 2c 20 43 48 45 43 4b  E t2(a, b, CHECK
cc70: 28 20 61 7c 7c 62 20 29 29 3b 0a 20 20 49 4e 53  ( a||b ));.  INS
cc80: 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55  ERT INTO x2 VALU
cc90: 45 53 28 31 2c 20 27 78 78 27 29 3b 0a 20 20 49  ES(1, 'xx');.  I
cca0: 4e 53 45 52 54 20 49 4e 54 4f 20 78 32 20 56 41  NSERT INTO x2 VA
ccb0: 4c 55 45 53 28 31 2c 20 27 79 79 27 29 3b 0a 20  LUES(1, 'yy');. 
ccc0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
ccd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 32  SELECT * FROM x2
cce0: 3b 0a 7d 0a 0a 64 6f 5f 63 72 65 61 74 65 74 61  ;.}..do_createta
ccf0: 62 6c 65 5f 74 65 73 74 73 20 34 2e 31 31 20 2d  ble_tests 4.11 -
cd00: 65 72 72 6f 72 20 7b 63 6f 6e 73 74 72 61 69 6e  error {constrain
cd10: 74 20 66 61 69 6c 65 64 7d 20 7b 0a 20 20 31 61  t failed} {.  1a
cd20: 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
cd30: 20 78 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27   x1 VALUES('one'
cd40: 2c 20 30 29 22 20 20 20 20 20 20 20 7b 7d 0a 20  , 0)"       {}. 
cd50: 20 31 62 20 20 20 20 22 49 4e 53 45 52 54 20 49   1b    "INSERT I
cd60: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f  NTO t1 VALUES('o
cd70: 6e 65 27 2c 20 2d 34 2e 30 29 22 20 20 20 20 7b  ne', -4.0)"    {
cd80: 7d 0a 0a 20 20 32 61 20 20 20 20 22 49 4e 53 45  }..  2a    "INSE
cd90: 52 54 20 49 4e 54 4f 20 78 32 20 56 41 4c 55 45  RT INTO x2 VALUE
cda0: 53 28 27 61 62 63 27 2c 20 31 29 22 20 20 20 20  S('abc', 1)"    
cdb0: 20 20 20 7b 7d 0a 20 20 32 62 20 20 20 20 22 49     {}.  2b    "I
cdc0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
cdd0: 4c 55 45 53 28 27 61 62 63 27 2c 20 31 29 22 20  LUES('abc', 1)" 
cde0: 20 20 20 20 20 20 7b 7d 0a 0a 20 20 33 61 20 20        {}..  3a  
cdf0: 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78    "INSERT INTO x
ce00: 32 20 56 41 4c 55 45 53 28 30 2c 20 27 61 62 63  2 VALUES(0, 'abc
ce10: 27 29 22 20 20 20 20 20 20 20 7b 7d 0a 20 20 33  ')"       {}.  3
ce20: 62 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  b    "INSERT INT
ce30: 4f 20 74 32 20 56 41 4c 55 45 53 28 30 2c 20 27  O t2 VALUES(0, '
ce40: 61 62 63 27 29 22 20 20 20 20 20 20 20 7b 7d 0a  abc')"       {}.
ce50: 0a 20 20 34 61 20 20 20 20 22 55 50 44 41 54 45  .  4a    "UPDATE
ce60: 20 74 31 20 53 45 54 20 62 3d 2d 31 20 57 48 45   t1 SET b=-1 WHE
ce70: 52 45 20 72 6f 77 69 64 3d 31 22 20 20 20 20 20  RE rowid=1"     
ce80: 20 7b 7d 0a 20 20 34 62 20 20 20 20 22 55 50 44   {}.  4b    "UPD
ce90: 41 54 45 20 78 31 20 53 45 54 20 62 3d 2d 31 20  ATE x1 SET b=-1 
cea0: 57 48 45 52 45 20 72 6f 77 69 64 3d 31 22 20 20  WHERE rowid=1"  
ceb0: 20 20 20 20 7b 7d 0a 0a 20 20 34 61 20 20 20 20      {}..  4a    
cec0: 22 55 50 44 41 54 45 20 78 32 20 53 45 54 20 61  "UPDATE x2 SET a
ced0: 3d 27 27 20 57 48 45 52 45 20 72 6f 77 69 64 3d  ='' WHERE rowid=
cee0: 31 22 20 20 20 20 20 20 7b 7d 0a 20 20 34 62 20  1"      {}.  4b 
cef0: 20 20 20 22 55 50 44 41 54 45 20 74 32 20 53 45     "UPDATE t2 SE
cf00: 54 20 61 3d 27 27 20 57 48 45 52 45 20 72 6f 77  T a='' WHERE row
cf10: 69 64 3d 31 22 20 20 20 20 20 20 7b 7d 0a 7d 0a  id=1"      {}.}.
cf20: 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  .# EVIDENCE-OF: 
cf30: 52 2d 33 34 31 30 39 2d 33 39 31 30 38 20 49 66  R-34109-39108 If
cf40: 20 74 68 65 20 43 48 45 43 4b 20 65 78 70 72 65   the CHECK expre
cf50: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 65 73 20  ssion evaluates 
cf60: 74 6f 20 4e 55 4c 4c 2c 0a 23 20 6f 72 20 61 6e  to NULL,.# or an
cf70: 79 20 6f 74 68 65 72 20 6e 6f 6e 2d 7a 65 72 6f  y other non-zero
cf80: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 6e 6f   value, it is no
cf90: 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  t a constraint v
cfa0: 69 6f 6c 61 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 63  iolation..#.do_c
cfb0: 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
cfc0: 20 34 2e 31 32 20 7b 0a 20 20 31 61 20 20 20 20   4.12 {.  1a    
cfd0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20  "INSERT INTO x1 
cfe0: 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c 20 4e 55  VALUES('one', NU
cff0: 4c 4c 29 22 20 20 20 20 7b 7d 0a 20 20 31 62 20  LL)"    {}.  1b 
d000: 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
d010: 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 2c  t1 VALUES('one',
d020: 20 4e 55 4c 4c 29 22 20 20 20 20 7b 7d 0a 0a 20   NULL)"    {}.. 
d030: 20 32 61 20 20 20 20 22 49 4e 53 45 52 54 20 49   2a    "INSERT I
d040: 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27 6f  NTO x1 VALUES('o
d050: 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 20  ne', 2)"    {}. 
d060: 20 32 62 20 20 20 20 22 49 4e 53 45 52 54 20 49   2b    "INSERT I
d070: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f  NTO t1 VALUES('o
d080: 6e 65 27 2c 20 32 29 22 20 20 20 20 7b 7d 0a 0a  ne', 2)"    {}..
d090: 20 20 33 61 20 20 20 20 22 49 4e 53 45 52 54 20    3a    "INSERT 
d0a0: 49 4e 54 4f 20 78 32 20 56 41 4c 55 45 53 28 31  INTO x2 VALUES(1
d0b0: 2c 20 27 61 62 63 27 29 22 20 20 20 20 20 20 20  , 'abc')"       
d0c0: 7b 7d 0a 20 20 33 62 20 20 20 20 22 49 4e 53 45  {}.  3b    "INSE
d0d0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
d0e0: 53 28 31 2c 20 27 61 62 63 27 29 22 20 20 20 20  S(1, 'abc')"    
d0f0: 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49 44 45     {}.}..# EVIDE
d100: 4e 43 45 2d 4f 46 3a 20 52 2d 30 32 30 36 30 2d  NCE-OF: R-02060-
d110: 36 34 35 34 37 20 41 20 4e 4f 54 20 4e 55 4c 4c  64547 A NOT NULL
d120: 20 63 6f 6e 73 74 72 61 69 6e 74 20 6d 61 79 20   constraint may 
d130: 6f 6e 6c 79 20 62 65 20 61 74 74 61 63 68 65 64  only be attached
d140: 0a 23 20 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 64  .# to a column d
d150: 65 66 69 6e 69 74 69 6f 6e 2c 20 6e 6f 74 20 73  efinition, not s
d160: 70 65 63 69 66 69 65 64 20 61 73 20 61 20 74 61  pecified as a ta
d170: 62 6c 65 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0a  ble constraint..
d180: 23 0a 64 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65  #.drop_all_table
d190: 73 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  s.do_createtable
d1a0: 5f 74 65 73 74 73 20 34 2e 31 33 2e 31 20 7b 0a  _tests 4.13.1 {.
d1b0: 20 20 31 20 20 20 20 20 22 43 52 45 41 54 45 20    1     "CREATE 
d1c0: 54 41 42 4c 45 20 74 31 28 61 20 4e 4f 54 20 4e  TABLE t1(a NOT N
d1d0: 55 4c 4c 2c 20 62 29 22 20 20 20 20 20 20 20 20  ULL, b)"        
d1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1f0: 20 20 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20         {}.  2   
d200: 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20    "CREATE TABLE 
d210: 74 32 28 61 20 50 52 49 4d 41 52 59 20 4b 45 59  t2(a PRIMARY KEY
d220: 20 4e 4f 54 20 4e 55 4c 4c 2c 20 62 29 22 20 20   NOT NULL, b)"  
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d240: 20 7b 7d 0a 20 20 33 20 20 20 20 20 22 43 52 45   {}.  3     "CRE
d250: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 20 4e  ATE TABLE t3(a N
d260: 4f 54 20 4e 55 4c 4c 2c 20 62 20 4e 4f 54 20 4e  OT NULL, b NOT N
d270: 55 4c 4c 2c 20 63 20 4e 4f 54 20 4e 55 4c 4c 20  ULL, c NOT NULL 
d280: 55 4e 49 51 55 45 29 22 20 20 20 7b 7d 0a 7d 0a  UNIQUE)"   {}.}.
d290: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
d2a0: 65 73 74 73 20 34 2e 31 33 2e 32 20 2d 65 72 72  ests 4.13.2 -err
d2b0: 6f 72 20 7b 0a 20 20 6e 65 61 72 20 22 4e 4f 54  or {.  near "NOT
d2c0: 22 3a 20 73 79 6e 74 61 78 20 65 72 72 6f 72 0a  ": syntax error.
d2d0: 7d 20 7b 0a 20 20 31 20 20 20 20 20 22 43 52 45  } {.  1     "CRE
d2e0: 41 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20  ATE TABLE t4(a, 
d2f0: 62 2c 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22  b, NOT NULL(a))"
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 7b 7d 0a 20 20 32 20 20 20 20 20 22 43     {}.  2     "C
d320: 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 28 61  REATE TABLE t4(a
d330: 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 2c   PRIMARY KEY, b,
d340: 20 4e 4f 54 20 4e 55 4c 4c 28 61 29 29 22 20 20   NOT NULL(a))"  
d350: 20 20 20 20 20 7b 7d 0a 20 20 33 20 20 20 20 20       {}.  3     
d360: 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34  "CREATE TABLE t4
d370: 28 61 2c 20 62 2c 20 63 20 55 4e 49 51 55 45 2c  (a, b, c UNIQUE,
d380: 20 4e 4f 54 20 4e 55 4c 4c 28 61 2c 20 62 2c 20   NOT NULL(a, b, 
d390: 63 29 29 22 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45  c))"   {}.}..# E
d3a0: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 31  VIDENCE-OF: R-31
d3b0: 37 39 35 2d 35 37 36 34 33 20 61 20 4e 4f 54 20  795-57643 a NOT 
d3c0: 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20  NULL constraint 
d3d0: 64 69 63 74 61 74 65 73 20 74 68 61 74 20 74 68  dictates that th
d3e0: 65 0a 23 20 61 73 73 6f 63 69 61 74 65 64 20 63  e.# associated c
d3f0: 6f 6c 75 6d 6e 20 6d 61 79 20 6e 6f 74 20 63 6f  olumn may not co
d400: 6e 74 61 69 6e 20 61 20 4e 55 4c 4c 20 76 61 6c  ntain a NULL val
d410: 75 65 2e 20 41 74 74 65 6d 70 74 69 6e 67 20 74  ue. Attempting t
d420: 6f 20 73 65 74 20 74 68 65 0a 23 20 63 6f 6c 75  o set the.# colu
d430: 6d 6e 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  mn value to NULL
d440: 20 77 68 65 6e 20 69 6e 73 65 72 74 69 6e 67 20   when inserting 
d450: 61 20 6e 65 77 20 72 6f 77 20 6f 72 20 75 70 64  a new row or upd
d460: 61 74 69 6e 67 20 61 6e 20 65 78 69 73 74 69 6e  ating an existin
d470: 67 0a 23 20 6f 6e 65 20 63 61 75 73 65 73 20 61  g.# one causes a
d480: 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
d490: 61 74 69 6f 6e 2e 0a 23 0a 23 20 20 20 20 20 54  ation..#.#     T
d4a0: 68 65 73 65 20 74 65 73 74 73 20 75 73 65 20 74  hese tests use t
d4b0: 68 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  he tables create
d4c0: 64 20 62 79 20 34 2e 31 33 2e 0a 23 0a 64 6f 5f  d by 4.13..#.do_
d4d0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
d4e0: 34 2e 30 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  4.0 {.  INSERT I
d4f0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 78  NTO t1 VALUES('x
d500: 27 2c 20 27 79 27 29 3b 0a 20 20 49 4e 53 45 52  ', 'y');.  INSER
d510: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
d520: 28 27 7a 27 2c 20 4e 55 4c 4c 29 3b 0a 0a 20 20  ('z', NULL);..  
d530: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56  INSERT INTO t2 V
d540: 41 4c 55 45 53 28 27 78 27 2c 20 27 79 27 29 3b  ALUES('x', 'y');
d550: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
d560: 32 20 56 41 4c 55 45 53 28 27 7a 27 2c 20 4e 55  2 VALUES('z', NU
d570: 4c 4c 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49  LL);..  INSERT I
d580: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 78  NTO t3 VALUES('x
d590: 27 2c 20 27 79 27 2c 20 27 7a 27 29 3b 0a 20 20  ', 'y', 'z');.  
d5a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
d5b0: 41 4c 55 45 53 28 31 2c 20 32 2c 20 33 29 3b 0a  ALUES(1, 2, 3);.
d5c0: 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
d5d0: 5f 74 65 73 74 73 20 34 2e 31 34 20 2d 65 72 72  _tests 4.14 -err
d5e0: 6f 72 20 7b 0a 20 20 25 73 20 6d 61 79 20 6e 6f  or {.  %s may no
d5f0: 74 20 62 65 20 4e 55 4c 4c 0a 7d 20 7b 0a 20 20  t be NULL.} {.  
d600: 31 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54  1    "INSERT INT
d610: 4f 20 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c  O t1 VALUES(NULL
d620: 2c 20 27 61 27 29 22 20 20 20 20 20 20 20 20 20  , 'a')"         
d630: 7b 74 31 2e 61 7d 0a 20 20 32 20 20 20 20 22 49  {t1.a}.  2    "I
d640: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
d650: 4c 55 45 53 28 4e 55 4c 4c 2c 20 27 62 27 29 22  LUES(NULL, 'b')"
d660: 20 20 20 20 20 20 20 20 20 7b 74 32 2e 61 7d 0a           {t2.a}.
d670: 20 20 33 20 20 20 20 22 49 4e 53 45 52 54 20 49    3    "INSERT I
d680: 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 63  NTO t3 VALUES('c
d690: 27 2c 20 27 64 27 2c 20 4e 55 4c 4c 29 22 20 20  ', 'd', NULL)"  
d6a0: 20 20 7b 74 33 2e 63 7d 0a 20 20 34 20 20 20 20    {t3.c}.  4    
d6b0: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20  "INSERT INTO t3 
d6c0: 56 41 4c 55 45 53 28 27 65 27 2c 20 4e 55 4c 4c  VALUES('e', NULL
d6d0: 2c 20 27 66 27 29 22 20 20 20 20 7b 74 33 2e 62  , 'f')"    {t3.b
d6e0: 7d 0a 20 20 35 20 20 20 20 22 49 4e 53 45 52 54  }.  5    "INSERT
d6f0: 20 49 4e 54 4f 20 74 33 20 56 41 4c 55 45 53 28   INTO t3 VALUES(
d700: 4e 55 4c 4c 2c 20 27 67 27 2c 20 27 68 27 29 22  NULL, 'g', 'h')"
d710: 20 20 20 20 7b 74 33 2e 61 7d 0a 7d 0a 0a 23 20      {t3.a}.}..# 
d720: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34  EVIDENCE-OF: R-4
d730: 32 35 31 31 2d 33 39 34 35 39 20 50 52 49 4d 41  2511-39459 PRIMA
d740: 52 59 20 4b 45 59 2c 20 55 4e 49 51 55 45 20 61  RY KEY, UNIQUE a
d750: 6e 64 20 4e 4f 54 20 4e 55 4c 4c 0a 23 20 63 6f  nd NOT NULL.# co
d760: 6e 73 74 72 61 69 6e 74 73 20 6d 61 79 20 62 65  nstraints may be
d770: 20 65 78 70 6c 69 63 69 74 6c 79 20 61 73 73 69   explicitly assi
d780: 67 6e 65 64 20 61 20 64 65 66 61 75 6c 74 20 63  gned a default c
d790: 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c 75 74 69  onflict resoluti
d7a0: 6f 6e 0a 23 20 61 6c 67 6f 72 69 74 68 6d 20 62  on.# algorithm b
d7b0: 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 20 63 6f  y including a co
d7c0: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 69 6e  nflict-clause in
d7d0: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
d7e0: 6e 73 2e 0a 23 0a 23 20 20 20 20 20 43 6f 6e 66  ns..#.#     Conf
d7f0: 6c 69 63 74 20 63 6c 61 75 73 65 73 3a 20 41 42  lict clauses: AB
d800: 4f 52 54 2c 20 52 4f 4c 4c 42 41 43 4b 2c 20 49  ORT, ROLLBACK, I
d810: 47 4e 4f 52 45 2c 20 46 41 49 4c 2c 20 52 45 50  GNORE, FAIL, REP
d820: 4c 41 43 45 0a 23 0a 23 20 20 20 20 20 54 65 73  LACE.#.#     Tes
d830: 74 20 63 61 73 65 73 20 34 2e 31 35 2e 2a 2c 20  t cases 4.15.*, 
d840: 34 2e 31 36 2e 2a 20 61 6e 64 20 34 2e 31 37 2e  4.16.* and 4.17.
d850: 2a 20 66 6f 63 75 73 20 6f 6e 20 50 52 49 4d 41  * focus on PRIMA
d860: 52 59 20 4b 45 59 2c 20 4e 4f 54 20 4e 55 4c 4c  RY KEY, NOT NULL
d870: 0a 23 20 20 20 20 20 61 6e 64 20 55 4e 49 51 55  .#     and UNIQU
d880: 45 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 72  E constraints, r
d890: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 23 0a 64  espectively..#.d
d8a0: 72 6f 70 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64  rop_all_tables.d
d8b0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
d8c0: 2e 31 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  .15.0 {.  CREATE
d8d0: 20 54 41 42 4c 45 20 74 31 5f 61 62 28 61 20 50   TABLE t1_ab(a P
d8e0: 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20 43 4f  RIMARY KEY ON CO
d8f0: 4e 46 4c 49 43 54 20 41 42 4f 52 54 2c 20 62 29  NFLICT ABORT, b)
d900: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
d910: 20 74 31 5f 72 6f 28 61 20 50 52 49 4d 41 52 59   t1_ro(a PRIMARY
d920: 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   KEY ON CONFLICT
d930: 20 52 4f 4c 4c 42 41 43 4b 2c 20 62 29 3b 0a 20   ROLLBACK, b);. 
d940: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
d950: 5f 69 67 28 61 20 50 52 49 4d 41 52 59 20 4b 45  _ig(a PRIMARY KE
d960: 59 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 49 47  Y ON CONFLICT IG
d970: 4e 4f 52 45 2c 20 62 29 3b 0a 20 20 43 52 45 41  NORE, b);.  CREA
d980: 54 45 20 54 41 42 4c 45 20 74 31 5f 66 61 28 61  TE TABLE t1_fa(a
d990: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 4f 4e 20   PRIMARY KEY ON 
d9a0: 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 2c 20 62  CONFLICT FAIL, b
d9b0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
d9c0: 45 20 74 31 5f 72 65 28 61 20 50 52 49 4d 41 52  E t1_re(a PRIMAR
d9d0: 59 20 4b 45 59 20 4f 4e 20 43 4f 4e 46 4c 49 43  Y KEY ON CONFLIC
d9e0: 54 20 52 45 50 4c 41 43 45 2c 20 62 29 3b 0a 20  T REPLACE, b);. 
d9f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
da00: 5f 78 78 28 61 20 50 52 49 4d 41 52 59 20 4b 45  _xx(a PRIMARY KE
da10: 59 2c 20 62 29 3b 0a 0a 20 20 49 4e 53 45 52 54  Y, b);..  INSERT
da20: 20 49 4e 54 4f 20 74 31 5f 61 62 20 56 41 4c 55   INTO t1_ab VALU
da30: 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20  ES(1, 'one');.  
da40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 61  INSERT INTO t1_a
da50: 62 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f  b VALUES(2, 'two
da60: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
da70: 4f 20 74 31 5f 72 6f 20 53 45 4c 45 43 54 20 2a  O t1_ro SELECT *
da80: 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20 20 49   FROM t1_ab;.  I
da90: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f 69 67  NSERT INTO t1_ig
daa0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
dab0: 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  1_ab;.  INSERT I
dac0: 4e 54 4f 20 74 31 5f 66 61 20 53 45 4c 45 43 54  NTO t1_fa SELECT
dad0: 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b 0a 20   * FROM t1_ab;. 
dae0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 5f   INSERT INTO t1_
daf0: 72 65 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  re SELECT * FROM
db00: 20 74 31 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54   t1_ab;.  INSERT
db10: 20 49 4e 54 4f 20 74 31 5f 78 78 20 53 45 4c 45   INTO t1_xx SELE
db20: 43 54 20 2a 20 46 52 4f 4d 20 74 31 5f 61 62 3b  CT * FROM t1_ab;
db30: 0a 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ..  CREATE TABLE
db40: 20 74 32 5f 61 62 28 61 2c 20 62 20 4e 4f 54 20   t2_ab(a, b NOT 
db50: 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  NULL ON CONFLICT
db60: 20 41 42 4f 52 54 29 3b 0a 20 20 43 52 45 41 54   ABORT);.  CREAT
db70: 45 20 54 41 42 4c 45 20 74 32 5f 72 6f 28 61 2c  E TABLE t2_ro(a,
db80: 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43   b NOT NULL ON C
db90: 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41 43 4b  ONFLICT ROLLBACK
dba0: 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c  );.  CREATE TABL
dbb0: 45 20 74 32 5f 69 67 28 61 2c 20 62 20 4e 4f 54  E t2_ig(a, b NOT
dbc0: 20 4e 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43   NULL ON CONFLIC
dbd0: 54 20 49 47 4e 4f 52 45 29 3b 0a 20 20 43 52 45  T IGNORE);.  CRE
dbe0: 41 54 45 20 54 41 42 4c 45 20 74 32 5f 66 61 28  ATE TABLE t2_fa(
dbf0: 61 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e  a, b NOT NULL ON
dc00: 20 43 4f 4e 46 4c 49 43 54 20 46 41 49 4c 29 3b   CONFLICT FAIL);
dc10: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
dc20: 74 32 5f 72 65 28 61 2c 20 62 20 4e 4f 54 20 4e  t2_re(a, b NOT N
dc30: 55 4c 4c 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ULL ON CONFLICT 
dc40: 52 45 50 4c 41 43 45 29 3b 0a 20 20 43 52 45 41  REPLACE);.  CREA
dc50: 54 45 20 54 41 42 4c 45 20 74 32 5f 78 78 28 61  TE TABLE t2_xx(a
dc60: 2c 20 62 20 4e 4f 54 20 4e 55 4c 4c 29 3b 0a 0a  , b NOT NULL);..
dc70: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
dc80: 5f 61 62 20 56 41 4c 55 45 53 28 31 2c 20 27 6f  _ab VALUES(1, 'o
dc90: 6e 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ne');.  INSERT I
dca0: 4e 54 4f 20 74 32 5f 61 62 20 56 41 4c 55 45 53  NTO t2_ab VALUES
dcb0: 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 49 4e  (2, 'two');.  IN
dcc0: 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 72 6f 20  SERT INTO t2_ro 
dcd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 32  SELECT * FROM t2
dce0: 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  _ab;.  INSERT IN
dcf0: 54 4f 20 74 32 5f 69 67 20 53 45 4c 45 43 54 20  TO t2_ig SELECT 
dd00: 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a 20 20  * FROM t2_ab;.  
dd10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 5f 66  INSERT INTO t2_f
dd20: 61 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  a SELECT * FROM 
dd30: 74 32 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20  t2_ab;.  INSERT 
dd40: 49 4e 54 4f 20 74 32 5f 72 65 20 53 45 4c 45 43  INTO t2_re SELEC
dd50: 54 20 2a 20 46 52 4f 4d 20 74 32 5f 61 62 3b 0a  T * FROM t2_ab;.
dd60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
dd70: 5f 78 78 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  _xx SELECT * FRO
dd80: 4d 20 74 32 5f 61 62 3b 0a 0a 20 20 43 52 45 41  M t2_ab;..  CREA
dd90: 54 45 20 54 41 42 4c 45 20 74 33 5f 61 62 28 61  TE TABLE t3_ab(a
dda0: 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20 62  , b, UNIQUE(a, b
ddb0: 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 41 42  ) ON CONFLICT AB
ddc0: 4f 52 54 29 3b 0a 20 20 43 52 45 41 54 45 20 54  ORT);.  CREATE T
ddd0: 41 42 4c 45 20 74 33 5f 72 6f 28 61 2c 20 62 2c  ABLE t3_ro(a, b,
dde0: 20 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e   UNIQUE(a, b) ON
ddf0: 20 43 4f 4e 46 4c 49 43 54 20 52 4f 4c 4c 42 41   CONFLICT ROLLBA
de00: 43 4b 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41  CK);.  CREATE TA
de10: 42 4c 45 20 74 33 5f 69 67 28 61 2c 20 62 2c 20  BLE t3_ig(a, b, 
de20: 55 4e 49 51 55 45 28 61 2c 20 62 29 20 4f 4e 20  UNIQUE(a, b) ON 
de30: 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 29  CONFLICT IGNORE)
de40: 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  ;.  CREATE TABLE
de50: 20 74 33 5f 66 61 28 61 2c 20 62 2c 20 55 4e 49   t3_fa(a, b, UNI
de60: 51 55 45 28 61 2c 20 62 29 20 4f 4e 20 43 4f 4e  QUE(a, b) ON CON
de70: 46 4c 49 43 54 20 46 41 49 4c 29 3b 0a 20 20 43  FLICT FAIL);.  C
de80: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 5f 72  REATE TABLE t3_r
de90: 65 28 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61  e(a, b, UNIQUE(a
dea0: 2c 20 62 29 20 4f 4e 20 43 4f 4e 46 4c 49 43 54  , b) ON CONFLICT
deb0: 20 52 45 50 4c 41 43 45 29 3b 0a 20 20 43 52 45   REPLACE);.  CRE
dec0: 41 54 45 20 54 41 42 4c 45 20 74 33 5f 78 78 28  ATE TABLE t3_xx(
ded0: 61 2c 20 62 2c 20 55 4e 49 51 55 45 28 61 2c 20  a, b, UNIQUE(a, 
dee0: 62 29 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49  b));..  INSERT I
def0: 4e 54 4f 20 74 33 5f 61 62 20 56 41 4c 55 45 53  NTO t3_ab VALUES
df00: 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 49 4e  (1, 'one');.  IN
df10: 53 45 52 54 20 49 4e 54 4f 20 74 33 5f 61 62 20  SERT INTO t3_ab 
df20: 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29  VALUES(2, 'two')
df30: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
df40: 74 33 5f 72 6f 20 53 45 4c 45 43 54 20 2a 20 46  t3_ro SELECT * F
df50: 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49 4e 53  ROM t3_ab;.  INS
df60: 45 52 54 20 49 4e 54 4f 20 74 33 5f 69 67 20 53  ERT INTO t3_ig S
df70: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 5f  ELECT * FROM t3_
df80: 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ab;.  INSERT INT
df90: 4f 20 74 33 5f 66 61 20 53 45 4c 45 43 54 20 2a  O t3_fa SELECT *
dfa0: 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 20 20 49   FROM t3_ab;.  I
dfb0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 5f 72 65  NSERT INTO t3_re
dfc0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
dfd0: 33 5f 61 62 3b 0a 20 20 49 4e 53 45 52 54 20 49  3_ab;.  INSERT I
dfe0: 4e 54 4f 20 74 33 5f 78 78 20 53 45 4c 45 43 54  NTO t3_xx SELECT
dff0: 20 2a 20 46 52 4f 4d 20 74 33 5f 61 62 3b 0a 7d   * FROM t3_ab;.}
e000: 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 74 62  ..foreach {tn tb
e010: 6c 20 72 65 73 20 61 63 20 64 61 74 61 7d 20 7b  l res ac data} {
e020: 0a 20 20 31 20 20 20 74 31 5f 61 62 20 20 20 20  .  1   t1_ab    
e030: 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20  {1 {column a is 
e040: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b  not unique}} 0 {
e050: 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68  1 one 2 two 3 th
e060: 72 65 65 7d 0a 20 20 32 20 20 20 74 31 5f 72 6f  ree}.  2   t1_ro
e070: 20 20 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61      {1 {column a
e080: 20 69 73 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d   is not unique}}
e090: 20 31 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d   1 {1 one 2 two}
e0a0: 0a 20 20 33 20 20 20 74 31 5f 66 61 20 20 20 20  .  3   t1_fa    
e0b0: 7b 31 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20  {1 {column a is 
e0c0: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b  not unique}} 0 {
e0d0: 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68  1 one 2 two 3 th
e0e0: 72 65 65 20 34 20 73 74 72 69 6e 67 7d 0a 20 20  ree 4 string}.  
e0f0: 34 20 20 20 74 31 5f 69 67 20 20 20 20 7b 30 20  4   t1_ig    {0 
e100: 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74  {}} 0 {1 one 2 t
e110: 77 6f 20 33 20 74 68 72 65 65 20 34 20 73 74 72  wo 3 three 4 str
e120: 69 6e 67 20 36 20 73 74 72 69 6e 67 7d 0a 20 20  ing 6 string}.  
e130: 35 20 20 20 74 31 5f 72 65 20 20 20 20 7b 30 20  5   t1_re    {0 
e140: 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74  {}} 0 {1 one 2 t
e150: 77 6f 20 34 20 73 74 72 69 6e 67 20 33 20 73 74  wo 4 string 3 st
e160: 72 69 6e 67 20 36 20 73 74 72 69 6e 67 7d 0a 20  ring 6 string}. 
e170: 20 36 20 20 20 74 31 5f 78 78 20 20 20 20 7b 31   6   t1_xx    {1
e180: 20 7b 63 6f 6c 75 6d 6e 20 61 20 69 73 20 6e 6f   {column a is no
e190: 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b 31 20  t unique}} 0 {1 
e1a0: 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65  one 2 two 3 thre
e1b0: 65 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68 73 71  e}.} {.  catchsq
e1c0: 6c 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f 65 78  l COMMIT.  do_ex
e1d0: 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 35  ecsql_test  4.15
e1e0: 2e 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b 20 49  .$tn.1 "BEGIN; I
e1f0: 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c 20  NSERT INTO $tbl 
e200: 56 41 4c 55 45 53 28 33 2c 20 27 74 68 72 65 65  VALUES(3, 'three
e210: 27 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63 68 73  ')"..  do_catchs
e220: 71 6c 5f 74 65 73 74 20 34 2e 31 35 2e 24 74 6e  ql_test 4.15.$tn
e230: 2e 32 20 22 20 0a 20 20 20 20 49 4e 53 45 52 54  .2 " .    INSERT
e240: 20 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c 45 43   INTO $tbl SELEC
e250: 54 20 28 28 61 25 32 29 2a 61 2b 33 29 2c 20 27  T ((a%2)*a+3), '
e260: 73 74 72 69 6e 67 27 20 46 52 4f 4d 20 24 74 62  string' FROM $tb
e270: 6c 3b 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64  l;.  " $res..  d
e280: 6f 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  o_test e_createt
e290: 61 62 6c 65 2d 34 2e 31 35 2e 24 74 6e 2e 33 20  able-4.15.$tn.3 
e2a0: 7b 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  { sqlite3_get_au
e2b0: 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61  tocommit db } $a
e2c0: 63 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  c.  do_execsql_t
e2d0: 65 73 74 20 34 2e 31 35 2e 24 74 6e 2e 34 20 22  est 4.15.$tn.4 "
e2e0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74  SELECT * FROM $t
e2f0: 62 6c 22 20 24 64 61 74 61 0a 7d 0a 66 6f 72 65  bl" $data.}.fore
e300: 61 63 68 20 7b 74 6e 20 74 62 6c 20 72 65 73 20  ach {tn tbl res 
e310: 61 63 20 64 61 74 61 7d 20 7b 0a 20 20 31 20 20  ac data} {.  1  
e320: 20 74 32 5f 61 62 20 20 20 20 7b 31 20 7b 74 32   t2_ab    {1 {t2
e330: 5f 61 62 2e 62 20 6d 61 79 20 6e 6f 74 20 62 65  _ab.b may not be
e340: 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f 6e 65   NULL}} 0 {1 one
e350: 20 32 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a   2 two 3 three}.
e360: 20 20 32 20 20 20 74 32 5f 72 6f 20 20 20 20 7b    2   t2_ro    {
e370: 31 20 7b 74 32 5f 72 6f 2e 62 20 6d 61 79 20 6e  1 {t2_ro.b may n
e380: 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 20 31 20 7b  ot be NULL}} 1 {
e390: 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20 20 33  1 one 2 two}.  3
e3a0: 20 20 20 74 32 5f 66 61 20 20 20 20 7b 31 20 7b     t2_fa    {1 {
e3b0: 74 32 5f 66 61 2e 62 20 6d 61 79 20 6e 6f 74 20  t2_fa.b may not 
e3c0: 62 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31 20 6f  be NULL}} 0 {1 o
e3d0: 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72 65 65  ne 2 two 3 three
e3e0: 20 34 20 78 78 7d 0a 20 20 34 20 20 20 74 32 5f   4 xx}.  4   t2_
e3f0: 69 67 20 20 20 20 7b 30 20 7b 7d 7d 20 30 20 7b  ig    {0 {}} 0 {
e400: 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68  1 one 2 two 3 th
e410: 72 65 65 20 34 20 78 78 20 36 20 78 78 7d 0a 20  ree 4 xx 6 xx}. 
e420: 20 35 20 20 20 74 32 5f 72 65 20 20 20 20 7b 31   5   t2_re    {1
e430: 20 7b 74 32 5f 72 65 2e 62 20 6d 61 79 20 6e 6f   {t2_re.b may no
e440: 74 20 62 65 20 4e 55 4c 4c 7d 7d 20 30 20 7b 31  t be NULL}} 0 {1
e450: 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68 72   one 2 two 3 thr
e460: 65 65 7d 0a 20 20 36 20 20 20 74 32 5f 78 78 20  ee}.  6   t2_xx 
e470: 20 20 20 7b 31 20 7b 74 32 5f 78 78 2e 62 20 6d     {1 {t2_xx.b m
e480: 61 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d  ay not be NULL}}
e490: 20 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20   0 {1 one 2 two 
e4a0: 33 20 74 68 72 65 65 7d 0a 7d 20 7b 0a 20 20 63  3 three}.} {.  c
e4b0: 61 74 63 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 20  atchsql COMMIT. 
e4c0: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
e4d0: 20 20 34 2e 31 36 2e 24 74 6e 2e 31 20 22 42 45    4.16.$tn.1 "BE
e4e0: 47 49 4e 3b 20 49 4e 53 45 52 54 20 49 4e 54 4f  GIN; INSERT INTO
e4f0: 20 24 74 62 6c 20 56 41 4c 55 45 53 28 33 2c 20   $tbl VALUES(3, 
e500: 27 74 68 72 65 65 27 29 22 0a 0a 20 20 64 6f 5f  'three')"..  do_
e510: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e  catchsql_test 4.
e520: 31 36 2e 24 74 6e 2e 32 20 22 20 0a 20 20 20 20  16.$tn.2 " .    
e530: 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62 6c  INSERT INTO $tbl
e540: 20 53 45 4c 45 43 54 20 61 2b 33 2c 20 43 41 53   SELECT a+3, CAS
e550: 45 20 61 20 57 48 45 4e 20 32 20 54 48 45 4e 20  E a WHEN 2 THEN 
e560: 4e 55 4c 4c 20 45 4c 53 45 20 27 78 78 27 20 45  NULL ELSE 'xx' E
e570: 4e 44 20 46 52 4f 4d 20 24 74 62 6c 0a 20 20 22  ND FROM $tbl.  "
e580: 20 24 72 65 73 0a 0a 20 20 64 6f 5f 74 65 73 74   $res..  do_test
e590: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34   e_createtable-4
e5a0: 2e 31 36 2e 24 74 6e 2e 33 20 7b 20 73 71 6c 69  .16.$tn.3 { sqli
e5b0: 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d  te3_get_autocomm
e5c0: 69 74 20 64 62 20 7d 20 24 61 63 0a 20 20 64 6f  it db } $ac.  do
e5d0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
e5e0: 31 36 2e 24 74 6e 2e 34 20 22 53 45 4c 45 43 54  16.$tn.4 "SELECT
e5f0: 20 2a 20 46 52 4f 4d 20 24 74 62 6c 22 20 24 64   * FROM $tbl" $d
e600: 61 74 61 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 74  ata.}.foreach {t
e610: 6e 20 74 62 6c 20 72 65 73 20 61 63 20 64 61 74  n tbl res ac dat
e620: 61 7d 20 7b 0a 20 20 31 20 20 20 74 33 5f 61 62  a} {.  1   t3_ab
e630: 20 20 20 20 7b 31 20 7b 63 6f 6c 75 6d 6e 73 20      {1 {columns 
e640: 61 2c 20 62 20 61 72 65 20 6e 6f 74 20 75 6e 69  a, b are not uni
e650: 71 75 65 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32  que}} 0 {1 one 2
e660: 20 74 77 6f 20 33 20 74 68 72 65 65 7d 0a 20 20   two 3 three}.  
e670: 32 20 20 20 74 33 5f 72 6f 20 20 20 20 7b 31 20  2   t3_ro    {1 
e680: 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72  {columns a, b ar
e690: 65 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 31  e not unique}} 1
e6a0: 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 7d 0a 20   {1 one 2 two}. 
e6b0: 20 33 20 20 20 74 33 5f 66 61 20 20 20 20 7b 31   3   t3_fa    {1
e6c0: 20 7b 63 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61   {columns a, b a
e6d0: 72 65 20 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20  re not unique}} 
e6e0: 30 20 7b 31 20 6f 6e 65 20 32 20 74 77 6f 20 33  0 {1 one 2 two 3
e6f0: 20 74 68 72 65 65 20 34 20 74 68 72 65 65 7d 0a   three 4 three}.
e700: 20 20 34 20 20 20 74 33 5f 69 67 20 20 20 20 7b    4   t3_ig    {
e710: 30 20 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32  0 {}} 0 {1 one 2
e720: 20 74 77 6f 20 33 20 74 68 72 65 65 20 34 20 74   two 3 three 4 t
e730: 68 72 65 65 20 36 20 74 68 72 65 65 7d 0a 20 20  hree 6 three}.  
e740: 35 20 20 20 74 33 5f 72 65 20 20 20 20 7b 30 20  5   t3_re    {0 
e750: 7b 7d 7d 20 30 20 7b 31 20 6f 6e 65 20 32 20 74  {}} 0 {1 one 2 t
e760: 77 6f 20 34 20 74 68 72 65 65 20 33 20 74 68 72  wo 4 three 3 thr
e770: 65 65 20 36 20 74 68 72 65 65 7d 0a 20 20 36 20  ee 6 three}.  6 
e780: 20 20 74 33 5f 78 78 20 20 20 20 7b 31 20 7b 63    t3_xx    {1 {c
e790: 6f 6c 75 6d 6e 73 20 61 2c 20 62 20 61 72 65 20  olumns a, b are 
e7a0: 6e 6f 74 20 75 6e 69 71 75 65 7d 7d 20 30 20 7b  not unique}} 0 {
e7b0: 31 20 6f 6e 65 20 32 20 74 77 6f 20 33 20 74 68  1 one 2 two 3 th
e7c0: 72 65 65 7d 0a 7d 20 7b 0a 20 20 63 61 74 63 68  ree}.} {.  catch
e7d0: 73 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 64 6f 5f  sql COMMIT.  do_
e7e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e  execsql_test  4.
e7f0: 31 37 2e 24 74 6e 2e 31 20 22 42 45 47 49 4e 3b  17.$tn.1 "BEGIN;
e800: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 24 74 62   INSERT INTO $tb
e810: 6c 20 56 41 4c 55 45 53 28 33 2c 20 27 74 68 72  l VALUES(3, 'thr
e820: 65 65 27 29 22 0a 0a 20 20 64 6f 5f 63 61 74 63  ee')"..  do_catc
e830: 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 37 2e 24  hsql_test 4.17.$
e840: 74 6e 2e 32 20 22 20 0a 20 20 20 20 49 4e 53 45  tn.2 " .    INSE
e850: 52 54 20 49 4e 54 4f 20 24 74 62 6c 20 53 45 4c  RT INTO $tbl SEL
e860: 45 43 54 20 28 28 61 25 32 29 2a 61 2b 33 29 2c  ECT ((a%2)*a+3),
e870: 20 27 74 68 72 65 65 27 20 46 52 4f 4d 20 24 74   'three' FROM $t
e880: 62 6c 0a 20 20 22 20 24 72 65 73 0a 0a 20 20 64  bl.  " $res..  d
e890: 6f 5f 74 65 73 74 20 65 5f 63 72 65 61 74 65 74  o_test e_createt
e8a0: 61 62 6c 65 2d 34 2e 31 37 2e 24 74 6e 2e 33 20  able-4.17.$tn.3 
e8b0: 7b 20 73 71 6c 69 74 65 33 5f 67 65 74 5f 61 75  { sqlite3_get_au
e8c0: 74 6f 63 6f 6d 6d 69 74 20 64 62 20 7d 20 24 61  tocommit db } $a
e8d0: 63 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  c.  do_execsql_t
e8e0: 65 73 74 20 34 2e 31 37 2e 24 74 6e 2e 34 20 22  est 4.17.$tn.4 "
e8f0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 24 74  SELECT * FROM $t
e900: 62 6c 22 20 24 64 61 74 61 0a 7d 0a 63 61 74 63  bl" $data.}.catc
e910: 68 73 71 6c 20 43 4f 4d 4d 49 54 0a 0a 23 20 45  hsql COMMIT..# E
e920: 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 31 32  VIDENCE-OF: R-12
e930: 36 34 35 2d 33 39 37 37 32 20 4f 72 2c 20 69 66  645-39772 Or, if
e940: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 64 65   a constraint de
e950: 66 69 6e 69 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  finition does no
e960: 74 0a 23 20 69 6e 63 6c 75 64 65 20 61 20 63 6f  t.# include a co
e970: 6e 66 6c 69 63 74 2d 63 6c 61 75 73 65 20 6f 72  nflict-clause or
e980: 20 69 74 20 69 73 20 61 20 43 48 45 43 4b 20 63   it is a CHECK c
e990: 6f 6e 73 74 72 61 69 6e 74 2c 20 74 68 65 20 64  onstraint, the d
e9a0: 65 66 61 75 6c 74 0a 23 20 63 6f 6e 66 6c 69 63  efault.# conflic
e9b0: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 6c 67  t resolution alg
e9c0: 6f 72 69 74 68 6d 20 69 73 20 41 42 4f 52 54 2e  orithm is ABORT.
e9d0: 0a 23 0a 23 20 20 20 20 20 54 68 65 20 66 69 72  .#.#     The fir
e9e0: 73 74 20 68 61 6c 66 20 6f 66 20 74 68 65 20 61  st half of the a
e9f0: 62 6f 76 65 20 69 73 20 74 65 73 74 65 64 20 61  bove is tested a
ea00: 6c 6f 6e 67 20 77 69 74 68 20 65 78 70 6c 69 63  long with explic
ea10: 69 74 20 4f 4e 20 0a 23 20 20 20 20 20 43 4f 4e  it ON .#     CON
ea20: 46 4c 49 43 54 20 63 6c 61 75 73 65 73 20 61 62  FLICT clauses ab
ea30: 6f 76 65 20 28 73 70 65 63 69 66 69 63 61 6c 6c  ove (specificall
ea40: 79 2c 20 74 68 65 20 74 65 73 74 73 20 69 6e 76  y, the tests inv
ea50: 6f 6c 76 69 6e 67 20 74 31 5f 78 78 2c 20 74 32  olving t1_xx, t2
ea60: 5f 78 78 0a 23 20 20 20 20 20 61 6e 64 20 74 33  _xx.#     and t3
ea70: 5f 78 78 29 2e 20 54 68 65 20 66 6f 6c 6c 6f 77  _xx). The follow
ea80: 69 6e 67 20 6a 75 73 74 20 74 65 73 74 73 20 74  ing just tests t
ea90: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
eaa0: 63 6f 6e 66 6c 69 63 74 0a 23 20 20 20 20 20 68  conflict.#     h
eab0: 61 6e 64 6c 69 6e 67 20 66 6f 72 20 43 48 45 43  andling for CHEC
eac0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 73  K constraints is
ead0: 20 41 42 4f 52 54 2e 0a 23 0a 64 6f 5f 65 78 65   ABORT..#.do_exe
eae0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 31  csql_test 4.18.1
eaf0: 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c   {.  CREATE TABL
eb00: 45 20 74 34 28 61 2c 20 62 20 43 48 45 43 4b 20  E t4(a, b CHECK 
eb10: 28 62 21 3d 31 30 29 29 3b 0a 20 20 49 4e 53 45  (b!=10));.  INSE
eb20: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
eb30: 53 28 31 2c 20 32 29 3b 0a 20 20 49 4e 53 45 52  S(1, 2);.  INSER
eb40: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
eb50: 28 33 2c 20 34 29 3b 0a 7d 0a 64 6f 5f 65 78 65  (3, 4);.}.do_exe
eb60: 63 73 71 6c 5f 74 65 73 74 20 20 34 2e 31 38 2e  csql_test  4.18.
eb70: 32 20 7b 20 42 45 47 49 4e 3b 20 49 4e 53 45 52  2 { BEGIN; INSER
eb80: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
eb90: 28 35 2c 20 36 29 20 7d 0a 64 6f 5f 63 61 74 63  (5, 6) }.do_catc
eba0: 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 38 2e 33  hsql_test 4.18.3
ebb0: 20 7b 20 0a 20 20 49 4e 53 45 52 54 20 49 4e 54   { .  INSERT INT
ebc0: 4f 20 74 34 20 53 45 4c 45 43 54 20 61 2b 34 2c  O t4 SELECT a+4,
ebd0: 20 62 2b 34 20 46 52 4f 4d 20 74 34 0a 7d 20 7b   b+4 FROM t4.} {
ebe0: 31 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61  1 {constraint fa
ebf0: 69 6c 65 64 7d 7d 0a 64 6f 5f 74 65 73 74 20 65  iled}}.do_test e
ec00: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 34 2e 31  _createtable-4.1
ec10: 38 2e 34 20 7b 20 73 71 6c 69 74 65 33 5f 67 65  8.4 { sqlite3_ge
ec20: 74 5f 61 75 74 6f 63 6f 6d 6d 69 74 20 64 62 20  t_autocommit db 
ec30: 7d 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  } 0.do_execsql_t
ec40: 65 73 74 20 34 2e 31 38 2e 35 20 7b 20 53 45 4c  est 4.18.5 { SEL
ec50: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20 7d 20  ECT * FROM t4 } 
ec60: 7b 31 20 32 20 33 20 34 20 35 20 36 7d 0a 0a 23  {1 2 3 4 5 6}..#
ec70: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
ec80: 31 39 31 31 34 2d 35 36 31 31 33 20 44 69 66 66  19114-56113 Diff
ec90: 65 72 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74  erent constraint
eca0: 73 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  s within the sam
ecb0: 65 20 74 61 62 6c 65 0a 23 20 6d 61 79 20 68 61  e table.# may ha
ecc0: 76 65 20 64 69 66 66 65 72 65 6e 74 20 64 65 66  ve different def
ecd0: 61 75 6c 74 20 63 6f 6e 66 6c 69 63 74 20 72 65  ault conflict re
ece0: 73 6f 6c 75 74 69 6f 6e 20 61 6c 67 6f 72 69 74  solution algorit
ecf0: 68 6d 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  hms..#.do_execsq
ed00: 6c 5f 74 65 73 74 20 34 2e 31 39 2e 30 20 7b 0a  l_test 4.19.0 {.
ed10: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
ed20: 35 28 61 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20  5(a NOT NULL ON 
ed30: 43 4f 4e 46 4c 49 43 54 20 49 47 4e 4f 52 45 2c  CONFLICT IGNORE,
ed40: 20 62 20 4e 4f 54 20 4e 55 4c 4c 20 4f 4e 20 43   b NOT NULL ON C
ed50: 4f 4e 46 4c 49 43 54 20 41 42 4f 52 54 29 3b 0a  ONFLICT ABORT);.
ed60: 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  }.do_catchsql_te
ed70: 73 74 20 34 2e 31 39 2e 31 20 7b 20 49 4e 53 45  st 4.19.1 { INSE
ed80: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
ed90: 53 28 4e 55 4c 4c 2c 20 27 6e 6f 74 20 6e 75 6c  S(NULL, 'not nul
eda0: 6c 27 29 20 7d 20 7b 30 20 7b 7d 7d 0a 64 6f 5f  l') } {0 {}}.do_
edb0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 20 34 2e  execsql_test  4.
edc0: 31 39 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20  19.2 { SELECT * 
edd0: 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a 64 6f 5f  FROM t5 } {}.do_
ede0: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e  catchsql_test 4.
edf0: 31 39 2e 33 20 7b 20 49 4e 53 45 52 54 20 49 4e  19.3 { INSERT IN
ee00: 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27 6e 6f  TO t5 VALUES('no
ee10: 74 20 6e 75 6c 6c 27 2c 20 4e 55 4c 4c 29 20 7d  t null', NULL) }
ee20: 20 5c 0a 20 20 7b 31 20 7b 74 35 2e 62 20 6d 61   \.  {1 {t5.b ma
ee30: 79 20 6e 6f 74 20 62 65 20 4e 55 4c 4c 7d 7d 0a  y not be NULL}}.
ee40: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
ee50: 20 34 2e 31 39 2e 34 20 7b 20 53 45 4c 45 43 54   4.19.4 { SELECT
ee60: 20 2a 20 46 52 4f 4d 20 74 35 20 7d 20 7b 7d 0a   * FROM t5 } {}.
ee70: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
ee80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
ee90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
eeb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
eec0: 74 73 20 66 6f 72 20 49 4e 54 45 47 45 52 20 50  ts for INTEGER P
eed0: 52 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 72  RIMARY KEY and r
eee0: 6f 77 69 64 20 72 65 6c 61 74 65 64 20 73 74 61  owid related sta
eef0: 74 65 6d 65 6e 74 73 2e 0a 23 0a 0a 23 20 45 56  tements..#..# EV
ef00: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 32 35  IDENCE-OF: R-525
ef10: 38 34 2d 30 34 30 30 39 20 54 68 65 20 72 6f 77  84-04009 The row
ef20: 69 64 20 76 61 6c 75 65 20 63 61 6e 20 62 65 20  id value can be 
ef30: 61 63 63 65 73 73 65 64 20 75 73 69 6e 67 20 6f  accessed using o
ef40: 6e 65 0a 23 20 6f 66 20 74 68 65 20 73 70 65 63  ne.# of the spec
ef50: 69 61 6c 20 63 61 73 65 2d 69 6e 64 65 70 65 6e  ial case-indepen
ef60: 64 65 6e 74 20 6e 61 6d 65 73 20 22 72 6f 77 69  dent names "rowi
ef70: 64 22 2c 20 22 6f 69 64 22 2c 20 6f 72 20 22 5f  d", "oid", or "_
ef80: 72 6f 77 69 64 5f 22 20 69 6e 0a 23 20 70 6c 61  rowid_" in.# pla
ef90: 63 65 20 6f 66 20 61 20 63 6f 6c 75 6d 6e 20 6e  ce of a column n
efa0: 61 6d 65 2e 0a 23 0a 64 72 6f 70 5f 61 6c 6c 5f  ame..#.drop_all_
efb0: 74 61 62 6c 65 73 0a 64 6f 5f 65 78 65 63 73 71  tables.do_execsq
efc0: 6c 5f 74 65 73 74 20 35 2e 31 2e 30 20 7b 0a 20  l_test 5.1.0 {. 
efd0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
efe0: 28 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54  (x, y);.  INSERT
eff0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
f000: 27 6f 6e 65 27 2c 20 27 66 69 72 73 74 27 29 3b  'one', 'first');
f010: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
f020: 31 20 56 41 4c 55 45 53 28 27 74 77 6f 27 2c 20  1 VALUES('two', 
f030: 27 73 65 63 6f 6e 64 27 29 3b 0a 20 20 49 4e 53  'second');.  INS
f040: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
f050: 45 53 28 27 74 68 72 65 65 27 2c 20 27 74 68 69  ES('three', 'thi
f060: 72 64 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61 74  rd');.}.do_creat
f070: 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 31  etable_tests 5.1
f080: 20 7b 0a 20 20 31 20 20 20 22 53 45 4c 45 43 54   {.  1   "SELECT
f090: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 22 20   rowid FROM t1" 
f0a0: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
f0b0: 20 32 20 20 20 22 53 45 4c 45 43 54 20 6f 69 64   2   "SELECT oid
f0c0: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20   FROM t1"       
f0d0: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 33 20 20     {1 2 3}.  3  
f0e0: 20 22 53 45 4c 45 43 54 20 5f 72 6f 77 69 64 5f   "SELECT _rowid_
f0f0: 20 46 52 4f 4d 20 74 31 22 20 20 20 20 20 20 7b   FROM t1"      {
f100: 31 20 32 20 33 7d 0a 20 20 34 20 20 20 22 53 45  1 2 3}.  4   "SE
f110: 4c 45 43 54 20 52 4f 57 49 44 20 46 52 4f 4d 20  LECT ROWID FROM 
f120: 74 31 22 20 20 20 20 20 20 20 20 7b 31 20 32 20  t1"        {1 2 
f130: 33 7d 0a 20 20 35 20 20 20 22 53 45 4c 45 43 54  3}.  5   "SELECT
f140: 20 4f 49 44 20 46 52 4f 4d 20 74 31 22 20 20 20   OID FROM t1"   
f150: 20 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 20         {1 2 3}. 
f160: 20 36 20 20 20 22 53 45 4c 45 43 54 20 5f 52 4f   6   "SELECT _RO
f170: 57 49 44 5f 20 46 52 4f 4d 20 74 31 22 20 20 20  WID_ FROM t1"   
f180: 20 20 20 7b 31 20 32 20 33 7d 0a 20 20 37 20 20     {1 2 3}.  7  
f190: 20 22 53 45 4c 45 43 54 20 52 6f 57 69 44 20 46   "SELECT RoWiD F
f1a0: 52 4f 4d 20 74 31 22 20 20 20 20 20 20 20 20 7b  ROM t1"        {
f1b0: 31 20 32 20 33 7d 0a 20 20 38 20 20 20 22 53 45  1 2 3}.  8   "SE
f1c0: 4c 45 43 54 20 4f 69 44 20 46 52 4f 4d 20 74 31  LECT OiD FROM t1
f1d0: 22 20 20 20 20 20 20 20 20 20 20 7b 31 20 32 20  "          {1 2 
f1e0: 33 7d 0a 20 20 39 20 20 20 22 53 45 4c 45 43 54  3}.  9   "SELECT
f1f0: 20 5f 52 6f 57 69 44 5f 20 46 52 4f 4d 20 74 31   _RoWiD_ FROM t1
f200: 22 20 20 20 20 20 20 7b 31 20 32 20 33 7d 0a 7d  "      {1 2 3}.}
f210: 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a  ..# EVIDENCE-OF:
f220: 20 52 2d 32 36 35 30 31 2d 31 37 33 30 36 20 49   R-26501-17306 I
f230: 66 20 61 20 74 61 62 6c 65 20 63 6f 6e 74 61 69  f a table contai
f240: 6e 73 20 61 20 75 73 65 72 20 64 65 66 69 6e 65  ns a user define
f250: 64 20 63 6f 6c 75 6d 6e 0a 23 20 6e 61 6d 65 64  d column.# named
f260: 20 22 72 6f 77 69 64 22 2c 20 22 6f 69 64 22 20   "rowid", "oid" 
f270: 6f 72 20 22 5f 72 6f 77 69 64 5f 22 2c 20 74 68  or "_rowid_", th
f280: 65 6e 20 74 68 61 74 20 6e 61 6d 65 20 61 6c 77  en that name alw
f290: 61 79 73 20 72 65 66 65 72 73 20 74 68 65 0a 23  ays refers the.#
f2a0: 20 65 78 70 6c 69 63 69 74 6c 79 20 64 65 63 6c   explicitly decl
f2b0: 61 72 65 64 20 63 6f 6c 75 6d 6e 20 61 6e 64 20  ared column and 
f2c0: 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64 20 74  cannot be used t
f2d0: 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20 69  o retrieve the i
f2e0: 6e 74 65 67 65 72 0a 23 20 72 6f 77 69 64 20 76  nteger.# rowid v
f2f0: 61 6c 75 65 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  alue..#.do_execs
f300: 71 6c 5f 74 65 73 74 20 35 2e 32 2e 30 20 7b 0a  ql_test 5.2.0 {.
f310: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
f320: 32 28 6f 69 64 2c 20 62 29 3b 0a 20 20 43 52 45  2(oid, b);.  CRE
f330: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 20  ATE TABLE t3(a, 
f340: 5f 72 6f 77 69 64 5f 29 3b 0a 20 20 43 52 45 41  _rowid_);.  CREA
f350: 54 45 20 54 41 42 4c 45 20 74 34 28 61 2c 20 62  TE TABLE t4(a, b
f360: 2c 20 72 6f 77 69 64 29 3b 0a 0a 20 20 49 4e 53  , rowid);..  INS
f370: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
f380: 45 53 28 27 6f 6e 65 27 2c 20 27 74 77 6f 27 29  ES('one', 'two')
f390: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
f3a0: 74 32 20 56 41 4c 55 45 53 28 27 74 68 72 65 65  t2 VALUES('three
f3b0: 27 2c 20 27 66 6f 75 72 27 29 3b 0a 0a 20 20 49  ', 'four');..  I
f3c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
f3d0: 4c 55 45 53 28 27 66 69 76 65 27 2c 20 27 73 69  LUES('five', 'si
f3e0: 78 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  x');.  INSERT IN
f3f0: 54 4f 20 74 33 20 56 41 4c 55 45 53 28 27 73 65  TO t3 VALUES('se
f400: 76 65 6e 27 2c 20 27 65 69 67 68 74 27 29 3b 0a  ven', 'eight');.
f410: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
f420: 34 20 56 41 4c 55 45 53 28 27 6e 69 6e 65 27 2c  4 VALUES('nine',
f430: 20 27 74 65 6e 27 2c 20 27 65 6c 65 76 65 6e 27   'ten', 'eleven'
f440: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
f450: 20 74 34 20 56 41 4c 55 45 53 28 27 74 77 65 6c   t4 VALUES('twel
f460: 76 65 27 2c 20 27 74 68 69 72 74 65 65 6e 27 2c  ve', 'thirteen',
f470: 20 27 66 6f 75 72 74 65 65 6e 27 29 3b 0a 7d 0a   'fourteen');.}.
f480: 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
f490: 65 73 74 73 20 35 2e 32 20 7b 0a 20 20 31 20 20  ests 5.2 {.  1  
f4a0: 20 22 53 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f   "SELECT oid, ro
f4b0: 77 69 64 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f  wid, _rowid_ FRO
f4c0: 4d 20 74 32 22 20 20 20 7b 6f 6e 65 20 31 20 31  M t2"   {one 1 1
f4d0: 20 20 20 20 20 20 74 68 72 65 65 20 32 20 32 7d        three 2 2}
f4e0: 0a 20 20 32 20 20 20 22 53 45 4c 45 43 54 20 6f  .  2   "SELECT o
f4f0: 69 64 2c 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69  id, rowid, _rowi
f500: 64 5f 20 46 52 4f 4d 20 74 33 22 20 20 20 7b 31  d_ FROM t3"   {1
f510: 20 31 20 73 69 78 20 20 20 20 20 20 32 20 32 20   1 six      2 2 
f520: 65 69 67 68 74 7d 20 0a 20 20 33 20 20 20 22 53  eight} .  3   "S
f530: 45 4c 45 43 54 20 6f 69 64 2c 20 72 6f 77 69 64  ELECT oid, rowid
f540: 2c 20 5f 72 6f 77 69 64 5f 20 46 52 4f 4d 20 74  , _rowid_ FROM t
f550: 34 22 20 20 20 7b 31 20 65 6c 65 76 65 6e 20 31  4"   {1 eleven 1
f560: 20 20 20 32 20 66 6f 75 72 74 65 65 6e 20 32 7d     2 fourteen 2}
f570: 0a 7d 0a 0a 0a 23 20 41 72 67 75 6d 65 6e 74 20  .}...# Argument 
f580: 24 74 62 6c 20 69 73 20 74 68 65 20 6e 61 6d 65  $tbl is the name
f590: 20 6f 66 20 61 20 74 61 62 6c 65 20 69 6e 20 74   of a table in t
f5a0: 68 65 20 64 61 74 61 62 61 73 65 2e 20 41 72 67  he database. Arg
f5b0: 75 6d 65 6e 74 20 24 63 6f 6c 20 69 73 0a 23 20  ument $col is.# 
f5c0: 74 68 65 20 6e 61 6d 65 20 6f 66 20 6f 6e 65 20  the name of one 
f5d0: 6f 66 20 74 68 65 20 74 61 62 6c 65 73 20 63 6f  of the tables co
f5e0: 6c 75 6d 6e 73 2e 20 52 65 74 75 72 6e 20 31 20  lumns. Return 1 
f5f0: 69 66 20 24 63 6f 6c 20 69 73 20 61 6e 20 61 6c  if $col is an al
f600: 69 61 73 20 66 6f 72 0a 23 20 74 68 65 20 72 6f  ias for.# the ro
f610: 77 69 64 2c 20 6f 72 20 30 20 6f 74 68 65 72 77  wid, or 0 otherw
f620: 69 73 65 2e 0a 23 0a 70 72 6f 63 20 69 73 5f 69  ise..#.proc is_i
f630: 6e 74 65 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b  nteger_primary_k
f640: 65 79 20 7b 74 62 6c 20 63 6f 6c 7d 20 7b 0a 20  ey {tbl col} {. 
f650: 20 6c 69 6e 64 65 78 20 5b 64 62 20 65 76 61 6c   lindex [db eval
f660: 20 5b 73 75 62 73 74 20 7b 0a 20 20 20 20 44 45   [subst {.    DE
f670: 4c 45 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b 0a  LETE FROM $tbl;.
f680: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
f690: 24 74 62 6c 20 28 24 63 6f 6c 29 20 56 41 4c 55  $tbl ($col) VALU
f6a0: 45 53 28 30 29 3b 0a 20 20 20 20 53 45 4c 45 43  ES(0);.    SELEC
f6b0: 54 20 28 72 6f 77 69 64 3d 3d 24 63 6f 6c 29 20  T (rowid==$col) 
f6c0: 46 52 4f 4d 20 24 74 62 6c 3b 0a 20 20 20 20 44  FROM $tbl;.    D
f6d0: 45 4c 45 54 45 20 46 52 4f 4d 20 24 74 62 6c 3b  ELETE FROM $tbl;
f6e0: 0a 20 20 7d 5d 5d 20 30 0a 7d 0a 0a 23 20 45 56  .  }]] 0.}..# EV
f6f0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 35 33 37  IDENCE-OF: R-537
f700: 33 38 2d 33 31 36 37 33 20 57 69 74 68 20 6f 6e  38-31673 With on
f710: 65 20 65 78 63 65 70 74 69 6f 6e 2c 20 69 66 20  e exception, if 
f720: 61 20 74 61 62 6c 65 20 68 61 73 20 61 0a 23 20  a table has a.# 
f730: 70 72 69 6d 61 72 79 20 6b 65 79 20 74 68 61 74  primary key that
f740: 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20 73   consists of a s
f750: 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2c 20 61 6e  ingle column, an
f760: 64 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 74  d the declared t
f770: 79 70 65 20 6f 66 0a 23 20 74 68 61 74 20 63 6f  ype of.# that co
f780: 6c 75 6d 6e 20 69 73 20 22 49 4e 54 45 47 45 52  lumn is "INTEGER
f790: 22 20 69 6e 20 61 6e 79 20 6d 69 78 74 75 72 65  " in any mixture
f7a0: 20 6f 66 20 75 70 70 65 72 20 61 6e 64 20 6c 6f   of upper and lo
f7b0: 77 65 72 20 63 61 73 65 2c 20 74 68 65 6e 0a 23  wer case, then.#
f7c0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 63 6f   the column beco
f7d0: 6d 65 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72  mes an alias for
f7e0: 20 74 68 65 20 72 6f 77 69 64 2e 0a 23 0a 23 20   the rowid..#.# 
f7f0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34  EVIDENCE-OF: R-4
f800: 35 39 35 31 2d 30 38 33 34 37 20 69 66 20 74 68  5951-08347 if th
f810: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 20 6f 66  e declaration of
f820: 20 61 20 63 6f 6c 75 6d 6e 20 77 69 74 68 0a 23   a column with.#
f830: 20 64 65 63 6c 61 72 65 64 20 74 79 70 65 20 22   declared type "
f840: 49 4e 54 45 47 45 52 22 20 69 6e 63 6c 75 64 65  INTEGER" include
f850: 73 20 61 6e 20 22 50 52 49 4d 41 52 59 20 4b 45  s an "PRIMARY KE
f860: 59 20 44 45 53 43 22 20 63 6c 61 75 73 65 2c 20  Y DESC" clause, 
f870: 69 74 20 64 6f 65 73 0a 23 20 6e 6f 74 20 62 65  it does.# not be
f880: 63 6f 6d 65 20 61 6e 20 61 6c 69 61 73 20 66 6f  come an alias fo
f890: 72 20 74 68 65 20 72 6f 77 69 64 20 61 6e 64 20  r the rowid and 
f8a0: 69 73 20 6e 6f 74 20 63 6c 61 73 73 69 66 69 65  is not classifie
f8b0: 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 0a  d as an integer.
f8c0: 23 20 70 72 69 6d 61 72 79 20 6b 65 79 2e 0a 23  # primary key..#
f8d0: 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f  .do_createtable_
f8e0: 74 65 73 74 73 20 35 2e 33 20 2d 74 63 6c 71 75  tests 5.3 -tclqu
f8f0: 65 72 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65  ery { .  is_inte
f900: 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20  ger_primary_key 
f910: 74 35 20 70 6b 0a 7d 20 2d 72 65 70 61 69 72 20  t5 pk.} -repair 
f920: 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44  {.  catchsql { D
f930: 52 4f 50 20 54 41 42 4c 45 20 74 35 20 7d 0a 7d  ROP TABLE t5 }.}
f940: 20 7b 0a 20 20 31 20 20 20 22 43 52 45 41 54 45   {.  1   "CREATE
f950: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
f960: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
f970: 29 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20  )"              
f980: 20 20 20 20 20 20 20 20 20 20 20 31 0a 20 20 32             1.  2
f990: 20 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45     "CREATE TABLE
f9a0: 20 74 35 28 70 6b 20 69 6e 74 65 67 65 72 2c 20   t5(pk integer, 
f9b0: 70 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29  primary key(pk))
f9c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
f9d0: 20 20 20 20 20 31 0a 20 20 33 20 20 20 22 43 52       1.  3   "CR
f9e0: 45 41 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b  EATE TABLE t5(pk
f9f0: 20 69 6e 74 65 67 65 72 2c 20 76 20 69 6e 74 65   integer, v inte
fa00: 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79  ger, primary key
fa10: 28 70 6b 29 29 22 20 20 20 20 20 20 20 20 20 31  (pk))"         1
fa20: 0a 20 20 34 20 20 20 22 43 52 45 41 54 45 20 54  .  4   "CREATE T
fa30: 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74 65 67  ABLE t5(pk integ
fa40: 65 72 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70  er, v integer, p
fa50: 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 2c 20 76  rimary key(pk, v
fa60: 29 29 22 20 20 20 20 20 20 30 0a 20 20 35 20 20  ))"      0.  5  
fa70: 20 22 43 52 45 41 54 45 20 54 41 42 4c 45 20 74   "CREATE TABLE t
fa80: 35 28 70 6b 20 69 6e 74 2c 20 76 20 69 6e 74 65  5(pk int, v inte
fa90: 67 65 72 2c 20 70 72 69 6d 61 72 79 20 6b 65 79  ger, primary key
faa0: 28 70 6b 2c 20 76 29 29 22 20 20 20 20 20 20 20  (pk, v))"       
fab0: 20 20 20 30 0a 20 20 36 20 20 20 22 43 52 45 41     0.  6   "CREA
fac0: 54 45 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69  TE TABLE t5(pk i
fad0: 6e 74 2c 20 76 20 69 6e 74 65 67 65 72 2c 20 70  nt, v integer, p
fae0: 72 69 6d 61 72 79 20 6b 65 79 28 70 6b 29 29 22  rimary key(pk))"
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 20               0. 
fb00: 20 37 20 20 20 22 43 52 45 41 54 45 20 54 41 42   7   "CREATE TAB
fb10: 4c 45 20 74 35 28 70 6b 20 69 6e 74 20 70 72 69  LE t5(pk int pri
fb20: 6d 61 72 79 20 6b 65 79 2c 20 76 20 69 6e 74 65  mary key, v inte
fb30: 67 65 72 29 22 20 20 20 20 20 20 20 20 20 20 20  ger)"           
fb40: 20 20 20 20 20 20 20 30 0a 20 20 38 20 20 20 22         0.  8   "
fb50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35 28  CREATE TABLE t5(
fb60: 70 6b 20 69 6e 54 45 67 65 72 20 70 72 69 6d 61  pk inTEger prima
fb70: 72 79 20 6b 65 79 29 22 20 20 20 20 20 20 20 20  ry key)"        
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb90: 20 31 0a 20 20 39 20 20 20 22 43 52 45 41 54 45   1.  9   "CREATE
fba0: 20 54 41 42 4c 45 20 74 35 28 70 6b 20 69 6e 74   TABLE t5(pk int
fbb0: 65 47 45 72 2c 20 70 72 69 6d 61 72 79 20 6b 65  eGEr, primary ke
fbc0: 79 28 70 6b 29 29 22 20 20 20 20 20 20 20 20 20  y(pk))"         
fbd0: 20 20 20 20 20 20 20 20 20 20 20 31 0a 20 20 31             1.  1
fbe0: 30 20 20 22 43 52 45 41 54 45 20 54 41 42 4c 45  0  "CREATE TABLE
fbf0: 20 74 35 28 70 6b 20 49 4e 54 45 47 45 52 2c 20   t5(pk INTEGER, 
fc00: 76 20 69 6e 74 65 67 65 72 2c 20 70 72 69 6d 61  v integer, prima
fc10: 72 79 20 6b 65 79 28 70 6b 29 29 22 20 20 20 20  ry key(pk))"    
fc20: 20 20 20 20 20 31 0a 7d 0a 0a 23 20 45 56 49 44       1.}..# EVID
fc30: 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 31 34 34 34  ENCE-OF: R-41444
fc40: 2d 34 39 36 36 35 20 4f 74 68 65 72 20 69 6e 74  -49665 Other int
fc50: 65 67 65 72 20 74 79 70 65 20 6e 61 6d 65 73 20  eger type names 
fc60: 6c 69 6b 65 20 22 49 4e 54 22 20 6f 72 0a 23 20  like "INT" or.# 
fc70: 22 42 49 47 49 4e 54 22 20 6f 72 20 22 53 48 4f  "BIGINT" or "SHO
fc80: 52 54 20 49 4e 54 45 47 45 52 22 20 6f 72 20 22  RT INTEGER" or "
fc90: 55 4e 53 49 47 4e 45 44 20 49 4e 54 45 47 45 52  UNSIGNED INTEGER
fca0: 22 20 63 61 75 73 65 73 20 74 68 65 20 70 72 69  " causes the pri
fcb0: 6d 61 72 79 0a 23 20 6b 65 79 20 63 6f 6c 75 6d  mary.# key colum
fcc0: 6e 20 74 6f 20 62 65 68 61 76 65 20 61 73 20 61  n to behave as a
fcd0: 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65  n ordinary table
fce0: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 69 6e 74   column with int
fcf0: 65 67 65 72 20 61 66 66 69 6e 69 74 79 0a 23 20  eger affinity.# 
fd00: 61 6e 64 20 61 20 75 6e 69 71 75 65 20 69 6e 64  and a unique ind
fd10: 65 78 2c 20 6e 6f 74 20 61 73 20 61 6e 20 61 6c  ex, not as an al
fd20: 69 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69  ias for the rowi
fd30: 64 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  d..#.do_execsql_
fd40: 74 65 73 74 20 35 2e 34 2e 31 20 7b 0a 20 20 43  test 5.4.1 {.  C
fd50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 70  REATE TABLE t6(p
fd60: 6b 20 49 4e 54 20 70 72 69 6d 61 72 79 20 6b 65  k INT primary ke
fd70: 79 29 3b 0a 20 20 43 52 45 41 54 45 20 54 41 42  y);.  CREATE TAB
fd80: 4c 45 20 74 37 28 70 6b 20 42 49 47 49 4e 54 20  LE t7(pk BIGINT 
fd90: 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20 20  primary key);.  
fda0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28  CREATE TABLE t8(
fdb0: 70 6b 20 53 48 4f 52 54 20 49 4e 54 45 47 45 52  pk SHORT INTEGER
fdc0: 20 70 72 69 6d 61 72 79 20 6b 65 79 29 3b 0a 20   primary key);. 
fdd0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 39   CREATE TABLE t9
fde0: 28 70 6b 20 55 4e 53 49 47 4e 45 44 20 49 4e 54  (pk UNSIGNED INT
fdf0: 45 47 45 52 20 70 72 69 6d 61 72 79 20 6b 65 79  EGER primary key
fe00: 29 3b 0a 7d 20 0a 64 6f 5f 74 65 73 74 20 65 5f  );.} .do_test e_
fe10: 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34 2e  createtable-5.4.
fe20: 32 2e 31 20 7b 20 69 73 5f 69 6e 74 65 67 65 72  2.1 { is_integer
fe30: 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 36 20  _primary_key t6 
fe40: 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20 65  pk } 0.do_test e
fe50: 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e 34  _createtable-5.4
fe60: 2e 32 2e 32 20 7b 20 69 73 5f 69 6e 74 65 67 65  .2.2 { is_intege
fe70: 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74 37  r_primary_key t7
fe80: 20 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74 20   pk } 0.do_test 
fe90: 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35 2e  e_createtable-5.
fea0: 34 2e 32 2e 33 20 7b 20 69 73 5f 69 6e 74 65 67  4.2.3 { is_integ
feb0: 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20 74  er_primary_key t
fec0: 38 20 70 6b 20 7d 20 30 0a 64 6f 5f 74 65 73 74  8 pk } 0.do_test
fed0: 20 65 5f 63 72 65 61 74 65 74 61 62 6c 65 2d 35   e_createtable-5
fee0: 2e 34 2e 32 2e 34 20 7b 20 69 73 5f 69 6e 74 65  .4.2.4 { is_inte
fef0: 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20  ger_primary_key 
ff00: 74 39 20 70 6b 20 7d 20 30 0a 0a 64 6f 5f 65 78  t9 pk } 0..do_ex
ff10: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 34 2e 33  ecsql_test 5.4.3
ff20: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
ff30: 20 74 36 20 56 41 4c 55 45 53 28 27 32 2e 30 27   t6 VALUES('2.0'
ff40: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
ff50: 20 74 37 20 56 41 4c 55 45 53 28 27 32 2e 30 27   t7 VALUES('2.0'
ff60: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
ff70: 20 74 38 20 56 41 4c 55 45 53 28 27 32 2e 30 27   t8 VALUES('2.0'
ff80: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
ff90: 20 74 39 20 56 41 4c 55 45 53 28 27 32 2e 30 27   t9 VALUES('2.0'
ffa0: 29 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65  );.  SELECT type
ffb0: 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d 20  of(pk), pk FROM 
ffc0: 74 36 3b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  t6;.  SELECT typ
ffd0: 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f 4d  eof(pk), pk FROM
ffe0: 20 74 37 3b 0a 20 20 53 45 4c 45 43 54 20 74 79   t7;.  SELECT ty
fff0: 70 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52 4f  peof(pk), pk FRO
10000 4d 20 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 74  M t8;.  SELECT t
10010 79 70 65 6f 66 28 70 6b 29 2c 20 70 6b 20 46 52  ypeof(pk), pk FR
10020 4f 4d 20 74 39 3b 0a 7d 20 7b 69 6e 74 65 67 65  OM t9;.} {intege
10030 72 20 32 20 69 6e 74 65 67 65 72 20 32 20 69 6e  r 2 integer 2 in
10040 74 65 67 65 72 20 32 20 69 6e 74 65 67 65 72 20  teger 2 integer 
10050 32 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  2}..do_catchsql_
10060 74 65 73 74 20 35 2e 34 2e 34 2e 31 20 7b 20 0a  test 5.4.4.1 { .
10070 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
10080 20 56 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31   VALUES(2) .} {1
10090 20 7b 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e   {column pk is n
100a0 6f 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63  ot unique}}.do_c
100b0 61 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34  atchsql_test 5.4
100c0 2e 34 2e 32 20 7b 20 0a 20 20 49 4e 53 45 52 54  .4.2 { .  INSERT
100d0 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28   INTO t7 VALUES(
100e0 32 29 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e  2) .} {1 {column
100f0 20 70 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75   pk is not uniqu
10100 65 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  e}}.do_catchsql_
10110 74 65 73 74 20 35 2e 34 2e 34 2e 33 20 7b 20 0a  test 5.4.4.3 { .
10120 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 38    INSERT INTO t8
10130 20 56 41 4c 55 45 53 28 32 29 20 0a 7d 20 7b 31   VALUES(2) .} {1
10140 20 7b 63 6f 6c 75 6d 6e 20 70 6b 20 69 73 20 6e   {column pk is n
10150 6f 74 20 75 6e 69 71 75 65 7d 7d 0a 64 6f 5f 63  ot unique}}.do_c
10160 61 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 34  atchsql_test 5.4
10170 2e 34 2e 34 20 7b 20 0a 20 20 49 4e 53 45 52 54  .4.4 { .  INSERT
10180 20 49 4e 54 4f 20 74 39 20 56 41 4c 55 45 53 28   INTO t9 VALUES(
10190 32 29 20 0a 7d 20 7b 31 20 7b 63 6f 6c 75 6d 6e  2) .} {1 {column
101a0 20 70 6b 20 69 73 20 6e 6f 74 20 75 6e 69 71 75   pk is not uniqu
101b0 65 7d 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d  e}}..# EVIDENCE-
101c0 4f 46 3a 20 52 2d 35 36 30 39 34 2d 35 37 38 33  OF: R-56094-5783
101d0 30 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  0 the following 
101e0 74 68 72 65 65 20 74 61 62 6c 65 20 64 65 63 6c  three table decl
101f0 61 72 61 74 69 6f 6e 73 20 61 6c 6c 0a 23 20 63  arations all.# c
10200 61 75 73 65 20 74 68 65 20 63 6f 6c 75 6d 6e 20  ause the column 
10210 22 78 22 20 74 6f 20 62 65 20 61 6e 20 61 6c 69  "x" to be an ali
10220 61 73 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  as for the rowid
10230 20 28 61 6e 20 69 6e 74 65 67 65 72 20 70 72 69   (an integer pri
10240 6d 61 72 79 0a 23 20 6b 65 79 29 3a 20 43 52 45  mary.# key): CRE
10250 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
10260 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
10270 59 20 41 53 43 2c 20 79 2c 20 7a 29 3b 20 43 52  Y ASC, y, z); CR
10280 45 41 54 45 20 54 41 42 4c 45 0a 23 20 74 28 78  EATE TABLE.# t(x
10290 20 49 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20   INTEGER, y, z, 
102a0 50 52 49 4d 41 52 59 20 4b 45 59 28 78 20 41 53  PRIMARY KEY(x AS
102b0 43 29 29 3b 20 43 52 45 41 54 45 20 54 41 42 4c  C)); CREATE TABL
102c0 45 20 74 28 78 20 49 4e 54 45 47 45 52 2c 20 79  E t(x INTEGER, y
102d0 2c 0a 23 20 7a 2c 20 50 52 49 4d 41 52 59 20 4b  ,.# z, PRIMARY K
102e0 45 59 28 78 20 44 45 53 43 29 29 3b 0a 23 0a 23  EY(x DESC));.#.#
102f0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
10300 32 30 31 34 39 2d 32 35 38 38 34 20 74 68 65 20  20149-25884 the 
10310 66 6f 6c 6c 6f 77 69 6e 67 20 64 65 63 6c 61 72  following declar
10320 61 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 72  ation does not r
10330 65 73 75 6c 74 0a 23 20 69 6e 20 22 78 22 20 62  esult.# in "x" b
10340 65 69 6e 67 20 61 6e 20 61 6c 69 61 73 20 66 6f  eing an alias fo
10350 72 20 74 68 65 20 72 6f 77 69 64 3a 20 43 52 45  r the rowid: CRE
10360 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e  ATE TABLE t(x IN
10370 54 45 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20  TEGER PRIMARY.# 
10380 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29 3b  KEY DESC, y, z);
10390 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .#.do_createtabl
103a0 65 5f 74 65 73 74 73 20 35 20 2d 74 63 6c 71 75  e_tests 5 -tclqu
103b0 65 72 79 20 7b 20 0a 20 20 69 73 5f 69 6e 74 65  ery { .  is_inte
103c0 67 65 72 5f 70 72 69 6d 61 72 79 5f 6b 65 79 20  ger_primary_key 
103d0 74 20 78 0a 7d 20 2d 72 65 70 61 69 72 20 7b 0a  t x.} -repair {.
103e0 20 20 63 61 74 63 68 73 71 6c 20 7b 20 44 52 4f    catchsql { DRO
103f0 50 20 54 41 42 4c 45 20 74 20 7d 0a 7d 20 7b 0a  P TABLE t }.} {.
10400 20 20 35 2e 31 20 20 20 20 22 43 52 45 41 54 45    5.1    "CREATE
10410 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54 45 47   TABLE t(x INTEG
10420 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 41  ER PRIMARY KEY A
10430 53 43 2c 20 79 2c 20 7a 29 22 20 20 20 20 20 20  SC, y, z)"      
10440 31 0a 20 20 35 2e 32 20 20 20 20 22 43 52 45 41  1.  5.2    "CREA
10450 54 45 20 54 41 42 4c 45 20 74 28 78 20 49 4e 54  TE TABLE t(x INT
10460 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52 49 4d  EGER, y, z, PRIM
10470 41 52 59 20 4b 45 59 28 78 20 41 53 43 29 29 22  ARY KEY(x ASC))"
10480 20 20 31 0a 20 20 35 2e 33 20 20 20 20 22 43 52    1.  5.3    "CR
10490 45 41 54 45 20 54 41 42 4c 45 20 74 28 78 20 49  EATE TABLE t(x I
104a0 4e 54 45 47 45 52 2c 20 79 2c 20 7a 2c 20 50 52  NTEGER, y, z, PR
104b0 49 4d 41 52 59 20 4b 45 59 28 78 20 44 45 53 43  IMARY KEY(x DESC
104c0 29 29 22 20 31 0a 20 20 36 2e 31 20 20 20 20 22  ))" 1.  6.1    "
104d0 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 28 78  CREATE TABLE t(x
104e0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
104f0 20 4b 45 59 20 44 45 53 43 2c 20 79 2c 20 7a 29   KEY DESC, y, z)
10500 22 20 20 20 20 20 30 0a 7d 0a 0a 23 20 45 56 49  "     0.}..# EVI
10510 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 33 37 33  DENCE-OF: R-0373
10520 33 2d 32 39 37 33 34 20 52 6f 77 69 64 20 76 61  3-29734 Rowid va
10530 6c 75 65 73 20 6d 61 79 20 62 65 20 6d 6f 64 69  lues may be modi
10540 66 69 65 64 20 75 73 69 6e 67 20 61 6e 0a 23 20  fied using an.# 
10550 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
10560 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
10570 20 61 73 20 61 6e 79 20 6f 74 68 65 72 20 63 6f   as any other co
10580 6c 75 6d 6e 20 76 61 6c 75 65 20 63 61 6e 2c 20  lumn value can, 
10590 65 69 74 68 65 72 0a 23 20 75 73 69 6e 67 20 6f  either.# using o
105a0 6e 65 20 6f 66 20 74 68 65 20 62 75 69 6c 74 2d  ne of the built-
105b0 69 6e 20 61 6c 69 61 73 65 73 20 28 22 72 6f 77  in aliases ("row
105c0 69 64 22 2c 20 22 6f 69 64 22 20 6f 72 20 22 5f  id", "oid" or "_
105d0 72 6f 77 69 64 5f 22 29 20 6f 72 20 62 79 0a 23  rowid_") or by.#
105e0 20 75 73 69 6e 67 20 61 6e 20 61 6c 69 61 73 20   using an alias 
105f0 63 72 65 61 74 65 64 20 62 79 20 61 6e 20 69 6e  created by an in
10600 74 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65  teger primary ke
10610 79 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  y..#.do_execsql_
10620 74 65 73 74 20 35 2e 37 2e 30 20 7b 0a 20 20 43  test 5.7.0 {.  C
10630 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 30 28  REATE TABLE t10(
10640 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20  a, b);.  INSERT 
10650 49 4e 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28  INTO t10 VALUES(
10660 27 74 65 6e 27 2c 20 31 30 29 3b 0a 0a 20 20 43  'ten', 10);..  C
10670 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 31 28  REATE TABLE t11(
10680 61 2c 20 62 20 49 4e 54 45 47 45 52 20 50 52 49  a, b INTEGER PRI
10690 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 49 4e 53  MARY KEY);.  INS
106a0 45 52 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c  ERT INTO t11 VAL
106b0 55 45 53 28 27 74 65 6e 27 2c 20 31 30 29 3b 0a  UES('ten', 10);.
106c0 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65  }.do_createtable
106d0 5f 74 65 73 74 73 20 35 2e 37 2e 31 20 2d 71 75  _tests 5.7.1 -qu
106e0 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  ery { .  SELECT 
106f0 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64 5f 2c 20  rowid, _rowid_, 
10700 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20  oid FROM t10;.} 
10710 7b 0a 20 20 31 20 20 20 20 22 55 50 44 41 54 45  {.  1    "UPDATE
10720 20 74 31 30 20 53 45 54 20 72 6f 77 69 64 20 3d   t10 SET rowid =
10730 20 35 22 20 20 20 7b 35 20 35 20 35 7d 0a 20 20   5"   {5 5 5}.  
10740 32 20 20 20 20 22 55 50 44 41 54 45 20 74 31 30  2    "UPDATE t10
10750 20 53 45 54 20 5f 72 6f 77 69 64 5f 20 3d 20 36   SET _rowid_ = 6
10760 22 20 7b 36 20 36 20 36 7d 0a 20 20 33 20 20 20  " {6 6 6}.  3   
10770 20 22 55 50 44 41 54 45 20 74 31 30 20 53 45 54   "UPDATE t10 SET
10780 20 6f 69 64 20 3d 20 37 22 20 20 20 20 20 7b 37   oid = 7"     {7
10790 20 37 20 37 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74   7 7}.}.do_creat
107a0 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 37  etable_tests 5.7
107b0 2e 32 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53  .2 -query { .  S
107c0 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f  ELECT rowid, _ro
107d0 77 69 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f  wid_, oid, b FRO
107e0 4d 20 74 31 31 3b 0a 7d 20 7b 0a 20 20 31 20 20  M t11;.} {.  1  
107f0 20 20 22 55 50 44 41 54 45 20 74 31 31 20 53 45    "UPDATE t11 SE
10800 54 20 72 6f 77 69 64 20 3d 20 35 22 20 20 20 7b  T rowid = 5"   {
10810 35 20 35 20 35 20 35 7d 0a 20 20 32 20 20 20 20  5 5 5 5}.  2    
10820 22 55 50 44 41 54 45 20 74 31 31 20 53 45 54 20  "UPDATE t11 SET 
10830 5f 72 6f 77 69 64 5f 20 3d 20 36 22 20 7b 36 20  _rowid_ = 6" {6 
10840 36 20 36 20 36 7d 0a 20 20 33 20 20 20 20 22 55  6 6 6}.  3    "U
10850 50 44 41 54 45 20 74 31 31 20 53 45 54 20 6f 69  PDATE t11 SET oi
10860 64 20 3d 20 37 22 20 20 20 20 20 7b 37 20 37 20  d = 7"     {7 7 
10870 37 20 37 7d 0a 20 20 34 20 20 20 20 22 55 50 44  7 7}.  4    "UPD
10880 41 54 45 20 74 31 31 20 53 45 54 20 62 20 3d 20  ATE t11 SET b = 
10890 38 22 20 20 20 20 20 20 20 7b 38 20 38 20 38 20  8"       {8 8 8 
108a0 38 7d 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45  8}.}..# EVIDENCE
108b0 2d 4f 46 3a 20 52 2d 35 38 37 30 36 2d 31 34 32  -OF: R-58706-142
108c0 32 39 20 53 69 6d 69 6c 61 72 6c 79 2c 20 61 6e  29 Similarly, an
108d0 20 49 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e   INSERT statemen
108e0 74 20 6d 61 79 20 70 72 6f 76 69 64 65 0a 23 20  t may provide.# 
108f0 61 20 76 61 6c 75 65 20 74 6f 20 75 73 65 20 61  a value to use a
10900 73 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  s the rowid for 
10910 65 61 63 68 20 72 6f 77 20 69 6e 73 65 72 74 65  each row inserte
10920 64 2e 0a 23 0a 64 6f 5f 63 72 65 61 74 65 74 61  d..#.do_createta
10930 62 6c 65 5f 74 65 73 74 73 20 35 2e 38 2e 31 20  ble_tests 5.8.1 
10940 2d 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45  -query { .  SELE
10950 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f 77 69 64  CT rowid, _rowid
10960 5f 2c 20 6f 69 64 20 46 52 4f 4d 20 74 31 30 3b  _, oid FROM t10;
10970 0a 7d 20 2d 72 65 70 61 69 72 20 7b 20 0a 20 20  .} -repair { .  
10980 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45  execsql { DELETE
10990 20 46 52 4f 4d 20 74 31 30 20 7d 20 0a 7d 20 7b   FROM t10 } .} {
109a0 0a 20 20 31 20 20 20 20 22 49 4e 53 45 52 54 20  .  1    "INSERT 
109b0 49 4e 54 4f 20 74 31 30 28 6f 69 64 29 20 56 41  INTO t10(oid) VA
109c0 4c 55 45 53 28 31 35 29 22 20 20 20 20 20 20 20  LUES(15)"       
109d0 20 20 20 20 7b 31 35 20 31 35 20 31 35 7d 0a 20      {15 15 15}. 
109e0 20 32 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e   2    "INSERT IN
109f0 54 4f 20 74 31 30 28 72 6f 77 69 64 29 20 56 41  TO t10(rowid) VA
10a00 4c 55 45 53 28 31 36 29 22 20 20 20 20 20 20 20  LUES(16)"       
10a10 20 20 7b 31 36 20 31 36 20 31 36 7d 0a 20 20 33    {16 16 16}.  3
10a20 20 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f      "INSERT INTO
10a30 20 74 31 30 28 5f 72 6f 77 69 64 5f 29 20 56 41   t10(_rowid_) VA
10a40 4c 55 45 53 28 31 37 29 22 20 20 20 20 20 20 20  LUES(17)"       
10a50 7b 31 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20  {17 17 17}.  4  
10a60 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74    "INSERT INTO t
10a70 31 30 28 61 2c 20 62 2c 20 6f 69 64 29 20 56 41  10(a, b, oid) VA
10a80 4c 55 45 53 28 31 2c 32 2c 33 29 22 20 20 7b 33  LUES(1,2,3)"  {3
10a90 20 33 20 33 7d 0a 7d 0a 64 6f 5f 63 72 65 61 74   3 3}.}.do_creat
10aa0 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e 38  etable_tests 5.8
10ab0 2e 32 20 2d 71 75 65 72 79 20 7b 20 0a 20 20 53  .2 -query { .  S
10ac0 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 5f 72 6f  ELECT rowid, _ro
10ad0 77 69 64 5f 2c 20 6f 69 64 2c 20 62 20 46 52 4f  wid_, oid, b FRO
10ae0 4d 20 74 31 31 3b 0a 7d 20 2d 72 65 70 61 69 72  M t11;.} -repair
10af0 20 7b 20 0a 20 20 65 78 65 63 73 71 6c 20 7b 20   { .  execsql { 
10b00 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 31 20  DELETE FROM t11 
10b10 7d 20 0a 7d 20 7b 0a 20 20 31 20 20 20 20 22 49  } .} {.  1    "I
10b20 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 6f  NSERT INTO t11(o
10b30 69 64 29 20 56 41 4c 55 45 53 28 31 35 29 22 20  id) VALUES(15)" 
10b40 20 20 20 20 20 20 20 20 20 20 7b 31 35 20 31 35            {15 15
10b50 20 31 35 20 31 35 7d 0a 20 20 32 20 20 20 20 22   15 15}.  2    "
10b60 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28  INSERT INTO t11(
10b70 72 6f 77 69 64 29 20 56 41 4c 55 45 53 28 31 36  rowid) VALUES(16
10b80 29 22 20 20 20 20 20 20 20 20 20 7b 31 36 20 31  )"         {16 1
10b90 36 20 31 36 20 31 36 7d 0a 20 20 33 20 20 20 20  6 16 16}.  3    
10ba0 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31  "INSERT INTO t11
10bb0 28 5f 72 6f 77 69 64 5f 29 20 56 41 4c 55 45 53  (_rowid_) VALUES
10bc0 28 31 37 29 22 20 20 20 20 20 20 20 7b 31 37 20  (17)"       {17 
10bd0 31 37 20 31 37 20 31 37 7d 0a 20 20 34 20 20 20  17 17 17}.  4   
10be0 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
10bf0 31 28 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31  1(a, b) VALUES(1
10c00 2c 32 29 22 20 20 20 20 20 20 20 20 20 7b 32 20  ,2)"         {2 
10c10 32 20 32 20 32 7d 0a 7d 0a 0a 23 20 45 56 49 44  2 2 2}.}..# EVID
10c20 45 4e 43 45 2d 4f 46 3a 20 52 2d 33 32 33 32 36  ENCE-OF: R-32326
10c30 2d 34 34 35 39 32 20 55 6e 6c 69 6b 65 20 6e 6f  -44592 Unlike no
10c40 72 6d 61 6c 20 53 51 4c 69 74 65 20 63 6f 6c 75  rmal SQLite colu
10c50 6d 6e 73 2c 20 61 6e 20 69 6e 74 65 67 65 72 0a  mns, an integer.
10c60 23 20 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72  # primary key or
10c70 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e 20 6d 75   rowid column mu
10c80 73 74 20 63 6f 6e 74 61 69 6e 20 69 6e 74 65 67  st contain integ
10c90 65 72 20 76 61 6c 75 65 73 2e 20 49 6e 74 65 67  er values. Integ
10ca0 65 72 0a 23 20 70 72 69 6d 61 72 79 20 6b 65 79  er.# primary key
10cb0 20 6f 72 20 72 6f 77 69 64 20 63 6f 6c 75 6d 6e   or rowid column
10cc0 73 20 61 72 65 20 6e 6f 74 20 61 62 6c 65 20 74  s are not able t
10cd0 6f 20 68 6f 6c 64 20 66 6c 6f 61 74 69 6e 67 20  o hold floating 
10ce0 70 6f 69 6e 74 0a 23 20 76 61 6c 75 65 73 2c 20  point.# values, 
10cf0 73 74 72 69 6e 67 73 2c 20 42 4c 4f 42 73 2c 20  strings, BLOBs, 
10d00 6f 72 20 4e 55 4c 4c 73 2e 0a 23 0a 23 20 20 20  or NULLs..#.#   
10d10 20 20 54 68 69 73 20 69 73 20 63 6f 6e 73 69 64    This is consid
10d20 65 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74  ered by the test
10d30 73 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  s for the follow
10d40 69 6e 67 20 33 20 73 74 61 74 65 6d 65 6e 74 73  ing 3 statements
10d50 2c 0a 23 20 20 20 20 20 77 68 69 63 68 20 73 68  ,.#     which sh
10d60 6f 77 20 74 68 61 74 3a 0a 23 0a 23 20 20 20 20  ow that:.#.#    
10d70 20 20 20 31 2e 20 41 74 74 65 6d 70 74 73 20 74     1. Attempts t
10d80 6f 20 55 50 44 41 54 45 20 61 20 72 6f 77 69 64  o UPDATE a rowid
10d90 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 6e 6f 6e   column to a non
10da0 2d 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 66  -integer value f
10db0 61 69 6c 2c 0a 23 20 20 20 20 20 20 20 32 2e 20  ail,.#       2. 
10dc0 41 74 74 65 6d 70 74 73 20 74 6f 20 49 4e 53 45  Attempts to INSE
10dd0 52 54 20 61 20 72 65 61 6c 2c 20 73 74 72 69 6e  RT a real, strin
10de0 67 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75 65 20  g or blob value 
10df0 69 6e 74 6f 20 61 20 72 6f 77 69 64 20 0a 23 20  into a rowid .# 
10e00 20 20 20 20 20 20 20 20 20 63 6f 6c 75 6d 6e 20           column 
10e10 66 61 69 6c 2c 20 61 6e 64 0a 23 20 20 20 20 20  fail, and.#     
10e20 20 20 33 2e 20 41 74 74 65 6d 70 74 69 6e 67 20    3. Attempting 
10e30 74 6f 20 49 4e 53 45 52 54 20 61 20 4e 55 4c 4c  to INSERT a NULL
10e40 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 72 6f   value into a ro
10e50 77 69 64 20 63 6f 6c 75 6d 6e 20 63 61 75 73 65  wid column cause
10e60 73 20 74 68 65 0a 23 20 20 20 20 20 20 20 20 20  s the.#         
10e70 20 73 79 73 74 65 6d 20 74 6f 20 61 75 74 6f 6d   system to autom
10e80 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 20  atically select 
10e90 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
10ea0 20 74 6f 20 75 73 65 2e 0a 23 0a 0a 0a 23 20 45   to use..#...# E
10eb0 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 36 34  VIDENCE-OF: R-64
10ec0 32 32 34 2d 36 32 35 37 38 20 49 66 20 61 6e 20  224-62578 If an 
10ed0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
10ee0 20 61 74 74 65 6d 70 74 73 20 74 6f 20 73 65 74   attempts to set
10ef0 20 61 6e 0a 23 20 69 6e 74 65 67 65 72 20 70 72   an.# integer pr
10f00 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72 6f 77  imary key or row
10f10 69 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 61 20 4e  id column to a N
10f20 55 4c 4c 20 6f 72 20 62 6c 6f 62 20 76 61 6c 75  ULL or blob valu
10f30 65 2c 20 6f 72 20 74 6f 20 61 0a 23 20 73 74 72  e, or to a.# str
10f40 69 6e 67 20 6f 72 20 72 65 61 6c 20 76 61 6c 75  ing or real valu
10f50 65 20 74 68 61 74 20 63 61 6e 6e 6f 74 20 62 65  e that cannot be
10f60 20 6c 6f 73 73 6c 65 73 73 6c 79 20 63 6f 6e 76   losslessly conv
10f70 65 72 74 65 64 20 74 6f 20 61 6e 0a 23 20 69 6e  erted to an.# in
10f80 74 65 67 65 72 2c 20 61 20 22 64 61 74 61 74 79  teger, a "dataty
10f90 70 65 20 6d 69 73 6d 61 74 63 68 22 20 65 72 72  pe mismatch" err
10fa0 6f 72 20 6f 63 63 75 72 73 20 61 6e 64 20 74 68  or occurs and th
10fb0 65 20 73 74 61 74 65 6d 65 6e 74 20 69 73 0a 23  e statement is.#
10fc0 20 61 62 6f 72 74 65 64 2e 0a 23 0a 64 72 6f 70   aborted..#.drop
10fd0 5f 61 6c 6c 5f 74 61 62 6c 65 73 0a 64 6f 5f 65  _all_tables.do_e
10fe0 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 39 2e  xecsql_test 5.9.
10ff0 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
11000 4c 45 20 74 31 32 28 78 20 49 4e 54 45 47 45 52  LE t12(x INTEGER
11010 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 79 29   PRIMARY KEY, y)
11020 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
11030 74 31 32 20 56 41 4c 55 45 53 28 35 2c 20 27 66  t12 VALUES(5, 'f
11040 69 76 65 27 29 3b 0a 7d 0a 64 6f 5f 63 72 65 61  ive');.}.do_crea
11050 74 65 74 61 62 6c 65 5f 74 65 73 74 73 20 35 2e  tetable_tests 5.
11060 39 2e 31 20 2d 71 75 65 72 79 20 7b 20 53 45 4c  9.1 -query { SEL
11070 45 43 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78  ECT typeof(x), x
11080 20 46 52 4f 4d 20 74 31 32 20 7d 20 7b 0a 20 20   FROM t12 } {.  
11090 31 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20  1   "UPDATE t12 
110a0 53 45 54 20 78 20 3d 20 34 22 20 20 20 20 20 20  SET x = 4"      
110b0 20 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20 32   {integer 4}.  2
110c0 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53     "UPDATE t12 S
110d0 45 54 20 78 20 3d 20 31 30 2e 30 22 20 20 20 20  ET x = 10.0"    
110e0 7b 69 6e 74 65 67 65 72 20 31 30 7d 0a 20 20 33  {integer 10}.  3
110f0 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53     "UPDATE t12 S
11100 45 54 20 78 20 3d 20 27 31 32 2e 30 27 22 20 20  ET x = '12.0'"  
11110 7b 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20 34  {integer 12}.  4
11120 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53     "UPDATE t12 S
11130 45 54 20 78 20 3d 20 27 2d 31 35 2e 30 27 22 20  ET x = '-15.0'" 
11140 7b 69 6e 74 65 67 65 72 20 2d 31 35 7d 0a 7d 0a  {integer -15}.}.
11150 64 6f 5f 63 72 65 61 74 65 74 61 62 6c 65 5f 74  do_createtable_t
11160 65 73 74 73 20 35 2e 39 2e 32 20 2d 65 72 72 6f  ests 5.9.2 -erro
11170 72 20 7b 0a 20 20 64 61 74 61 74 79 70 65 20 6d  r {.  datatype m
11180 69 73 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20  ismatch.} {.  1 
11190 20 20 22 55 50 44 41 54 45 20 74 31 32 20 53 45    "UPDATE t12 SE
111a0 54 20 78 20 3d 20 34 2e 31 22 20 20 20 20 20 20  T x = 4.1"      
111b0 20 20 20 7b 7d 0a 20 20 32 20 20 20 22 55 50 44     {}.  2   "UPD
111c0 41 54 45 20 74 31 32 20 53 45 54 20 78 20 3d 20  ATE t12 SET x = 
111d0 27 68 65 6c 6c 6f 27 22 20 20 20 20 20 7b 7d 0a  'hello'"     {}.
111e0 20 20 33 20 20 20 22 55 50 44 41 54 45 20 74 31    3   "UPDATE t1
111f0 32 20 53 45 54 20 78 20 3d 20 4e 55 4c 4c 22 20  2 SET x = NULL" 
11200 20 20 20 20 20 20 20 7b 7d 0a 20 20 34 20 20 20         {}.  4   
11210 22 55 50 44 41 54 45 20 74 31 32 20 53 45 54 20  "UPDATE t12 SET 
11220 78 20 3d 20 58 27 41 42 43 44 27 22 20 20 20 20  x = X'ABCD'"    
11230 20 7b 7d 0a 20 20 35 20 20 20 22 55 50 44 41 54   {}.  5   "UPDAT
11240 45 20 74 31 32 20 53 45 54 20 78 20 3d 20 58 27  E t12 SET x = X'
11250 33 39 30 30 27 22 20 20 20 20 20 7b 7d 0a 20 20  3900'"     {}.  
11260 36 20 20 20 22 55 50 44 41 54 45 20 74 31 32 20  6   "UPDATE t12 
11270 53 45 54 20 78 20 3d 20 58 27 33 39 27 22 20 20  SET x = X'39'"  
11280 20 20 20 20 20 7b 7d 0a 7d 0a 0a 23 20 45 56 49       {}.}..# EVI
11290 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 35 37 33  DENCE-OF: R-0573
112a0 34 2d 31 33 36 32 39 20 49 66 20 61 6e 20 49 4e  4-13629 If an IN
112b0 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 20 61  SERT statement a
112c0 74 74 65 6d 70 74 73 20 74 6f 20 69 6e 73 65 72  ttempts to inser
112d0 74 20 61 0a 23 20 62 6c 6f 62 20 76 61 6c 75 65  t a.# blob value
112e0 2c 20 6f 72 20 61 20 73 74 72 69 6e 67 20 6f 72  , or a string or
112f0 20 72 65 61 6c 20 76 61 6c 75 65 20 74 68 61 74   real value that
11300 20 63 61 6e 6e 6f 74 20 62 65 20 6c 6f 73 73 6c   cannot be lossl
11310 65 73 73 6c 79 0a 23 20 63 6f 6e 76 65 72 74 65  essly.# converte
11320 64 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  d to an integer 
11330 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  into an integer 
11340 70 72 69 6d 61 72 79 20 6b 65 79 20 6f 72 20 72  primary key or r
11350 6f 77 69 64 20 63 6f 6c 75 6d 6e 2c 20 61 0a 23  owid column, a.#
11360 20 22 64 61 74 61 74 79 70 65 20 6d 69 73 6d 61   "datatype misma
11370 74 63 68 22 20 65 72 72 6f 72 20 6f 63 63 75 72  tch" error occur
11380 73 20 61 6e 64 20 74 68 65 20 73 74 61 74 65 6d  s and the statem
11390 65 6e 74 20 69 73 20 61 62 6f 72 74 65 64 2e 0a  ent is aborted..
113a0 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
113b0 74 20 35 2e 31 30 2e 30 20 7b 20 44 45 4c 45 54  t 5.10.0 { DELET
113c0 45 20 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f  E FROM t12 }.do_
113d0 63 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74  createtable_test
113e0 73 20 35 2e 31 30 2e 31 20 2d 65 72 72 6f 72 20  s 5.10.1 -error 
113f0 7b 20 0a 20 20 64 61 74 61 74 79 70 65 20 6d 69  { .  datatype mi
11400 73 6d 61 74 63 68 0a 7d 20 7b 0a 20 20 31 20 20  smatch.} {.  1  
11410 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11420 32 28 78 29 20 56 41 4c 55 45 53 28 34 2e 31 29  2(x) VALUES(4.1)
11430 22 20 20 20 20 20 7b 7d 0a 20 20 32 20 20 20 22  "     {}.  2   "
11440 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11450 78 29 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f  x) VALUES('hello
11460 27 29 22 20 7b 7d 0a 20 20 33 20 20 20 22 49 4e  ')" {}.  3   "IN
11470 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11480 20 56 41 4c 55 45 53 28 58 27 41 42 43 44 27 29   VALUES(X'ABCD')
11490 22 20 7b 7d 0a 20 20 34 20 20 20 22 49 4e 53 45  " {}.  4   "INSE
114a0 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56  RT INTO t12(x) V
114b0 41 4c 55 45 53 28 58 27 33 39 30 30 27 29 22 20  ALUES(X'3900')" 
114c0 7b 7d 0a 20 20 35 20 20 20 22 49 4e 53 45 52 54  {}.  5   "INSERT
114d0 20 49 4e 54 4f 20 74 31 32 28 78 29 20 56 41 4c   INTO t12(x) VAL
114e0 55 45 53 28 58 27 33 39 27 29 22 20 20 20 7b 7d  UES(X'39')"   {}
114f0 0a 7d 0a 64 6f 5f 63 72 65 61 74 65 74 61 62 6c  .}.do_createtabl
11500 65 5f 74 65 73 74 73 20 35 2e 31 30 2e 32 20 2d  e_tests 5.10.2 -
11510 71 75 65 72 79 20 7b 20 0a 20 20 53 45 4c 45 43  query { .  SELEC
11520 54 20 74 79 70 65 6f 66 28 78 29 2c 20 78 20 46  T typeof(x), x F
11530 52 4f 4d 20 74 31 32 20 0a 7d 20 2d 72 65 70 61  ROM t12 .} -repa
11540 69 72 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  ir {.  execsql {
11550 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 32   DELETE FROM t12
11560 20 7d 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e   }.} {.  1   "IN
11570 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29  SERT INTO t12(x)
11580 20 56 41 4c 55 45 53 28 34 29 22 20 20 20 20 20   VALUES(4)"     
11590 20 20 7b 69 6e 74 65 67 65 72 20 34 7d 0a 20 20    {integer 4}.  
115a0 32 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  2   "INSERT INTO
115b0 20 74 31 32 28 78 29 20 56 41 4c 55 45 53 28 31   t12(x) VALUES(1
115c0 30 2e 30 29 22 20 20 20 20 7b 69 6e 74 65 67 65  0.0)"    {intege
115d0 72 20 31 30 7d 0a 20 20 33 20 20 20 22 49 4e 53  r 10}.  3   "INS
115e0 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78 29 20  ERT INTO t12(x) 
115f0 56 41 4c 55 45 53 28 27 31 32 2e 30 27 29 22 20  VALUES('12.0')" 
11600 20 7b 69 6e 74 65 67 65 72 20 31 32 7d 0a 20 20   {integer 12}.  
11610 34 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f  4   "INSERT INTO
11620 20 74 31 32 28 78 29 20 56 41 4c 55 45 53 28 27   t12(x) VALUES('
11630 34 65 33 27 29 22 20 20 20 7b 69 6e 74 65 67 65  4e3')"   {intege
11640 72 20 34 30 30 30 7d 0a 20 20 35 20 20 20 22 49  r 4000}.  5   "I
11650 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28 78  NSERT INTO t12(x
11660 29 20 56 41 4c 55 45 53 28 27 2d 31 34 2e 30 27  ) VALUES('-14.0'
11670 29 22 20 7b 69 6e 74 65 67 65 72 20 2d 31 34 7d  )" {integer -14}
11680 0a 7d 0a 0a 23 20 45 56 49 44 45 4e 43 45 2d 4f  .}..# EVIDENCE-O
11690 46 3a 20 52 2d 30 37 39 38 36 2d 34 36 30 32 34  F: R-07986-46024
116a0 20 49 66 20 61 6e 20 49 4e 53 45 52 54 20 73 74   If an INSERT st
116b0 61 74 65 6d 65 6e 74 20 61 74 74 65 6d 70 74 73  atement attempts
116c0 20 74 6f 20 69 6e 73 65 72 74 20 61 0a 23 20 4e   to insert a.# N
116d0 55 4c 4c 20 76 61 6c 75 65 20 69 6e 74 6f 20 61  ULL value into a
116e0 20 72 6f 77 69 64 20 6f 72 20 69 6e 74 65 67 65   rowid or intege
116f0 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 63 6f  r primary key co
11700 6c 75 6d 6e 2c 20 74 68 65 20 73 79 73 74 65 6d  lumn, the system
11710 0a 23 20 63 68 6f 6f 73 65 73 20 61 6e 20 69 6e  .# chooses an in
11720 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 20 75  teger value to u
11730 73 65 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  se as the rowid 
11740 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 23  automatically..#
11750 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
11760 20 35 2e 31 31 2e 30 20 7b 20 44 45 4c 45 54 45   5.11.0 { DELETE
11770 20 46 52 4f 4d 20 74 31 32 20 7d 0a 64 6f 5f 63   FROM t12 }.do_c
11780 72 65 61 74 65 74 61 62 6c 65 5f 74 65 73 74 73  reatetable_tests
11790 20 35 2e 31 31 20 2d 71 75 65 72 79 20 7b 20 0a   5.11 -query { .
117a0 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28    SELECT typeof(
117b0 78 29 2c 20 78 20 46 52 4f 4d 20 74 31 32 20 57  x), x FROM t12 W
117c0 48 45 52 45 20 79 20 49 53 20 28 53 45 4c 45 43  HERE y IS (SELEC
117d0 54 20 6d 61 78 28 79 29 20 46 52 4f 4d 20 74 31  T max(y) FROM t1
117e0 32 29 0a 7d 20 7b 0a 20 20 31 20 20 20 22 49 4e  2).} {.  1   "IN
117f0 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20 44 45  SERT INTO t12 DE
11800 46 41 55 4c 54 20 56 41 4c 55 45 53 22 20 20 20  FAULT VALUES"   
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 69 6e               {in
11820 74 65 67 65 72 20 31 7d 0a 20 20 32 20 20 20 22  teger 1}.  2   "
11830 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32 28  INSERT INTO t12(
11840 79 29 20 20 20 56 41 4c 55 45 53 28 35 29 22 20  y)   VALUES(5)" 
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11860 69 6e 74 65 67 65 72 20 32 7d 0a 20 20 33 20 20  integer 2}.  3  
11870 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31   "INSERT INTO t1
11880 32 28 78 2c 79 29 20 56 41 4c 55 45 53 28 4e 55  2(x,y) VALUES(NU
11890 4c 4c 2c 20 31 30 29 22 20 20 20 20 20 20 20 20  LL, 10)"        
118a0 20 7b 69 6e 74 65 67 65 72 20 33 7d 0a 20 20 34   {integer 3}.  4
118b0 20 20 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20     "INSERT INTO 
118c0 74 31 32 28 78 2c 79 29 20 53 45 4c 45 43 54 20  t12(x,y) SELECT 
118d0 4e 55 4c 4c 2c 20 31 35 20 46 52 4f 4d 20 74 31  NULL, 15 FROM t1
118e0 32 22 20 0a 20 20 20 20 20 20 7b 69 6e 74 65 67  2" .      {integ
118f0 65 72 20 34 20 69 6e 74 65 67 65 72 20 35 20 69  er 4 integer 5 i
11900 6e 74 65 67 65 72 20 36 7d 0a 20 20 35 20 20 20  nteger 6}.  5   
11910 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 32  "INSERT INTO t12
11920 28 79 29 20 53 45 4c 45 43 54 20 32 30 20 46 52  (y) SELECT 20 FR
11930 4f 4d 20 74 31 32 20 4c 49 4d 49 54 20 33 22 0a  OM t12 LIMIT 3".
11940 20 20 20 20 20 20 7b 69 6e 74 65 67 65 72 20 37        {integer 7
11950 20 69 6e 74 65 67 65 72 20 38 20 69 6e 74 65 67   integer 8 integ
11960 65 72 20 39 7d 0a 7d 0a 0a 66 69 6e 69 73 68 5f  er 9}.}..finish_
11970 74 65 73 74 0a                                   test.