/ Hex Artifact Content
Login

Artifact 63442ba61ceb0c1eeb63aac1f4f5cebfa509d352276059d27106ae256bafc959:


0000: 23 20 32 30 31 38 20 53 65 70 74 65 6d 62 65 72  # 2018 September
0010: 20 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   2.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 0a 0a 73 65  **********.#..se
0170: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0180: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0190: 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72  .source $testdir
01a0: 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49  /tester.tcl..# I
01b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c  f SQLITE_OMIT_AL
01c0: 54 45 52 54 41 42 4c 45 20 69 73 20 64 65 66 69  TERTABLE is defi
01d0: 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20 66  ned, omit this f
01e0: 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 21  ile..ifcapable !
01f0: 61 6c 74 65 72 74 61 62 6c 65 20 7b 0a 20 20 66  altertable {.  f
0200: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0210: 75 72 6e 0a 7d 0a 73 65 74 20 74 65 73 74 70 72  urn.}.set testpr
0220: 65 66 69 78 20 61 6c 74 65 72 61 75 74 68 0a 0a  efix alterauth..
0230: 73 65 74 20 3a 3a 61 75 74 68 20 5b 6c 69 73 74  set ::auth [list
0240: 5d 0a 70 72 6f 63 20 78 41 75 74 68 20 7b 74 79  ].proc xAuth {ty
0250: 70 65 20 61 72 67 73 7d 20 7b 0a 20 20 69 66 20  pe args} {.  if 
0260: 7b 24 74 79 70 65 20 3d 3d 20 22 53 51 4c 49 54  {$type == "SQLIT
0270: 45 5f 41 4c 54 45 52 5f 54 41 42 4c 45 22 7d 20  E_ALTER_TABLE"} 
0280: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 3a 3a  {.    lappend ::
0290: 61 75 74 68 20 5b 63 6f 6e 63 61 74 20 24 74 79  auth [concat $ty
02a0: 70 65 20 5b 6c 72 61 6e 67 65 20 24 61 72 67 73  pe [lrange $args
02b0: 20 30 20 33 5d 5d 0a 20 20 7d 0a 20 20 72 65 74   0 3]].  }.  ret
02c0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 0a 7d 0a  urn SQLITE_OK.}.
02d0: 64 62 20 61 75 74 68 20 78 41 75 74 68 0a 0a 64  db auth xAuth..d
02e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
02f0: 2e 30 20 7b 20 43 52 45 41 54 45 20 54 41 42 4c  .0 { CREATE TABL
0300: 45 20 74 31 28 61 2c 20 62 2c 20 63 29 3b 20 7d  E t1(a, b, c); }
0310: 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 31 20 7b 0a  ..do_test 1.1 {.
0320: 20 20 73 65 74 20 3a 3a 61 75 74 68 20 5b 6c 69    set ::auth [li
0330: 73 74 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  st].  execsql { 
0340: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52  ALTER TABLE t1 R
0350: 45 4e 41 4d 45 20 54 4f 20 74 32 20 7d 0a 20 20  ENAME TO t2 }.  
0360: 73 65 74 20 3a 3a 61 75 74 68 0a 7d 20 7b 7b 53  set ::auth.} {{S
0370: 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41 42 4c  QLITE_ALTER_TABL
0380: 45 20 6d 61 69 6e 20 74 31 20 7b 7d 20 7b 7d 7d  E main t1 {} {}}
0390: 7d 0a 0a 64 6f 5f 74 65 73 74 20 31 2e 32 20 7b  }..do_test 1.2 {
03a0: 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 20 5b 6c  .  set ::auth [l
03b0: 69 73 74 5d 0a 20 20 65 78 65 63 73 71 6c 20 7b  ist].  execsql {
03c0: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74 32 20   ALTER TABLE t2 
03d0: 52 45 4e 41 4d 45 20 63 20 54 4f 20 63 63 63 20  RENAME c TO ccc 
03e0: 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 0a 7d  }.  set ::auth.}
03f0: 20 7b 7b 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f   {{SQLITE_ALTER_
0400: 54 41 42 4c 45 20 6d 61 69 6e 20 74 32 20 7b 7d  TABLE main t2 {}
0410: 20 7b 7d 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 31   {}}}..do_test 1
0420: 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a 61 75 74  .3 {.  set ::aut
0430: 68 20 5b 6c 69 73 74 5d 0a 20 20 65 78 65 63 73  h [list].  execs
0440: 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45  ql { ALTER TABLE
0450: 20 74 32 20 41 44 44 20 43 4f 4c 55 4d 4e 20 64   t2 ADD COLUMN d
0460: 20 7d 0a 20 20 73 65 74 20 3a 3a 61 75 74 68 0a   }.  set ::auth.
0470: 7d 20 7b 7b 53 51 4c 49 54 45 5f 41 4c 54 45 52  } {{SQLITE_ALTER
0480: 5f 54 41 42 4c 45 20 6d 61 69 6e 20 74 32 20 7b  _TABLE main t2 {
0490: 7d 20 7b 7d 7d 7d 0a 0a 70 72 6f 63 20 78 41 75  } {}}}..proc xAu
04a0: 74 68 20 7b 74 79 70 65 20 61 72 67 73 7d 20 7b  th {type args} {
04b0: 0a 20 20 69 66 20 7b 24 74 79 70 65 20 3d 3d 20  .  if {$type == 
04c0: 22 53 51 4c 49 54 45 5f 41 4c 54 45 52 5f 54 41  "SQLITE_ALTER_TA
04d0: 42 4c 45 22 7d 20 7b 0a 20 20 20 20 72 65 74 75  BLE"} {.    retu
04e0: 72 6e 20 53 51 4c 49 54 45 5f 44 45 4e 59 0a 20  rn SQLITE_DENY. 
04f0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49   }.  return SQLI
0500: 54 45 5f 4f 4b 0a 7d 0a 0a 64 6f 5f 74 65 73 74  TE_OK.}..do_test
0510: 20 32 2e 31 20 7b 0a 20 20 63 61 74 63 68 73 71   2.1 {.  catchsq
0520: 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45 20  l { ALTER TABLE 
0530: 74 32 20 52 45 4e 41 4d 45 20 54 4f 20 74 33 20  t2 RENAME TO t3 
0540: 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20 61 75 74 68  }.} {1 {not auth
0550: 6f 72 69 7a 65 64 7d 7d 0a 0a 64 6f 5f 74 65 73  orized}}..do_tes
0560: 74 20 32 2e 32 20 7b 0a 20 20 63 61 74 63 68 73  t 2.2 {.  catchs
0570: 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45  ql { ALTER TABLE
0580: 20 74 32 20 52 45 4e 41 4d 45 20 64 20 54 4f 20   t2 RENAME d TO 
0590: 64 64 64 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74 20  ddd }.} {1 {not 
05a0: 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 0a 64 6f  authorized}}..do
05b0: 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 63 61  _test 2.3 {.  ca
05c0: 74 63 68 73 71 6c 20 7b 20 41 4c 54 45 52 20 54  tchsql { ALTER T
05d0: 41 42 4c 45 20 74 32 20 41 44 44 20 43 4f 4c 55  ABLE t2 ADD COLU
05e0: 4d 4e 20 65 20 7d 0a 7d 20 7b 31 20 7b 6e 6f 74  MN e }.} {1 {not
05f0: 20 61 75 74 68 6f 72 69 7a 65 64 7d 7d 0a 0a 66   authorized}}..f
0600: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.