-C If\sa\shot-journal\sfile\sis\sdetected\sbut\sthe\sapplication\sdoes\snot\shave\sthe\srequired\sread/write\spermissions,\sreturn\sSQLITE_CANTOPEN.\sPrior\sto\sthis\schange,\sSQLITE_BUSY\swas\sreturned.\sTicket\s#3457.\s(CVS\s5849)
-D 2008-10-29T07:01:57
+C Add\sthe\ssqlite3_extended_errcode()\sinterface.\s\sChange\sto\sreturn\nSQLITE_BUSY\sinstead\sof\sSQLITE_ERROR\swhen\sa\sCOMMIT\sis\sattempted\sand\sone\nor\smore\squeries\sare\sstill\spending.\s(CVS\s5850)
+D 2008-10-30T15:03:16
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in da817da72422f9b876602c225fcd17d6ca4182f7
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/journal.c cffd2cd214e58c0e99c3ff632b3bee6c7cbb260e
F src/legacy.c aac57bd984e666059011ea01ec4383892a253be3
F src/loadext.c 3872457afdf25bb174fd383cb4e3e0d2a9e60552
-F src/main.c ff40f9f21c76d5062bc0bc06bd8853fc217dd170
+F src/main.c df799b66bb11deac9d6de66ba7931700923094b4
F src/malloc.c a213fb461b8df08aed7606f6a1e1d3452e089000
F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c
F src/mem1.c 2091081d1c6bcd4516738f37cd84d42e814cf9a2
F src/resolve.c 266bb03d2b456fe68f5df2dd5687e7e88ff8088d
F src/select.c d910d7350df0d918e22286c5bfd39d4ea68ec813
F src/shell.c d83b578a8ccdd3e0e7fef4388a0887ce9f810967
-F src/sqlite.h.in ee95eeed2196e5fa98fdad007301b8d5d3733b6d
+F src/sqlite.h.in f74e769732013f96d1ea71e4fe9a489c76bed785
F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17
F src/sqliteInt.h 926279c94cdf21e53fc66badb8541d94aed25018
F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8
F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76
F src/table.c 22744786199c9195720c15a7a42cb97b2e2728d8
F src/tclsqlite.c 96049bd454f1547abff0a57c45f0dfa57701e076
-F src/test1.c a7310348961945e656c096e5f91d4d87dee6b61d
+F src/test1.c 9b440b38e1710e9be1512c003fa141e0e3948e05
F src/test2.c 897528183edf2839c2a3c991d415905db56f1240
F src/test3.c 88a246b56b824275300e6c899634fbac1dc94b14
F src/test4.c f79ab52d27ff49b784b631a42e2ccd52cfd5c84c
F src/utf.c c63e6f69082f85c19ab88d62dedaf91d71ac1a50
F src/util.c afe659ccc05d1f8af9e8631dabfec3ee3a7144af
F src/vacuum.c fd77433d0c26d3ff1eb96eab017a1787ac5aa642
-F src/vdbe.c be81532805ee6fc1fe7bd2e1c82cf4a09b7b3061
+F src/vdbe.c e3629776ef4a49f997b271fbd83e54b6104d5607
F src/vdbe.h 41c99aaad9167c1b5431993db446de74b2f71fc3
F src/vdbeInt.h a20f479ec3bf41c61b0c2bd5176a9bad6b2a07ef
F src/vdbeapi.c 6798c70cf176d23594ec557db88190ca8c7fa860
F test/busy.test 76b4887f8b9160ba903c1ac22e8ff406ad6ae2f0
F test/cache.test 3ff445c445742a7b6b9ba6e1d62a25263f9424b9
F test/capi2.test 36f87803c811b5986dd31eb5492cb704552776b4
-F test/capi3.test ffc1156d1f28738eb335df0b88dd294bb3c94c27
+F test/capi3.test 74089bd93dc5bbc9f80854b02a594aba0c730e9a
F test/capi3b.test 664eb55318132f292f2c436f90906f578cad6b97
-F test/capi3c.test 440ba10acccb74c0f160d7462a93abd1dc328224
+F test/capi3c.test db9310ac62766ab09b9282468f910ecd5b8014b8
F test/capi3d.test 57d83b690d7364bde02cddbf8339a4b50d80ce23
F test/cast.test ce8f14fc80f70b30ed984480cc0d8914a459e8f9
F test/check.test 024ed399600b799160378cf9d9f436bdf5dfd184
F test/misc4.test 91e8ed25c092c2bb4e0bb01864631e2930f8d7de
F test/misc5.test 6a5c1e3217a95b0db05ff9a0f1ecb5ce9043ffef
F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
-F test/misc7.test 0d763f703a34521e55ab30145b747aafa0e5f794
+F test/misc7.test edbbe77d48c7d70a60f8c33e2c7d182ca25f0181
F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33
F test/mutex1.test ff260ddaf7240390dbb013d28aba3a33ec0dada4
F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 4651f590f0b8bf13938b2b15d5082136e763af8d
-R e062a5dfa67b3ff54e219649b4e4fdb6
-U danielk1977
-Z d3e719d91fd94e74917b0fa45d10565a
+P dc5308c7629abe6a3bad21489c8e97087c264e5a
+R 5295e43b763246c263ebf9a171998453
+U drh
+Z 61bb1497945a9a8883e7532aff687652
-dc5308c7629abe6a3bad21489c8e97087c264e5a
\ No newline at end of file
+4c6a90a16627b1664bf7f15ab40b440b3bd60b48
\ No newline at end of file
** other files are for internal use by SQLite and should not be
** accessed by users of the library.
**
-** $Id: main.c,v 1.508 2008/10/12 00:27:53 shane Exp $
+** $Id: main.c,v 1.509 2008/10/30 15:03:16 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
}
return db->errCode & db->errMask;
}
+int sqlite3_extended_errcode(sqlite3 *db){
+ if( db && !sqlite3SafetyCheckSickOrOk(db) ){
+ return SQLITE_MISUSE;
+ }
+ if( !db || db->mallocFailed ){
+ return SQLITE_NOMEM;
+ }
+ return db->errCode;
+}
/*
** Create a new collating function for database "db". The name is zName
** the version number) and changes its name to "sqlite3.h" as
** part of the build process.
**
-** @(#) $Id: sqlite.h.in,v 1.405 2008/10/17 15:10:37 drh Exp $
+** @(#) $Id: sqlite.h.in,v 1.406 2008/10/30 15:03:16 drh Exp $
*/
#ifndef _SQLITE3_H_
#define _SQLITE3_H_
** *E to NULL if E is not NULL and there are no errors.
**
** {H12137} The [sqlite3_exec(D,S,C,A,E)] function shall set the [error code]
-** and message accessible via [sqlite3_errcode()],
+** and message accessible via [sqlite3_errcode()],
+** [sqlite3_extended_errcode()],
** [sqlite3_errmsg()], and [sqlite3_errmsg16()].
**
** {H12138} If the S parameter to [sqlite3_exec(D,S,C,A,E)] is NULL or an
** empty string or contains nothing other than whitespace, comments,
** and/or semicolons, then results of [sqlite3_errcode()],
+** [sqlite3_extended_errcode()],
** [sqlite3_errmsg()], and [sqlite3_errmsg16()]
** shall reset to indicate no errors.
**
** [extended result code] for the most recent failed sqlite3_* API call
** associated with a [database connection]. If a prior API call failed
** but the most recent API call succeeded, the return value from
-** sqlite3_errcode() is undefined.
+** sqlite3_errcode() is undefined. The sqlite3_extended_errcode()
+** interface is the same except that it always returns the
+** [extended result code] even when extended result codes are
+** disabled.
**
** The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
** text that describes the error, as either UTF-8 or UTF-16 respectively.
** [result code] or [extended result code] for the most recently
** failed interface call associated with the [database connection] D.
**
+** {H12802} The [sqlite3_extended_errcode(D)] interface returns the numeric
+** [extended result code] for the most recently
+** failed interface call associated with the [database connection] D.
+**
** {H12803} The [sqlite3_errmsg(D)] and [sqlite3_errmsg16(D)]
** interfaces return English-language text that describes
** the error in the mostly recently failed interface call,
** {H12808} Calls to API routines that do not return an error code
** (example: [sqlite3_data_count()]) do not
** change the error code or message returned by
-** [sqlite3_errcode()], [sqlite3_errmsg()], or [sqlite3_errmsg16()].
+** [sqlite3_errcode()], [sqlite3_extended_errcode()],
+** [sqlite3_errmsg()], or [sqlite3_errmsg16()].
**
** {H12809} Interfaces that are not associated with a specific
** [database connection] (examples:
** [sqlite3_mprintf()] or [sqlite3_enable_shared_cache()]
** do not change the values returned by
-** [sqlite3_errcode()], [sqlite3_errmsg()], or [sqlite3_errmsg16()].
+** [sqlite3_errcode()], [sqlite3_extended_errcode()],
+** [sqlite3_errmsg()], or [sqlite3_errmsg16()].
*/
int sqlite3_errcode(sqlite3 *db);
+int sqlite3_extended_errcode(sqlite3 *db);
const char *sqlite3_errmsg(sqlite3*);
const void *sqlite3_errmsg16(sqlite3*);
**
** {H17821} If an error occurs during evaluation of [sqlite3_blob_open(D,...)]
** then subsequent calls to [sqlite3_errcode(D)],
+** [sqlite3_extended_errcode()],
** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return
** information appropriate for that error.
**
**
** {H17868} If an error occurs during evaluation of [sqlite3_blob_read(P,...)]
** then subsequent calls to [sqlite3_errcode(D)],
+** [sqlite3_extended_errcode()],
** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return
** information appropriate for that error, where D is the
** [database connection] that was used to open the [BLOB handle] P.
**
** {H17888} If an error occurs during evaluation of [sqlite3_blob_write(D,...)]
** then subsequent calls to [sqlite3_errcode(D)],
+** [sqlite3_extended_errcode()],
** [sqlite3_errmsg(D)], and [sqlite3_errmsg16(D)] shall return
** information appropriate for that error.
*/
** is not included in the SQLite library. It is used for automated
** testing of the SQLite library.
**
-** $Id: test1.c,v 1.328 2008/10/12 00:27:54 shane Exp $
+** $Id: test1.c,v 1.329 2008/10/30 15:03:16 drh Exp $
*/
#include "sqliteInt.h"
#include "tcl.h"
const char *sqlite3TestErrorName(int rc){
const char *zName = 0;
- switch( rc & 0xff ){
- case SQLITE_OK: zName = "SQLITE_OK"; break;
- case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
- case SQLITE_PERM: zName = "SQLITE_PERM"; break;
- case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
- case SQLITE_BUSY: zName = "SQLITE_BUSY"; break;
- case SQLITE_LOCKED: zName = "SQLITE_LOCKED"; break;
- case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
- case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
- case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
- case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
- case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break;
- case SQLITE_FULL: zName = "SQLITE_FULL"; break;
- case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break;
- case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break;
- case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break;
- case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break;
- case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break;
- case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break;
- case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break;
- case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break;
- case SQLITE_AUTH: zName = "SQLITE_AUTH"; break;
- case SQLITE_FORMAT: zName = "SQLITE_FORMAT"; break;
- case SQLITE_RANGE: zName = "SQLITE_RANGE"; break;
- case SQLITE_ROW: zName = "SQLITE_ROW"; break;
- case SQLITE_DONE: zName = "SQLITE_DONE"; break;
- case SQLITE_NOTADB: zName = "SQLITE_NOTADB"; break;
- case SQLITE_TOOBIG: zName = "SQLITE_TOOBIG"; break;
- default: zName = "SQLITE_Unknown"; break;
+ switch( rc ){
+ case SQLITE_OK: zName = "SQLITE_OK"; break;
+ case SQLITE_ERROR: zName = "SQLITE_ERROR"; break;
+ case SQLITE_INTERNAL: zName = "SQLITE_INTERNAL"; break;
+ case SQLITE_PERM: zName = "SQLITE_PERM"; break;
+ case SQLITE_ABORT: zName = "SQLITE_ABORT"; break;
+ case SQLITE_BUSY: zName = "SQLITE_BUSY"; break;
+ case SQLITE_LOCKED: zName = "SQLITE_LOCKED"; break;
+ case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break;
+ case SQLITE_READONLY: zName = "SQLITE_READONLY"; break;
+ case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break;
+ case SQLITE_IOERR: zName = "SQLITE_IOERR"; break;
+ case SQLITE_CORRUPT: zName = "SQLITE_CORRUPT"; break;
+ case SQLITE_NOTFOUND: zName = "SQLITE_NOTFOUND"; break;
+ case SQLITE_FULL: zName = "SQLITE_FULL"; break;
+ case SQLITE_CANTOPEN: zName = "SQLITE_CANTOPEN"; break;
+ case SQLITE_PROTOCOL: zName = "SQLITE_PROTOCOL"; break;
+ case SQLITE_EMPTY: zName = "SQLITE_EMPTY"; break;
+ case SQLITE_SCHEMA: zName = "SQLITE_SCHEMA"; break;
+ case SQLITE_TOOBIG: zName = "SQLITE_TOOBIG"; break;
+ case SQLITE_CONSTRAINT: zName = "SQLITE_CONSTRAINT"; break;
+ case SQLITE_MISMATCH: zName = "SQLITE_MISMATCH"; break;
+ case SQLITE_MISUSE: zName = "SQLITE_MISUSE"; break;
+ case SQLITE_NOLFS: zName = "SQLITE_NOLFS"; break;
+ case SQLITE_AUTH: zName = "SQLITE_AUTH"; break;
+ case SQLITE_FORMAT: zName = "SQLITE_FORMAT"; break;
+ case SQLITE_RANGE: zName = "SQLITE_RANGE"; break;
+ case SQLITE_NOTADB: zName = "SQLITE_NOTADB"; break;
+ case SQLITE_ROW: zName = "SQLITE_ROW"; break;
+ case SQLITE_DONE: zName = "SQLITE_DONE"; break;
+ case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break;
+ case SQLITE_IOERR_SHORT_READ: zName = "SQLITE_IOERR_SHORT_READ"; break;
+ case SQLITE_IOERR_WRITE: zName = "SQLITE_IOERR_WRITE"; break;
+ case SQLITE_IOERR_FSYNC: zName = "SQLITE_IOERR_FSYNC"; break;
+ case SQLITE_IOERR_DIR_FSYNC: zName = "SQLITE_IOERR_DIR_FSYNC"; break;
+ case SQLITE_IOERR_TRUNCATE: zName = "SQLITE_IOERR_TRUNCATE"; break;
+ case SQLITE_IOERR_FSTAT: zName = "SQLITE_IOERR_FSTAT"; break;
+ case SQLITE_IOERR_UNLOCK: zName = "SQLITE_IOERR_UNLOCK"; break;
+ case SQLITE_IOERR_RDLOCK: zName = "SQLITE_IOERR_RDLOCK"; break;
+ case SQLITE_IOERR_DELETE: zName = "SQLITE_IOERR_DELETE"; break;
+ case SQLITE_IOERR_BLOCKED: zName = "SQLITE_IOERR_BLOCKED"; break;
+ case SQLITE_IOERR_NOMEM: zName = "SQLITE_IOERR_NOMEM"; break;
+ case SQLITE_IOERR_ACCESS: zName = "SQLITE_IOERR_ACCESS"; break;
+ case SQLITE_IOERR_CHECKRESERVEDLOCK:
+ zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break;
+ case SQLITE_IOERR_LOCK: zName = "SQLITE_IOERR_LOCK"; break;
+ default: zName = "SQLITE_Unknown"; break;
}
return zName;
}
return TCL_OK;
}
+/*
+** Usage: sqlite3_extended_errcode DB
+**
+** Return the string representation of the most recent sqlite3_* API
+** error code. e.g. "SQLITE_ERROR".
+*/
+static int test_ex_errcode(
+ void * clientData,
+ Tcl_Interp *interp,
+ int objc,
+ Tcl_Obj *CONST objv[]
+){
+ sqlite3 *db;
+ int rc;
+
+ if( objc!=2 ){
+ Tcl_AppendResult(interp, "wrong # args: should be \"",
+ Tcl_GetString(objv[0]), " DB", 0);
+ return TCL_ERROR;
+ }
+ if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
+ rc = sqlite3_extended_errcode(db);
+ Tcl_AppendResult(interp, (char *)t1ErrorName(rc), 0);
+ return TCL_OK;
+}
+
+
/*
** Usage: sqlite3_errcode DB
**
){
sqlite3 *db;
int rc;
- char zBuf[30];
if( objc!=2 ){
Tcl_AppendResult(interp, "wrong # args: should be \"",
}
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR;
rc = sqlite3_errcode(db);
- if( (rc&0xff)==rc ){
- zBuf[0] = 0;
- }else{
- sprintf(zBuf,"+%d", rc>>8);
- }
- Tcl_AppendResult(interp, (char *)t1ErrorName(rc), zBuf, 0);
+ Tcl_AppendResult(interp, (char *)t1ErrorName(rc), 0);
return TCL_OK;
}
{ "sqlite3_clear_bindings", test_clear_bindings, 0},
{ "sqlite3_sleep", test_sleep, 0},
{ "sqlite3_errcode", test_errcode ,0 },
+ { "sqlite3_extended_errcode", test_ex_errcode ,0 },
{ "sqlite3_errmsg", test_errmsg ,0 },
{ "sqlite3_errmsg16", test_errmsg16 ,0 },
{ "sqlite3_open", test_open ,0 },
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
-** $Id: vdbe.c,v 1.783 2008/10/27 13:59:34 danielk1977 Exp $
+** $Id: vdbe.c,v 1.784 2008/10/30 15:03:16 drh Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
sqlite3SetString(&p->zErrMsg, db, "cannot %s transaction - "
"SQL statements in progress",
rollback ? "rollback" : "commit");
- rc = SQLITE_ERROR;
+ rc = SQLITE_BUSY;
}else if( i!=db->autoCommit ){
if( pOp->p2 ){
assert( i==1 );
# This file implements regression tests for SQLite library. The
# focus of this script testing the callback-free C/C++ API.
#
-# $Id: capi3.test,v 1.67 2008/07/12 15:55:55 danielk1977 Exp $
+# $Id: capi3.test,v 1.68 2008/10/30 15:03:16 drh Exp $
#
set testdir [file dirname $argv0]
sqlite3_finalize $STMT
set TAIL
} {}
-do_test capi3-1.2 {
+do_test capi3-1.2.1 {
sqlite3_errcode $DB
} {SQLITE_OK}
+do_test capi3-1.2.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_OK}
do_test capi3-1.3 {
sqlite3_errmsg $DB
} {not an error}
set STMT [sqlite3_prepare $DB $sql -1 TAIL]
}
} {1}
-do_test capi3-1.8 {
+do_test capi3-1.8.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+do_test capi3-1.8.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_ERROR}
do_test capi3-1.9 {
sqlite3_errmsg $DB
} {no such column: namex}
set STMT [sqlite3_prepare16 $DB $sql -1 TAIL]
}
} {1}
- do_test capi3-2.4 {
+ do_test capi3-2.4.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+ do_test capi3-2.4.2 {
+ sqlite3_extended_errcode $DB
+ } {SQLITE_ERROR}
do_test capi3-2.5 {
sqlite3_errmsg $DB
} {no such column: namex}
catch {
set db2 [sqlite3_open /bogus/path/test.db {}]
}
- sqlite3_errcode $db2
+ sqlite3_extended_errcode $db2
} {SQLITE_CANTOPEN}
do_test capi3-3.4 {
sqlite3_errmsg $db2
set STMT [sqlite3_prepare $DB "SELECT func(b, a) FROM t1" -1 TAIL]
sqlite3_step $STMT
} {SQLITE_ROW}
-do_test capi3-11.3 {
+do_test capi3-11.3.1 {
catchsql {
COMMIT;
}
} {1 {cannot commit transaction - SQL statements in progress}}
-do_test capi3-11.3.1 {
+do_test capi3-11.3.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_BUSY}
+do_test capi3-11.3.3 {
sqlite3_get_autocommit $DB
} 0
do_test capi3-11.4 {
# This is a copy of the capi3.test file that has been adapted to
# test the new sqlite3_prepare_v2 interface.
#
-# $Id: capi3c.test,v 1.20 2008/10/12 00:27:54 shane Exp $
+# $Id: capi3c.test,v 1.21 2008/10/30 15:03:16 drh Exp $
#
set testdir [file dirname $argv0]
sqlite3_finalize $STMT
set TAIL
} {}
-do_test capi3c-1.2 {
+do_test capi3c-1.2.1 {
sqlite3_errcode $DB
} {SQLITE_OK}
+do_test capi3c-1.2.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_OK}
do_test capi3c-1.3 {
sqlite3_errmsg $DB
} {not an error}
set STMT [sqlite3_prepare_v2 $DB $sql -1 TAIL]
}
} {1}
-do_test capi3c-1.6 {
+do_test capi3c-1.6.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+do_test capi3c-1.6.2 {
+ sqlite3_extended_errcode $DB
+} {SQLITE_ERROR}
do_test capi3c-1.7 {
sqlite3_errmsg $DB
} {no such column: namex}
set STMT [sqlite3_prepare16_v2 $DB $sql -1 TAIL]
}
} {1}
- do_test capi3c-2.4 {
+ do_test capi3c-2.4.1 {
sqlite3_errcode $DB
} {SQLITE_ERROR}
+ do_test capi3c-2.4.2 {
+ sqlite3_extended_errcode $DB
+ } {SQLITE_ERROR}
do_test capi3c-2.5 {
sqlite3_errmsg $DB
} {no such column: namex}
sqlite3_step $STMT
} {SQLITE_INTERRUPT}
do_test capi3c-21.2 {
- sqlite3_errcode $DB
+ sqlite3_extended_errcode $DB
} {SQLITE_INTERRUPT}
do_test capi3c-21.3 {
sqlite3_finalize $STMT
do_test capi3c-21.7 {
sqlite3_errcode $DB
} {SQLITE_INTERRUPT}
+ do_test capi3c-21.8 {
+ sqlite3_extended_errcode $DB
+ } {SQLITE_INTERRUPT}
}
# Make sure sqlite3_result_error_code() returns the correct error code.
#***********************************************************************
# This file implements regression tests for SQLite library.
#
-# $Id: misc7.test,v 1.24 2008/08/22 13:57:39 pweilbacher Exp $
+# $Id: misc7.test,v 1.25 2008/10/30 15:03:16 drh Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
catchsql {
SELECT count(*) FROM t3;
}
- } {1 {database is locked}}
+ } {1 {unable to open database file}}
do_test misc7-17.2 {
# Note that the -readonly flag must be cleared before the -permissions
# are set. Otherwise, when using tcl 8.5 on mac, the fact that the