From 35ccb3d3bc17cd56ef08db977e6909c3265cbab7 Mon Sep 17 00:00:00 2001 From: drh Date: Sat, 1 Aug 2009 16:27:00 +0000 Subject: [PATCH] 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 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/prepare.c | 15 ++++++++++----- test/tkt3810.test | 10 ++++++---- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/manifest b/manifest index 9a09836250..d4b7e9ffe5 100644 --- a/manifest +++ b/manifest @@ -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 diff --git a/manifest.uuid b/manifest.uuid index 660049935e..934cd8613e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -29972f7445cede64d99c2433742572120c92b393 \ No newline at end of file +102785b9fbc5ab5dd740110243f080e3f3661e87 \ No newline at end of file diff --git a/src/prepare.c b/src/prepare.c index 55208ea1b9..afb6a7644a 100644 --- a/src/prepare.c +++ b/src/prepare.c @@ -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; diff --git a/test/tkt3810.test b/test/tkt3810.test index 2375ac9e0a..06594e82f4 100644 --- a/test/tkt3810.test +++ b/test/tkt3810.test @@ -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