Annotation of embedaddon/sqlite3/test/auth.test, revision 1.1
1.1 ! misho 1: # 2003 April 4
! 2: #
! 3: # The author disclaims copyright to this source code. In place of
! 4: # a legal notice, here is a blessing:
! 5: #
! 6: # May you do good and not evil.
! 7: # May you find forgiveness for yourself and forgive others.
! 8: # May you share freely, never taking more than you give.
! 9: #
! 10: #***********************************************************************
! 11: # This file implements regression tests for SQLite library. The
! 12: # focus of this script is testing the sqlite3_set_authorizer() API
! 13: # and related functionality.
! 14: #
! 15: # $Id: auth.test,v 1.46 2009/07/02 18:40:35 danielk1977 Exp $
! 16: #
! 17:
! 18: set testdir [file dirname $argv0]
! 19: source $testdir/tester.tcl
! 20:
! 21: # disable this test if the SQLITE_OMIT_AUTHORIZATION macro is
! 22: # defined during compilation.
! 23: if {[catch {db auth {}} msg]} {
! 24: finish_test
! 25: return
! 26: }
! 27:
! 28: rename proc proc_real
! 29: proc_real proc {name arguments script} {
! 30: proc_real $name $arguments $script
! 31: if {$name=="auth"} {
! 32: db authorizer ::auth
! 33: }
! 34: }
! 35:
! 36: do_test auth-1.1.1 {
! 37: db close
! 38: set ::DB [sqlite3 db test.db]
! 39: proc auth {code arg1 arg2 arg3 arg4} {
! 40: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 41: return SQLITE_DENY
! 42: }
! 43: return SQLITE_OK
! 44: }
! 45: db authorizer ::auth
! 46: catchsql {CREATE TABLE t1(a,b,c)}
! 47: } {1 {not authorized}}
! 48: do_test auth-1.1.2 {
! 49: db errorcode
! 50: } {23}
! 51: do_test auth-1.1.3 {
! 52: db authorizer
! 53: } {::auth}
! 54: do_test auth-1.1.4 {
! 55: # Ticket #896.
! 56: catchsql {
! 57: SELECT x;
! 58: }
! 59: } {1 {no such column: x}}
! 60: do_test auth-1.2 {
! 61: execsql {SELECT name FROM sqlite_master}
! 62: } {}
! 63: do_test auth-1.3.1 {
! 64: proc auth {code arg1 arg2 arg3 arg4} {
! 65: if {$code=="SQLITE_CREATE_TABLE"} {
! 66: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 67: return SQLITE_DENY
! 68: }
! 69: return SQLITE_OK
! 70: }
! 71: catchsql {CREATE TABLE t1(a,b,c)}
! 72: } {1 {not authorized}}
! 73: do_test auth-1.3.2 {
! 74: db errorcode
! 75: } {23}
! 76: do_test auth-1.3.3 {
! 77: set ::authargs
! 78: } {t1 {} main {}}
! 79: do_test auth-1.4 {
! 80: execsql {SELECT name FROM sqlite_master}
! 81: } {}
! 82:
! 83: ifcapable tempdb {
! 84: do_test auth-1.5 {
! 85: proc auth {code arg1 arg2 arg3 arg4} {
! 86: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 87: return SQLITE_DENY
! 88: }
! 89: return SQLITE_OK
! 90: }
! 91: catchsql {CREATE TEMP TABLE t1(a,b,c)}
! 92: } {1 {not authorized}}
! 93: do_test auth-1.6 {
! 94: execsql {SELECT name FROM sqlite_temp_master}
! 95: } {}
! 96: do_test auth-1.7.1 {
! 97: proc auth {code arg1 arg2 arg3 arg4} {
! 98: if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
! 99: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 100: return SQLITE_DENY
! 101: }
! 102: return SQLITE_OK
! 103: }
! 104: catchsql {CREATE TEMP TABLE t1(a,b,c)}
! 105: } {1 {not authorized}}
! 106: do_test auth-1.7.2 {
! 107: set ::authargs
! 108: } {t1 {} temp {}}
! 109: do_test auth-1.8 {
! 110: execsql {SELECT name FROM sqlite_temp_master}
! 111: } {}
! 112: }
! 113:
! 114: do_test auth-1.9 {
! 115: proc auth {code arg1 arg2 arg3 arg4} {
! 116: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 117: return SQLITE_IGNORE
! 118: }
! 119: return SQLITE_OK
! 120: }
! 121: catchsql {CREATE TABLE t1(a,b,c)}
! 122: } {0 {}}
! 123: do_test auth-1.10 {
! 124: execsql {SELECT name FROM sqlite_master}
! 125: } {}
! 126: do_test auth-1.11 {
! 127: proc auth {code arg1 arg2 arg3 arg4} {
! 128: if {$code=="SQLITE_CREATE_TABLE"} {
! 129: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 130: return SQLITE_IGNORE
! 131: }
! 132: return SQLITE_OK
! 133: }
! 134: catchsql {CREATE TABLE t1(a,b,c)}
! 135: } {0 {}}
! 136: do_test auth-1.12 {
! 137: execsql {SELECT name FROM sqlite_master}
! 138: } {}
! 139:
! 140: ifcapable tempdb {
! 141: do_test auth-1.13 {
! 142: proc auth {code arg1 arg2 arg3 arg4} {
! 143: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 144: return SQLITE_IGNORE
! 145: }
! 146: return SQLITE_OK
! 147: }
! 148: catchsql {CREATE TEMP TABLE t1(a,b,c)}
! 149: } {0 {}}
! 150: do_test auth-1.14 {
! 151: execsql {SELECT name FROM sqlite_temp_master}
! 152: } {}
! 153: do_test auth-1.15 {
! 154: proc auth {code arg1 arg2 arg3 arg4} {
! 155: if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
! 156: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 157: return SQLITE_IGNORE
! 158: }
! 159: return SQLITE_OK
! 160: }
! 161: catchsql {CREATE TEMP TABLE t1(a,b,c)}
! 162: } {0 {}}
! 163: do_test auth-1.16 {
! 164: execsql {SELECT name FROM sqlite_temp_master}
! 165: } {}
! 166:
! 167: do_test auth-1.17 {
! 168: proc auth {code arg1 arg2 arg3 arg4} {
! 169: if {$code=="SQLITE_CREATE_TABLE"} {
! 170: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 171: return SQLITE_DENY
! 172: }
! 173: return SQLITE_OK
! 174: }
! 175: catchsql {CREATE TEMP TABLE t1(a,b,c)}
! 176: } {0 {}}
! 177: do_test auth-1.18 {
! 178: execsql {SELECT name FROM sqlite_temp_master}
! 179: } {t1}
! 180: }
! 181:
! 182: do_test auth-1.19.1 {
! 183: set ::authargs {}
! 184: proc auth {code arg1 arg2 arg3 arg4} {
! 185: if {$code=="SQLITE_CREATE_TEMP_TABLE"} {
! 186: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 187: return SQLITE_DENY
! 188: }
! 189: return SQLITE_OK
! 190: }
! 191: catchsql {CREATE TABLE t2(a,b,c)}
! 192: } {0 {}}
! 193: do_test auth-1.19.2 {
! 194: set ::authargs
! 195: } {}
! 196: do_test auth-1.20 {
! 197: execsql {SELECT name FROM sqlite_master}
! 198: } {t2}
! 199:
! 200: do_test auth-1.21.1 {
! 201: proc auth {code arg1 arg2 arg3 arg4} {
! 202: if {$code=="SQLITE_DROP_TABLE"} {
! 203: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 204: return SQLITE_DENY
! 205: }
! 206: return SQLITE_OK
! 207: }
! 208: catchsql {DROP TABLE t2}
! 209: } {1 {not authorized}}
! 210: do_test auth-1.21.2 {
! 211: set ::authargs
! 212: } {t2 {} main {}}
! 213: do_test auth-1.22 {
! 214: execsql {SELECT name FROM sqlite_master}
! 215: } {t2}
! 216: do_test auth-1.23.1 {
! 217: proc auth {code arg1 arg2 arg3 arg4} {
! 218: if {$code=="SQLITE_DROP_TABLE"} {
! 219: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 220: return SQLITE_IGNORE
! 221: }
! 222: return SQLITE_OK
! 223: }
! 224: catchsql {DROP TABLE t2}
! 225: } {0 {}}
! 226: do_test auth-1.23.2 {
! 227: set ::authargs
! 228: } {t2 {} main {}}
! 229: do_test auth-1.24 {
! 230: execsql {SELECT name FROM sqlite_master}
! 231: } {t2}
! 232:
! 233: ifcapable tempdb {
! 234: do_test auth-1.25 {
! 235: proc auth {code arg1 arg2 arg3 arg4} {
! 236: if {$code=="SQLITE_DROP_TEMP_TABLE"} {
! 237: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 238: return SQLITE_DENY
! 239: }
! 240: return SQLITE_OK
! 241: }
! 242: catchsql {DROP TABLE t1}
! 243: } {1 {not authorized}}
! 244: do_test auth-1.26 {
! 245: execsql {SELECT name FROM sqlite_temp_master}
! 246: } {t1}
! 247: do_test auth-1.27 {
! 248: proc auth {code arg1 arg2 arg3 arg4} {
! 249: if {$code=="SQLITE_DROP_TEMP_TABLE"} {
! 250: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 251: return SQLITE_IGNORE
! 252: }
! 253: return SQLITE_OK
! 254: }
! 255: catchsql {DROP TABLE t1}
! 256: } {0 {}}
! 257: do_test auth-1.28 {
! 258: execsql {SELECT name FROM sqlite_temp_master}
! 259: } {t1}
! 260: }
! 261:
! 262: do_test auth-1.29 {
! 263: proc auth {code arg1 arg2 arg3 arg4} {
! 264: if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
! 265: return SQLITE_DENY
! 266: }
! 267: return SQLITE_OK
! 268: }
! 269: catchsql {INSERT INTO t2 VALUES(1,2,3)}
! 270: } {1 {not authorized}}
! 271: do_test auth-1.30 {
! 272: execsql {SELECT * FROM t2}
! 273: } {}
! 274: do_test auth-1.31 {
! 275: proc auth {code arg1 arg2 arg3 arg4} {
! 276: if {$code=="SQLITE_INSERT" && $arg1=="t2"} {
! 277: return SQLITE_IGNORE
! 278: }
! 279: return SQLITE_OK
! 280: }
! 281: catchsql {INSERT INTO t2 VALUES(1,2,3)}
! 282: } {0 {}}
! 283: do_test auth-1.32 {
! 284: execsql {SELECT * FROM t2}
! 285: } {}
! 286: do_test auth-1.33 {
! 287: proc auth {code arg1 arg2 arg3 arg4} {
! 288: if {$code=="SQLITE_INSERT" && $arg1=="t1"} {
! 289: return SQLITE_IGNORE
! 290: }
! 291: return SQLITE_OK
! 292: }
! 293: catchsql {INSERT INTO t2 VALUES(1,2,3)}
! 294: } {0 {}}
! 295: do_test auth-1.34 {
! 296: execsql {SELECT * FROM t2}
! 297: } {1 2 3}
! 298:
! 299: do_test auth-1.35.1 {
! 300: proc auth {code arg1 arg2 arg3 arg4} {
! 301: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
! 302: return SQLITE_DENY
! 303: }
! 304: return SQLITE_OK
! 305: }
! 306: catchsql {SELECT * FROM t2}
! 307: } {1 {access to t2.b is prohibited}}
! 308: ifcapable attach {
! 309: do_test auth-1.35.2 {
! 310: execsql {ATTACH DATABASE 'test.db' AS two}
! 311: catchsql {SELECT * FROM two.t2}
! 312: } {1 {access to two.t2.b is prohibited}}
! 313: execsql {DETACH DATABASE two}
! 314: }
! 315: do_test auth-1.36 {
! 316: proc auth {code arg1 arg2 arg3 arg4} {
! 317: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
! 318: return SQLITE_IGNORE
! 319: }
! 320: return SQLITE_OK
! 321: }
! 322: catchsql {SELECT * FROM t2}
! 323: } {0 {1 {} 3}}
! 324: do_test auth-1.37 {
! 325: proc auth {code arg1 arg2 arg3 arg4} {
! 326: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
! 327: return SQLITE_IGNORE
! 328: }
! 329: return SQLITE_OK
! 330: }
! 331: catchsql {SELECT * FROM t2 WHERE b=2}
! 332: } {0 {}}
! 333: do_test auth-1.38 {
! 334: proc auth {code arg1 arg2 arg3 arg4} {
! 335: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="a"} {
! 336: return SQLITE_IGNORE
! 337: }
! 338: return SQLITE_OK
! 339: }
! 340: catchsql {SELECT * FROM t2 WHERE b=2}
! 341: } {0 {{} 2 3}}
! 342: do_test auth-1.39 {
! 343: proc auth {code arg1 arg2 arg3 arg4} {
! 344: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
! 345: return SQLITE_IGNORE
! 346: }
! 347: return SQLITE_OK
! 348: }
! 349: catchsql {SELECT * FROM t2 WHERE b IS NULL}
! 350: } {0 {1 {} 3}}
! 351: do_test auth-1.40 {
! 352: proc auth {code arg1 arg2 arg3 arg4} {
! 353: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="b"} {
! 354: return SQLITE_DENY
! 355: }
! 356: return SQLITE_OK
! 357: }
! 358: catchsql {SELECT a,c FROM t2 WHERE b IS NULL}
! 359: } {1 {access to t2.b is prohibited}}
! 360:
! 361: do_test auth-1.41 {
! 362: proc auth {code arg1 arg2 arg3 arg4} {
! 363: if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
! 364: return SQLITE_DENY
! 365: }
! 366: return SQLITE_OK
! 367: }
! 368: catchsql {UPDATE t2 SET a=11}
! 369: } {0 {}}
! 370: do_test auth-1.42 {
! 371: execsql {SELECT * FROM t2}
! 372: } {11 2 3}
! 373: do_test auth-1.43 {
! 374: proc auth {code arg1 arg2 arg3 arg4} {
! 375: if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
! 376: return SQLITE_DENY
! 377: }
! 378: return SQLITE_OK
! 379: }
! 380: catchsql {UPDATE t2 SET b=22, c=33}
! 381: } {1 {not authorized}}
! 382: do_test auth-1.44 {
! 383: execsql {SELECT * FROM t2}
! 384: } {11 2 3}
! 385: do_test auth-1.45 {
! 386: proc auth {code arg1 arg2 arg3 arg4} {
! 387: if {$code=="SQLITE_UPDATE" && $arg1=="t2" && $arg2=="b"} {
! 388: return SQLITE_IGNORE
! 389: }
! 390: return SQLITE_OK
! 391: }
! 392: catchsql {UPDATE t2 SET b=22, c=33}
! 393: } {0 {}}
! 394: do_test auth-1.46 {
! 395: execsql {SELECT * FROM t2}
! 396: } {11 2 33}
! 397:
! 398: do_test auth-1.47 {
! 399: proc auth {code arg1 arg2 arg3 arg4} {
! 400: if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
! 401: return SQLITE_DENY
! 402: }
! 403: return SQLITE_OK
! 404: }
! 405: catchsql {DELETE FROM t2 WHERE a=11}
! 406: } {1 {not authorized}}
! 407: do_test auth-1.48 {
! 408: execsql {SELECT * FROM t2}
! 409: } {11 2 33}
! 410: do_test auth-1.49 {
! 411: proc auth {code arg1 arg2 arg3 arg4} {
! 412: if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
! 413: return SQLITE_IGNORE
! 414: }
! 415: return SQLITE_OK
! 416: }
! 417: catchsql {DELETE FROM t2 WHERE a=11}
! 418: } {0 {}}
! 419: do_test auth-1.50 {
! 420: execsql {SELECT * FROM t2}
! 421: } {}
! 422: do_test auth-1.50.2 {
! 423: execsql {INSERT INTO t2 VALUES(11, 2, 33)}
! 424: } {}
! 425:
! 426: do_test auth-1.51 {
! 427: proc auth {code arg1 arg2 arg3 arg4} {
! 428: if {$code=="SQLITE_SELECT"} {
! 429: return SQLITE_DENY
! 430: }
! 431: return SQLITE_OK
! 432: }
! 433: catchsql {SELECT * FROM t2}
! 434: } {1 {not authorized}}
! 435: do_test auth-1.52 {
! 436: proc auth {code arg1 arg2 arg3 arg4} {
! 437: if {$code=="SQLITE_SELECT"} {
! 438: return SQLITE_IGNORE
! 439: }
! 440: return SQLITE_OK
! 441: }
! 442: catchsql {SELECT * FROM t2}
! 443: } {0 {}}
! 444: do_test auth-1.53 {
! 445: proc auth {code arg1 arg2 arg3 arg4} {
! 446: if {$code=="SQLITE_SELECT"} {
! 447: return SQLITE_OK
! 448: }
! 449: return SQLITE_OK
! 450: }
! 451: catchsql {SELECT * FROM t2}
! 452: } {0 {11 2 33}}
! 453:
! 454: # Update for version 3: There used to be a handful of test here that
! 455: # tested the authorisation callback with the COPY command. The following
! 456: # test makes the same database modifications as they used to.
! 457: do_test auth-1.54 {
! 458: execsql {INSERT INTO t2 VALUES(7, 8, 9);}
! 459: } {}
! 460: do_test auth-1.55 {
! 461: execsql {SELECT * FROM t2}
! 462: } {11 2 33 7 8 9}
! 463:
! 464: do_test auth-1.63 {
! 465: proc auth {code arg1 arg2 arg3 arg4} {
! 466: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 467: return SQLITE_DENY
! 468: }
! 469: return SQLITE_OK
! 470: }
! 471: catchsql {DROP TABLE t2}
! 472: } {1 {not authorized}}
! 473: do_test auth-1.64 {
! 474: execsql {SELECT name FROM sqlite_master}
! 475: } {t2}
! 476: do_test auth-1.65 {
! 477: proc auth {code arg1 arg2 arg3 arg4} {
! 478: if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
! 479: return SQLITE_DENY
! 480: }
! 481: return SQLITE_OK
! 482: }
! 483: catchsql {DROP TABLE t2}
! 484: } {1 {not authorized}}
! 485: do_test auth-1.66 {
! 486: execsql {SELECT name FROM sqlite_master}
! 487: } {t2}
! 488:
! 489: ifcapable tempdb {
! 490: do_test auth-1.67 {
! 491: proc auth {code arg1 arg2 arg3 arg4} {
! 492: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 493: return SQLITE_DENY
! 494: }
! 495: return SQLITE_OK
! 496: }
! 497: catchsql {DROP TABLE t1}
! 498: } {1 {not authorized}}
! 499: do_test auth-1.68 {
! 500: execsql {SELECT name FROM sqlite_temp_master}
! 501: } {t1}
! 502: do_test auth-1.69 {
! 503: proc auth {code arg1 arg2 arg3 arg4} {
! 504: if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
! 505: return SQLITE_DENY
! 506: }
! 507: return SQLITE_OK
! 508: }
! 509: catchsql {DROP TABLE t1}
! 510: } {1 {not authorized}}
! 511: do_test auth-1.70 {
! 512: execsql {SELECT name FROM sqlite_temp_master}
! 513: } {t1}
! 514: }
! 515:
! 516: do_test auth-1.71 {
! 517: proc auth {code arg1 arg2 arg3 arg4} {
! 518: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 519: return SQLITE_IGNORE
! 520: }
! 521: return SQLITE_OK
! 522: }
! 523: catchsql {DROP TABLE t2}
! 524: } {0 {}}
! 525: do_test auth-1.72 {
! 526: execsql {SELECT name FROM sqlite_master}
! 527: } {t2}
! 528: do_test auth-1.73 {
! 529: proc auth {code arg1 arg2 arg3 arg4} {
! 530: if {$code=="SQLITE_DELETE" && $arg1=="t2"} {
! 531: return SQLITE_IGNORE
! 532: }
! 533: return SQLITE_OK
! 534: }
! 535: catchsql {DROP TABLE t2}
! 536: } {0 {}}
! 537: do_test auth-1.74 {
! 538: execsql {SELECT name FROM sqlite_master}
! 539: } {t2}
! 540:
! 541: ifcapable tempdb {
! 542: do_test auth-1.75 {
! 543: proc auth {code arg1 arg2 arg3 arg4} {
! 544: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 545: return SQLITE_IGNORE
! 546: }
! 547: return SQLITE_OK
! 548: }
! 549: catchsql {DROP TABLE t1}
! 550: } {0 {}}
! 551: do_test auth-1.76 {
! 552: execsql {SELECT name FROM sqlite_temp_master}
! 553: } {t1}
! 554: do_test auth-1.77 {
! 555: proc auth {code arg1 arg2 arg3 arg4} {
! 556: if {$code=="SQLITE_DELETE" && $arg1=="t1"} {
! 557: return SQLITE_IGNORE
! 558: }
! 559: return SQLITE_OK
! 560: }
! 561: catchsql {DROP TABLE t1}
! 562: } {0 {}}
! 563: do_test auth-1.78 {
! 564: execsql {SELECT name FROM sqlite_temp_master}
! 565: } {t1}
! 566: }
! 567:
! 568: # Test cases auth-1.79 to auth-1.124 test creating and dropping views.
! 569: # Omit these if the library was compiled with views omitted.
! 570: ifcapable view {
! 571: do_test auth-1.79 {
! 572: proc auth {code arg1 arg2 arg3 arg4} {
! 573: if {$code=="SQLITE_CREATE_VIEW"} {
! 574: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 575: return SQLITE_DENY
! 576: }
! 577: return SQLITE_OK
! 578: }
! 579: catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 580: } {1 {not authorized}}
! 581: do_test auth-1.80 {
! 582: set ::authargs
! 583: } {v1 {} main {}}
! 584: do_test auth-1.81 {
! 585: execsql {SELECT name FROM sqlite_master}
! 586: } {t2}
! 587: do_test auth-1.82 {
! 588: proc auth {code arg1 arg2 arg3 arg4} {
! 589: if {$code=="SQLITE_CREATE_VIEW"} {
! 590: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 591: return SQLITE_IGNORE
! 592: }
! 593: return SQLITE_OK
! 594: }
! 595: catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 596: } {0 {}}
! 597: do_test auth-1.83 {
! 598: set ::authargs
! 599: } {v1 {} main {}}
! 600: do_test auth-1.84 {
! 601: execsql {SELECT name FROM sqlite_master}
! 602: } {t2}
! 603:
! 604: ifcapable tempdb {
! 605: do_test auth-1.85 {
! 606: proc auth {code arg1 arg2 arg3 arg4} {
! 607: if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
! 608: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 609: return SQLITE_DENY
! 610: }
! 611: return SQLITE_OK
! 612: }
! 613: catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 614: } {1 {not authorized}}
! 615: do_test auth-1.86 {
! 616: set ::authargs
! 617: } {v1 {} temp {}}
! 618: do_test auth-1.87 {
! 619: execsql {SELECT name FROM sqlite_temp_master}
! 620: } {t1}
! 621: do_test auth-1.88 {
! 622: proc auth {code arg1 arg2 arg3 arg4} {
! 623: if {$code=="SQLITE_CREATE_TEMP_VIEW"} {
! 624: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 625: return SQLITE_IGNORE
! 626: }
! 627: return SQLITE_OK
! 628: }
! 629: catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 630: } {0 {}}
! 631: do_test auth-1.89 {
! 632: set ::authargs
! 633: } {v1 {} temp {}}
! 634: do_test auth-1.90 {
! 635: execsql {SELECT name FROM sqlite_temp_master}
! 636: } {t1}
! 637: }
! 638:
! 639: do_test auth-1.91 {
! 640: proc auth {code arg1 arg2 arg3 arg4} {
! 641: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 642: return SQLITE_DENY
! 643: }
! 644: return SQLITE_OK
! 645: }
! 646: catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 647: } {1 {not authorized}}
! 648: do_test auth-1.92 {
! 649: execsql {SELECT name FROM sqlite_master}
! 650: } {t2}
! 651: do_test auth-1.93 {
! 652: proc auth {code arg1 arg2 arg3 arg4} {
! 653: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 654: return SQLITE_IGNORE
! 655: }
! 656: return SQLITE_OK
! 657: }
! 658: catchsql {CREATE VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 659: } {0 {}}
! 660: do_test auth-1.94 {
! 661: execsql {SELECT name FROM sqlite_master}
! 662: } {t2}
! 663:
! 664: ifcapable tempdb {
! 665: do_test auth-1.95 {
! 666: proc auth {code arg1 arg2 arg3 arg4} {
! 667: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 668: return SQLITE_DENY
! 669: }
! 670: return SQLITE_OK
! 671: }
! 672: catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 673: } {1 {not authorized}}
! 674: do_test auth-1.96 {
! 675: execsql {SELECT name FROM sqlite_temp_master}
! 676: } {t1}
! 677: do_test auth-1.97 {
! 678: proc auth {code arg1 arg2 arg3 arg4} {
! 679: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 680: return SQLITE_IGNORE
! 681: }
! 682: return SQLITE_OK
! 683: }
! 684: catchsql {CREATE TEMPORARY VIEW v1 AS SELECT a+1,b+1 FROM t2}
! 685: } {0 {}}
! 686: do_test auth-1.98 {
! 687: execsql {SELECT name FROM sqlite_temp_master}
! 688: } {t1}
! 689: }
! 690:
! 691: do_test auth-1.99 {
! 692: proc auth {code arg1 arg2 arg3 arg4} {
! 693: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 694: return SQLITE_DENY
! 695: }
! 696: return SQLITE_OK
! 697: }
! 698: catchsql {
! 699: CREATE VIEW v2 AS SELECT a+1,b+1 FROM t2;
! 700: DROP VIEW v2
! 701: }
! 702: } {1 {not authorized}}
! 703: do_test auth-1.100 {
! 704: execsql {SELECT name FROM sqlite_master}
! 705: } {t2 v2}
! 706: do_test auth-1.101 {
! 707: proc auth {code arg1 arg2 arg3 arg4} {
! 708: if {$code=="SQLITE_DROP_VIEW"} {
! 709: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 710: return SQLITE_DENY
! 711: }
! 712: return SQLITE_OK
! 713: }
! 714: catchsql {DROP VIEW v2}
! 715: } {1 {not authorized}}
! 716: do_test auth-1.102 {
! 717: set ::authargs
! 718: } {v2 {} main {}}
! 719: do_test auth-1.103 {
! 720: execsql {SELECT name FROM sqlite_master}
! 721: } {t2 v2}
! 722: do_test auth-1.104 {
! 723: proc auth {code arg1 arg2 arg3 arg4} {
! 724: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 725: return SQLITE_IGNORE
! 726: }
! 727: return SQLITE_OK
! 728: }
! 729: catchsql {DROP VIEW v2}
! 730: } {0 {}}
! 731: do_test auth-1.105 {
! 732: execsql {SELECT name FROM sqlite_master}
! 733: } {t2 v2}
! 734: do_test auth-1.106 {
! 735: proc auth {code arg1 arg2 arg3 arg4} {
! 736: if {$code=="SQLITE_DROP_VIEW"} {
! 737: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 738: return SQLITE_IGNORE
! 739: }
! 740: return SQLITE_OK
! 741: }
! 742: catchsql {DROP VIEW v2}
! 743: } {0 {}}
! 744: do_test auth-1.107 {
! 745: set ::authargs
! 746: } {v2 {} main {}}
! 747: do_test auth-1.108 {
! 748: execsql {SELECT name FROM sqlite_master}
! 749: } {t2 v2}
! 750: do_test auth-1.109 {
! 751: proc auth {code arg1 arg2 arg3 arg4} {
! 752: if {$code=="SQLITE_DROP_VIEW"} {
! 753: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 754: return SQLITE_OK
! 755: }
! 756: return SQLITE_OK
! 757: }
! 758: catchsql {DROP VIEW v2}
! 759: } {0 {}}
! 760: do_test auth-1.110 {
! 761: set ::authargs
! 762: } {v2 {} main {}}
! 763: do_test auth-1.111 {
! 764: execsql {SELECT name FROM sqlite_master}
! 765: } {t2}
! 766:
! 767:
! 768: ifcapable tempdb {
! 769: do_test auth-1.112 {
! 770: proc auth {code arg1 arg2 arg3 arg4} {
! 771: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 772: return SQLITE_DENY
! 773: }
! 774: return SQLITE_OK
! 775: }
! 776: catchsql {
! 777: CREATE TEMP VIEW v1 AS SELECT a+1,b+1 FROM t1;
! 778: DROP VIEW v1
! 779: }
! 780: } {1 {not authorized}}
! 781: do_test auth-1.113 {
! 782: execsql {SELECT name FROM sqlite_temp_master}
! 783: } {t1 v1}
! 784: do_test auth-1.114 {
! 785: proc auth {code arg1 arg2 arg3 arg4} {
! 786: if {$code=="SQLITE_DROP_TEMP_VIEW"} {
! 787: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 788: return SQLITE_DENY
! 789: }
! 790: return SQLITE_OK
! 791: }
! 792: catchsql {DROP VIEW v1}
! 793: } {1 {not authorized}}
! 794: do_test auth-1.115 {
! 795: set ::authargs
! 796: } {v1 {} temp {}}
! 797: do_test auth-1.116 {
! 798: execsql {SELECT name FROM sqlite_temp_master}
! 799: } {t1 v1}
! 800: do_test auth-1.117 {
! 801: proc auth {code arg1 arg2 arg3 arg4} {
! 802: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 803: return SQLITE_IGNORE
! 804: }
! 805: return SQLITE_OK
! 806: }
! 807: catchsql {DROP VIEW v1}
! 808: } {0 {}}
! 809: do_test auth-1.118 {
! 810: execsql {SELECT name FROM sqlite_temp_master}
! 811: } {t1 v1}
! 812: do_test auth-1.119 {
! 813: proc auth {code arg1 arg2 arg3 arg4} {
! 814: if {$code=="SQLITE_DROP_TEMP_VIEW"} {
! 815: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 816: return SQLITE_IGNORE
! 817: }
! 818: return SQLITE_OK
! 819: }
! 820: catchsql {DROP VIEW v1}
! 821: } {0 {}}
! 822: do_test auth-1.120 {
! 823: set ::authargs
! 824: } {v1 {} temp {}}
! 825: do_test auth-1.121 {
! 826: execsql {SELECT name FROM sqlite_temp_master}
! 827: } {t1 v1}
! 828: do_test auth-1.122 {
! 829: proc auth {code arg1 arg2 arg3 arg4} {
! 830: if {$code=="SQLITE_DROP_TEMP_VIEW"} {
! 831: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 832: return SQLITE_OK
! 833: }
! 834: return SQLITE_OK
! 835: }
! 836: catchsql {DROP VIEW v1}
! 837: } {0 {}}
! 838: do_test auth-1.123 {
! 839: set ::authargs
! 840: } {v1 {} temp {}}
! 841: do_test auth-1.124 {
! 842: execsql {SELECT name FROM sqlite_temp_master}
! 843: } {t1}
! 844: }
! 845: } ;# ifcapable view
! 846:
! 847: # Test cases auth-1.125 to auth-1.176 test creating and dropping triggers.
! 848: # Omit these if the library was compiled with triggers omitted.
! 849: #
! 850: ifcapable trigger&&tempdb {
! 851: do_test auth-1.125 {
! 852: proc auth {code arg1 arg2 arg3 arg4} {
! 853: if {$code=="SQLITE_CREATE_TRIGGER"} {
! 854: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 855: return SQLITE_DENY
! 856: }
! 857: return SQLITE_OK
! 858: }
! 859: catchsql {
! 860: CREATE TRIGGER r2 DELETE on t2 BEGIN
! 861: SELECT NULL;
! 862: END;
! 863: }
! 864: } {1 {not authorized}}
! 865: do_test auth-1.126 {
! 866: set ::authargs
! 867: } {r2 t2 main {}}
! 868: do_test auth-1.127 {
! 869: execsql {SELECT name FROM sqlite_master}
! 870: } {t2}
! 871: do_test auth-1.128 {
! 872: proc auth {code arg1 arg2 arg3 arg4} {
! 873: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 874: return SQLITE_DENY
! 875: }
! 876: return SQLITE_OK
! 877: }
! 878: catchsql {
! 879: CREATE TRIGGER r2 DELETE on t2 BEGIN
! 880: SELECT NULL;
! 881: END;
! 882: }
! 883: } {1 {not authorized}}
! 884: do_test auth-1.129 {
! 885: execsql {SELECT name FROM sqlite_master}
! 886: } {t2}
! 887: do_test auth-1.130 {
! 888: proc auth {code arg1 arg2 arg3 arg4} {
! 889: if {$code=="SQLITE_CREATE_TRIGGER"} {
! 890: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 891: return SQLITE_IGNORE
! 892: }
! 893: return SQLITE_OK
! 894: }
! 895: catchsql {
! 896: CREATE TRIGGER r2 DELETE on t2 BEGIN
! 897: SELECT NULL;
! 898: END;
! 899: }
! 900: } {0 {}}
! 901: do_test auth-1.131 {
! 902: set ::authargs
! 903: } {r2 t2 main {}}
! 904: do_test auth-1.132 {
! 905: execsql {SELECT name FROM sqlite_master}
! 906: } {t2}
! 907: do_test auth-1.133 {
! 908: proc auth {code arg1 arg2 arg3 arg4} {
! 909: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 910: return SQLITE_IGNORE
! 911: }
! 912: return SQLITE_OK
! 913: }
! 914: catchsql {
! 915: CREATE TRIGGER r2 DELETE on t2 BEGIN
! 916: SELECT NULL;
! 917: END;
! 918: }
! 919: } {0 {}}
! 920: do_test auth-1.134 {
! 921: execsql {SELECT name FROM sqlite_master}
! 922: } {t2}
! 923: do_test auth-1.135 {
! 924: proc auth {code arg1 arg2 arg3 arg4} {
! 925: if {$code=="SQLITE_CREATE_TRIGGER"} {
! 926: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 927: return SQLITE_OK
! 928: }
! 929: return SQLITE_OK
! 930: }
! 931: catchsql {
! 932: CREATE TABLE tx(id);
! 933: CREATE TRIGGER r2 AFTER INSERT ON t2 BEGIN
! 934: INSERT INTO tx VALUES(NEW.rowid);
! 935: END;
! 936: }
! 937: } {0 {}}
! 938: do_test auth-1.136.1 {
! 939: set ::authargs
! 940: } {r2 t2 main {}}
! 941: do_test auth-1.136.2 {
! 942: execsql {
! 943: SELECT name FROM sqlite_master WHERE type='trigger'
! 944: }
! 945: } {r2}
! 946: do_test auth-1.136.3 {
! 947: proc auth {code arg1 arg2 arg3 arg4} {
! 948: lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
! 949: return SQLITE_OK
! 950: }
! 951: set ::authargs {}
! 952: execsql {
! 953: INSERT INTO t2 VALUES(1,2,3);
! 954: }
! 955: set ::authargs
! 956: } {SQLITE_INSERT t2 {} main {} SQLITE_INSERT tx {} main r2 SQLITE_READ t2 ROWID main r2}
! 957: do_test auth-1.136.4 {
! 958: execsql {
! 959: SELECT * FROM tx;
! 960: }
! 961: } {3}
! 962: do_test auth-1.137 {
! 963: execsql {SELECT name FROM sqlite_master}
! 964: } {t2 tx r2}
! 965: do_test auth-1.138 {
! 966: proc auth {code arg1 arg2 arg3 arg4} {
! 967: if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
! 968: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 969: return SQLITE_DENY
! 970: }
! 971: return SQLITE_OK
! 972: }
! 973: catchsql {
! 974: CREATE TRIGGER r1 DELETE on t1 BEGIN
! 975: SELECT NULL;
! 976: END;
! 977: }
! 978: } {1 {not authorized}}
! 979: do_test auth-1.139 {
! 980: set ::authargs
! 981: } {r1 t1 temp {}}
! 982: do_test auth-1.140 {
! 983: execsql {SELECT name FROM sqlite_temp_master}
! 984: } {t1}
! 985: do_test auth-1.141 {
! 986: proc auth {code arg1 arg2 arg3 arg4} {
! 987: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 988: return SQLITE_DENY
! 989: }
! 990: return SQLITE_OK
! 991: }
! 992: catchsql {
! 993: CREATE TRIGGER r1 DELETE on t1 BEGIN
! 994: SELECT NULL;
! 995: END;
! 996: }
! 997: } {1 {not authorized}}
! 998: do_test auth-1.142 {
! 999: execsql {SELECT name FROM sqlite_temp_master}
! 1000: } {t1}
! 1001: do_test auth-1.143 {
! 1002: proc auth {code arg1 arg2 arg3 arg4} {
! 1003: if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
! 1004: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1005: return SQLITE_IGNORE
! 1006: }
! 1007: return SQLITE_OK
! 1008: }
! 1009: catchsql {
! 1010: CREATE TRIGGER r1 DELETE on t1 BEGIN
! 1011: SELECT NULL;
! 1012: END;
! 1013: }
! 1014: } {0 {}}
! 1015: do_test auth-1.144 {
! 1016: set ::authargs
! 1017: } {r1 t1 temp {}}
! 1018: do_test auth-1.145 {
! 1019: execsql {SELECT name FROM sqlite_temp_master}
! 1020: } {t1}
! 1021: do_test auth-1.146 {
! 1022: proc auth {code arg1 arg2 arg3 arg4} {
! 1023: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 1024: return SQLITE_IGNORE
! 1025: }
! 1026: return SQLITE_OK
! 1027: }
! 1028: catchsql {
! 1029: CREATE TRIGGER r1 DELETE on t1 BEGIN
! 1030: SELECT NULL;
! 1031: END;
! 1032: }
! 1033: } {0 {}}
! 1034: do_test auth-1.147 {
! 1035: execsql {SELECT name FROM sqlite_temp_master}
! 1036: } {t1}
! 1037: do_test auth-1.148 {
! 1038: proc auth {code arg1 arg2 arg3 arg4} {
! 1039: if {$code=="SQLITE_CREATE_TEMP_TRIGGER"} {
! 1040: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1041: return SQLITE_OK
! 1042: }
! 1043: return SQLITE_OK
! 1044: }
! 1045: catchsql {
! 1046: CREATE TRIGGER r1 DELETE on t1 BEGIN
! 1047: SELECT NULL;
! 1048: END;
! 1049: }
! 1050: } {0 {}}
! 1051: do_test auth-1.149 {
! 1052: set ::authargs
! 1053: } {r1 t1 temp {}}
! 1054: do_test auth-1.150 {
! 1055: execsql {SELECT name FROM sqlite_temp_master}
! 1056: } {t1 r1}
! 1057:
! 1058: do_test auth-1.151 {
! 1059: proc auth {code arg1 arg2 arg3 arg4} {
! 1060: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 1061: return SQLITE_DENY
! 1062: }
! 1063: return SQLITE_OK
! 1064: }
! 1065: catchsql {DROP TRIGGER r2}
! 1066: } {1 {not authorized}}
! 1067: do_test auth-1.152 {
! 1068: execsql {SELECT name FROM sqlite_master}
! 1069: } {t2 tx r2}
! 1070: do_test auth-1.153 {
! 1071: proc auth {code arg1 arg2 arg3 arg4} {
! 1072: if {$code=="SQLITE_DROP_TRIGGER"} {
! 1073: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1074: return SQLITE_DENY
! 1075: }
! 1076: return SQLITE_OK
! 1077: }
! 1078: catchsql {DROP TRIGGER r2}
! 1079: } {1 {not authorized}}
! 1080: do_test auth-1.154 {
! 1081: set ::authargs
! 1082: } {r2 t2 main {}}
! 1083: do_test auth-1.155 {
! 1084: execsql {SELECT name FROM sqlite_master}
! 1085: } {t2 tx r2}
! 1086: do_test auth-1.156 {
! 1087: proc auth {code arg1 arg2 arg3 arg4} {
! 1088: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 1089: return SQLITE_IGNORE
! 1090: }
! 1091: return SQLITE_OK
! 1092: }
! 1093: catchsql {DROP TRIGGER r2}
! 1094: } {0 {}}
! 1095: do_test auth-1.157 {
! 1096: execsql {SELECT name FROM sqlite_master}
! 1097: } {t2 tx r2}
! 1098: do_test auth-1.158 {
! 1099: proc auth {code arg1 arg2 arg3 arg4} {
! 1100: if {$code=="SQLITE_DROP_TRIGGER"} {
! 1101: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1102: return SQLITE_IGNORE
! 1103: }
! 1104: return SQLITE_OK
! 1105: }
! 1106: catchsql {DROP TRIGGER r2}
! 1107: } {0 {}}
! 1108: do_test auth-1.159 {
! 1109: set ::authargs
! 1110: } {r2 t2 main {}}
! 1111: do_test auth-1.160 {
! 1112: execsql {SELECT name FROM sqlite_master}
! 1113: } {t2 tx r2}
! 1114: do_test auth-1.161 {
! 1115: proc auth {code arg1 arg2 arg3 arg4} {
! 1116: if {$code=="SQLITE_DROP_TRIGGER"} {
! 1117: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1118: return SQLITE_OK
! 1119: }
! 1120: return SQLITE_OK
! 1121: }
! 1122: catchsql {DROP TRIGGER r2}
! 1123: } {0 {}}
! 1124: do_test auth-1.162 {
! 1125: set ::authargs
! 1126: } {r2 t2 main {}}
! 1127: do_test auth-1.163 {
! 1128: execsql {
! 1129: DROP TABLE tx;
! 1130: DELETE FROM t2 WHERE a=1 AND b=2 AND c=3;
! 1131: SELECT name FROM sqlite_master;
! 1132: }
! 1133: } {t2}
! 1134:
! 1135: do_test auth-1.164 {
! 1136: proc auth {code arg1 arg2 arg3 arg4} {
! 1137: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 1138: return SQLITE_DENY
! 1139: }
! 1140: return SQLITE_OK
! 1141: }
! 1142: catchsql {DROP TRIGGER r1}
! 1143: } {1 {not authorized}}
! 1144: do_test auth-1.165 {
! 1145: execsql {SELECT name FROM sqlite_temp_master}
! 1146: } {t1 r1}
! 1147: do_test auth-1.166 {
! 1148: proc auth {code arg1 arg2 arg3 arg4} {
! 1149: if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
! 1150: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1151: return SQLITE_DENY
! 1152: }
! 1153: return SQLITE_OK
! 1154: }
! 1155: catchsql {DROP TRIGGER r1}
! 1156: } {1 {not authorized}}
! 1157: do_test auth-1.167 {
! 1158: set ::authargs
! 1159: } {r1 t1 temp {}}
! 1160: do_test auth-1.168 {
! 1161: execsql {SELECT name FROM sqlite_temp_master}
! 1162: } {t1 r1}
! 1163: do_test auth-1.169 {
! 1164: proc auth {code arg1 arg2 arg3 arg4} {
! 1165: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 1166: return SQLITE_IGNORE
! 1167: }
! 1168: return SQLITE_OK
! 1169: }
! 1170: catchsql {DROP TRIGGER r1}
! 1171: } {0 {}}
! 1172: do_test auth-1.170 {
! 1173: execsql {SELECT name FROM sqlite_temp_master}
! 1174: } {t1 r1}
! 1175: do_test auth-1.171 {
! 1176: proc auth {code arg1 arg2 arg3 arg4} {
! 1177: if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
! 1178: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1179: return SQLITE_IGNORE
! 1180: }
! 1181: return SQLITE_OK
! 1182: }
! 1183: catchsql {DROP TRIGGER r1}
! 1184: } {0 {}}
! 1185: do_test auth-1.172 {
! 1186: set ::authargs
! 1187: } {r1 t1 temp {}}
! 1188: do_test auth-1.173 {
! 1189: execsql {SELECT name FROM sqlite_temp_master}
! 1190: } {t1 r1}
! 1191: do_test auth-1.174 {
! 1192: proc auth {code arg1 arg2 arg3 arg4} {
! 1193: if {$code=="SQLITE_DROP_TEMP_TRIGGER"} {
! 1194: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1195: return SQLITE_OK
! 1196: }
! 1197: return SQLITE_OK
! 1198: }
! 1199: catchsql {DROP TRIGGER r1}
! 1200: } {0 {}}
! 1201: do_test auth-1.175 {
! 1202: set ::authargs
! 1203: } {r1 t1 temp {}}
! 1204: do_test auth-1.176 {
! 1205: execsql {SELECT name FROM sqlite_temp_master}
! 1206: } {t1}
! 1207: } ;# ifcapable trigger
! 1208:
! 1209: do_test auth-1.177 {
! 1210: proc auth {code arg1 arg2 arg3 arg4} {
! 1211: if {$code=="SQLITE_CREATE_INDEX"} {
! 1212: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1213: return SQLITE_DENY
! 1214: }
! 1215: return SQLITE_OK
! 1216: }
! 1217: catchsql {CREATE INDEX i2 ON t2(a)}
! 1218: } {1 {not authorized}}
! 1219: do_test auth-1.178 {
! 1220: set ::authargs
! 1221: } {i2 t2 main {}}
! 1222: do_test auth-1.179 {
! 1223: execsql {SELECT name FROM sqlite_master}
! 1224: } {t2}
! 1225: do_test auth-1.180 {
! 1226: proc auth {code arg1 arg2 arg3 arg4} {
! 1227: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 1228: return SQLITE_DENY
! 1229: }
! 1230: return SQLITE_OK
! 1231: }
! 1232: catchsql {CREATE INDEX i2 ON t2(a)}
! 1233: } {1 {not authorized}}
! 1234: do_test auth-1.181 {
! 1235: execsql {SELECT name FROM sqlite_master}
! 1236: } {t2}
! 1237: do_test auth-1.182 {
! 1238: proc auth {code arg1 arg2 arg3 arg4} {
! 1239: if {$code=="SQLITE_CREATE_INDEX"} {
! 1240: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1241: return SQLITE_IGNORE
! 1242: }
! 1243: return SQLITE_OK
! 1244: }
! 1245: catchsql {CREATE INDEX i2 ON t2(b)}
! 1246: } {0 {}}
! 1247: do_test auth-1.183 {
! 1248: set ::authargs
! 1249: } {i2 t2 main {}}
! 1250: do_test auth-1.184 {
! 1251: execsql {SELECT name FROM sqlite_master}
! 1252: } {t2}
! 1253: do_test auth-1.185 {
! 1254: proc auth {code arg1 arg2 arg3 arg4} {
! 1255: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_master"} {
! 1256: return SQLITE_IGNORE
! 1257: }
! 1258: return SQLITE_OK
! 1259: }
! 1260: catchsql {CREATE INDEX i2 ON t2(b)}
! 1261: } {0 {}}
! 1262: do_test auth-1.186 {
! 1263: execsql {SELECT name FROM sqlite_master}
! 1264: } {t2}
! 1265: do_test auth-1.187 {
! 1266: proc auth {code arg1 arg2 arg3 arg4} {
! 1267: if {$code=="SQLITE_CREATE_INDEX"} {
! 1268: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1269: return SQLITE_OK
! 1270: }
! 1271: return SQLITE_OK
! 1272: }
! 1273: catchsql {CREATE INDEX i2 ON t2(a)}
! 1274: } {0 {}}
! 1275: do_test auth-1.188 {
! 1276: set ::authargs
! 1277: } {i2 t2 main {}}
! 1278: do_test auth-1.189 {
! 1279: execsql {SELECT name FROM sqlite_master}
! 1280: } {t2 i2}
! 1281:
! 1282: ifcapable tempdb {
! 1283: do_test auth-1.190 {
! 1284: proc auth {code arg1 arg2 arg3 arg4} {
! 1285: if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
! 1286: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1287: return SQLITE_DENY
! 1288: }
! 1289: return SQLITE_OK
! 1290: }
! 1291: catchsql {CREATE INDEX i1 ON t1(a)}
! 1292: } {1 {not authorized}}
! 1293: do_test auth-1.191 {
! 1294: set ::authargs
! 1295: } {i1 t1 temp {}}
! 1296: do_test auth-1.192 {
! 1297: execsql {SELECT name FROM sqlite_temp_master}
! 1298: } {t1}
! 1299: do_test auth-1.193 {
! 1300: proc auth {code arg1 arg2 arg3 arg4} {
! 1301: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 1302: return SQLITE_DENY
! 1303: }
! 1304: return SQLITE_OK
! 1305: }
! 1306: catchsql {CREATE INDEX i1 ON t1(b)}
! 1307: } {1 {not authorized}}
! 1308: do_test auth-1.194 {
! 1309: execsql {SELECT name FROM sqlite_temp_master}
! 1310: } {t1}
! 1311: do_test auth-1.195 {
! 1312: proc auth {code arg1 arg2 arg3 arg4} {
! 1313: if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
! 1314: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1315: return SQLITE_IGNORE
! 1316: }
! 1317: return SQLITE_OK
! 1318: }
! 1319: catchsql {CREATE INDEX i1 ON t1(b)}
! 1320: } {0 {}}
! 1321: do_test auth-1.196 {
! 1322: set ::authargs
! 1323: } {i1 t1 temp {}}
! 1324: do_test auth-1.197 {
! 1325: execsql {SELECT name FROM sqlite_temp_master}
! 1326: } {t1}
! 1327: do_test auth-1.198 {
! 1328: proc auth {code arg1 arg2 arg3 arg4} {
! 1329: if {$code=="SQLITE_INSERT" && $arg1=="sqlite_temp_master"} {
! 1330: return SQLITE_IGNORE
! 1331: }
! 1332: return SQLITE_OK
! 1333: }
! 1334: catchsql {CREATE INDEX i1 ON t1(c)}
! 1335: } {0 {}}
! 1336: do_test auth-1.199 {
! 1337: execsql {SELECT name FROM sqlite_temp_master}
! 1338: } {t1}
! 1339: do_test auth-1.200 {
! 1340: proc auth {code arg1 arg2 arg3 arg4} {
! 1341: if {$code=="SQLITE_CREATE_TEMP_INDEX"} {
! 1342: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1343: return SQLITE_OK
! 1344: }
! 1345: return SQLITE_OK
! 1346: }
! 1347: catchsql {CREATE INDEX i1 ON t1(a)}
! 1348: } {0 {}}
! 1349: do_test auth-1.201 {
! 1350: set ::authargs
! 1351: } {i1 t1 temp {}}
! 1352: do_test auth-1.202 {
! 1353: execsql {SELECT name FROM sqlite_temp_master}
! 1354: } {t1 i1}
! 1355: }
! 1356:
! 1357: do_test auth-1.203 {
! 1358: proc auth {code arg1 arg2 arg3 arg4} {
! 1359: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 1360: return SQLITE_DENY
! 1361: }
! 1362: return SQLITE_OK
! 1363: }
! 1364: catchsql {DROP INDEX i2}
! 1365: } {1 {not authorized}}
! 1366: do_test auth-1.204 {
! 1367: execsql {SELECT name FROM sqlite_master}
! 1368: } {t2 i2}
! 1369: do_test auth-1.205 {
! 1370: proc auth {code arg1 arg2 arg3 arg4} {
! 1371: if {$code=="SQLITE_DROP_INDEX"} {
! 1372: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1373: return SQLITE_DENY
! 1374: }
! 1375: return SQLITE_OK
! 1376: }
! 1377: catchsql {DROP INDEX i2}
! 1378: } {1 {not authorized}}
! 1379: do_test auth-1.206 {
! 1380: set ::authargs
! 1381: } {i2 t2 main {}}
! 1382: do_test auth-1.207 {
! 1383: execsql {SELECT name FROM sqlite_master}
! 1384: } {t2 i2}
! 1385: do_test auth-1.208 {
! 1386: proc auth {code arg1 arg2 arg3 arg4} {
! 1387: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_master"} {
! 1388: return SQLITE_IGNORE
! 1389: }
! 1390: return SQLITE_OK
! 1391: }
! 1392: catchsql {DROP INDEX i2}
! 1393: } {0 {}}
! 1394: do_test auth-1.209 {
! 1395: execsql {SELECT name FROM sqlite_master}
! 1396: } {t2 i2}
! 1397: do_test auth-1.210 {
! 1398: proc auth {code arg1 arg2 arg3 arg4} {
! 1399: if {$code=="SQLITE_DROP_INDEX"} {
! 1400: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1401: return SQLITE_IGNORE
! 1402: }
! 1403: return SQLITE_OK
! 1404: }
! 1405: catchsql {DROP INDEX i2}
! 1406: } {0 {}}
! 1407: do_test auth-1.211 {
! 1408: set ::authargs
! 1409: } {i2 t2 main {}}
! 1410: do_test auth-1.212 {
! 1411: execsql {SELECT name FROM sqlite_master}
! 1412: } {t2 i2}
! 1413: do_test auth-1.213 {
! 1414: proc auth {code arg1 arg2 arg3 arg4} {
! 1415: if {$code=="SQLITE_DROP_INDEX"} {
! 1416: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1417: return SQLITE_OK
! 1418: }
! 1419: return SQLITE_OK
! 1420: }
! 1421: catchsql {DROP INDEX i2}
! 1422: } {0 {}}
! 1423: do_test auth-1.214 {
! 1424: set ::authargs
! 1425: } {i2 t2 main {}}
! 1426: do_test auth-1.215 {
! 1427: execsql {SELECT name FROM sqlite_master}
! 1428: } {t2}
! 1429:
! 1430: ifcapable tempdb {
! 1431: do_test auth-1.216 {
! 1432: proc auth {code arg1 arg2 arg3 arg4} {
! 1433: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 1434: return SQLITE_DENY
! 1435: }
! 1436: return SQLITE_OK
! 1437: }
! 1438: catchsql {DROP INDEX i1}
! 1439: } {1 {not authorized}}
! 1440: do_test auth-1.217 {
! 1441: execsql {SELECT name FROM sqlite_temp_master}
! 1442: } {t1 i1}
! 1443: do_test auth-1.218 {
! 1444: proc auth {code arg1 arg2 arg3 arg4} {
! 1445: if {$code=="SQLITE_DROP_TEMP_INDEX"} {
! 1446: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1447: return SQLITE_DENY
! 1448: }
! 1449: return SQLITE_OK
! 1450: }
! 1451: catchsql {DROP INDEX i1}
! 1452: } {1 {not authorized}}
! 1453: do_test auth-1.219 {
! 1454: set ::authargs
! 1455: } {i1 t1 temp {}}
! 1456: do_test auth-1.220 {
! 1457: execsql {SELECT name FROM sqlite_temp_master}
! 1458: } {t1 i1}
! 1459: do_test auth-1.221 {
! 1460: proc auth {code arg1 arg2 arg3 arg4} {
! 1461: if {$code=="SQLITE_DELETE" && $arg1=="sqlite_temp_master"} {
! 1462: return SQLITE_IGNORE
! 1463: }
! 1464: return SQLITE_OK
! 1465: }
! 1466: catchsql {DROP INDEX i1}
! 1467: } {0 {}}
! 1468: do_test auth-1.222 {
! 1469: execsql {SELECT name FROM sqlite_temp_master}
! 1470: } {t1 i1}
! 1471: do_test auth-1.223 {
! 1472: proc auth {code arg1 arg2 arg3 arg4} {
! 1473: if {$code=="SQLITE_DROP_TEMP_INDEX"} {
! 1474: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1475: return SQLITE_IGNORE
! 1476: }
! 1477: return SQLITE_OK
! 1478: }
! 1479: catchsql {DROP INDEX i1}
! 1480: } {0 {}}
! 1481: do_test auth-1.224 {
! 1482: set ::authargs
! 1483: } {i1 t1 temp {}}
! 1484: do_test auth-1.225 {
! 1485: execsql {SELECT name FROM sqlite_temp_master}
! 1486: } {t1 i1}
! 1487: do_test auth-1.226 {
! 1488: proc auth {code arg1 arg2 arg3 arg4} {
! 1489: if {$code=="SQLITE_DROP_TEMP_INDEX"} {
! 1490: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1491: return SQLITE_OK
! 1492: }
! 1493: return SQLITE_OK
! 1494: }
! 1495: catchsql {DROP INDEX i1}
! 1496: } {0 {}}
! 1497: do_test auth-1.227 {
! 1498: set ::authargs
! 1499: } {i1 t1 temp {}}
! 1500: do_test auth-1.228 {
! 1501: execsql {SELECT name FROM sqlite_temp_master}
! 1502: } {t1}
! 1503: }
! 1504:
! 1505: do_test auth-1.229 {
! 1506: proc auth {code arg1 arg2 arg3 arg4} {
! 1507: if {$code=="SQLITE_PRAGMA"} {
! 1508: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1509: return SQLITE_DENY
! 1510: }
! 1511: return SQLITE_OK
! 1512: }
! 1513: catchsql {PRAGMA full_column_names=on}
! 1514: } {1 {not authorized}}
! 1515: do_test auth-1.230 {
! 1516: set ::authargs
! 1517: } {full_column_names on {} {}}
! 1518: do_test auth-1.231 {
! 1519: execsql2 {SELECT a FROM t2}
! 1520: } {a 11 a 7}
! 1521: do_test auth-1.232 {
! 1522: proc auth {code arg1 arg2 arg3 arg4} {
! 1523: if {$code=="SQLITE_PRAGMA"} {
! 1524: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1525: return SQLITE_IGNORE
! 1526: }
! 1527: return SQLITE_OK
! 1528: }
! 1529: catchsql {PRAGMA full_column_names=on}
! 1530: } {0 {}}
! 1531: do_test auth-1.233 {
! 1532: set ::authargs
! 1533: } {full_column_names on {} {}}
! 1534: do_test auth-1.234 {
! 1535: execsql2 {SELECT a FROM t2}
! 1536: } {a 11 a 7}
! 1537: do_test auth-1.235 {
! 1538: proc auth {code arg1 arg2 arg3 arg4} {
! 1539: if {$code=="SQLITE_PRAGMA"} {
! 1540: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1541: return SQLITE_OK
! 1542: }
! 1543: return SQLITE_OK
! 1544: }
! 1545: catchsql {PRAGMA full_column_names=on}
! 1546: } {0 {}}
! 1547: do_test auth-1.236 {
! 1548: execsql2 {SELECT a FROM t2}
! 1549: } {t2.a 11 t2.a 7}
! 1550: do_test auth-1.237 {
! 1551: proc auth {code arg1 arg2 arg3 arg4} {
! 1552: if {$code=="SQLITE_PRAGMA"} {
! 1553: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1554: return SQLITE_OK
! 1555: }
! 1556: return SQLITE_OK
! 1557: }
! 1558: catchsql {PRAGMA full_column_names=OFF}
! 1559: } {0 {}}
! 1560: do_test auth-1.238 {
! 1561: set ::authargs
! 1562: } {full_column_names OFF {} {}}
! 1563: do_test auth-1.239 {
! 1564: execsql2 {SELECT a FROM t2}
! 1565: } {a 11 a 7}
! 1566:
! 1567: do_test auth-1.240 {
! 1568: proc auth {code arg1 arg2 arg3 arg4} {
! 1569: if {$code=="SQLITE_TRANSACTION"} {
! 1570: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1571: return SQLITE_DENY
! 1572: }
! 1573: return SQLITE_OK
! 1574: }
! 1575: catchsql {BEGIN}
! 1576: } {1 {not authorized}}
! 1577: do_test auth-1.241 {
! 1578: set ::authargs
! 1579: } {BEGIN {} {} {}}
! 1580: do_test auth-1.242 {
! 1581: proc auth {code arg1 arg2 arg3 arg4} {
! 1582: if {$code=="SQLITE_TRANSACTION" && $arg1!="BEGIN"} {
! 1583: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1584: return SQLITE_DENY
! 1585: }
! 1586: return SQLITE_OK
! 1587: }
! 1588: catchsql {BEGIN; INSERT INTO t2 VALUES(44,55,66); COMMIT}
! 1589: } {1 {not authorized}}
! 1590: do_test auth-1.243 {
! 1591: set ::authargs
! 1592: } {COMMIT {} {} {}}
! 1593: do_test auth-1.244 {
! 1594: execsql {SELECT * FROM t2}
! 1595: } {11 2 33 7 8 9 44 55 66}
! 1596: do_test auth-1.245 {
! 1597: catchsql {ROLLBACK}
! 1598: } {1 {not authorized}}
! 1599: do_test auth-1.246 {
! 1600: set ::authargs
! 1601: } {ROLLBACK {} {} {}}
! 1602: do_test auth-1.247 {
! 1603: catchsql {END TRANSACTION}
! 1604: } {1 {not authorized}}
! 1605: do_test auth-1.248 {
! 1606: set ::authargs
! 1607: } {COMMIT {} {} {}}
! 1608: do_test auth-1.249 {
! 1609: db authorizer {}
! 1610: catchsql {ROLLBACK}
! 1611: } {0 {}}
! 1612: do_test auth-1.250 {
! 1613: execsql {SELECT * FROM t2}
! 1614: } {11 2 33 7 8 9}
! 1615:
! 1616: # ticket #340 - authorization for ATTACH and DETACH.
! 1617: #
! 1618: ifcapable attach {
! 1619: do_test auth-1.251 {
! 1620: db authorizer ::auth
! 1621: proc auth {code arg1 arg2 arg3 arg4} {
! 1622: if {$code=="SQLITE_ATTACH"} {
! 1623: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1624: }
! 1625: return SQLITE_OK
! 1626: }
! 1627: catchsql {
! 1628: ATTACH DATABASE ':memory:' AS test1
! 1629: }
! 1630: } {0 {}}
! 1631: do_test auth-1.252a {
! 1632: set ::authargs
! 1633: } {:memory: {} {} {}}
! 1634: do_test auth-1.252b {
! 1635: db eval {DETACH test1}
! 1636: set ::attachfilename :memory:
! 1637: db eval {ATTACH $::attachfilename AS test1}
! 1638: set ::authargs
! 1639: } {{} {} {} {}}
! 1640: do_test auth-1.252c {
! 1641: db eval {DETACH test1}
! 1642: db eval {ATTACH ':mem' || 'ory:' AS test1}
! 1643: set ::authargs
! 1644: } {{} {} {} {}}
! 1645: do_test auth-1.253 {
! 1646: catchsql {DETACH DATABASE test1}
! 1647: proc auth {code arg1 arg2 arg3 arg4} {
! 1648: if {$code=="SQLITE_ATTACH"} {
! 1649: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1650: return SQLITE_DENY
! 1651: }
! 1652: return SQLITE_OK
! 1653: }
! 1654: catchsql {
! 1655: ATTACH DATABASE ':memory:' AS test1;
! 1656: }
! 1657: } {1 {not authorized}}
! 1658: do_test auth-1.254 {
! 1659: lindex [execsql {PRAGMA database_list}] 7
! 1660: } {}
! 1661: do_test auth-1.255 {
! 1662: catchsql {DETACH DATABASE test1}
! 1663: proc auth {code arg1 arg2 arg3 arg4} {
! 1664: if {$code=="SQLITE_ATTACH"} {
! 1665: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1666: return SQLITE_IGNORE
! 1667: }
! 1668: return SQLITE_OK
! 1669: }
! 1670: catchsql {
! 1671: ATTACH DATABASE ':memory:' AS test1;
! 1672: }
! 1673: } {0 {}}
! 1674: do_test auth-1.256 {
! 1675: lindex [execsql {PRAGMA database_list}] 7
! 1676: } {}
! 1677: do_test auth-1.257 {
! 1678: proc auth {code arg1 arg2 arg3 arg4} {
! 1679: if {$code=="SQLITE_DETACH"} {
! 1680: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1681: return SQLITE_OK
! 1682: }
! 1683: return SQLITE_OK
! 1684: }
! 1685: execsql {ATTACH DATABASE ':memory:' AS test1}
! 1686: catchsql {
! 1687: DETACH DATABASE test1;
! 1688: }
! 1689: } {0 {}}
! 1690: do_test auth-1.258 {
! 1691: lindex [execsql {PRAGMA database_list}] 7
! 1692: } {}
! 1693: do_test auth-1.259 {
! 1694: execsql {ATTACH DATABASE ':memory:' AS test1}
! 1695: proc auth {code arg1 arg2 arg3 arg4} {
! 1696: if {$code=="SQLITE_DETACH"} {
! 1697: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1698: return SQLITE_IGNORE
! 1699: }
! 1700: return SQLITE_OK
! 1701: }
! 1702: catchsql {
! 1703: DETACH DATABASE test1;
! 1704: }
! 1705: } {0 {}}
! 1706: ifcapable tempdb {
! 1707: ifcapable schema_pragmas {
! 1708: do_test auth-1.260 {
! 1709: lindex [execsql {PRAGMA database_list}] 7
! 1710: } {test1}
! 1711: } ;# ifcapable schema_pragmas
! 1712: do_test auth-1.261 {
! 1713: proc auth {code arg1 arg2 arg3 arg4} {
! 1714: if {$code=="SQLITE_DETACH"} {
! 1715: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1716: return SQLITE_DENY
! 1717: }
! 1718: return SQLITE_OK
! 1719: }
! 1720: catchsql {
! 1721: DETACH DATABASE test1;
! 1722: }
! 1723: } {1 {not authorized}}
! 1724: ifcapable schema_pragmas {
! 1725: do_test auth-1.262 {
! 1726: lindex [execsql {PRAGMA database_list}] 7
! 1727: } {test1}
! 1728: } ;# ifcapable schema_pragmas
! 1729: db authorizer {}
! 1730: execsql {DETACH DATABASE test1}
! 1731: db authorizer ::auth
! 1732:
! 1733: # Authorization for ALTER TABLE. These tests are omitted if the library
! 1734: # was built without ALTER TABLE support.
! 1735: ifcapable altertable {
! 1736:
! 1737: do_test auth-1.263 {
! 1738: proc auth {code arg1 arg2 arg3 arg4} {
! 1739: if {$code=="SQLITE_ALTER_TABLE"} {
! 1740: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1741: return SQLITE_OK
! 1742: }
! 1743: return SQLITE_OK
! 1744: }
! 1745: catchsql {
! 1746: ALTER TABLE t1 RENAME TO t1x
! 1747: }
! 1748: } {0 {}}
! 1749: do_test auth-1.264 {
! 1750: execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
! 1751: } {t1x}
! 1752: do_test auth-1.265 {
! 1753: set authargs
! 1754: } {temp t1 {} {}}
! 1755: do_test auth-1.266 {
! 1756: proc auth {code arg1 arg2 arg3 arg4} {
! 1757: if {$code=="SQLITE_ALTER_TABLE"} {
! 1758: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1759: return SQLITE_IGNORE
! 1760: }
! 1761: return SQLITE_OK
! 1762: }
! 1763: catchsql {
! 1764: ALTER TABLE t1x RENAME TO t1
! 1765: }
! 1766: } {0 {}}
! 1767: do_test auth-1.267 {
! 1768: execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
! 1769: } {t1x}
! 1770: do_test auth-1.268 {
! 1771: set authargs
! 1772: } {temp t1x {} {}}
! 1773: do_test auth-1.269 {
! 1774: proc auth {code arg1 arg2 arg3 arg4} {
! 1775: if {$code=="SQLITE_ALTER_TABLE"} {
! 1776: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1777: return SQLITE_DENY
! 1778: }
! 1779: return SQLITE_OK
! 1780: }
! 1781: catchsql {
! 1782: ALTER TABLE t1x RENAME TO t1
! 1783: }
! 1784: } {1 {not authorized}}
! 1785: do_test auth-1.270 {
! 1786: execsql {SELECT name FROM sqlite_temp_master WHERE type='table'}
! 1787: } {t1x}
! 1788:
! 1789: do_test auth-1.271 {
! 1790: set authargs
! 1791: } {temp t1x {} {}}
! 1792: } ;# ifcapable altertable
! 1793:
! 1794: } else {
! 1795: db authorizer {}
! 1796: db eval {
! 1797: DETACH DATABASE test1;
! 1798: }
! 1799: }
! 1800: }
! 1801:
! 1802: ifcapable altertable {
! 1803: db authorizer {}
! 1804: catchsql {ALTER TABLE t1x RENAME TO t1}
! 1805: db authorizer ::auth
! 1806: do_test auth-1.272 {
! 1807: proc auth {code arg1 arg2 arg3 arg4} {
! 1808: if {$code=="SQLITE_ALTER_TABLE"} {
! 1809: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1810: return SQLITE_OK
! 1811: }
! 1812: return SQLITE_OK
! 1813: }
! 1814: catchsql {
! 1815: ALTER TABLE t2 RENAME TO t2x
! 1816: }
! 1817: } {0 {}}
! 1818: do_test auth-1.273 {
! 1819: execsql {SELECT name FROM sqlite_master WHERE type='table'}
! 1820: } {t2x}
! 1821: do_test auth-1.274 {
! 1822: set authargs
! 1823: } {main t2 {} {}}
! 1824: do_test auth-1.275 {
! 1825: proc auth {code arg1 arg2 arg3 arg4} {
! 1826: if {$code=="SQLITE_ALTER_TABLE"} {
! 1827: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1828: return SQLITE_IGNORE
! 1829: }
! 1830: return SQLITE_OK
! 1831: }
! 1832: catchsql {
! 1833: ALTER TABLE t2x RENAME TO t2
! 1834: }
! 1835: } {0 {}}
! 1836: do_test auth-1.276 {
! 1837: execsql {SELECT name FROM sqlite_master WHERE type='table'}
! 1838: } {t2x}
! 1839: do_test auth-1.277 {
! 1840: set authargs
! 1841: } {main t2x {} {}}
! 1842: do_test auth-1.278 {
! 1843: proc auth {code arg1 arg2 arg3 arg4} {
! 1844: if {$code=="SQLITE_ALTER_TABLE"} {
! 1845: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 1846: return SQLITE_DENY
! 1847: }
! 1848: return SQLITE_OK
! 1849: }
! 1850: catchsql {
! 1851: ALTER TABLE t2x RENAME TO t2
! 1852: }
! 1853: } {1 {not authorized}}
! 1854: do_test auth-1.279 {
! 1855: execsql {SELECT name FROM sqlite_master WHERE type='table'}
! 1856: } {t2x}
! 1857: do_test auth-1.280 {
! 1858: set authargs
! 1859: } {main t2x {} {}}
! 1860: db authorizer {}
! 1861: catchsql {ALTER TABLE t2x RENAME TO t2}
! 1862:
! 1863: } ;# ifcapable altertable
! 1864:
! 1865: # Test the authorization callbacks for the REINDEX command.
! 1866: ifcapable reindex {
! 1867:
! 1868: proc auth {code args} {
! 1869: if {$code=="SQLITE_REINDEX"} {
! 1870: set ::authargs [concat $::authargs $args]
! 1871: }
! 1872: return SQLITE_OK
! 1873: }
! 1874: db authorizer auth
! 1875: do_test auth-1.281 {
! 1876: execsql {
! 1877: CREATE TABLE t3(a PRIMARY KEY, b, c);
! 1878: CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY);
! 1879: CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE);
! 1880: }
! 1881: } {}
! 1882: do_test auth-1.282 {
! 1883: set ::authargs {}
! 1884: execsql {
! 1885: REINDEX t3_idx1;
! 1886: }
! 1887: set ::authargs
! 1888: } {t3_idx1 {} main {}}
! 1889: do_test auth-1.283 {
! 1890: set ::authargs {}
! 1891: execsql {
! 1892: REINDEX BINARY;
! 1893: }
! 1894: set ::authargs
! 1895: } {t3_idx1 {} main {} sqlite_autoindex_t3_1 {} main {}}
! 1896: do_test auth-1.284 {
! 1897: set ::authargs {}
! 1898: execsql {
! 1899: REINDEX NOCASE;
! 1900: }
! 1901: set ::authargs
! 1902: } {t3_idx2 {} main {}}
! 1903: do_test auth-1.285 {
! 1904: set ::authargs {}
! 1905: execsql {
! 1906: REINDEX t3;
! 1907: }
! 1908: set ::authargs
! 1909: } {t3_idx2 {} main {} t3_idx1 {} main {} sqlite_autoindex_t3_1 {} main {}}
! 1910: do_test auth-1.286 {
! 1911: execsql {
! 1912: DROP TABLE t3;
! 1913: }
! 1914: } {}
! 1915: ifcapable tempdb {
! 1916: do_test auth-1.287 {
! 1917: execsql {
! 1918: CREATE TEMP TABLE t3(a PRIMARY KEY, b, c);
! 1919: CREATE INDEX t3_idx1 ON t3(c COLLATE BINARY);
! 1920: CREATE INDEX t3_idx2 ON t3(b COLLATE NOCASE);
! 1921: }
! 1922: } {}
! 1923: do_test auth-1.288 {
! 1924: set ::authargs {}
! 1925: execsql {
! 1926: REINDEX temp.t3_idx1;
! 1927: }
! 1928: set ::authargs
! 1929: } {t3_idx1 {} temp {}}
! 1930: do_test auth-1.289 {
! 1931: set ::authargs {}
! 1932: execsql {
! 1933: REINDEX BINARY;
! 1934: }
! 1935: set ::authargs
! 1936: } {t3_idx1 {} temp {} sqlite_autoindex_t3_1 {} temp {}}
! 1937: do_test auth-1.290 {
! 1938: set ::authargs {}
! 1939: execsql {
! 1940: REINDEX NOCASE;
! 1941: }
! 1942: set ::authargs
! 1943: } {t3_idx2 {} temp {}}
! 1944: do_test auth-1.291 {
! 1945: set ::authargs {}
! 1946: execsql {
! 1947: REINDEX temp.t3;
! 1948: }
! 1949: set ::authargs
! 1950: } {t3_idx2 {} temp {} t3_idx1 {} temp {} sqlite_autoindex_t3_1 {} temp {}}
! 1951: proc auth {code args} {
! 1952: if {$code=="SQLITE_REINDEX"} {
! 1953: set ::authargs [concat $::authargs $args]
! 1954: return SQLITE_DENY
! 1955: }
! 1956: return SQLITE_OK
! 1957: }
! 1958: do_test auth-1.292 {
! 1959: set ::authargs {}
! 1960: catchsql {
! 1961: REINDEX temp.t3;
! 1962: }
! 1963: } {1 {not authorized}}
! 1964: do_test auth-1.293 {
! 1965: execsql {
! 1966: DROP TABLE t3;
! 1967: }
! 1968: } {}
! 1969: }
! 1970:
! 1971: } ;# ifcapable reindex
! 1972:
! 1973: ifcapable analyze {
! 1974: proc auth {code args} {
! 1975: if {$code=="SQLITE_ANALYZE"} {
! 1976: set ::authargs [concat $::authargs $args]
! 1977: }
! 1978: return SQLITE_OK
! 1979: }
! 1980: do_test auth-1.294 {
! 1981: set ::authargs {}
! 1982: execsql {
! 1983: CREATE TABLE t4(a,b,c);
! 1984: CREATE INDEX t4i1 ON t4(a);
! 1985: CREATE INDEX t4i2 ON t4(b,a,c);
! 1986: INSERT INTO t4 VALUES(1,2,3);
! 1987: ANALYZE;
! 1988: }
! 1989: set ::authargs
! 1990: } {t4 {} main {} t2 {} main {}}
! 1991: do_test auth-1.295 {
! 1992: execsql {
! 1993: SELECT count(*) FROM sqlite_stat1;
! 1994: }
! 1995: } 3
! 1996: proc auth {code args} {
! 1997: if {$code=="SQLITE_ANALYZE"} {
! 1998: set ::authargs [concat $::authargs $args]
! 1999: return SQLITE_DENY
! 2000: }
! 2001: return SQLITE_OK
! 2002: }
! 2003: do_test auth-1.296 {
! 2004: set ::authargs {}
! 2005: catchsql {
! 2006: ANALYZE;
! 2007: }
! 2008: } {1 {not authorized}}
! 2009: do_test auth-1.297 {
! 2010: execsql {
! 2011: SELECT count(*) FROM sqlite_stat1;
! 2012: }
! 2013: } 3
! 2014: } ;# ifcapable analyze
! 2015:
! 2016:
! 2017: # Authorization for ALTER TABLE ADD COLUMN.
! 2018: # These tests are omitted if the library
! 2019: # was built without ALTER TABLE support.
! 2020: ifcapable {altertable} {
! 2021: do_test auth-1.300 {
! 2022: execsql {CREATE TABLE t5(x)}
! 2023: proc auth {code arg1 arg2 arg3 arg4} {
! 2024: if {$code=="SQLITE_ALTER_TABLE"} {
! 2025: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 2026: return SQLITE_OK
! 2027: }
! 2028: return SQLITE_OK
! 2029: }
! 2030: catchsql {
! 2031: ALTER TABLE t5 ADD COLUMN new_col_1;
! 2032: }
! 2033: } {0 {}}
! 2034: do_test auth-1.301 {
! 2035: set x [execsql {SELECT sql FROM sqlite_master WHERE name='t5'}]
! 2036: regexp new_col_1 $x
! 2037: } {1}
! 2038: do_test auth-1.302 {
! 2039: set authargs
! 2040: } {main t5 {} {}}
! 2041: do_test auth-1.303 {
! 2042: proc auth {code arg1 arg2 arg3 arg4} {
! 2043: if {$code=="SQLITE_ALTER_TABLE"} {
! 2044: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 2045: return SQLITE_IGNORE
! 2046: }
! 2047: return SQLITE_OK
! 2048: }
! 2049: catchsql {
! 2050: ALTER TABLE t5 ADD COLUMN new_col_2;
! 2051: }
! 2052: } {0 {}}
! 2053: do_test auth-1.304 {
! 2054: set x [execsql {SELECT sql FROM sqlite_master WHERE name='t5'}]
! 2055: regexp new_col_2 $x
! 2056: } {0}
! 2057: do_test auth-1.305 {
! 2058: set authargs
! 2059: } {main t5 {} {}}
! 2060: do_test auth-1.306 {
! 2061: proc auth {code arg1 arg2 arg3 arg4} {
! 2062: if {$code=="SQLITE_ALTER_TABLE"} {
! 2063: set ::authargs [list $arg1 $arg2 $arg3 $arg4]
! 2064: return SQLITE_DENY
! 2065: }
! 2066: return SQLITE_OK
! 2067: }
! 2068: catchsql {
! 2069: ALTER TABLE t5 ADD COLUMN new_col_3
! 2070: }
! 2071: } {1 {not authorized}}
! 2072: do_test auth-1.307 {
! 2073: set x [execsql {SELECT sql FROM sqlite_temp_master WHERE type='t5'}]
! 2074: regexp new_col_3 $x
! 2075: } {0}
! 2076:
! 2077: do_test auth-1.308 {
! 2078: set authargs
! 2079: } {main t5 {} {}}
! 2080: execsql {DROP TABLE t5}
! 2081: } ;# ifcapable altertable
! 2082:
! 2083: do_test auth-2.1 {
! 2084: proc auth {code arg1 arg2 arg3 arg4} {
! 2085: if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
! 2086: return SQLITE_DENY
! 2087: }
! 2088: return SQLITE_OK
! 2089: }
! 2090: db authorizer ::auth
! 2091: execsql {CREATE TABLE t3(x INTEGER PRIMARY KEY, y, z)}
! 2092: catchsql {SELECT * FROM t3}
! 2093: } {1 {access to t3.x is prohibited}}
! 2094: do_test auth-2.1 {
! 2095: catchsql {SELECT y,z FROM t3}
! 2096: } {0 {}}
! 2097: do_test auth-2.2 {
! 2098: catchsql {SELECT ROWID,y,z FROM t3}
! 2099: } {1 {access to t3.x is prohibited}}
! 2100: do_test auth-2.3 {
! 2101: catchsql {SELECT OID,y,z FROM t3}
! 2102: } {1 {access to t3.x is prohibited}}
! 2103: do_test auth-2.4 {
! 2104: proc auth {code arg1 arg2 arg3 arg4} {
! 2105: if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="x"} {
! 2106: return SQLITE_IGNORE
! 2107: }
! 2108: return SQLITE_OK
! 2109: }
! 2110: execsql {INSERT INTO t3 VALUES(44,55,66)}
! 2111: catchsql {SELECT * FROM t3}
! 2112: } {0 {{} 55 66}}
! 2113: do_test auth-2.5 {
! 2114: catchsql {SELECT rowid,y,z FROM t3}
! 2115: } {0 {{} 55 66}}
! 2116: do_test auth-2.6 {
! 2117: proc auth {code arg1 arg2 arg3 arg4} {
! 2118: if {$code=="SQLITE_READ" && $arg1=="t3" && $arg2=="ROWID"} {
! 2119: return SQLITE_IGNORE
! 2120: }
! 2121: return SQLITE_OK
! 2122: }
! 2123: catchsql {SELECT * FROM t3}
! 2124: } {0 {44 55 66}}
! 2125: do_test auth-2.7 {
! 2126: catchsql {SELECT ROWID,y,z FROM t3}
! 2127: } {0 {44 55 66}}
! 2128: do_test auth-2.8 {
! 2129: proc auth {code arg1 arg2 arg3 arg4} {
! 2130: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
! 2131: return SQLITE_IGNORE
! 2132: }
! 2133: return SQLITE_OK
! 2134: }
! 2135: catchsql {SELECT ROWID,b,c FROM t2}
! 2136: } {0 {{} 2 33 {} 8 9}}
! 2137: do_test auth-2.9.1 {
! 2138: # We have to flush the cache here in case the Tcl interface tries to
! 2139: # reuse a statement compiled with sqlite3_prepare_v2(). In this case,
! 2140: # the first error encountered is an SQLITE_SCHEMA error. Then, when
! 2141: # trying to recompile the statement, the authorization error is encountered.
! 2142: # If we do not flush the cache, the correct error message is returned, but
! 2143: # the error code is SQLITE_SCHEMA, not SQLITE_ERROR as required by the test
! 2144: # case after this one.
! 2145: #
! 2146: db cache flush
! 2147:
! 2148: proc auth {code arg1 arg2 arg3 arg4} {
! 2149: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="ROWID"} {
! 2150: return bogus
! 2151: }
! 2152: return SQLITE_OK
! 2153: }
! 2154: catchsql {SELECT ROWID,b,c FROM t2}
! 2155: } {1 {authorizer malfunction}}
! 2156: do_test auth-2.9.2 {
! 2157: db errorcode
! 2158: } {1}
! 2159: do_test auth-2.10 {
! 2160: proc auth {code arg1 arg2 arg3 arg4} {
! 2161: if {$code=="SQLITE_SELECT"} {
! 2162: return bogus
! 2163: }
! 2164: return SQLITE_OK
! 2165: }
! 2166: catchsql {SELECT ROWID,b,c FROM t2}
! 2167: } {1 {authorizer malfunction}}
! 2168: do_test auth-2.11.1 {
! 2169: proc auth {code arg1 arg2 arg3 arg4} {
! 2170: if {$code=="SQLITE_READ" && $arg2=="a"} {
! 2171: return SQLITE_IGNORE
! 2172: }
! 2173: return SQLITE_OK
! 2174: }
! 2175: catchsql {SELECT * FROM t2, t3}
! 2176: } {0 {{} 2 33 44 55 66 {} 8 9 44 55 66}}
! 2177: do_test auth-2.11.2 {
! 2178: proc auth {code arg1 arg2 arg3 arg4} {
! 2179: if {$code=="SQLITE_READ" && $arg2=="x"} {
! 2180: return SQLITE_IGNORE
! 2181: }
! 2182: return SQLITE_OK
! 2183: }
! 2184: catchsql {SELECT * FROM t2, t3}
! 2185: } {0 {11 2 33 {} 55 66 7 8 9 {} 55 66}}
! 2186:
! 2187: # Make sure the OLD and NEW pseudo-tables of a trigger get authorized.
! 2188: #
! 2189: ifcapable trigger {
! 2190: do_test auth-3.1 {
! 2191: proc auth {code arg1 arg2 arg3 arg4} {
! 2192: return SQLITE_OK
! 2193: }
! 2194: execsql {
! 2195: CREATE TABLE tx(a1,a2,b1,b2,c1,c2);
! 2196: CREATE TRIGGER r1 AFTER UPDATE ON t2 FOR EACH ROW BEGIN
! 2197: INSERT INTO tx VALUES(OLD.a,NEW.a,OLD.b,NEW.b,OLD.c,NEW.c);
! 2198: END;
! 2199: UPDATE t2 SET a=a+1;
! 2200: SELECT * FROM tx;
! 2201: }
! 2202: } {11 12 2 2 33 33 7 8 8 8 9 9}
! 2203: do_test auth-3.2 {
! 2204: proc auth {code arg1 arg2 arg3 arg4} {
! 2205: if {$code=="SQLITE_READ" && $arg1=="t2" && $arg2=="c"} {
! 2206: return SQLITE_IGNORE
! 2207: }
! 2208: return SQLITE_OK
! 2209: }
! 2210: execsql {
! 2211: DELETE FROM tx;
! 2212: UPDATE t2 SET a=a+100;
! 2213: SELECT * FROM tx;
! 2214: }
! 2215: } {12 112 2 2 {} {} 8 108 8 8 {} {}}
! 2216: } ;# ifcapable trigger
! 2217:
! 2218: # Make sure the names of views and triggers are passed on on arg4.
! 2219: #
! 2220: ifcapable trigger {
! 2221: do_test auth-4.1 {
! 2222: proc auth {code arg1 arg2 arg3 arg4} {
! 2223: lappend ::authargs $code $arg1 $arg2 $arg3 $arg4
! 2224: return SQLITE_OK
! 2225: }
! 2226: set authargs {}
! 2227: execsql {
! 2228: UPDATE t2 SET a=a+1;
! 2229: }
! 2230: set authargs
! 2231: } [list \
! 2232: SQLITE_READ t2 a main {} \
! 2233: SQLITE_UPDATE t2 a main {} \
! 2234: SQLITE_INSERT tx {} main r1 \
! 2235: SQLITE_READ t2 a main r1 \
! 2236: SQLITE_READ t2 a main r1 \
! 2237: SQLITE_READ t2 b main r1 \
! 2238: SQLITE_READ t2 b main r1 \
! 2239: SQLITE_READ t2 c main r1 \
! 2240: SQLITE_READ t2 c main r1]
! 2241: }
! 2242:
! 2243: ifcapable {view && trigger} {
! 2244: do_test auth-4.2 {
! 2245: execsql {
! 2246: CREATE VIEW v1 AS SELECT a+b AS x FROM t2;
! 2247: CREATE TABLE v1chng(x1,x2);
! 2248: CREATE TRIGGER r2 INSTEAD OF UPDATE ON v1 BEGIN
! 2249: INSERT INTO v1chng VALUES(OLD.x,NEW.x);
! 2250: END;
! 2251: SELECT * FROM v1;
! 2252: }
! 2253: } {115 117}
! 2254: do_test auth-4.3 {
! 2255: set authargs {}
! 2256: execsql {
! 2257: UPDATE v1 SET x=1 WHERE x=117
! 2258: }
! 2259: set authargs
! 2260: } [list \
! 2261: SQLITE_UPDATE v1 x main {} \
! 2262: SQLITE_SELECT {} {} {} v1 \
! 2263: SQLITE_READ t2 a main v1 \
! 2264: SQLITE_READ t2 b main v1 \
! 2265: SQLITE_SELECT {} {} {} {} \
! 2266: SQLITE_READ v1 x main v1 \
! 2267: SQLITE_INSERT v1chng {} main r2 \
! 2268: SQLITE_READ v1 x main r2 \
! 2269: SQLITE_READ v1 x main r2 \
! 2270: ]
! 2271:
! 2272: do_test auth-4.4 {
! 2273: execsql {
! 2274: CREATE TRIGGER r3 INSTEAD OF DELETE ON v1 BEGIN
! 2275: INSERT INTO v1chng VALUES(OLD.x,NULL);
! 2276: END;
! 2277: SELECT * FROM v1;
! 2278: }
! 2279: } {115 117}
! 2280: do_test auth-4.5 {
! 2281: set authargs {}
! 2282: execsql {
! 2283: DELETE FROM v1 WHERE x=117
! 2284: }
! 2285: set authargs
! 2286: } [list \
! 2287: SQLITE_DELETE v1 {} main {} \
! 2288: SQLITE_SELECT {} {} {} v1 \
! 2289: SQLITE_READ t2 a main v1 \
! 2290: SQLITE_READ t2 b main v1 \
! 2291: SQLITE_SELECT {} {} {} {} \
! 2292: SQLITE_READ v1 x main v1 \
! 2293: SQLITE_INSERT v1chng {} main r3 \
! 2294: SQLITE_READ v1 x main r3 \
! 2295: ]
! 2296:
! 2297: } ;# ifcapable view && trigger
! 2298:
! 2299: # Ticket #1338: Make sure authentication works in the presence of an AS
! 2300: # clause.
! 2301: #
! 2302: do_test auth-5.1 {
! 2303: proc auth {code arg1 arg2 arg3 arg4} {
! 2304: return SQLITE_OK
! 2305: }
! 2306: execsql {
! 2307: SELECT count(a) AS cnt FROM t4 ORDER BY cnt
! 2308: }
! 2309: } {1}
! 2310:
! 2311: # Ticket #1607
! 2312: #
! 2313: ifcapable compound&&subquery {
! 2314: ifcapable trigger {
! 2315: execsql {
! 2316: DROP TABLE tx;
! 2317: }
! 2318: ifcapable view {
! 2319: execsql {
! 2320: DROP TABLE v1chng;
! 2321: }
! 2322: }
! 2323: }
! 2324: ifcapable stat3 {
! 2325: set stat3 "sqlite_stat3 "
! 2326: } else {
! 2327: set stat3 ""
! 2328: }
! 2329: do_test auth-5.2 {
! 2330: execsql {
! 2331: SELECT name FROM (
! 2332: SELECT * FROM sqlite_master UNION ALL SELECT * FROM sqlite_temp_master)
! 2333: WHERE type='table'
! 2334: ORDER BY name
! 2335: }
! 2336: } "sqlite_stat1 ${stat3}t1 t2 t3 t4"
! 2337: }
! 2338:
! 2339: # Ticket #3944
! 2340: #
! 2341: ifcapable trigger {
! 2342: do_test auth-5.3.1 {
! 2343: execsql {
! 2344: CREATE TABLE t5 ( x );
! 2345: CREATE TRIGGER t5_tr1 AFTER INSERT ON t5 BEGIN
! 2346: UPDATE t5 SET x = 1 WHERE NEW.x = 0;
! 2347: END;
! 2348: }
! 2349: } {}
! 2350: set ::authargs [list]
! 2351: proc auth {args} {
! 2352: eval lappend ::authargs $args
! 2353: return SQLITE_OK
! 2354: }
! 2355: do_test auth-5.3.2 {
! 2356: execsql { INSERT INTO t5 (x) values(0) }
! 2357: set ::authargs
! 2358: } [list SQLITE_INSERT t5 {} main {} \
! 2359: SQLITE_UPDATE t5 x main t5_tr1 \
! 2360: SQLITE_READ t5 x main t5_tr1 \
! 2361: ]
! 2362: do_test auth-5.3.2 {
! 2363: execsql { SELECT * FROM t5 }
! 2364: } {1}
! 2365: }
! 2366:
! 2367:
! 2368: rename proc {}
! 2369: rename proc_real proc
! 2370:
! 2371:
! 2372: finish_test
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>