Return a better error message when problems are encountered parsing a

TEMP trigger or TEMP view that references objects in other databases that
have been modified or dropped.  Ticket #3810. (CVS 6956)

FossilOrigin-Name: 102785b9fbc5ab5dd740110243f080e3f3661e87
This commit is contained in:
drh 2009-08-01 16:27:00 +00:00
parent a0e0d8ea98
commit 35ccb3d3bc
4 changed files with 24 additions and 17 deletions

View File

@ -1,5 +1,5 @@
C Add\sa\stestcase\sfor\sticket\s#3810.\s(CVS\s6955)
D 2009-08-01T15:54:26
C Return\sa\sbetter\serror\smessage\swhen\sproblems\sare\sencountered\sparsing\sa\nTEMP\strigger\sor\sTEMP\sview\sthat\sreferences\sobjects\sin\sother\sdatabases\sthat\nhave\sbeen\smodified\sor\sdropped.\s\sTicket\s#3810.\s(CVS\s6956)
D 2009-08-01T16:27:00
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in df9359da7a726ccb67a45db905c5447d5c00c6ef
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@ -154,7 +154,7 @@ F src/pcache.c c92ffd4f3e1279b3766854c6d18b5bf4aac0d1fa
F src/pcache.h 435ef324197f79391f9c92b71d7f92b548ad7a36
F src/pcache1.c 6dc833c89feac405dd8b4858232c97e679f182ec
F src/pragma.c 9eb44ac1d3dc1ac3ea4f444abe1a10ae8acaa16c
F src/prepare.c 312ba96867ae9df6bd1a57cb84a9fd315e61cf8d
F src/prepare.c 153f3eb168c3447ff770c445609bfec012daeba1
F src/printf.c 508a1c59433353552b6553cba175eaa7331f8fc1
F src/random.c 676b9d7ac820fe81e6fb2394ac8c10cff7f38628
F src/resolve.c 4a61d03e49b15440878096e6030863fc628828f0
@ -646,7 +646,7 @@ F test/tkt3762.test 2a9f3b03df44ec49ec0cfa8d5da6574c2a7853df
F test/tkt3773.test 430b06567ce40285dfd2c4834a2a61816403efeb
F test/tkt3791.test a6624b9a80b216a26cf473607f42f3e51898c267
F test/tkt3793.test 754b73f0e6a9349c70dc57e522cf3247272ecd5d
F test/tkt3810.test c51a9cd94971231ed45011eae316d1730b57beaf
F test/tkt3810.test 9b666811c5cd504f23d07e29039b8df8cf906dba
F test/tkt3824.test 3da2f5c81b057e3ff355f5dfc9aa0cf0a92e0206
F test/tkt3832.test 7ebd5ac82d1e430accd5eec9768044133a94c2aa
F test/tkt3838.test 2a1525946bc9d3751e1d49ce95f3a2472f2b7408
@ -741,7 +741,7 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl 672f81d693a03f80f5ae60bfefacd8a349e76746
P 359d78e144c2399791d341eda1760eb486f9740a
R 624db1eaa8d87e6b2697962c8db1bbed
P 29972f7445cede64d99c2433742572120c92b393
R ff18f397fd87c0e1701eae3715427eb1
U drh
Z b5928333d6bd809b9819c0f1cdd1949f
Z a6872a7f6773f3439623a0342ef806df

View File

@ -1 +1 @@
29972f7445cede64d99c2433742572120c92b393
102785b9fbc5ab5dd740110243f080e3f3661e87

View File

@ -13,7 +13,7 @@
** interface, and routines that contribute to loading the database schema
** from disk.
**
** $Id: prepare.c,v 1.129 2009/07/24 17:58:53 danielk1977 Exp $
** $Id: prepare.c,v 1.130 2009/08/01 16:27:00 drh Exp $
*/
#include "sqliteInt.h"
@ -27,13 +27,18 @@ static void corruptSchema(
const char *zExtra /* Error information */
){
sqlite3 *db = pData->db;
if( pData->iDb==1 && zObj && zExtra ){
*pData->pzErrMsg = sqlite3MPrintf(db, "in %s: %s", zObj, zExtra);
pData->rc = SQLITE_ERROR;
return;
}
if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){
if( zObj==0 ) zObj = "?";
sqlite3SetString(pData->pzErrMsg, pData->db,
"malformed database schema (%s)", zObj);
sqlite3SetString(pData->pzErrMsg, db,
"malformed database schema (%s)", zObj);
if( zExtra ){
*pData->pzErrMsg = sqlite3MAppendf(pData->db, *pData->pzErrMsg, "%s - %s",
*pData->pzErrMsg, zExtra);
*pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg,
"%s - %s", *pData->pzErrMsg, zExtra);
}
}
pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT;

View File

@ -11,14 +11,14 @@
#
# Tests to make sure #3810 is fixed.
#
# $Id: tkt3810.test,v 1.1 2009/08/01 15:54:26 drh Exp $
# $Id: tkt3810.test,v 1.2 2009/08/01 16:27:00 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
# Create a table using the first database connection.
#
do_test tkt3810-1 {
do_test tkt3810-1.1 {
execsql {
CREATE TABLE t1(x);
INSERT INTO t1 VALUES(123);
@ -46,8 +46,10 @@ do_test tkt3810-3 {
CREATE TEMP TRIGGER r1 AFTER INSERT ON t1 BEGIN
INSERT INTO t1 VALUES(2345);
END;
SELECT * FROM t1;
}
} {}
catchsql {
SELECT * FROM t1;
}
} {1 {in r1: no such table: t1}}
finish_test