Allow the keyword INDEXED to be used as the name of a table or index or

column - for backwards compatibility. (CVS 6370)

FossilOrigin-Name: 53149c9f5d5cfaba3374703cd3af92a9d4cf8718
This commit is contained in:
drh 2009-03-22 20:36:18 +00:00
parent 0fa991b9e3
commit 296a483c2e
5 changed files with 43 additions and 17 deletions

View File

@ -1,5 +1,5 @@
C Update\scomments\sin\sbuild.c\sto\sconform\sto\sthe\slatest\simplementation.\s(CVS\s6369)
D 2009-03-21T16:19:26
C Allow\sthe\skeyword\sINDEXED\sto\sbe\sused\sas\sthe\sname\sof\sa\stable\sor\sindex\sor\ncolumn\s-\sfor\sbackwards\scompatibility.\s(CVS\s6370)
D 2009-03-22T20:36:19
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 583e87706abc3026960ed759aff6371faf84c211
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -145,7 +145,7 @@ F src/os_unix.c a20fe61c025117452c003ae4cafd05c3e610b616
F src/os_win.c 40636702058ed4dcd35d68151bfab56d4997cdc1
F src/pager.c 01e3facb2f7c5f307e36a0f4ed9343cf3761711a
F src/pager.h 0c9f3520c00d8a3b8e792ca56c9a11b6b02b4b0f
F src/parse.y c315b6f9bf6c7e7ec985481f81b6a45dba6c26d0
F src/parse.y 30ae25cd9ce8002527fca3011052a7fba0aff349
F src/pcache.c fcf7738c83c4d3e9d45836b2334c8a368cc41274
F src/pcache.h 9b927ccc5a538e31b4c3bc7eec4f976db42a1324
F src/pcache1.c f12518540ba776df3051215c4244e9cdc06b09cd
@ -209,7 +209,7 @@ F src/vdbeblob.c 3408f5e1ab62627300b9c9c3168cff1de65e1658
F src/vdbemem.c 543a79d722734d2f8b7ad70f08218c30bcc5bbf5
F src/vtab.c 18d671f0a45d0159088070bc6b219a3105034c87
F src/walker.c 42bd3f00ca2ef5ae842304ec0d59903ef051412d
F src/where.c 42d3756dbed6ed390bafcd849cc2075230e0eda6
F src/where.c 55b13048fd0f82b330511e37766208b96fd764df
F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
F test/alias.test 597662c5d777a122f9a3df0047ea5c5bd383a911
F test/all.test 14165b3e32715b700b5f0cbf8f6e3833dda0be45
@ -400,7 +400,7 @@ F test/incrvacuum_ioerr.test 57d2f5777ab13fa03b87b262a4ea1bad5cfc0291
F test/index.test cbf301cdb2da43e4eac636c3400c2439af1834ad
F test/index2.test ee83c6b5e3173a3d7137140d945d9a5d4fdfb9d6
F test/index3.test 727d55dceb9a4ec36675057bb5becfc265e28ca6
F test/indexedby.test bcf239ccdc5ac6112110136f8481b40dcd070164
F test/indexedby.test 946ca2628a521f4ced0520421a0788345abaf3dc
F test/insert.test aef273dd1cee84cc92407469e6bd1b3cdcb76908
F test/insert2.test 4f3a04d168c728ed5ec2c88842e772606c7ce435
F test/insert3.test 7188f1da1126eb15f1b27cf34f4c2753c7d5fd27
@ -709,7 +709,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
P a331562727be465874a66c2c1d15ee070f96f7e0
R 4402ba006efc4583ed7d0cf413c713f4
P a915e8e0a429ab6a10536c45264a790c2d076461
R 1162241df47288b20352f997466915d0
U drh
Z 38186ef5f341ca0ce183f01a326c1493
Z 145cbd00e8dda3a6879518186372f565

View File

