aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordanielk1977 <danielk1977@noemail.net>2008-12-30 06:24:58 +0000
committerdanielk1977 <danielk1977@noemail.net>2008-12-30 06:24:58 +0000
commitab9b703fdef545ad3392b4743e173197eb358468 (patch)
treebc9e022f787eb21c424be43fc55a08676732fee2 /src
parent954701a0548298577d7f43024be7e5b285c9f494 (diff)
downloadsqlite-ab9b703fdef545ad3392b4743e173197eb358468.tar.gz
sqlite-ab9b703fdef545ad3392b4743e173197eb358468.zip
Invoke the authorization callback when compiling SAVEPOINT, ROLLBACK TO and RELEASE commands. (CVS 6074)
FossilOrigin-Name: e49807b16f7f86d3f2290d6c1f7562f3db6330f9
Diffstat (limited to 'src')
-rw-r--r--src/build.c23
-rw-r--r--src/sqlite.h.in5
-rw-r--r--src/tclsqlite.c3
3 files changed, 18 insertions, 13 deletions
diff --git a/src/build.c b/src/build.c
index 25aff4fe3..c61fbb340 100644
--- a/src/build.c
+++ b/src/build.c
@@ -22,7 +22,7 @@
** COMMIT
** ROLLBACK
**
-** $Id: build.c,v 1.510 2008/12/23 11:11:51 danielk1977 Exp $
+** $Id: build.c,v 1.511 2008/12/30 06:24:58 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
@@ -3316,15 +3316,18 @@ void sqlite3RollbackTransaction(Parse *pParse){
** release or rollback an SQL savepoint.
*/
void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
- Vdbe *v;
- if( pParse->nErr || pParse->db->mallocFailed ) return;
-
- /* TODO: Invoke the authorization callback */
-
- v = sqlite3GetVdbe(pParse);
- if( v ){
- const char *zName = (const char *)pName->z;
- sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, pName->n);
+ char *zName = sqlite3NameFromToken(pParse->db, pName);
+ if( zName ){
+ Vdbe *v = sqlite3GetVdbe(pParse);
+#ifndef SQLITE_OMIT_AUTHORIZATION
+ static const char *az[] = { "BEGIN", "RELEASE", "ROLLBACK" };
+ assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 );
+#endif
+ if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){
+ sqlite3DbFree(pParse->db, zName);
+ return;
+ }
+ sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC);
}
}
diff --git a/src/sqlite.h.in b/src/sqlite.h.in
index 9970d7b1b..e0a9eb132 100644
--- a/src/sqlite.h.in
+++ b/src/sqlite.h.in
@@ -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.420 2008/12/16 13:46:30 drh Exp $
+** @(#) $Id: sqlite.h.in,v 1.421 2008/12/30 06:24:58 danielk1977 Exp $
*/
#ifndef _SQLITE3_H_
#define _SQLITE3_H_
@@ -2397,7 +2397,7 @@ int sqlite3_set_authorizer(
#define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
#define SQLITE_READ 20 /* Table Name Column Name */
#define SQLITE_SELECT 21 /* NULL NULL */
-#define SQLITE_TRANSACTION 22 /* NULL NULL */
+#define SQLITE_TRANSACTION 22 /* Operation NULL */
#define SQLITE_UPDATE 23 /* Table Name Column Name */
#define SQLITE_ATTACH 24 /* Filename NULL */
#define SQLITE_DETACH 25 /* Database Name NULL */
@@ -2407,6 +2407,7 @@ int sqlite3_set_authorizer(
#define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */
#define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */
#define SQLITE_FUNCTION 31 /* NULL Function Name */
+#define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */
#define SQLITE_COPY 0 /* No longer used */
/*
diff --git a/src/tclsqlite.c b/src/tclsqlite.c
index 5541b0c76..e3fd44c1a 100644
--- a/src/tclsqlite.c
+++ b/src/tclsqlite.c
@@ -12,7 +12,7 @@
** A TCL Interface to SQLite. Append this file to sqlite3.c and
** compile the whole thing to build a TCL-enabled version of SQLite.
**
-** $Id: tclsqlite.c,v 1.231 2008/12/10 22:18:40 drh Exp $
+** $Id: tclsqlite.c,v 1.232 2008/12/30 06:24:58 danielk1977 Exp $
*/
#include "tcl.h"
#include <errno.h>
@@ -809,6 +809,7 @@ static int auth_callback(
case SQLITE_CREATE_VTABLE : zCode="SQLITE_CREATE_VTABLE"; break;
case SQLITE_DROP_VTABLE : zCode="SQLITE_DROP_VTABLE"; break;
case SQLITE_FUNCTION : zCode="SQLITE_FUNCTION"; break;
+ case SQLITE_SAVEPOINT : zCode="SQLITE_SAVEPOINT"; break;
default : zCode="????"; break;
}
Tcl_DStringInit(&str);