@@ -105,6 +105,32 @@ int compareTrampoline(void*, int, char*, int, char*);
105
105
int commitHookTrampoline(void*);
106
106
void rollbackHookTrampoline(void*);
107
107
void updateHookTrampoline(void*, int, char*, char*, sqlite3_int64);
108
+
109
+ #ifdef SQLITE_LIMIT_WORKER_THREADS
110
+ # define _SQLITE_HAS_LIMIT
111
+ # define SQLITE_LIMIT_LENGTH 0
112
+ # define SQLITE_LIMIT_SQL_LENGTH 1
113
+ # define SQLITE_LIMIT_COLUMN 2
114
+ # define SQLITE_LIMIT_EXPR_DEPTH 3
115
+ # define SQLITE_LIMIT_COMPOUND_SELECT 4
116
+ # define SQLITE_LIMIT_VDBE_OP 5
117
+ # define SQLITE_LIMIT_FUNCTION_ARG 6
118
+ # define SQLITE_LIMIT_ATTACHED 7
119
+ # define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
120
+ # define SQLITE_LIMIT_VARIABLE_NUMBER 9
121
+ # define SQLITE_LIMIT_TRIGGER_DEPTH 10
122
+ # define SQLITE_LIMIT_WORKER_THREADS 11
123
+ # else
124
+ # define SQLITE_LIMIT_WORKER_THREADS 11
125
+ #endif
126
+
127
+ static int _sqlite3_limit(sqlite3* db, int limitId, int newLimit) {
128
+ #ifndef _SQLITE_HAS_LIMIT
129
+ return -1;
130
+ #else
131
+ return sqlite3_limit(db, limitId, newLimit);
132
+ #endif
133
+ }
108
134
*/
109
135
import "C"
110
136
import (
@@ -827,6 +853,36 @@ func (c *SQLiteConn) prepare(ctx context.Context, query string) (driver.Stmt, er
827
853
return ss , nil
828
854
}
829
855
856
+ // Run-Time Limit Categories.
857
+ // See: http://www.sqlite.org/c3ref/c_limit_attached.html
858
+ const (
859
+ SQLITE_LIMIT_LENGTH = C .SQLITE_LIMIT_LENGTH
860
+ SQLITE_LIMIT_SQL_LENGTH = C .SQLITE_LIMIT_SQL_LENGTH
861
+ SQLITE_LIMIT_COLUMN = C .SQLITE_LIMIT_COLUMN
862
+ SQLITE_LIMIT_EXPR_DEPTH = C .SQLITE_LIMIT_EXPR_DEPTH
863
+ SQLITE_LIMIT_COMPOUND_SELECT = C .SQLITE_LIMIT_COMPOUND_SELECT
864
+ SQLITE_LIMIT_VDBE_OP = C .SQLITE_LIMIT_VDBE_OP
865
+ SQLITE_LIMIT_FUNCTION_ARG = C .SQLITE_LIMIT_FUNCTION_ARG
866
+ SQLITE_LIMIT_ATTACHED = C .SQLITE_LIMIT_ATTACHED
867
+ SQLITE_LIMIT_LIKE_PATTERN_LENGTH = C .SQLITE_LIMIT_LIKE_PATTERN_LENGTH
868
+ SQLITE_LIMIT_VARIABLE_NUMBER = C .SQLITE_LIMIT_VARIABLE_NUMBER
869
+ SQLITE_LIMIT_TRIGGER_DEPTH = C .SQLITE_LIMIT_TRIGGER_DEPTH
870
+ SQLITE_LIMIT_WORKER_THREADS = C .SQLITE_LIMIT_WORKER_THREADS
871
+ )
872
+
873
+ // GetLimit returns the current value of a run-time limit.
874
+ // See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
875
+ func (c * SQLiteConn ) GetLimit (id int ) int {
876
+ return int (C ._sqlite3_limit (c .db , C .int (id ), - 1 ))
877
+ }
878
+
879
+ // SetLimit changes the value of a run-time limits.
880
+ // Then this method returns the prior value of the limit.
881
+ // See: sqlite3_limit, http://www.sqlite.org/c3ref/limit.html
882
+ func (c * SQLiteConn ) SetLimit (id int , newVal int ) int {
883
+ return int (C ._sqlite3_limit (c .db , C .int (id ), C .int (newVal )))
884
+ }
885
+
830
886
// Close the statement.
831
887
func (s * SQLiteStmt ) Close () error {
832
888
s .mu .Lock ()
0 commit comments