@ -1 +1 @@
a915e8e0a429ab6a10536c45264a790c2d076461
53149c9f5d5cfaba3374703cd3af92a9d4cf8718

View File

@ -14,7 +14,7 @@
** the parser. Lemon will also generate a header file containing
** numeric codes for all of the tokens.
**
** @(#) $Id: parse.y,v 1.270 2009/03/05 03:48:07 shane Exp $
** @(#) $Id: parse.y,v 1.271 2009/03/22 20:36:19 drh Exp $
*/
// All token codes are small integers with #defines that begin with "TK_"
@ -174,6 +174,7 @@ columnid(A) ::= nm(X). {
//
%type id {Token}
id(A) ::= ID(X). {A = X;}
id(A) ::= INDEXED(X). {A = X;}
// The following directive causes tokens ABORT, AFTER, ASC, etc. to
// fallback to ID if they will not parse as their original value.
@ -224,7 +225,7 @@ ids(A) ::= ID|STRING(X). {A = X;}
// The name of a column or table can be any of the following:
//
%type nm {Token}
nm(A) ::= ID(X). {A = X;}
nm(A) ::= id(X). {A = X;}
nm(A) ::= STRING(X). {A = X;}
nm(A) ::= JOIN_KW(X). {A = X;}
@ -697,7 +698,7 @@ inscollist(A) ::= nm(Y).
expr(A) ::= term(X). {A = X;}
expr(A) ::= LP(B) expr(X) RP(E). {A = X; sqlite3ExprSpan(A,&B,&E); }
term(A) ::= NULL(X). {A = sqlite3PExpr(pParse, @X, 0, 0, &X);}
expr(A) ::= ID(X). {A = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);}
expr(A) ::= id(X). {A = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);}
expr(A) ::= JOIN_KW(X). {A = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);}
expr(A) ::= nm(X) DOT nm(Y). {
Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);

View File

@ -16,7 +16,7 @@
** so is applicable. Because this module is responsible for selecting
** indices, you might also think of this module as the "query optimizer".
**
** $Id: where.c,v 1.375 2009/03/20 14:18:52 danielk1977 Exp $
** $Id: where.c,v 1.376 2009/03/22 20:36:19 drh Exp $
*/
#include "sqliteInt.h"
@ -1717,8 +1717,8 @@ static double bestVirtualIndex(
**
** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in
** the SQL statement, then this function only considers plans using the
** named index. If one cannot be found, then the returned cost is
** SQLITE_BIG_DBL. If a plan can be found that uses the named index,
** named index. If no such plan is found, then the returned cost is
** SQLITE_BIG_DBL. If a plan is found that uses the named index,
** then the cost is calculated in the usual way.
**
** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table

View File

@ -9,7 +9,7 @@
#
#***********************************************************************
#
# $Id: indexedby.test,v 1.4 2008/12/30 09:45:46 danielk1977 Exp $
# $Id: indexedby.test,v 1.5 2009/03/22 20:36:19 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
@ -225,5 +225,30 @@ do_test indexedby-9.3 {
catchsql { select * from maintable, joinme INDEXED by joinme_id_text_idx }
} {1 {cannot use index: joinme_id_text_idx}}
finish_test
# Make sure we can still create tables, indices, and columns whose name
# is "indexed".
#
do_test indexedby-10.1 {
execsql {
CREATE TABLE indexed(x,y);
INSERT INTO indexed VALUES(1,2);
SELECT * FROM indexed;
}
} {1 2}
do_test indexedby-10.2 {
execsql {
CREATE INDEX i10 ON indexed(x);
SELECT * FROM indexed indexed by i10 where x>0;
}
} {1 2}
do_test indexedby-10.3 {
execsql {
DROP TABLE indexed;
CREATE TABLE t10(indexed INTEGER);
INSERT INTO t10 VALUES(1);
CREATE INDEX indexed ON t10(indexed);
SELECT * FROM t10 indexed by indexed WHERE indexed>0
}
} {1}
finish_test