summaryrefslogtreecommitdiff
path: root/ext/sqlite/libsqlite/src/vdbe.c
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2003-06-06 22:44:57 +0000
committerWez Furlong <wez@php.net>2003-06-06 22:44:57 +0000
commit30fc9e152f6279df812bfc32da309c2c8397671d (patch)
treedec0b645f8a7faafc92ebffd4df9a7ce2e8b9446 /ext/sqlite/libsqlite/src/vdbe.c
parent6610183236b88cf1017fbd71b0561fac9cee9c8f (diff)
downloadphp-git-30fc9e152f6279df812bfc32da309c2c8397671d.tar.gz
Update bundled library to 2.8.3 + patches from sqlite author to enable
authorization checks for the ATTACH database command.
Diffstat (limited to 'ext/sqlite/libsqlite/src/vdbe.c')
-rw-r--r--ext/sqlite/libsqlite/src/vdbe.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/ext/sqlite/libsqlite/src/vdbe.c b/ext/sqlite/libsqlite/src/vdbe.c
index 3ac4a3acc8..28ba8cd22d 100644
--- a/ext/sqlite/libsqlite/src/vdbe.c
+++ b/ext/sqlite/libsqlite/src/vdbe.c
@@ -2287,7 +2287,7 @@ case OP_MustBeInt: {
/* Do nothing */
}else if( aStack[tos].flags & STK_Real ){
int i = aStack[tos].r;
- double r = i;
+ double r = (double)i;
if( r!=aStack[tos].r ){
goto mismatch;
}
@@ -3168,8 +3168,9 @@ case OP_IncrKey: {
*/
case OP_Checkpoint: {
int i = pOp->p1;
- if( i>=0 && i<db->nDb && db->aDb[i].pBt ){
+ if( i>=0 && i<db->nDb && db->aDb[i].pBt && db->aDb[i].inTrans==1 ){
rc = sqliteBtreeBeginCkpt(db->aDb[i].pBt);
+ if( rc==SQLITE_OK ) db->aDb[i].inTrans = 2;
}
break;
}
@@ -3382,6 +3383,11 @@ case OP_VerifyCookie: {
** Open a read/write cursor named P1 on the table or index whose root
** page is P2. If P2==0 then take the root page number from the stack.
**
+** The P3 value is the name of the table or index being opened.
+** The P3 value is not actually used by this opcode and may be
+** omitted. But the code generator usually inserts the index or
+** table name into P3 to make the code easier to read.
+**
** This instruction works just like OpenRead except that it opens the cursor
** in read/write mode. For a given table, there can be one or more read-only
** cursors or a single read/write cursor but not both.
@@ -3890,7 +3896,7 @@ case OP_NewRecno: {
/* Opcode: PutIntKey P1 P2 *
**
-** Write an entry into the database file P1. A new entry is
+** Write an entry into the table of cursor P1. A new entry is
** created if it doesn't already exist or the data for an existing
** entry is overwritten. The data is the value on the top of the
** stack. The key is the next value down on the stack. The key must
@@ -3902,7 +3908,7 @@ case OP_NewRecno: {
*/
/* Opcode: PutStrKey P1 * *
**
-** Write an entry into the database file P1. A new entry is
+** Write an entry into the table of cursor P1. A new entry is
** created if it doesn't already exist or the data for an existing
** entry is overwritten. The data is the value on the top of the
** stack. The key is the next value down on the stack. The key must
@@ -4384,13 +4390,13 @@ case OP_Next: {
/* Opcode: IdxPut P1 P2 P3
**
-** The top of the stack hold an SQL index key made using the
+** The top of the stack holds a SQL index key made using the
** MakeIdxKey instruction. This opcode writes that key into the
** index P1. Data for the entry is nil.
**
** If P2==1, then the key must be unique. If the key is not unique,
** the program aborts with a SQLITE_CONSTRAINT error and the database
-** is rolled back. If P3 is not null, then it because part of the
+** is rolled back. If P3 is not null, then it becomes part of the
** error message returned with the SQLITE_CONSTRAINT.
*/
case OP_IdxPut: {
@@ -4690,7 +4696,8 @@ case OP_ListWrite: {
/* Opcode: ListRewind * * *
**
-** Rewind the temporary buffer back to the beginning.
+** Rewind the temporary buffer back to the beginning. This is
+** now a no-op.
*/
case OP_ListRewind: {
/* This is now a no-op */
@@ -5820,8 +5827,9 @@ int sqliteVdbeFinalize(Vdbe *p, char **pzErrMsg){
sqliteRollbackInternalChanges(db);
}
for(i=0; i<db->nDb; i++){
- if( db->aDb[i].pBt ){
+ if( db->aDb[i].pBt && db->aDb[i].inTrans==2 ){
sqliteBtreeCommitCkpt(db->aDb[i].pBt);
+ db->aDb[i].inTrans = 1;
}
}
assert( p->tos<p->pc || sqlite_malloc_failed==1 );