-C Move\sthe\stest\s(sqlite3_simulate_device)\sfunctionality\sout\sof\sthe\smain\scode\sand\sinto\sa\stest\svfs.\s(CVS\s4737)
-D 2008-01-22T11:50:13
+C Remove\sdead\scode\sfrom\sthe\slemon-generated\sparser.\s\sBetter\stesting\nof\sthe\ssqlite3_file_control()\sinterface,\sand\sin\sparticular\smake\ssure\nthe\sinterface\sworks\son\s:memory:\sdatabases.\s(CVS\s4738)
+D 2008-01-22T14:50:17
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
F Makefile.in 936bcacced594b24b8fdcfc0fc0efc00e15de8a8
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/btree.c a3125bd53a4112f2f259af858ef2eff63e397c9b
F src/btree.h 19dcf5ad23c17b98855da548e9a8e3eb4429d5eb
F src/btreeInt.h 1c5a9da165718ef7de81e35ce9ab5d9ba9283f76
-F src/build.c b228a333d7de41e80c1f7cd442483e59e97543e1
+F src/build.c a073dde21738ea3a79d953975173a1a0d86912a3
F src/callback.c 77b302b0d41468dcda78c70e706e5b84577f0fa0
F src/complete.c 4cf68fd75d60257524cbe74f87351b9848399131
F src/date.c 8ce763c68143b1e8fb6f79dcfc8b801853c97017
F src/legacy.c 4ac53191fad2e3c4d59bde1228879b2dc5a96d66
F src/limits.h 71ab25f17e35e0a9f3f6f234b8ed49cc56731d35
F src/loadext.c d17a0f760d6866aacf5262f97d8efaaad379cdd7
-F src/main.c 05bba9097e39b14ad03c345baaef3a47b4588cbf
+F src/main.c f17abe4d28c442749ec892fc466d7e5727af04f2
F src/malloc.c 60e392a4c12c839517f9b0db7b995f825444fb35
F src/md5.c c5fdfa5c2593eaee2e32a5ce6c6927c986eaf217
F src/mem1.c 6d1a11864963d249c67e72ad5f6533b040333880
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
F src/pager.c fae75270b4e2b2542b905791087f0c52142974f8
F src/pager.h f504f7ae84060fee0416a853e368d3d113c3d6fa
-F src/parse.y 0a0878dd99b12056799802a97b6a529f4b37c15f
+F src/parse.y bcc6092d2577f4b525e09928b3ed164965e35c54
F src/pragma.c 2bb8d6882b9a330e041acd05fb6aff5a01bf0a08
F src/prepare.c 505afbfebcca809f655e04725832bfbfdf1ce697
F src/printf.c eb27822ba2eec669161409ca31279a24c26ac910
F src/sqliteLimit.h ee4430f88f69bf63527967bb35ca52af7b0ccb1e
F src/table.c 1aeb9eab57b4235db86fe15a35dec76fb445a9c4
F src/tclsqlite.c 9923abeffc9b3d7dad58e92b319661521f60debf
-F src/test1.c 157f46f5945840dd89b959b8e72cc3410a075ed9
+F src/test1.c 7e620caf76fe1c9d78e2c062c90f387caab2b40d
F src/test2.c 77b34303883b9d722c65a6879bb0163a400e3789
F src/test3.c 6b49ddb0946907a07210998810807ace51be00a5
F src/test4.c c2c0f5dc907f1346f5d4b65eb5799f11eb9e4071
F src/trigger.c 9bd3b6fa0beff4a02d262c96466f752ec15a7fc3
F src/update.c 31edd9c9764e80753930bd5f9b43e0edb404636f
F src/utf.c ef4b7d83bae533b76c3e1bf635b113fdad86a736
-F src/util.c deda8c5a400530e1c27c03619cc4cd1a06fc5281
+F src/util.c ca0e3820ce9b0e0ff9bf21f4b726a81163d7b417
F src/vacuum.c 3f34f278809bf3eb0b62ec46ff779e9c385b28f0
F src/vdbe.c e7ec3089f1e2ee5ab47b66d2be940f4e8b0029a7
F src/vdbe.h 58a7d931ffb704e034b2a725981cfa5bd406fad9
F test/exclusive3.test 0e49c35b7e7cb8e7280b4ce3f0359d30b207d2ff
F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
F test/expr.test 5c606f12045dd640ede7f840270340baf5ef1450
+F test/filectrl.test 524853082d5d7fb442599730ec3a0f3f84a3a936
F test/filefmt.test 053b622009fbbb74dd37921ffad374d852c13cd8
F test/fkey1.test dcb4f28eb22d5141f15161d6bdca9a4f58c95729
F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
F tool/fragck.tcl 5265a95126abcf6ab357f7efa544787e5963f439
F tool/lemon.c 5d1731de7eb31238e42ff424c0c78efb4a7be635
-F tool/lempar.c 71f92c138d8288f1a36b438ad39d94cc6835afb7
+F tool/lempar.c feab108e39e9bd65e3cadb18e5c1d6e857075b28
F tool/memleak.awk 4e7690a51bf3ed757e611273d43fe3f65b510133
F tool/memleak2.awk 9cc20c8e8f3c675efac71ea0721ee6874a1566e8
F tool/memleak3.tcl 7707006ee908cffff210c98158788d85bb3fcdbf
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
-P 2a0bc1e186532a0bfe36ca18fda74a5e7a199227
-R 8aeac68813d7cfbc6958a810d0c1e1d8
-U danielk1977
-Z 298f0f8d954eedc2b3f36fd2e741cf3e
+P 17e7bd6c3f507ffc6b56f54ae8c70730e8246f39
+R 14b9fd5f5ecc09fd70e45747e2da0096
+U drh
+Z fed5347d72dd07a023e0d7f58e92c261
-17e7bd6c3f507ffc6b56f54ae8c70730e8246f39
\ No newline at end of file
+83ca4fc7dc18d6deca58fe4181905eb9754e03da
\ No newline at end of file
** COMMIT
** ROLLBACK
**
-** $Id: build.c,v 1.469 2008/01/22 01:48:06 drh Exp $
+** $Id: build.c,v 1.470 2008/01/22 14:50:17 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
** other files are for internal use by SQLite and should not be
** accessed by users of the library.
**
-** $Id: main.c,v 1.410 2008/01/20 23:19:57 drh Exp $
+** $Id: main.c,v 1.411 2008/01/22 14:50:17 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
Btree *pBtree = db->aDb[iDb].pBt;
if( pBtree ){
Pager *pPager;
+ sqlite3_file *fd;
sqlite3BtreeEnter(pBtree);
pPager = sqlite3BtreePager(pBtree);
- if( pPager ){
- sqlite3_file *fd = sqlite3PagerFile(pPager);
- if( fd ){
- rc = sqlite3OsFileControl(fd, op, pArg);
- }
+ assert( pPager!=0 );
+ fd = sqlite3PagerFile(pPager);
+ assert( fd!=0 );
+ if( fd->pMethods ){
+ rc = sqlite3OsFileControl(fd, op, pArg);
}
sqlite3BtreeLeave(pBtree);
}
** the parser. Lemon will also generate a header file containing
** numeric codes for all of the tokens.
**
-** @(#) $Id: parse.y,v 1.238 2008/01/22 01:48:06 drh Exp $
+** @(#) $Id: parse.y,v 1.239 2008/01/22 14:50:17 drh Exp $
*/
// All token codes are small integers with #defines that begin with "TK_"
//
%syntax_error {
if( !pParse->parseError ){
- if( TOKEN.z[0] ){
- sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
- }else{
- sqlite3ErrorMsg(pParse, "incomplete SQL statement");
- }
+ assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */
+ sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
pParse->parseError = 1;
}
}
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test1.c,v 1.284 2008/01/19 23:50:26 drh Exp $
+** $Id: test1.c,v 1.285 2008/01/22 14:50:17 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
return TCL_OK;
}
+/*
+** tclcmd: file_control_test DB
+**
+** This TCL command runs the sqlite3_file_control interface and
+** verifies correct operation of the same.
+*/
+static int file_control_test(
+ ClientData clientData, /* Pointer to sqlite3_enable_XXX function */
+ Tcl_Interp *interp, /* The TCL interpreter that invoked this command */
+ int objc, /* Number of arguments */
+ Tcl_Obj *CONST objv[] /* Command arguments */
+){
+ int iArg = 0;
+ sqlite3 *db;
+ int rc;
+
+ if( objc!=2 ){
+ Tcl_AppendResult(interp, "wrong # args: should be \"",
+ Tcl_GetStringFromObj(objv[0], 0), " DB", 0);
+ return TCL_ERROR;
+ }
+ if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
+ rc = sqlite3_file_control(db, 0, 0, &iArg);
+ assert( rc==SQLITE_ERROR );
+ rc = sqlite3_file_control(db, "notadatabase", SQLITE_FCNTL_LOCKSTATE, &iArg);
+ assert( rc==SQLITE_ERROR );
+ rc = sqlite3_file_control(db, "main", -1, &iArg);
+ assert( rc==SQLITE_ERROR );
+ rc = sqlite3_file_control(db, "temp", -1, &iArg);
+ assert( rc==SQLITE_ERROR );
+ return TCL_OK;
+}
+
/*
** tclcmd: save_prng_state
*/
{ "sqlite3_global_recover", test_global_recover, 0 },
{ "working_64bit_int", working_64bit_int, 0 },
{ "vfs_unlink_test", vfs_unlink_test, 0 },
+ { "file_control_test", file_control_test, 0 },
/* Functions from os.h */
#ifndef SQLITE_OMIT_DISKIO
** This file contains functions for allocating memory, comparing
** strings, and stuff like that.
**
-** $Id: util.c,v 1.214 2008/01/18 14:08:25 drh Exp $
+** $Id: util.c,v 1.215 2008/01/22 14:50:17 drh Exp $
*/
#include "sqliteInt.h"
#include <stdarg.h>
return 1;
}
-/*
-** Check to make sure we have a valid db pointer. This test is not
-** foolproof but it does provide some measure of protection against
-** misuse of the interface such as passing in db pointers that are
-** NULL or which have been previously closed. If this routine returns
-** TRUE it means that the db pointer is invalid and should not be
-** dereferenced for any reason. The calling function should invoke
-** SQLITE_MISUSE immediately.
-*/
-int sqlite3SafetyCheck(sqlite3 *db){
- int magic;
- if( db==0 ) return 1;
- magic = db->magic;
- if( magic!=SQLITE_MAGIC_CLOSED &&
- magic!=SQLITE_MAGIC_OPEN &&
- magic!=SQLITE_MAGIC_BUSY ) return 1;
- return 0;
-}
-
/*
** The variable-length integer encoding is as follows:
**
return 1;
}
}
+
+/*
+** Check to make sure we have a valid db pointer. This test is not
+** foolproof but it does provide some measure of protection against
+** misuse of the interface such as passing in db pointers that are
+** NULL or which have been previously closed. If this routine returns
+** TRUE it means that the db pointer is invalid and should not be
+** dereferenced for any reason. The calling function should invoke
+** SQLITE_MISUSE immediately.
+*/
+int sqlite3SafetyCheck(sqlite3 *db){
+ int magic;
+ if( db==0 ) return 1;
+ magic = db->magic;
+ if( magic!=SQLITE_MAGIC_CLOSED &&
+ magic!=SQLITE_MAGIC_OPEN &&
+ magic!=SQLITE_MAGIC_BUSY ) return 1;
+ return 0;
+}
--- /dev/null
+# 2008 Jan 22
+#
+# The author disclaims copyright to this source code. In place of
+# a legal notice, here is a blessing:
+#
+# May you do good and not evil.
+# May you find forgiveness for yourself and forgive others.
+# May you share freely, never taking more than you give.
+#
+#***********************************************************************
+#
+# $Id: filectrl.test,v 1.1 2008/01/22 14:50:17 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+
+do_test filectrl-1.1 {
+ file_control_test db
+} {}
+do_test filectrl-1.2 {
+ db eval {CREATE TEMP TABLE x(y);}
+ file_control_test db
+} {}
+do_test filectrl-1.3 {
+ db close
+ sqlite3 db :memory:
+ file_control_test db
+} {}
+
+finish_test
do{
yyact = yy_find_shift_action(yypParser,yymajor);
if( yyact<YYNSTATE ){
+ assert( !yyendofinput ); /* Impossible to shift the $ token */
yy_shift(yypParser,yyact,yymajor,&yyminorunion);
yypParser->yyerrcnt--;
- if( yyendofinput && yypParser->yyidx>=0 ){
- yymajor = 0;
- }else{
- yymajor = YYNOCODE;
- }
+ yymajor = YYNOCODE;
}else if( yyact < YYNSTATE + YYNRULE ){
yy_reduce(yypParser,yyact-YYNSTATE);
}else{