Fix the VACUUM command so that it does not modify the changes counts
reported by sqlite3_changes() or sqlite3_total_changes(). Update documentation on sqlite3_changes() and sqlite3_total_changes() to state that "DELETE FROM table" records a change count of zero. (CVS 5151) FossilOrigin-Name: f5d61d7d982b58accaf33df4362ce4a5eb79307e
This commit is contained in:
parent
8407f0eb3e
commit
e63b2c215e
16
manifest
16
manifest
@ -1,5 +1,5 @@
|
||||
C Fix\sOS/2\scompilation\sfor\spre-C99\scompilers.\s(CVS\s5150)
|
||||
D 2008-05-20T19:08:54
|
||||
C Fix\sthe\sVACUUM\scommand\sso\sthat\sit\sdoes\snot\smodify\sthe\schanges\scounts\nreported\sby\ssqlite3_changes()\sor\ssqlite3_total_changes().\s\sUpdate\sdocumentation\non\ssqlite3_changes()\sand\ssqlite3_total_changes()\sto\sstate\sthat\n"DELETE\sFROM\stable"\srecords\sa\schange\scount\sof\szero.\s(CVS\s5151)
|
||||
D 2008-05-21T13:44:14
|
||||
F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7
|
||||
F Makefile.in 79aeba12300a54903f1b1257c1e7c190234045dd
|
||||
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
|
||||
@ -130,7 +130,7 @@ F src/printf.c f2d4f6c5b0ec24b643e85fe60258adad8b1f6acc
|
||||
F src/random.c 2b2db2de4ab491f5a14d3480466f8f4b5a5db74a
|
||||
F src/select.c da43ce3080112aa77863e9c570c1df19a892acb8
|
||||
F src/shell.c a12ea645271b7876c8f080146f48e20b00d367ec
|
||||
F src/sqlite.h.in b953ce955c65c07a024212ff76863a5f98c33c79
|
||||
F src/sqlite.h.in 96b68b840683341d0a312bb7211570335842d271
|
||||
F src/sqlite3ext.h faacd0e6a81aabee0861c6d7883c9172e74ef5b3
|
||||
F src/sqliteInt.h 70a2b0bf856bbdb86b10d994ea863f6591ab7144
|
||||
F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8
|
||||
@ -166,7 +166,7 @@ F src/trigger.c 1e751f8d5ceeb328d26bf1ccfb2de50653670d49
|
||||
F src/update.c 2d7143b9014e955509cc4f323f9a9584fb898f34
|
||||
F src/utf.c 8c94fa10efc78c2568d08d436acc59df4df7191b
|
||||
F src/util.c 43277088f8fea4109a640aa46731b8752c3fb4a7
|
||||
F src/vacuum.c c3b2b70677f874102b8753bf494c232e777f3998
|
||||
F src/vacuum.c a5c289e561ed72283e97d2485491986bc7d684eb
|
||||
F src/vdbe.c 25a362a4fdd5ff2797db0e20a9cf4300e053891e
|
||||
F src/vdbe.h f4bb70962d9c13e0f65b215c90e8acea1ae6e8ee
|
||||
F src/vdbeInt.h ede1a31cfa74d4718f41da491bd1d2b3abc137fc
|
||||
@ -636,7 +636,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130
|
||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||
F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
|
||||
F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5
|
||||
P 894085a59cdc60c34c8a3eb560d98bcb4a087cb1
|
||||
R 9cd012b9b6638413801262c433fecb94
|
||||
U pweilbacher
|
||||
Z d561cc78f2b3ec86435123f580dbcd83
|
||||
P de8e67182d8f9d1f0b215da93a396b9467604a50
|
||||
R 5e43d7445a41e487e91a32f3f92251f9
|
||||
U drh
|
||||
Z f00defe86398257c2a438618ab5ea19b
|
||||
|
@ -1 +1 @@
|
||||
de8e67182d8f9d1f0b215da93a396b9467604a50
|
||||
f5d61d7d982b58accaf33df4362ce4a5eb79307e
|
@ -30,7 +30,7 @@
|
||||
** the version number) and changes its name to "sqlite3.h" as
|
||||
** part of the build process.
|
||||
**
|
||||
** @(#) $Id: sqlite.h.in,v 1.315 2008/05/20 18:43:38 drh Exp $
|
||||
** @(#) $Id: sqlite.h.in,v 1.316 2008/05/21 13:44:14 drh Exp $
|
||||
*/
|
||||
#ifndef _SQLITE3_H_
|
||||
#define _SQLITE3_H_
|
||||
@ -969,12 +969,17 @@ sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
|
||||
**
|
||||
** INVARIANTS:
|
||||
**
|
||||
** {F12241} The [sqlite3_changes()] function returns the number of
|
||||
** {F12241} The [sqlite3_changes()] function shall return the number of
|
||||
** row changes caused by the most recent INSERT, UPDATE,
|
||||
** or DELETE statement on the same database connection and
|
||||
** within the same trigger context, or zero if there have
|
||||
** within the same or higher trigger context, or zero if there have
|
||||
** not been any qualifying row changes.
|
||||
**
|
||||
** {F12243} Statements of the form "DELETE FROM tablename" with no
|
||||
** WHERE clause shall cause subsequent calls to
|
||||
** [sqlite3_changes()] to return zero, regardless of the
|
||||
** number of rows originally in the table.
|
||||
**
|
||||
** LIMITATIONS:
|
||||
**
|
||||
** {U12252} If a separate thread makes changes on the same database connection
|
||||
@ -1016,6 +1021,10 @@ int sqlite3_changes(sqlite3*);
|
||||
** trigger context, since the database connection was
|
||||
** created.
|
||||
**
|
||||
** {F12263} Statements of the form "DELETE FROM tablename" with no
|
||||
** WHERE clause shall not change the value returned
|
||||
** by [sqlite3_total_changes()]
|
||||
**
|
||||
** LIMITATIONS:
|
||||
**
|
||||
** {U12264} If a separate thread makes changes on the same database connection
|
||||
|
@ -14,7 +14,7 @@
|
||||
** Most of the code in this file may be omitted by defining the
|
||||
** SQLITE_OMIT_VACUUM macro.
|
||||
**
|
||||
** $Id: vacuum.c,v 1.78 2008/04/30 16:38:23 drh Exp $
|
||||
** $Id: vacuum.c,v 1.79 2008/05/21 13:44:14 drh Exp $
|
||||
*/
|
||||
#include "sqliteInt.h"
|
||||
#include "vdbeInt.h"
|
||||
@ -84,11 +84,15 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
|
||||
Btree *pTemp; /* The temporary database we vacuum into */
|
||||
char *zSql = 0; /* SQL statements */
|
||||
int saved_flags; /* Saved value of the db->flags */
|
||||
int saved_nChange; /* Saved value of db->nChange */
|
||||
int saved_nTotalChange; /* Saved value of db->nTotalChange */
|
||||
Db *pDb = 0; /* Database to detach at end of vacuum */
|
||||
int nRes;
|
||||
|
||||
/* Save the current value of the write-schema flag before setting it. */
|
||||
saved_flags = db->flags;
|
||||
saved_nChange = db->nChange;
|
||||
saved_nTotalChange = db->nTotalChange;
|
||||
db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks;
|
||||
|
||||
if( !db->autoCommit ){
|
||||
@ -253,6 +257,8 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
|
||||
end_of_vacuum:
|
||||
/* Restore the original value of db->flags */
|
||||
db->flags = saved_flags;
|
||||
db->nChange = saved_nChange;
|
||||
db->nTotalChange = saved_nTotalChange;
|
||||
|
||||
/* Currently there is an SQL level transaction open on the vacuum
|
||||
** database. No locks are held on any other files (since the main file
|
||||
|
Loading…
x
Reference in New Issue
Block a user