1# 2001 September 15 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 file is testing the CREATE INDEX statement. 13# 14# $Id: index.test,v 1.37 2005/01/21 03:12:16 danielk1977 Exp $ 15 16set testdir [file dirname $argv0] 17source $testdir/tester.tcl 18 19# Create a basic index and verify it is added to sqlite_master 20# 21do_test index-1.1 { 22 execsql {CREATE TABLE test1(f1 int, f2 int, f3 int)} 23 execsql {CREATE INDEX index1 ON test1(f1)} 24 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 25} {index1 test1} 26do_test index-1.1b { 27 execsql {SELECT name, sql, tbl_name, type FROM sqlite_master 28 WHERE name='index1'} 29} {index1 {CREATE INDEX index1 ON test1(f1)} test1 index} 30do_test index-1.1c { 31 db close 32 sqlite3 db test.db 33 execsql {SELECT name, sql, tbl_name, type FROM sqlite_master 34 WHERE name='index1'} 35} {index1 {CREATE INDEX index1 ON test1(f1)} test1 index} 36do_test index-1.1d { 37 db close 38 sqlite3 db test.db 39 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 40} {index1 test1} 41 42# Verify that the index dies with the table 43# 44do_test index-1.2 { 45 execsql {DROP TABLE test1} 46 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 47} {} 48 49# Try adding an index to a table that does not exist 50# 51do_test index-2.1 { 52 set v [catch {execsql {CREATE INDEX index1 ON test1(f1)}} msg] 53 lappend v $msg 54} {1 {no such table: main.test1}} 55 56# Try adding an index on a column of a table where the table 57# exists but the column does not. 58# 59do_test index-2.1 { 60 execsql {CREATE TABLE test1(f1 int, f2 int, f3 int)} 61 set v [catch {execsql {CREATE INDEX index1 ON test1(f4)}} msg] 62 lappend v $msg 63} {1 {table test1 has no column named f4}} 64 65# Try an index with some columns that match and others that do now. 66# 67do_test index-2.2 { 68 set v [catch {execsql {CREATE INDEX index1 ON test1(f1, f2, f4, f3)}} msg] 69 execsql {DROP TABLE test1} 70 lappend v $msg 71} {1 {table test1 has no column named f4}} 72 73# Try creating a bunch of indices on the same table 74# 75set r {} 76for {set i 1} {$i<100} {incr i} { 77 lappend r [format index%02d $i] 78} 79do_test index-3.1 { 80 execsql {CREATE TABLE test1(f1 int, f2 int, f3 int, f4 int, f5 int)} 81 for {set i 1} {$i<100} {incr i} { 82 set sql "CREATE INDEX [format index%02d $i] ON test1(f[expr {($i%5)+1}])" 83 execsql $sql 84 } 85 execsql {SELECT name FROM sqlite_master 86 WHERE type='index' AND tbl_name='test1' 87 ORDER BY name} 88} $r 89integrity_check index-3.2.1 90ifcapable {reindex} { 91 do_test index-3.2.2 { 92 execsql REINDEX 93 } {} 94} 95integrity_check index-3.2.3 96 97 98# Verify that all the indices go away when we drop the table. 99# 100do_test index-3.3 { 101 execsql {DROP TABLE test1} 102 execsql {SELECT name FROM sqlite_master 103 WHERE type='index' AND tbl_name='test1' 104 ORDER BY name} 105} {} 106 107# Create a table and insert values into that table. Then create 108# an index on that table. Verify that we can select values 109# from the table correctly using the index. 110# 111# Note that the index names "index9" and "indext" are chosen because 112# they both have the same hash. 113# 114do_test index-4.1 { 115 execsql {CREATE TABLE test1(cnt int, power int)} 116 for {set i 1} {$i<20} {incr i} { 117 execsql "INSERT INTO test1 VALUES($i,[expr {int(pow(2,$i))}])" 118 } 119 execsql {CREATE INDEX index9 ON test1(cnt)} 120 execsql {CREATE INDEX indext ON test1(power)} 121 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 122} {index9 indext test1} 123do_test index-4.2 { 124 execsql {SELECT cnt FROM test1 WHERE power=4} 125} {2} 126do_test index-4.3 { 127 execsql {SELECT cnt FROM test1 WHERE power=1024} 128} {10} 129do_test index-4.4 { 130 execsql {SELECT power FROM test1 WHERE cnt=6} 131} {64} 132do_test index-4.5 { 133 execsql {DROP INDEX indext} 134 execsql {SELECT power FROM test1 WHERE cnt=6} 135} {64} 136do_test index-4.6 { 137 execsql {SELECT cnt FROM test1 WHERE power=1024} 138} {10} 139do_test index-4.7 { 140 execsql {CREATE INDEX indext ON test1(cnt)} 141 execsql {SELECT power FROM test1 WHERE cnt=6} 142} {64} 143do_test index-4.8 { 144 execsql {SELECT cnt FROM test1 WHERE power=1024} 145} {10} 146do_test index-4.9 { 147 execsql {DROP INDEX index9} 148 execsql {SELECT power FROM test1 WHERE cnt=6} 149} {64} 150do_test index-4.10 { 151 execsql {SELECT cnt FROM test1 WHERE power=1024} 152} {10} 153do_test index-4.11 { 154 execsql {DROP INDEX indext} 155 execsql {SELECT power FROM test1 WHERE cnt=6} 156} {64} 157do_test index-4.12 { 158 execsql {SELECT cnt FROM test1 WHERE power=1024} 159} {10} 160do_test index-4.13 { 161 execsql {DROP TABLE test1} 162 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 163} {} 164integrity_check index-4.14 165 166# Do not allow indices to be added to sqlite_master 167# 168do_test index-5.1 { 169 set v [catch {execsql {CREATE INDEX index1 ON sqlite_master(name)}} msg] 170 lappend v $msg 171} {1 {table sqlite_master may not be indexed}} 172do_test index-5.2 { 173 execsql {SELECT name FROM sqlite_master WHERE type!='meta'} 174} {} 175 176# Do not allow indices with duplicate names to be added 177# 178do_test index-6.1 { 179 execsql {CREATE TABLE test1(f1 int, f2 int)} 180 execsql {CREATE TABLE test2(g1 real, g2 real)} 181 execsql {CREATE INDEX index1 ON test1(f1)} 182 set v [catch {execsql {CREATE INDEX index1 ON test2(g1)}} msg] 183 lappend v $msg 184} {1 {index index1 already exists}} 185do_test index-6.1b { 186 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 187} {index1 test1 test2} 188do_test index-6.2 { 189 set v [catch {execsql {CREATE INDEX test1 ON test2(g1)}} msg] 190 lappend v $msg 191} {1 {there is already a table named test1}} 192do_test index-6.2b { 193 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 194} {index1 test1 test2} 195do_test index-6.3 { 196 execsql {DROP TABLE test1} 197 execsql {DROP TABLE test2} 198 execsql {SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name} 199} {} 200do_test index-6.4 { 201 execsql { 202 CREATE TABLE test1(a,b); 203 CREATE INDEX index1 ON test1(a); 204 CREATE INDEX index2 ON test1(b); 205 CREATE INDEX index3 ON test1(a,b); 206 DROP TABLE test1; 207 SELECT name FROM sqlite_master WHERE type!='meta' ORDER BY name; 208 } 209} {} 210integrity_check index-6.5 211 212 213# Create a primary key 214# 215do_test index-7.1 { 216 execsql {CREATE TABLE test1(f1 int, f2 int primary key)} 217 for {set i 1} {$i<20} {incr i} { 218 execsql "INSERT INTO test1 VALUES($i,[expr {int(pow(2,$i))}])" 219 } 220 execsql {SELECT count(*) FROM test1} 221} {19} 222do_test index-7.2 { 223 execsql {SELECT f1 FROM test1 WHERE f2=65536} 224} {16} 225do_test index-7.3 { 226 execsql { 227 SELECT name FROM sqlite_master 228 WHERE type='index' AND tbl_name='test1' 229 } 230} {sqlite_autoindex_test1_1} 231do_test index-7.4 { 232 execsql {DROP table test1} 233 execsql {SELECT name FROM sqlite_master WHERE type!='meta'} 234} {} 235integrity_check index-7.5 236 237# Make sure we cannot drop a non-existant index. 238# 239do_test index-8.1 { 240 set v [catch {execsql {DROP INDEX index1}} msg] 241 lappend v $msg 242} {1 {no such index: index1}} 243 244# Make sure we don't actually create an index when the EXPLAIN keyword 245# is used. 246# 247do_test index-9.1 { 248 execsql {CREATE TABLE tab1(a int)} 249 ifcapable {explain} { 250 execsql {EXPLAIN CREATE INDEX idx1 ON tab1(a)} 251 } 252 execsql {SELECT name FROM sqlite_master WHERE tbl_name='tab1'} 253} {tab1} 254do_test index-9.2 { 255 execsql {CREATE INDEX idx1 ON tab1(a)} 256 execsql {SELECT name FROM sqlite_master WHERE tbl_name='tab1' ORDER BY name} 257} {idx1 tab1} 258integrity_check index-9.3 259 260# Allow more than one entry with the same key. 261# 262do_test index-10.0 { 263 execsql { 264 CREATE TABLE t1(a int, b int); 265 CREATE INDEX i1 ON t1(a); 266 INSERT INTO t1 VALUES(1,2); 267 INSERT INTO t1 VALUES(2,4); 268 INSERT INTO t1 VALUES(3,8); 269 INSERT INTO t1 VALUES(1,12); 270 SELECT b FROM t1 WHERE a=1 ORDER BY b; 271 } 272} {2 12} 273do_test index-10.1 { 274 execsql { 275 SELECT b FROM t1 WHERE a=2 ORDER BY b; 276 } 277} {4} 278do_test index-10.2 { 279 execsql { 280 DELETE FROM t1 WHERE b=12; 281 SELECT b FROM t1 WHERE a=1 ORDER BY b; 282 } 283} {2} 284do_test index-10.3 { 285 execsql { 286 DELETE FROM t1 WHERE b=2; 287 SELECT b FROM t1 WHERE a=1 ORDER BY b; 288 } 289} {} 290do_test index-10.4 { 291 execsql { 292 DELETE FROM t1; 293 INSERT INTO t1 VALUES (1,1); 294 INSERT INTO t1 VALUES (1,2); 295 INSERT INTO t1 VALUES (1,3); 296 INSERT INTO t1 VALUES (1,4); 297 INSERT INTO t1 VALUES (1,5); 298 INSERT INTO t1 VALUES (1,6); 299 INSERT INTO t1 VALUES (1,7); 300 INSERT INTO t1 VALUES (1,8); 301 INSERT INTO t1 VALUES (1,9); 302 INSERT INTO t1 VALUES (2,0); 303 SELECT b FROM t1 WHERE a=1 ORDER BY b; 304 } 305} {1 2 3 4 5 6 7 8 9} 306do_test index-10.5 { 307 ifcapable subquery { 308 execsql { DELETE FROM t1 WHERE b IN (2, 4, 6, 8); } 309 } else { 310 execsql { DELETE FROM t1 WHERE b = 2 OR b = 4 OR b = 6 OR b = 8; } 311 } 312 execsql { 313 SELECT b FROM t1 WHERE a=1 ORDER BY b; 314 } 315} {1 3 5 7 9} 316do_test index-10.6 { 317 execsql { 318 DELETE FROM t1 WHERE b>2; 319 SELECT b FROM t1 WHERE a=1 ORDER BY b; 320 } 321} {1} 322do_test index-10.7 { 323 execsql { 324 DELETE FROM t1 WHERE b=1; 325 SELECT b FROM t1 WHERE a=1 ORDER BY b; 326 } 327} {} 328do_test index-10.8 { 329 execsql { 330 SELECT b FROM t1 ORDER BY b; 331 } 332} {0} 333integrity_check index-10.9 334 335# Automatically create an index when we specify a primary key. 336# 337do_test index-11.1 { 338 execsql { 339 CREATE TABLE t3( 340 a text, 341 b int, 342 c float, 343 PRIMARY KEY(b) 344 ); 345 } 346 for {set i 1} {$i<=50} {incr i} { 347 execsql "INSERT INTO t3 VALUES('x${i}x',$i,0.$i)" 348 } 349 set sqlite_search_count 0 350 concat [execsql {SELECT c FROM t3 WHERE b==10}] $sqlite_search_count 351} {0.1 3} 352integrity_check index-11.2 353 354 355# Numeric strings should compare as if they were numbers. So even if the 356# strings are not character-by-character the same, if they represent the 357# same number they should compare equal to one another. Verify that this 358# is true in indices. 359# 360# Updated for sqlite3 v3: SQLite will now store these values as numbers 361# (because the affinity of column a is NUMERIC) so the quirky 362# representations are not retained. i.e. '+1.0' becomes '1'. 363do_test index-12.1 { 364 execsql { 365 CREATE TABLE t4(a NUM,b); 366 INSERT INTO t4 VALUES('0.0',1); 367 INSERT INTO t4 VALUES('0.00',2); 368 INSERT INTO t4 VALUES('abc',3); 369 INSERT INTO t4 VALUES('-1.0',4); 370 INSERT INTO t4 VALUES('+1.0',5); 371 INSERT INTO t4 VALUES('0',6); 372 INSERT INTO t4 VALUES('00000',7); 373 SELECT a FROM t4 ORDER BY b; 374 } 375} {0.0 0.0 abc -1.0 1.0 0 0} 376do_test index-12.2 { 377 execsql { 378 SELECT a FROM t4 WHERE a==0 ORDER BY b 379 } 380} {0.0 0.0 0 0} 381do_test index-12.3 { 382 execsql { 383 SELECT a FROM t4 WHERE a<0.5 ORDER BY b 384 } 385} {0.0 0.0 -1.0 0 0} 386do_test index-12.4 { 387 execsql { 388 SELECT a FROM t4 WHERE a>-0.5 ORDER BY b 389 } 390} {0.0 0.0 abc 1.0 0 0} 391do_test index-12.5 { 392 execsql { 393 CREATE INDEX t4i1 ON t4(a); 394 SELECT a FROM t4 WHERE a==0 ORDER BY b 395 } 396} {0.0 0.0 0 0} 397do_test index-12.6 { 398 execsql { 399 SELECT a FROM t4 WHERE a<0.5 ORDER BY b 400 } 401} {0.0 0.0 -1.0 0 0} 402do_test index-12.7 { 403 execsql { 404 SELECT a FROM t4 WHERE a>-0.5 ORDER BY b 405 } 406} {0.0 0.0 abc 1.0 0 0} 407integrity_check index-12.8 408 409# Make sure we cannot drop an automatically created index. 410# 411do_test index-13.1 { 412 execsql { 413 CREATE TABLE t5( 414 a int UNIQUE, 415 b float PRIMARY KEY, 416 c varchar(10), 417 UNIQUE(a,c) 418 ); 419 INSERT INTO t5 VALUES(1,2,3); 420 SELECT * FROM t5; 421 } 422} {1 2 3} 423do_test index-13.2 { 424 set ::idxlist [execsql { 425 SELECT name FROM sqlite_master WHERE type="index" AND tbl_name="t5"; 426 }] 427 llength $::idxlist 428} {3} 429for {set i 0} {$i<[llength $::idxlist]} {incr i} { 430 do_test index-13.3.$i { 431 catchsql " 432 DROP INDEX '[lindex $::idxlist $i]'; 433 " 434 } {1 {index associated with UNIQUE or PRIMARY KEY constraint cannot be dropped}} 435} 436do_test index-13.4 { 437 execsql { 438 INSERT INTO t5 VALUES('a','b','c'); 439 SELECT * FROM t5; 440 } 441} {1 2 3 a b c} 442integrity_check index-13.5 443 444# Check the sort order of data in an index. 445# 446do_test index-14.1 { 447 execsql { 448 CREATE TABLE t6(a,b,c); 449 CREATE INDEX t6i1 ON t6(a,b); 450 INSERT INTO t6 VALUES('','',1); 451 INSERT INTO t6 VALUES('',NULL,2); 452 INSERT INTO t6 VALUES(NULL,'',3); 453 INSERT INTO t6 VALUES('abc',123,4); 454 INSERT INTO t6 VALUES(123,'abc',5); 455 SELECT c FROM t6 ORDER BY a,b; 456 } 457} {3 5 2 1 4} 458do_test index-14.2 { 459 execsql { 460 SELECT c FROM t6 WHERE a=''; 461 } 462} {2 1} 463do_test index-14.3 { 464 execsql { 465 SELECT c FROM t6 WHERE b=''; 466 } 467} {1 3} 468do_test index-14.4 { 469 execsql { 470 SELECT c FROM t6 WHERE a>''; 471 } 472} {4} 473do_test index-14.5 { 474 execsql { 475 SELECT c FROM t6 WHERE a>=''; 476 } 477} {2 1 4} 478do_test index-14.6 { 479 execsql { 480 SELECT c FROM t6 WHERE a>123; 481 } 482} {2 1 4} 483do_test index-14.7 { 484 execsql { 485 SELECT c FROM t6 WHERE a>=123; 486 } 487} {5 2 1 4} 488do_test index-14.8 { 489 execsql { 490 SELECT c FROM t6 WHERE a<'abc'; 491 } 492} {5 2 1} 493do_test index-14.9 { 494 execsql { 495 SELECT c FROM t6 WHERE a<='abc'; 496 } 497} {5 2 1 4} 498do_test index-14.10 { 499 execsql { 500 SELECT c FROM t6 WHERE a<=''; 501 } 502} {5 2 1} 503do_test index-14.11 { 504 execsql { 505 SELECT c FROM t6 WHERE a<''; 506 } 507} {5} 508integrity_check index-14.12 509 510do_test index-15.1 { 511 execsql { 512 DELETE FROM t1; 513 SELECT * FROM t1; 514 } 515} {} 516do_test index-15.2 { 517 execsql { 518 INSERT INTO t1 VALUES('1.234e5',1); 519 INSERT INTO t1 VALUES('12.33e04',2); 520 INSERT INTO t1 VALUES('12.35E4',3); 521 INSERT INTO t1 VALUES('12.34e',4); 522 INSERT INTO t1 VALUES('12.32e+4',5); 523 INSERT INTO t1 VALUES('12.36E+04',6); 524 INSERT INTO t1 VALUES('12.36E+',7); 525 INSERT INTO t1 VALUES('+123.10000E+0003',8); 526 INSERT INTO t1 VALUES('+',9); 527 INSERT INTO t1 VALUES('+12347.E+02',10); 528 INSERT INTO t1 VALUES('+12347E+02',11); 529 SELECT b FROM t1 ORDER BY a; 530 } 531} {8 5 2 1 3 6 11 9 10 4 7} 532integrity_check index-15.1 533 534# The following tests - index-16.* - test that when a table definition 535# includes qualifications that specify the same constraint twice only a 536# single index is generated to enforce the constraint. 537# 538# For example: "CREATE TABLE abc( x PRIMARY KEY, UNIQUE(x) );" 539# 540do_test index-16.1 { 541 execsql { 542 CREATE TABLE t7(c UNIQUE PRIMARY KEY); 543 SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 544 } 545} {1} 546do_test index-16.2 { 547 execsql { 548 DROP TABLE t7; 549 CREATE TABLE t7(c UNIQUE PRIMARY KEY); 550 SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 551 } 552} {1} 553do_test index-16.3 { 554 execsql { 555 DROP TABLE t7; 556 CREATE TABLE t7(c PRIMARY KEY, UNIQUE(c) ); 557 SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 558 } 559} {1} 560do_test index-16.4 { 561 execsql { 562 DROP TABLE t7; 563 CREATE TABLE t7(c, d , UNIQUE(c, d), PRIMARY KEY(c, d) ); 564 SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 565 } 566} {1} 567do_test index-16.5 { 568 execsql { 569 DROP TABLE t7; 570 CREATE TABLE t7(c, d , UNIQUE(c), PRIMARY KEY(c, d) ); 571 SELECT count(*) FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 572 } 573} {2} 574 575# Test that automatically create indices are named correctly. The current 576# convention is: "sqlite_autoindex_<table name>_<integer>" 577# 578# Then check that it is an error to try to drop any automtically created 579# indices. 580do_test index-17.1 { 581 execsql { 582 DROP TABLE t7; 583 CREATE TABLE t7(c, d UNIQUE, UNIQUE(c), PRIMARY KEY(c, d) ); 584 SELECT name FROM sqlite_master WHERE tbl_name = 't7' AND type = 'index'; 585 } 586} {sqlite_autoindex_t7_1 sqlite_autoindex_t7_2 sqlite_autoindex_t7_3} 587do_test index-17.2 { 588 catchsql { 589 DROP INDEX sqlite_autoindex_t7_1; 590 } 591} {1 {index associated with UNIQUE or PRIMARY KEY constraint cannot be dropped}} 592 593# The following tests ensure that it is not possible to explicitly name 594# a schema object with a name beginning with "sqlite_". Granted that is a 595# little outside the focus of this test scripts, but this has got to be 596# tested somewhere. 597do_test index-18.1 { 598 catchsql { 599 CREATE TABLE sqlite_t1(a, b, c); 600 } 601} {1 {object name reserved for internal use: sqlite_t1}} 602do_test index-18.2 { 603 catchsql { 604 CREATE INDEX sqlite_i1 ON t7(c); 605 } 606} {1 {object name reserved for internal use: sqlite_i1}} 607ifcapable view { 608do_test index-18.3 { 609 catchsql { 610 CREATE VIEW sqlite_v1 AS SELECT * FROM t7; 611 } 612} {1 {object name reserved for internal use: sqlite_v1}} 613} ;# ifcapable view 614ifcapable {trigger} { 615 do_test index-18.4 { 616 catchsql { 617 CREATE TRIGGER sqlite_tr1 BEFORE INSERT ON t7 BEGIN SELECT 1; END; 618 } 619 } {1 {object name reserved for internal use: sqlite_tr1}} 620} 621do_test index-18.5 { 622 execsql { 623 DROP TABLE t7; 624 } 625} {} 626 627# These tests ensure that if multiple table definition constraints are 628# implemented by a single indice, the correct ON CONFLICT policy applies. 629do_test index-19.1 { 630 execsql { 631 CREATE TABLE t7(a UNIQUE PRIMARY KEY); 632 CREATE TABLE t8(a UNIQUE PRIMARY KEY ON CONFLICT ROLLBACK); 633 INSERT INTO t7 VALUES(1); 634 INSERT INTO t8 VALUES(1); 635 } 636} {} 637do_test index-19.2 { 638 catchsql { 639 BEGIN; 640 INSERT INTO t7 VALUES(1); 641 } 642} {1 {column a is not unique}} 643do_test index-19.3 { 644 catchsql { 645 BEGIN; 646 } 647} {1 {cannot start a transaction within a transaction}} 648do_test index-19.4 { 649 catchsql { 650 INSERT INTO t8 VALUES(1); 651 } 652} {1 {column a is not unique}} 653do_test index-19.5 { 654 catchsql { 655 BEGIN; 656 COMMIT; 657 } 658} {0 {}} 659do_test index-19.6 { 660 catchsql { 661 DROP TABLE t7; 662 DROP TABLE t8; 663 CREATE TABLE t7( 664 a PRIMARY KEY ON CONFLICT FAIL, 665 UNIQUE(a) ON CONFLICT IGNORE 666 ); 667 } 668} {1 {conflicting ON CONFLICT clauses specified}} 669 670ifcapable {reindex} { 671 do_test index-19.7 { 672 execsql REINDEX 673 } {} 674} 675integrity_check index-19.8 676 677# Drop index with a quoted name. Ticket #695. 678# 679do_test index-20.1 { 680 execsql { 681 CREATE INDEX "t6i2" ON t6(c); 682 DROP INDEX "t6i2"; 683 } 684} {} 685do_test index-20.2 { 686 execsql { 687 DROP INDEX "t6i1"; 688 } 689} {} 690 691 692finish_test 693