@@ -119,6 +119,8 @@ int commitHookTrampoline(void*);
119
119
void rollbackHookTrampoline(void*);
120
120
void updateHookTrampoline(void*, int, char*, char*, sqlite3_int64);
121
121
122
+ int authorizerTrampoline(void*, int, char*, char*, char*, char*);
123
+
122
124
#ifdef SQLITE_LIMIT_WORKER_THREADS
123
125
# define _SQLITE_HAS_LIMIT
124
126
# define SQLITE_LIMIT_LENGTH 0
@@ -200,9 +202,43 @@ func Version() (libVersion string, libVersionNumber int, sourceID string) {
200
202
}
201
203
202
204
const (
203
- SQLITE_DELETE = C .SQLITE_DELETE
204
- SQLITE_INSERT = C .SQLITE_INSERT
205
- SQLITE_UPDATE = C .SQLITE_UPDATE
205
+ SQLITE_OK = C .SQLITE_OK
206
+ SQLITE_IGNORE = C .SQLITE_IGNORE
207
+ SQLITE_DENY = C .SQLITE_DENY
208
+ SQLITE_CREATE_INDEX = C .SQLITE_CREATE_INDEX
209
+ SQLITE_CREATE_TABLE = C .SQLITE_CREATE_TABLE
210
+ SQLITE_CREATE_TEMP_INDEX = C .SQLITE_CREATE_TEMP_INDEX
211
+ SQLITE_CREATE_TEMP_TABLE = C .SQLITE_CREATE_TEMP_TABLE
212
+ SQLITE_CREATE_TEMP_TRIGGER = C .SQLITE_CREATE_TEMP_TRIGGER
213
+ SQLITE_CREATE_TEMP_VIEW = C .SQLITE_CREATE_TEMP_VIEW
214
+ SQLITE_CREATE_TRIGGER = C .SQLITE_CREATE_TRIGGER
215
+ SQLITE_CREATE_VIEW = C .SQLITE_CREATE_VIEW
216
+ SQLITE_DELETE = C .SQLITE_DELETE
217
+ SQLITE_DROP_INDEX = C .SQLITE_DROP_INDEX
218
+ SQLITE_DROP_TABLE = C .SQLITE_DROP_TABLE
219
+ SQLITE_DROP_TEMP_INDEX = C .SQLITE_DROP_TEMP_INDEX
220
+ SQLITE_DROP_TEMP_TABLE = C .SQLITE_DROP_TEMP_TABLE
221
+ SQLITE_DROP_TEMP_TRIGGER = C .SQLITE_DROP_TEMP_TRIGGER
222
+ SQLITE_DROP_TEMP_VIEW = C .SQLITE_DROP_TEMP_VIEW
223
+ SQLITE_DROP_TRIGGER = C .SQLITE_DROP_TRIGGER
224
+ SQLITE_DROP_VIEW = C .SQLITE_DROP_VIEW
225
+ SQLITE_INSERT = C .SQLITE_INSERT
226
+ SQLITE_PRAGMA = C .SQLITE_PRAGMA
227
+ SQLITE_READ = C .SQLITE_READ
228
+ SQLITE_SELECT = C .SQLITE_SELECT
229
+ SQLITE_TRANSACTION = C .SQLITE_TRANSACTION
230
+ SQLITE_UPDATE = C .SQLITE_UPDATE
231
+ SQLITE_ATTACH = C .SQLITE_ATTACH
232
+ SQLITE_DETACH = C .SQLITE_DETACH
233
+ SQLITE_ALTER_TABLE = C .SQLITE_ALTER_TABLE
234
+ SQLITE_REINDEX = C .SQLITE_REINDEX
235
+ SQLITE_ANALYZE = C .SQLITE_ANALYZE
236
+ SQLITE_CREATE_VTABLE = C .SQLITE_CREATE_VTABLE
237
+ SQLITE_DROP_VTABLE = C .SQLITE_DROP_VTABLE
238
+ SQLITE_FUNCTION = C .SQLITE_FUNCTION
239
+ SQLITE_SAVEPOINT = C .SQLITE_SAVEPOINT
240
+ SQLITE_COPY = C .SQLITE_COPY
241
+ SQLITE_RECURSIVE = C .SQLITE_RECURSIVE
206
242
)
207
243
208
244
// SQLiteDriver implement sql.Driver.
@@ -440,6 +476,20 @@ func (c *SQLiteConn) RegisterUpdateHook(callback func(int, string, string, int64
440
476
}
441
477
}
442
478
479
+ // RegisterAuthorizer sets the authorizer for connection.
480
+ //
481
+ // The parameters to the callback are the operation (one of the constants
482
+ // SQLITE_INSERT, SQLITE_DELETE, or SQLITE_UPDATE), and 1 to 3 arguments,
483
+ // depending on operation. More details see:
484
+ // https://www.sqlite.org/c3ref/c_alter_table.html
485
+ func (c * SQLiteConn ) RegisterAuthorizer (callback func (int , string , string , string ) int ) {
486
+ if callback == nil {
487
+ C .sqlite3_set_authorizer (c .db , nil , nil )
488
+ } else {
489
+ C .sqlite3_set_authorizer (c .db , (* [0 ]byte )(C .authorizerTrampoline ), unsafe .Pointer (newHandle (c , callback )))
490
+ }
491
+ }
492
+
443
493
// RegisterFunc makes a Go function available as a SQLite function.
444
494
//
445
495
// The Go function can have arguments of the following types: any
0 commit comments