/ Hex Artifact Content
Login

Artifact 23a2909d2b1f8494d28d355c1254f075b0af8ffc:


0000: 23 20 32 30 30 35 20 4a 61 6e 20 32 34 0a 23 0a  # 2005 Jan 24.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69 6c 65 20  ***.# This file 
0170: 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65 67 72 65  implements regre
0180: 73 73 69 6f 6e 20 74 65 73 74 73 20 66 6f 72 20  ssion tests for 
0190: 53 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a  SQLite library..
01a0: 23 0a 23 20 54 68 69 73 20 66 69 6c 65 20 74 65  #.# This file te
01b0: 73 74 73 20 74 68 65 20 76 61 72 69 6f 75 73 20  sts the various 
01c0: 63 6f 6e 64 69 74 69 6f 6e 73 20 75 6e 64 65 72  conditions under
01d0: 20 77 68 69 63 68 20 61 6e 20 53 51 4c 49 54 45   which an SQLITE
01e0: 5f 53 43 48 45 4d 41 0a 23 20 65 72 72 6f 72 20  _SCHEMA.# error 
01f0: 73 68 6f 75 6c 64 20 62 65 20 72 65 74 75 72 6e  should be return
0200: 65 64 2e 0a 23 0a 23 20 24 49 64 3a 20 73 63 68  ed..#.# $Id: sch
0210: 65 6d 61 2e 74 65 73 74 2c 76 20 31 2e 39 20 32  ema.test,v 1.9 2
0220: 30 30 39 2f 30 32 2f 30 34 20 31 37 3a 34 30 3a  009/02/04 17:40:
0230: 35 38 20 64 72 68 20 45 78 70 20 24 0a 0a 23 2d  58 drh Exp $..#-
0240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0280: 2d 2d 2d 2d 0a 23 20 57 68 65 6e 20 61 6e 79 20  ----.# When any 
0290: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
02a0: 20 74 79 70 65 73 20 6f 66 20 53 51 4c 20 73 74   types of SQL st
02b0: 61 74 65 6d 65 6e 74 73 20 6f 72 20 61 63 74 69  atements or acti
02c0: 6f 6e 73 20 61 72 65 20 0a 23 20 65 78 65 63 75  ons are .# execu
02d0: 74 65 64 2c 20 61 6c 6c 20 70 72 65 2d 63 6f 6d  ted, all pre-com
02e0: 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73  piled statements
02f0: 20 61 72 65 20 69 6e 76 61 6c 69 64 61 74 65 64   are invalidated
0300: 2e 20 41 6e 20 61 74 74 65 6d 70 74 0a 23 20 74  . An attempt.# t
0310: 6f 20 65 78 65 63 75 74 65 20 61 6e 20 69 6e 76  o execute an inv
0320: 61 6c 69 64 61 74 65 64 20 73 74 61 74 65 6d 65  alidated stateme
0330: 6e 74 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  nt always return
0340: 73 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e  s SQLITE_SCHEMA.
0350: 0a 23 0a 23 20 43 52 45 41 54 45 2f 44 52 4f 50  .#.# CREATE/DROP
0360: 20 54 41 42 4c 45 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e   TABLE..........
0370: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0380: 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63 68 65 6d 61 2d  .........schema-
0390: 31 2e 2a 0a 23 20 43 52 45 41 54 45 2f 44 52 4f  1.*.# CREATE/DRO
03a0: 50 20 56 49 45 57 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  P VIEW..........
03b0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
03c0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63 68 65 6d 61  ..........schema
03d0: 2d 32 2e 2a 0a 23 20 43 52 45 41 54 45 2f 44 52  -2.*.# CREATE/DR
03e0: 4f 50 20 54 52 49 47 47 45 52 2e 2e 2e 2e 2e 2e  OP TRIGGER......
03f0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0400: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63 68 65 6d  ...........schem
0410: 61 2d 33 2e 2a 0a 23 20 43 52 45 41 54 45 2f 44  a-3.*.# CREATE/D
0420: 52 4f 50 20 49 4e 44 45 58 2e 2e 2e 2e 2e 2e 2e  ROP INDEX.......
0430: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0440: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63 68 65  ............sche
0450: 6d 61 2d 34 2e 2a 0a 23 20 44 45 54 41 43 48 2e  ma-4.*.# DETACH.
0460: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0470: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0480: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63 68  .............sch
0490: 65 6d 61 2d 35 2e 2a 0a 23 20 44 65 6c 65 74 69  ema-5.*.# Deleti
04a0: 6e 67 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69  ng a user-functi
04b0: 6f 6e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  on..............
04c0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73 63  ..............sc
04d0: 68 65 6d 61 2d 36 2e 2a 0a 23 20 44 65 6c 65 74  hema-6.*.# Delet
04e0: 69 6e 67 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  ing a collation 
04f0: 73 65 71 75 65 6e 63 65 2e 2e 2e 2e 2e 2e 2e 2e  sequence........
0500: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 73  ...............s
0510: 63 68 65 6d 61 2d 37 2e 2a 0a 23 20 53 65 74 74  chema-7.*.# Sett
0520: 69 6e 67 20 6f 72 20 63 68 61 6e 67 69 6e 67 20  ing or changing 
0530: 74 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  the authorizatio
0540: 6e 20 66 75 6e 63 74 69 6f 6e 2e 2e 2e 2e 2e 2e  n function......
0550: 73 63 68 65 6d 61 2d 38 2e 2a 0a 23 20 52 6f 6c  schema-8.*.# Rol
0560: 6c 62 61 63 6b 20 6f 66 20 61 20 44 44 4c 20 73  lback of a DDL s
0570: 74 61 74 65 6d 65 6e 74 2e 2e 2e 2e 2e 2e 2e 2e  tatement........
0580: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
0590: 2e 73 63 68 65 6d 61 2d 31 32 2e 2a 0a 23 0a 23  .schema-12.*.#.#
05a0: 20 54 65 73 74 20 63 61 73 65 73 20 73 63 68 65   Test cases sche
05b0: 6d 61 2d 39 2e 2a 20 61 6e 64 20 73 63 68 65 6d  ma-9.* and schem
05c0: 61 2d 31 30 2e 2a 20 74 65 73 74 20 73 6f 6d 65  a-10.* test some
05d0: 20 73 70 65 63 69 66 69 63 20 62 75 67 73 0a 23   specific bugs.#
05e0: 20 74 68 61 74 20 63 61 6d 65 20 75 70 20 64 75   that came up du
05f0: 72 69 6e 67 20 64 65 76 65 6c 6f 70 6d 65 6e 74  ring development
0600: 2e 0a 23 0a 23 20 54 65 73 74 20 63 61 73 65 73  ..#.# Test cases
0610: 20 73 63 68 65 6d 61 2d 31 31 2e 2a 20 74 65 73   schema-11.* tes
0620: 74 20 74 68 61 74 20 69 74 20 69 73 20 69 6d 70  t that it is imp
0630: 6f 73 73 69 62 6c 65 20 74 6f 20 64 65 6c 65 74  ossible to delet
0640: 65 20 6f 72 0a 23 20 63 68 61 6e 67 65 20 61 20  e or.# change a 
0650: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
0660: 63 65 20 6f 72 20 75 73 65 72 2d 66 75 6e 63 74  ce or user-funct
0670: 69 6f 6e 20 77 68 69 6c 65 20 53 51 4c 20 73 74  ion while SQL st
0680: 61 74 65 6d 65 6e 74 73 0a 23 20 61 72 65 20 65  atements.# are e
0690: 78 65 63 75 74 69 6e 67 2e 20 41 64 64 69 6e 67  xecuting. Adding
06a0: 20 6e 65 77 20 63 6f 6c 6c 61 74 69 6f 6e 73 20   new collations 
06b0: 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20 69 73 20  or functions is 
06c0: 61 6c 6c 6f 77 65 64 2e 0a 23 0a 0a 73 65 74 20  allowed..#..set 
06d0: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
06e0: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
06f0: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0700: 73 74 65 72 2e 74 63 6c 0a 0a 64 6f 5f 74 65 73  ster.tcl..do_tes
0710: 74 20 73 63 68 65 6d 61 2d 31 2e 31 20 7b 0a 20  t schema-1.1 {. 
0720: 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c   set ::STMT [sql
0730: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a  ite3_prepare $::
0740: 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  DB {SELECT * FRO
0750: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d  M sqlite_master}
0760: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 65 78 65 63   -1 TAIL].  exec
0770: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
0780: 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c   TABLE abc(a, b,
0790: 20 63 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74   c);.  }.  sqlit
07a0: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
07b0: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
07c0: 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d  .do_test schema-
07d0: 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.2 {.  sqlite3_
07e0: 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54  finalize $::STMT
07f0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d  .} {SQLITE_SCHEM
0800: 41 7d 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d  A}.do_test schem
0810: 61 2d 31 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a  a-1.3 {.  set ::
0820: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
0830: 65 70 61 72 65 20 24 3a 3a 44 42 20 7b 53 45 4c  epare $::DB {SEL
0840: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0850: 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20 54 41 49  e_master} -1 TAI
0860: 4c 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  L].  execsql {. 
0870: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 61 62     DROP TABLE ab
0880: 63 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  c;.  }.  sqlite3
0890: 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 7d 20  _step $::STMT.} 
08a0: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 64  {SQLITE_ERROR}.d
08b0: 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31 2e  o_test schema-1.
08c0: 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66 69  4 {.  sqlite3_fi
08d0: 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 7d  nalize $::STMT.}
08e0: 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d   {SQLITE_SCHEMA}
08f0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 76 69 65 77  ..ifcapable view
0900: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 63 68   {.  do_test sch
0910: 65 6d 61 2d 32 2e 31 20 7b 0a 20 20 20 20 73 65  ema-2.1 {.    se
0920: 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65  t ::STMT [sqlite
0930: 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42 20  3_prepare $::DB 
0940: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73  {SELECT * FROM s
0950: 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 2d 31  qlite_master} -1
0960: 20 54 41 49 4c 5d 0a 20 20 20 20 65 78 65 63 73   TAIL].    execs
0970: 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41 54  ql {.      CREAT
0980: 45 20 56 49 45 57 20 76 31 20 41 53 20 53 45 4c  E VIEW v1 AS SEL
0990: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
09a0: 65 5f 6d 61 73 74 65 72 3b 0a 20 20 20 20 7d 0a  e_master;.    }.
09b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
09c0: 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 7b 53 51   $::STMT.  } {SQ
09d0: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f  LITE_ERROR}.  do
09e0: 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 32 2e 32  _test schema-2.2
09f0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
0a00: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
0a10: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45    } {SQLITE_SCHE
0a20: 4d 41 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73 63  MA}.  do_test sc
0a30: 68 65 6d 61 2d 32 2e 33 20 7b 0a 20 20 20 20 73  hema-2.3 {.    s
0a40: 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69 74  et ::STMT [sqlit
0a50: 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44 42  e3_prepare $::DB
0a60: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
0a70: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20 2d  sqlite_master} -
0a80: 31 20 54 41 49 4c 5d 0a 20 20 20 20 65 78 65 63  1 TAIL].    exec
0a90: 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50  sql {.      DROP
0aa0: 20 56 49 45 57 20 76 31 3b 0a 20 20 20 20 7d 0a   VIEW v1;.    }.
0ab0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70      sqlite3_step
0ac0: 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 7b 53 51   $::STMT.  } {SQ
0ad0: 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f  LITE_ERROR}.  do
0ae0: 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 32 2e 34  _test schema-2.4
0af0: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
0b00: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
0b10: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45    } {SQLITE_SCHE
0b20: 4d 41 7d 0a 7d 0a 0a 69 66 63 61 70 61 62 6c 65  MA}.}..ifcapable
0b30: 20 74 72 69 67 67 65 72 20 7b 0a 20 20 64 6f 5f   trigger {.  do_
0b40: 74 65 73 74 20 73 63 68 65 6d 61 2d 33 2e 31 20  test schema-3.1 
0b50: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
0b60: 20 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42        CREATE TAB
0b70: 4c 45 20 61 62 63 28 61 2c 20 62 2c 20 63 29 3b  LE abc(a, b, c);
0b80: 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 3a  .    }.    set :
0b90: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
0ba0: 72 65 70 61 72 65 20 24 3a 3a 44 42 20 7b 53 45  repare $::DB {SE
0bb0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69  LECT * FROM sqli
0bc0: 74 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20 54 41  te_master} -1 TA
0bd0: 49 4c 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  IL].    execsql 
0be0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 54  {.      CREATE T
0bf0: 52 49 47 47 45 52 20 61 62 63 5f 74 72 69 67 20  RIGGER abc_trig 
0c00: 41 46 54 45 52 20 49 4e 53 45 52 54 20 4f 4e 20  AFTER INSERT ON 
0c10: 61 62 63 20 42 45 47 49 4e 0a 20 20 20 20 20 20  abc BEGIN.      
0c20: 20 20 53 45 4c 45 43 54 20 31 2c 20 32 2c 20 33    SELECT 1, 2, 3
0c30: 3b 0a 20 20 20 20 20 20 45 4e 44 3b 0a 20 20 20  ;.      END;.   
0c40: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73   }.    sqlite3_s
0c50: 74 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20  tep $::STMT.  } 
0c60: 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d 0a 20  {SQLITE_ERROR}. 
0c70: 20 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d   do_test schema-
0c80: 33 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  3.2 {.    sqlite
0c90: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54  3_finalize $::ST
0ca0: 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 53  MT.  } {SQLITE_S
0cb0: 43 48 45 4d 41 7d 0a 20 20 64 6f 5f 74 65 73 74  CHEMA}.  do_test
0cc0: 20 73 63 68 65 6d 61 2d 33 2e 33 20 7b 0a 20 20   schema-3.3 {.  
0cd0: 20 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71    set ::STMT [sq
0ce0: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a  lite3_prepare $:
0cf0: 3a 44 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  :DB {SELECT * FR
0d00: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0d10: 7d 20 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 65  } -1 TAIL].    e
0d20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  xecsql {.      D
0d30: 52 4f 50 20 54 52 49 47 47 45 52 20 61 62 63 5f  ROP TRIGGER abc_
0d40: 74 72 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20  trig;.    }.    
0d50: 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a  sqlite3_step $::
0d60: 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54 45  STMT.  } {SQLITE
0d70: 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65 73  _ERROR}.  do_tes
0d80: 74 20 73 63 68 65 6d 61 2d 33 2e 34 20 7b 0a 20  t schema-3.4 {. 
0d90: 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c     sqlite3_final
0da0: 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20  ize $::STMT.  } 
0db0: 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a  {SQLITE_SCHEMA}.
0dc0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d  }..do_test schem
0dd0: 61 2d 34 2e 31 20 7b 0a 20 20 63 61 74 63 68 73  a-4.1 {.  catchs
0de0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
0df0: 54 41 42 4c 45 20 61 62 63 28 61 2c 20 62 2c 20  TABLE abc(a, b, 
0e00: 63 29 3b 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a  c);.  }.  set ::
0e10: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
0e20: 65 70 61 72 65 20 24 3a 3a 44 42 20 7b 53 45 4c  epare $::DB {SEL
0e30: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0e40: 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20 54 41 49  e_master} -1 TAI
0e50: 4c 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  L].  execsql {. 
0e60: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
0e70: 61 62 63 5f 69 6e 64 65 78 20 4f 4e 20 61 62 63  abc_index ON abc
0e80: 28 61 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  (a);.  }.  sqlit
0e90: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
0ea0: 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f 52 7d  } {SQLITE_ERROR}
0eb0: 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d  .do_test schema-
0ec0: 34 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  4.2 {.  sqlite3_
0ed0: 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54  finalize $::STMT
0ee0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d  .} {SQLITE_SCHEM
0ef0: 41 7d 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d  A}.do_test schem
0f00: 61 2d 34 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a  a-4.3 {.  set ::
0f10: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
0f20: 65 70 61 72 65 20 24 3a 3a 44 42 20 7b 53 45 4c  epare $::DB {SEL
0f30: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
0f40: 65 5f 6d 61 73 74 65 72 7d 20 2d 31 20 54 41 49  e_master} -1 TAI
0f50: 4c 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  L].  execsql {. 
0f60: 20 20 20 44 52 4f 50 20 49 4e 44 45 58 20 61 62     DROP INDEX ab
0f70: 63 5f 69 6e 64 65 78 3b 0a 20 20 7d 0a 20 20 73  c_index;.  }.  s
0f80: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53  qlite3_step $::S
0f90: 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52  TMT.} {SQLITE_ER
0fa0: 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20 73 63 68  ROR}.do_test sch
0fb0: 65 6d 61 2d 34 2e 34 20 7b 0a 20 20 73 71 6c 69  ema-4.4 {.  sqli
0fc0: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a  te3_finalize $::
0fd0: 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 53  STMT.} {SQLITE_S
0fe0: 43 48 45 4d 41 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  CHEMA}..#-------
0ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
1030: 20 54 65 73 74 73 20 35 2e 31 20 74 6f 20 35 2e   Tests 5.1 to 5.
1040: 34 20 63 68 65 63 6b 20 74 68 61 74 20 70 72 65  4 check that pre
1050: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
1060: 20 61 72 65 20 69 6e 76 61 6c 69 64 61 74 65 64   are invalidated
1070: 20 77 68 65 6e 0a 23 20 61 20 64 61 74 61 62 61   when.# a databa
1080: 73 65 20 69 73 20 44 45 54 41 43 48 65 64 20 28  se is DETACHed (
1090: 62 75 74 20 6e 6f 74 20 77 68 65 6e 20 6f 6e 65  but not when one
10a0: 20 69 73 20 41 54 54 41 43 48 65 64 29 2e 0a 23   is ATTACHed)..#
10b0: 0a 69 66 63 61 70 61 62 6c 65 20 61 74 74 61 63  .ifcapable attac
10c0: 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73 63  h {.  do_test sc
10d0: 68 65 6d 61 2d 35 2e 31 20 7b 0a 20 20 20 20 73  hema-5.1 {.    s
10e0: 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a  et sql {SELECT *
10f0: 20 46 52 4f 4d 20 61 62 63 3b 7d 0a 20 20 20 20   FROM abc;}.    
1100: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
1110: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
1120: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
1130: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
1140: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
1150: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
1160: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f    }.    sqlite3_
1170: 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d  step $::STMT.  }
1180: 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20   {SQLITE_DONE}. 
1190: 20 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d   do_test schema-
11a0: 35 2e 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  5.2 {.    sqlite
11b0: 33 5f 72 65 73 65 74 20 24 3a 3a 53 54 4d 54 0a  3_reset $::STMT.
11c0: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a    } {SQLITE_OK}.
11d0: 20 20 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61    do_test schema
11e0: 2d 35 2e 33 20 7b 0a 20 20 20 20 65 78 65 63 73  -5.3 {.    execs
11f0: 71 6c 20 7b 0a 20 20 20 20 20 20 44 45 54 41 43  ql {.      DETAC
1200: 48 20 61 75 78 3b 0a 20 20 20 20 7d 0a 20 20 20  H aux;.    }.   
1210: 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24 3a   sqlite3_step $:
1220: 3a 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49 54  :STMT.  } {SQLIT
1230: 45 5f 45 52 52 4f 52 7d 0a 20 20 64 6f 5f 74 65  E_ERROR}.  do_te
1240: 73 74 20 73 63 68 65 6d 61 2d 35 2e 34 20 7b 0a  st schema-5.4 {.
1250: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
1260: 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a 20 20 7d  lize $::STMT.  }
1270: 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d   {SQLITE_SCHEMA}
1280: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
1290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
12d0: 74 73 20 36 2e 2a 20 63 68 65 63 6b 20 74 68 61  ts 6.* check tha
12e0: 74 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  t prepared state
12f0: 6d 65 6e 74 73 20 61 72 65 20 69 6e 76 61 6c 69  ments are invali
1300: 64 61 74 65 64 20 77 68 65 6e 0a 23 20 61 20 75  dated when.# a u
1310: 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 69 73 20  ser-function is 
1320: 64 65 6c 65 74 65 64 20 28 62 75 74 20 6e 6f 74  deleted (but not
1330: 20 77 68 65 6e 20 6f 6e 65 20 69 73 20 61 64 64   when one is add
1340: 65 64 29 2e 0a 64 6f 5f 74 65 73 74 20 73 63 68  ed)..do_test sch
1350: 65 6d 61 2d 36 2e 31 20 7b 0a 20 20 73 65 74 20  ema-6.1 {.  set 
1360: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
1370: 4f 4d 20 61 62 63 3b 7d 0a 20 20 73 65 74 20 3a  OM abc;}.  set :
1380: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
1390: 72 65 70 61 72 65 20 24 3a 3a 44 42 20 24 73 71  repare $::DB $sq
13a0: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 64 62 20  l -1 TAIL].  db 
13b0: 66 75 6e 63 74 69 6f 6e 20 68 65 6c 6c 6f 5f 66  function hello_f
13c0: 75 6e 63 74 69 6f 6e 20 7b 7d 0a 20 20 73 71 6c  unction {}.  sql
13d0: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
13e0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 44 4f 4e 45  T.} {SQLITE_DONE
13f0: 7d 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61  }.do_test schema
1400: 2d 36 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 33  -6.2 {.  sqlite3
1410: 5f 72 65 73 65 74 20 24 3a 3a 53 54 4d 54 0a 7d  _reset $::STMT.}
1420: 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f 5f   {SQLITE_OK}.do_
1430: 74 65 73 74 20 73 63 68 65 6d 61 2d 36 2e 33 20  test schema-6.3 
1440: 7b 0a 20 20 73 71 6c 69 74 65 5f 64 65 6c 65 74  {.  sqlite_delet
1450: 65 5f 66 75 6e 63 74 69 6f 6e 20 24 3a 3a 44 42  e_function $::DB
1460: 20 68 65 6c 6c 6f 5f 66 75 6e 63 74 69 6f 6e 0a   hello_function.
1470: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
1480: 3a 3a 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45  ::STMT.} {SQLITE
1490: 5f 45 52 52 4f 52 7d 0a 64 6f 5f 74 65 73 74 20  _ERROR}.do_test 
14a0: 73 63 68 65 6d 61 2d 36 2e 34 20 7b 0a 20 20 73  schema-6.4 {.  s
14b0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
14c0: 24 3a 3a 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54  $::STMT.} {SQLIT
14d0: 45 5f 53 43 48 45 4d 41 7d 0a 0a 23 2d 2d 2d 2d  E_SCHEMA}..#----
14e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1520: 2d 0a 23 20 54 65 73 74 73 20 37 2e 2a 20 63 68  -.# Tests 7.* ch
1530: 65 63 6b 20 74 68 61 74 20 70 72 65 70 61 72 65  eck that prepare
1540: 64 20 73 74 61 74 65 6d 65 6e 74 73 20 61 72 65  d statements are
1550: 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
1560: 6e 0a 23 20 61 20 63 6f 6c 6c 61 74 69 6f 6e 20  n.# a collation 
1570: 73 65 71 75 65 6e 63 65 20 69 73 20 64 65 6c 65  sequence is dele
1580: 74 65 64 20 28 62 75 74 20 6e 6f 74 20 77 68 65  ted (but not whe
1590: 6e 20 6f 6e 65 20 69 73 20 61 64 64 65 64 29 2e  n one is added).
15a0: 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 75 74 66  .#.ifcapable utf
15b0: 31 36 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  16 {.  do_test s
15c0: 63 68 65 6d 61 2d 37 2e 31 20 7b 0a 20 20 20 20  chema-7.1 {.    
15d0: 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43 54 20  set sql {SELECT 
15e0: 2a 20 46 52 4f 4d 20 61 62 63 3b 7d 0a 20 20 20  * FROM abc;}.   
15f0: 20 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c   set ::STMT [sql
1600: 69 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a  ite3_prepare $::
1610: 44 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d  DB $sql -1 TAIL]
1620: 0a 20 20 20 20 61 64 64 5f 74 65 73 74 5f 63 6f  .    add_test_co
1630: 6c 6c 61 74 65 20 24 3a 3a 44 42 20 31 20 31 20  llate $::DB 1 1 
1640: 31 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 74  1.    sqlite3_st
1650: 65 70 20 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 7b  ep $::STMT.  } {
1660: 53 51 4c 49 54 45 5f 44 4f 4e 45 7d 0a 20 20 64  SQLITE_DONE}.  d
1670: 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 37 2e  o_test schema-7.
1680: 32 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  2 {.    sqlite3_
1690: 72 65 73 65 74 20 24 3a 3a 53 54 4d 54 0a 20 20  reset $::STMT.  
16a0: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 20 20  } {SQLITE_OK}.  
16b0: 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 37  do_test schema-7
16c0: 2e 33 20 7b 0a 20 20 20 20 61 64 64 5f 74 65 73  .3 {.    add_tes
16d0: 74 5f 63 6f 6c 6c 61 74 65 20 24 3a 3a 44 42 20  t_collate $::DB 
16e0: 30 20 30 20 30 20 0a 20 20 20 20 73 71 6c 69 74  0 0 0 .    sqlit
16f0: 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54 0a  e3_step $::STMT.
1700: 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52 4f    } {SQLITE_ERRO
1710: 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73 63 68  R}.  do_test sch
1720: 65 6d 61 2d 37 2e 34 20 7b 0a 20 20 20 20 73 71  ema-7.4 {.    sq
1730: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20 24  lite3_finalize $
1740: 3a 3a 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c 49  ::STMT.  } {SQLI
1750: 54 45 5f 53 43 48 45 4d 41 7d 0a 7d 0a 0a 23 2d  TE_SCHEMA}.}..#-
1760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1790: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
17a0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 73 20 38 2e 31  ----.# Tests 8.1
17b0: 20 61 6e 64 20 38 2e 32 20 63 68 65 63 6b 20 74   and 8.2 check t
17c0: 68 61 74 20 70 72 65 70 61 72 65 64 20 73 74 61  hat prepared sta
17d0: 74 65 6d 65 6e 74 73 20 61 72 65 20 69 6e 76 61  tements are inva
17e0: 6c 69 64 61 74 65 64 20 77 68 65 6e 0a 23 20 74  lidated when.# t
17f0: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
1800: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 65 74   function is set
1810: 2e 0a 23 0a 69 66 63 61 70 61 62 6c 65 20 61 75  ..#.ifcapable au
1820: 74 68 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 73  th {.  do_test s
1830: 63 68 65 6d 61 2d 38 2e 31 20 7b 0a 20 20 20 20  chema-8.1 {.    
1840: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
1850: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
1860: 42 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  B {SELECT * FROM
1870: 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 7d 20   sqlite_master} 
1880: 2d 31 20 54 41 49 4c 5d 0a 20 20 20 20 64 62 20  -1 TAIL].    db 
1890: 61 75 74 68 20 7b 7d 0a 20 20 20 20 73 71 6c 69  auth {}.    sqli
18a0: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
18b0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  .  } {SQLITE_ERR
18c0: 4f 52 7d 0a 20 20 64 6f 5f 74 65 73 74 20 73 63  OR}.  do_test sc
18d0: 68 65 6d 61 2d 38 2e 33 20 7b 0a 20 20 20 20 73  hema-8.3 {.    s
18e0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 20  qlite3_finalize 
18f0: 24 3a 3a 53 54 4d 54 0a 20 20 7d 20 7b 53 51 4c  $::STMT.  } {SQL
1900: 49 54 45 5f 53 43 48 45 4d 41 7d 0a 7d 0a 0a 23  ITE_SCHEMA}.}..#
1910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1950: 2d 2d 2d 2d 2d 0a 23 20 73 63 68 65 6d 61 2d 39  -----.# schema-9
1960: 2e 31 3a 20 54 65 73 74 20 74 68 61 74 20 69 66  .1: Test that if
1970: 20 61 20 74 61 62 6c 65 20 69 73 20 64 72 6f 70   a table is drop
1980: 70 65 64 20 62 79 20 6f 6e 65 20 64 61 74 61 62  ped by one datab
1990: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ase connection, 
19a0: 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6f  .#             o
19b0: 74 68 65 72 20 64 61 74 61 62 61 73 65 20 63 6f  ther database co
19c0: 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20 61 77  nnections are aw
19d0: 61 72 65 20 6f 66 20 74 68 65 20 73 63 68 65 6d  are of the schem
19e0: 61 20 63 68 61 6e 67 65 2e 0a 23 20 73 63 68 65  a change..# sche
19f0: 6d 61 2d 39 2e 32 3a 20 54 65 73 74 20 74 68 61  ma-9.2: Test tha
1a00: 74 20 69 66 20 61 20 76 69 65 77 20 69 73 20 64  t if a view is d
1a10: 72 6f 70 70 65 64 20 62 79 20 6f 6e 65 20 64 61  ropped by one da
1a20: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1a30: 6e 2c 0a 23 20 20 20 20 20 20 20 20 20 20 20 20  n,.#            
1a40: 20 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 20   other database 
1a50: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 61 72 65 20  connections are 
1a60: 61 77 61 72 65 20 6f 66 20 74 68 65 20 73 63 68  aware of the sch
1a70: 65 6d 61 20 63 68 61 6e 67 65 2e 0a 23 0a 64 6f  ema change..#.do
1a80: 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 39 2e 31  _test schema-9.1
1a90: 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62 32   {.  sqlite3 db2
1aa0: 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73   test.db.  execs
1ab0: 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41  ql {.    DROP TA
1ac0: 42 4c 45 20 61 62 63 3b 0a 20 20 7d 20 64 62 32  BLE abc;.  } db2
1ad0: 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 63  .  db2 close.  c
1ae0: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 53 45  atchsql {.    SE
1af0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61 62 63 3b  LECT * FROM abc;
1b00: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75  .  }.} {1 {no su
1b10: 63 68 20 74 61 62 6c 65 3a 20 61 62 63 7d 7d 0a  ch table: abc}}.
1b20: 65 78 65 63 73 71 6c 20 7b 0a 20 20 43 52 45 41  execsql {.  CREA
1b30: 54 45 20 54 41 42 4c 45 20 61 62 63 28 61 2c 20  TE TABLE abc(a, 
1b40: 62 2c 20 63 29 3b 0a 7d 0a 69 66 63 61 70 61 62  b, c);.}.ifcapab
1b50: 6c 65 20 76 69 65 77 20 7b 0a 20 20 64 6f 5f 74  le view {.  do_t
1b60: 65 73 74 20 73 63 68 65 6d 61 2d 39 2e 32 20 7b  est schema-9.2 {
1b70: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1b80: 20 20 20 20 20 43 52 45 41 54 45 20 56 49 45 57       CREATE VIEW
1b90: 20 61 62 63 76 69 65 77 20 41 53 20 53 45 4c 45   abcview AS SELE
1ba0: 43 54 20 2a 20 46 52 4f 4d 20 61 62 63 3b 0a 20  CT * FROM abc;. 
1bb0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
1bc0: 20 64 62 32 20 74 65 73 74 2e 64 62 0a 20 20 20   db2 test.db.   
1bd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1be0: 20 44 52 4f 50 20 56 49 45 57 20 61 62 63 76 69   DROP VIEW abcvi
1bf0: 65 77 3b 0a 20 20 20 20 7d 20 64 62 32 0a 20 20  ew;.    } db2.  
1c00: 20 20 64 62 32 20 63 6c 6f 73 65 0a 20 20 20 20    db2 close.    
1c10: 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 20  catchsql {.     
1c20: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 61   SELECT * FROM a
1c30: 62 63 76 69 65 77 3b 0a 20 20 20 20 7d 0a 20 20  bcview;.    }.  
1c40: 7d 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 74 61  } {1 {no such ta
1c50: 62 6c 65 3a 20 61 62 63 76 69 65 77 7d 7d 0a 7d  ble: abcview}}.}
1c60: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
1c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ca0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
1cb0: 74 68 61 74 20 69 66 20 61 20 43 52 45 41 54 45  that if a CREATE
1cc0: 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e 74   TABLE statement
1cd0: 20 66 61 69 6c 73 20 62 65 63 61 75 73 65 20 74   fails because t
1ce0: 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 23  here are other.#
1cf0: 20 62 74 72 65 65 20 63 75 72 73 6f 72 73 20 6f   btree cursors o
1d00: 70 65 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20  pen on the same 
1d10: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 74  database file it
1d20: 20 64 6f 65 73 20 6e 6f 74 20 63 6f 72 72 75 70   does not corrup
1d30: 74 0a 23 20 74 68 65 20 73 71 6c 69 74 65 5f 6d  t.# the sqlite_m
1d40: 61 73 74 65 72 20 74 61 62 6c 65 2e 0a 23 0a 23  aster table..#.#
1d50: 20 32 30 30 37 2d 30 35 2d 30 32 3a 20 54 68 65   2007-05-02: The
1d60: 73 65 20 74 65 73 74 73 20 68 61 76 65 20 62 65  se tests have be
1d70: 65 6e 20 6f 76 65 72 63 6f 6d 65 20 62 79 20 65  en overcome by e
1d80: 76 65 6e 74 73 2e 20 20 4f 70 65 6e 20 62 74 72  vents.  Open btr
1d90: 65 65 0a 23 20 63 75 72 73 6f 72 73 20 6e 6f 20  ee.# cursors no 
1da0: 6c 6f 6e 67 65 72 20 62 6c 6f 63 6b 20 43 52 45  longer block CRE
1db0: 41 54 45 20 54 41 42 4c 45 2e 20 20 42 75 74 20  ATE TABLE.  But 
1dc0: 74 68 65 72 65 20 69 73 20 6e 6f 20 72 65 61 73  there is no reas
1dd0: 6f 6e 20 6e 6f 74 0a 23 20 74 6f 20 6b 65 65 70  on not.# to keep
1de0: 20 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68   the tests in th
1df0: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0a 23 0a  e test suite..#.
1e00: 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31  do_test schema-1
1e10: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
1e20: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
1e30: 4f 20 61 62 63 20 56 41 4c 55 45 53 28 31 2c 20  O abc VALUES(1, 
1e40: 32 2c 20 33 29 3b 0a 20 20 7d 0a 20 20 73 65 74  2, 3);.  }.  set
1e50: 20 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46   sql {SELECT * F
1e60: 52 4f 4d 20 61 62 63 7d 0a 20 20 73 65 74 20 3a  ROM abc}.  set :
1e70: 3a 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70  :STMT [sqlite3_p
1e80: 72 65 70 61 72 65 20 24 3a 3a 44 42 20 24 73 71  repare $::DB $sq
1e90: 6c 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c  l -1 TAIL].  sql
1ea0: 69 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d  ite3_step $::STM
1eb0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d  T.} {SQLITE_ROW}
1ec0: 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d  .do_test schema-
1ed0: 31 30 2e 32 20 7b 0a 20 20 63 61 74 63 68 73 71  10.2 {.  catchsq
1ee0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
1ef0: 41 42 4c 45 20 74 32 28 61 2c 20 62 2c 20 63 29  ABLE t2(a, b, c)
1f00: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 7b 7d 7d 0a 64  ;.  }.} {0 {}}.d
1f10: 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31 30  o_test schema-10
1f20: 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 66  .3 {.  sqlite3_f
1f30: 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54 0a  inalize $::STMT.
1f40: 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64 6f  } {SQLITE_OK}.do
1f50: 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31 30 2e  _test schema-10.
1f60: 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 64 62  4 {.  sqlite3 db
1f70: 32 20 74 65 73 74 2e 64 62 0a 20 20 65 78 65 63  2 test.db.  exec
1f80: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1f90: 20 2a 20 46 52 4f 4d 20 61 62 63 0a 20 20 7d 20   * FROM abc.  } 
1fa0: 64 62 32 0a 7d 20 7b 31 20 32 20 33 7d 0a 64 6f  db2.} {1 2 3}.do
1fb0: 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31 30 2e  _test schema-10.
1fc0: 35 20 7b 0a 20 20 64 62 32 20 63 6c 6f 73 65 0a  5 {.  db2 close.
1fd0: 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  } {}..#---------
1fe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 41  ------------.# A
2020: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 64 65 6c  ttempting to del
2030: 65 74 65 20 6f 72 20 72 65 70 6c 61 63 65 20 61  ete or replace a
2040: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 6f   user-function o
2050: 72 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  r collation sequ
2060: 65 6e 63 65 20 0a 23 20 77 68 69 6c 65 20 74 68  ence .# while th
2070: 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20 73  ere are active s
2080: 74 61 74 65 6d 65 6e 74 73 20 72 65 74 75 72 6e  tatements return
2090: 73 20 61 6e 20 53 51 4c 49 54 45 5f 42 55 53 59  s an SQLITE_BUSY
20a0: 20 65 72 72 6f 72 2e 0a 23 0a 23 20 73 63 68 65   error..#.# sche
20b0: 6d 61 2d 31 31 2e 31 20 2d 20 31 31 2e 34 3a 20  ma-11.1 - 11.4: 
20c0: 55 73 65 72 20 66 75 6e 63 74 69 6f 6e 2e 0a 23  User function..#
20d0: 20 73 63 68 65 6d 61 2d 31 31 2e 35 20 2d 20 31   schema-11.5 - 1
20e0: 31 2e 38 3a 20 43 6f 6c 6c 61 74 69 6f 6e 20 73  1.8: Collation s
20f0: 65 71 75 65 6e 63 65 2e 0a 23 0a 64 6f 5f 74 65  equence..#.do_te
2100: 73 74 20 73 63 68 65 6d 61 2d 31 31 2e 31 20 7b  st schema-11.1 {
2110: 0a 20 20 64 62 20 66 75 6e 63 74 69 6f 6e 20 74  .  db function t
2120: 73 74 66 75 6e 63 20 7b 7d 0a 20 20 73 65 74 20  stfunc {}.  set 
2130: 73 71 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  sql {SELECT * FR
2140: 4f 4d 20 61 62 63 7d 0a 20 20 73 65 74 20 3a 3a  OM abc}.  set ::
2150: 53 54 4d 54 20 5b 73 71 6c 69 74 65 33 5f 70 72  STMT [sqlite3_pr
2160: 65 70 61 72 65 20 24 3a 3a 44 42 20 24 73 71 6c  epare $::DB $sql
2170: 20 2d 31 20 54 41 49 4c 5d 0a 20 20 73 71 6c 69   -1 TAIL].  sqli
2180: 74 65 33 5f 73 74 65 70 20 24 3a 3a 53 54 4d 54  te3_step $::STMT
2190: 0a 7d 20 7b 53 51 4c 49 54 45 5f 52 4f 57 7d 0a  .} {SQLITE_ROW}.
21a0: 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31  do_test schema-1
21b0: 31 2e 32 20 7b 0a 20 20 73 71 6c 69 74 65 5f 64  1.2 {.  sqlite_d
21c0: 65 6c 65 74 65 5f 66 75 6e 63 74 69 6f 6e 20 24  elete_function $
21d0: 3a 3a 44 42 20 74 73 74 66 75 6e 63 0a 7d 20 7b  ::DB tstfunc.} {
21e0: 53 51 4c 49 54 45 5f 42 55 53 59 7d 0a 64 6f 5f  SQLITE_BUSY}.do_
21f0: 74 65 73 74 20 73 63 68 65 6d 61 2d 31 31 2e 33  test schema-11.3
2200: 20 7b 0a 20 20 73 65 74 20 72 63 20 5b 63 61 74   {.  set rc [cat
2210: 63 68 20 7b 0a 20 20 20 20 64 62 20 66 75 6e 63  ch {.    db func
2220: 74 69 6f 6e 20 74 73 74 66 75 6e 63 20 7b 7d 0a  tion tstfunc {}.
2230: 20 20 7d 20 6d 73 67 5d 0a 20 20 6c 69 73 74 20    } msg].  list 
2240: 24 72 63 20 24 6d 73 67 0a 7d 20 7b 31 20 7b 75  $rc $msg.} {1 {u
2250: 6e 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 2f  nable to delete/
2260: 6d 6f 64 69 66 79 20 75 73 65 72 2d 66 75 6e 63  modify user-func
2270: 74 69 6f 6e 20 64 75 65 20 74 6f 20 61 63 74 69  tion due to acti
2280: 76 65 20 73 74 61 74 65 6d 65 6e 74 73 7d 7d 0a  ve statements}}.
2290: 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31  do_test schema-1
22a0: 31 2e 34 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  1.4 {.  sqlite3_
22b0: 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d 54  finalize $::STMT
22c0: 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a 64  .} {SQLITE_OK}.d
22d0: 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d 31 31  o_test schema-11
22e0: 2e 35 20 7b 0a 20 20 64 62 20 63 6f 6c 6c 61 74  .5 {.  db collat
22f0: 65 20 74 73 74 63 6f 6c 6c 61 74 65 20 7b 7d 0a  e tstcollate {}.
2300: 20 20 73 65 74 20 73 71 6c 20 7b 53 45 4c 45 43    set sql {SELEC
2310: 54 20 2a 20 46 52 4f 4d 20 61 62 63 7d 0a 20 20  T * FROM abc}.  
2320: 73 65 74 20 3a 3a 53 54 4d 54 20 5b 73 71 6c 69  set ::STMT [sqli
2330: 74 65 33 5f 70 72 65 70 61 72 65 20 24 3a 3a 44  te3_prepare $::D
2340: 42 20 24 73 71 6c 20 2d 31 20 54 41 49 4c 5d 0a  B $sql -1 TAIL].
2350: 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24    sqlite3_step $
2360: 3a 3a 53 54 4d 54 0a 7d 20 7b 53 51 4c 49 54 45  ::STMT.} {SQLITE
2370: 5f 52 4f 57 7d 0a 64 6f 5f 74 65 73 74 20 73 63  _ROW}.do_test sc
2380: 68 65 6d 61 2d 31 31 2e 36 20 7b 0a 20 20 73 71  hema-11.6 {.  sq
2390: 6c 69 74 65 5f 64 65 6c 65 74 65 5f 63 6f 6c 6c  lite_delete_coll
23a0: 61 74 69 6f 6e 20 24 3a 3a 44 42 20 74 73 74 63  ation $::DB tstc
23b0: 6f 6c 6c 61 74 65 0a 7d 20 7b 53 51 4c 49 54 45  ollate.} {SQLITE
23c0: 5f 42 55 53 59 7d 0a 64 6f 5f 74 65 73 74 20 73  _BUSY}.do_test s
23d0: 63 68 65 6d 61 2d 31 31 2e 37 20 7b 0a 20 20 73  chema-11.7 {.  s
23e0: 65 74 20 72 63 20 5b 63 61 74 63 68 20 7b 0a 20  et rc [catch {. 
23f0: 20 20 20 64 62 20 63 6f 6c 6c 61 74 65 20 74 73     db collate ts
2400: 74 63 6f 6c 6c 61 74 65 20 7b 7d 0a 20 20 7d 20  tcollate {}.  } 
2410: 6d 73 67 5d 0a 20 20 6c 69 73 74 20 24 72 63 20  msg].  list $rc 
2420: 24 6d 73 67 0a 7d 20 7b 31 20 7b 75 6e 61 62 6c  $msg.} {1 {unabl
2430: 65 20 74 6f 20 64 65 6c 65 74 65 2f 6d 6f 64 69  e to delete/modi
2440: 66 79 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  fy collation seq
2450: 75 65 6e 63 65 20 64 75 65 20 74 6f 20 61 63 74  uence due to act
2460: 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 7d 7d  ive statements}}
2470: 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61 2d  .do_test schema-
2480: 31 31 2e 38 20 7b 0a 20 20 73 71 6c 69 74 65 33  11.8 {.  sqlite3
2490: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
24a0: 54 0a 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d 0a  T.} {SQLITE_OK}.
24b0: 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .# The following
24c0: 20 64 65 6d 6f 6e 73 74 72 61 74 65 73 20 77 68   demonstrates wh
24d0: 79 20 73 74 61 74 65 6d 65 6e 74 73 20 6e 65 65  y statements nee
24e0: 64 20 74 6f 20 62 65 20 65 78 70 69 72 65 64 20  d to be expired 
24f0: 77 68 65 6e 65 76 65 72 0a 23 20 74 68 65 72 65  whenever.# there
2500: 20 69 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 28   is a rollback (
2510: 65 78 70 6c 69 63 69 74 20 6f 72 20 6f 74 68 65  explicit or othe
2520: 72 77 69 73 65 29 2e 0a 23 0a 64 6f 5f 74 65 73  rwise)..#.do_tes
2530: 74 20 73 63 68 65 6d 61 2d 31 32 2e 31 20 7b 0a  t schema-12.1 {.
2540: 20 20 23 20 42 65 67 69 6e 20 61 20 74 72 61 6e    # Begin a tran
2550: 73 61 63 74 69 6f 6e 20 61 6e 64 20 63 72 65 61  saction and crea
2560: 74 65 20 61 20 74 61 62 6c 65 2e 20 54 68 69 73  te a table. This
2570: 20 69 6e 63 72 65 6d 65 6e 74 73 20 0a 20 20 23   increments .  #
2580: 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
2590: 69 65 2e 20 54 68 65 6e 20 63 6f 6d 70 69 6c 65  ie. Then compile
25a0: 20 61 6e 20 53 51 4c 20 73 74 61 74 65 6d 65 6e   an SQL statemen
25b0: 74 2c 20 75 73 69 6e 67 0a 20 20 23 20 74 68 65  t, using.  # the
25c0: 20 63 75 72 72 65 6e 74 20 28 69 6e 63 72 65 6d   current (increm
25d0: 65 6e 74 65 64 29 20 76 61 6c 75 65 20 6f 66 20  ented) value of 
25e0: 74 68 65 20 63 6f 6f 6b 69 65 2e 0a 20 20 65 78  the cookie..  ex
25f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
2600: 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41  N;.    CREATE TA
2610: 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29 3b  BLE t3(a, b, c);
2620: 0a 20 20 7d 0a 20 20 73 65 74 20 3a 3a 53 54 4d  .  }.  set ::STM
2630: 54 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70 61  T [sqlite3_prepa
2640: 72 65 20 24 3a 3a 44 42 20 22 43 52 45 41 54 45  re $::DB "CREATE
2650: 20 54 41 42 4c 45 20 74 34 28 61 2c 62 2c 63 29   TABLE t4(a,b,c)
2660: 22 20 2d 31 20 54 41 49 4c 5d 0a 0a 20 20 23 20  " -1 TAIL]..  # 
2670: 52 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  Rollback the tra
2680: 6e 73 61 63 74 69 6f 6e 2c 20 72 65 73 65 74 74  nsaction, resett
2690: 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20 63  ing the schema c
26a0: 6f 6f 6b 69 65 20 74 6f 20 74 68 65 20 76 61 6c  ookie to the val
26b0: 75 65 0a 20 20 23 20 69 74 20 68 61 64 20 61 74  ue.  # it had at
26c0: 20 74 68 65 20 73 74 61 72 74 20 6f 66 20 74 68   the start of th
26d0: 69 73 20 74 65 73 74 20 63 61 73 65 2e 20 54 68  is test case. Th
26e0: 65 6e 20 63 72 65 61 74 65 20 61 20 74 61 62 6c  en create a tabl
26f0: 65 2c 20 0a 20 20 23 20 69 6e 63 72 65 6d 65 6e  e, .  # incremen
2700: 74 69 6e 67 20 74 68 65 20 73 63 68 65 6d 61 20  ting the schema 
2710: 63 6f 6f 6b 69 65 2e 0a 20 20 65 78 65 63 73 71  cookie..  execsq
2720: 6c 20 7b 0a 20 20 20 20 52 4f 4c 4c 42 41 43 4b  l {.    ROLLBACK
2730: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
2740: 4c 45 20 74 34 28 61 2c 20 62 2c 20 63 29 3b 0a  LE t4(a, b, c);.
2750: 20 20 7d 0a 0a 20 20 23 20 54 68 65 20 73 63 68    }..  # The sch
2760: 65 6d 61 20 63 6f 6f 6b 69 65 20 6e 6f 77 20 68  ema cookie now h
2770: 61 73 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  as the same valu
2780: 65 20 61 73 20 69 74 20 64 69 64 20 77 68 65 6e  e as it did when
2790: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20   SQL statement. 
27a0: 20 23 20 24 3a 3a 53 54 4d 54 20 77 61 73 20 70   # $::STMT was p
27b0: 72 65 70 61 72 65 64 2e 20 53 6f 20 75 6e 6c 65  repared. So unle
27c0: 73 73 20 69 74 20 68 61 73 20 62 65 65 6e 20 65  ss it has been e
27d0: 78 70 69 72 65 64 2c 20 69 74 20 77 6f 75 6c 64  xpired, it would
27e0: 20 62 65 0a 20 20 23 20 70 6f 73 73 69 62 6c 65   be.  # possible
27f0: 20 74 6f 20 72 75 6e 20 74 68 65 20 22 43 52 45   to run the "CRE
2800: 41 54 45 20 54 41 42 4c 45 20 74 34 22 20 73 74  ATE TABLE t4" st
2810: 61 74 65 6d 65 6e 74 20 61 6e 64 20 63 72 65 61  atement and crea
2820: 74 65 20 61 0a 20 20 23 20 64 75 70 6c 69 63 61  te a.  # duplica
2830: 74 65 20 74 61 62 6c 65 2e 0a 20 20 6c 69 73 74  te table..  list
2840: 20 5b 73 71 6c 69 74 65 33 5f 73 74 65 70 20 24   [sqlite3_step $
2850: 3a 3a 53 54 4d 54 5d 20 5b 73 71 6c 69 74 65 33  ::STMT] [sqlite3
2860: 5f 66 69 6e 61 6c 69 7a 65 20 24 3a 3a 53 54 4d  _finalize $::STM
2870: 54 5d 0a 7d 20 7b 53 51 4c 49 54 45 5f 45 52 52  T].} {SQLITE_ERR
2880: 4f 52 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  OR SQLITE_SCHEMA
2890: 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 7b 61 75  }..ifcapable {au
28a0: 74 68 7d 20 7b 0a 0a 64 6f 5f 74 65 73 74 20 73  th} {..do_test s
28b0: 63 68 65 6d 61 2d 31 33 2e 31 20 7b 0a 20 20 73  chema-13.1 {.  s
28c0: 65 74 20 53 20 5b 73 71 6c 69 74 65 33 5f 70 72  et S [sqlite3_pr
28d0: 65 70 61 72 65 5f 76 32 20 64 62 20 22 53 45 4c  epare_v2 db "SEL
28e0: 45 43 54 20 2a 20 46 52 4f 4d 20 73 71 6c 69 74  ECT * FROM sqlit
28f0: 65 5f 6d 61 73 74 65 72 22 20 2d 31 20 64 75 6d  e_master" -1 dum
2900: 6d 79 5d 0a 20 20 64 62 20 66 75 6e 63 74 69 6f  my].  db functio
2910: 6e 20 68 65 6c 6c 6f 20 68 65 6c 6c 6f 0a 20 20  n hello hello.  
2920: 64 62 20 66 75 6e 63 74 69 6f 6e 20 68 65 6c 6c  db function hell
2930: 6f 20 7b 7d 0a 20 20 64 62 20 61 75 74 68 20 61  o {}.  db auth a
2940: 75 74 68 0a 20 20 70 72 6f 63 20 61 75 74 68 20  uth.  proc auth 
2950: 7b 61 72 67 73 7d 20 7b 0a 20 20 20 20 69 66 20  {args} {.    if 
2960: 7b 5b 6c 69 6e 64 65 78 20 24 61 72 67 73 20 30  {[lindex $args 0
2970: 5d 20 3d 3d 20 22 53 51 4c 49 54 45 5f 52 45 41  ] == "SQLITE_REA
2980: 44 22 7d 20 7b 72 65 74 75 72 6e 20 53 51 4c 49  D"} {return SQLI
2990: 54 45 5f 44 45 4e 59 7d 0a 20 20 20 20 72 65 74  TE_DENY}.    ret
29a0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 20 20  urn SQLITE_OK.  
29b0: 7d 0a 20 20 73 71 6c 69 74 65 33 5f 73 74 65 70  }.  sqlite3_step
29c0: 20 24 53 0a 7d 20 7b 53 51 4c 49 54 45 5f 53 43   $S.} {SQLITE_SC
29d0: 48 45 4d 41 7d 0a 0a 64 6f 5f 74 65 73 74 20 73  HEMA}..do_test s
29e0: 63 68 65 6d 61 2d 31 33 2e 32 20 7b 0a 20 20 73  chema-13.2 {.  s
29f0: 71 6c 69 74 65 33 5f 73 74 65 70 20 24 53 0a 7d  qlite3_step $S.}
2a00: 20 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d   {SQLITE_SCHEMA}
2a10: 0a 0a 64 6f 5f 74 65 73 74 20 73 63 68 65 6d 61  ..do_test schema
2a20: 2d 31 33 2e 33 20 7b 0a 20 20 73 71 6c 69 74 65  -13.3 {.  sqlite
2a30: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 53 0a 7d 20  3_finalize $S.} 
2a40: 7b 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 7d 0a  {SQLITE_SCHEMA}.
2a50: 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  .}..finish_test.