1*943aa77aSdrh /*
2*943aa77aSdrh ** Link this program against an SQLite library of unknown provenance in order
3*943aa77aSdrh ** to display the compile-time maximum values for various settings.
4*943aa77aSdrh */
5*943aa77aSdrh #include "sqlite3.h"
6*943aa77aSdrh #include <stdio.h>
7*943aa77aSdrh
8*943aa77aSdrh static const struct {
9*943aa77aSdrh int eCode;
10*943aa77aSdrh char *zName;
11*943aa77aSdrh } aLimit[] = {
12*943aa77aSdrh { SQLITE_LIMIT_LENGTH, "SQLITE_MAX_LENGTH" },
13*943aa77aSdrh { SQLITE_LIMIT_SQL_LENGTH, "SQLITE_MAX_SQL_LENGTH" },
14*943aa77aSdrh { SQLITE_LIMIT_COLUMN, "SQLITE_MAX_COLUMN" },
15*943aa77aSdrh { SQLITE_LIMIT_EXPR_DEPTH, "SQLITE_MAX_EXPR_DEPTH" },
16*943aa77aSdrh { SQLITE_LIMIT_COMPOUND_SELECT, "SQLITE_MAX_COMPOUND_SELECT" },
17*943aa77aSdrh { SQLITE_LIMIT_VDBE_OP, "SQLITE_MAX_VDBE_OP" },
18*943aa77aSdrh { SQLITE_LIMIT_FUNCTION_ARG, "SQLITE_MAX_FUNCTION_ARG" },
19*943aa77aSdrh { SQLITE_LIMIT_ATTACHED, "SQLITE_MAX_ATTACHED" },
20*943aa77aSdrh { SQLITE_LIMIT_LIKE_PATTERN_LENGTH, "SQLITE_MAX_LIKE_PATTERN_LENGTH" },
21*943aa77aSdrh { SQLITE_LIMIT_VARIABLE_NUMBER, "SQLITE_MAX_VARIABLE_NUMBER" },
22*943aa77aSdrh { SQLITE_LIMIT_TRIGGER_DEPTH, "SQLITE_MAX_TRIGGER_DEPTH" },
23*943aa77aSdrh { SQLITE_LIMIT_WORKER_THREADS, "SQLITE_MAX_WORKER_THREADS" },
24*943aa77aSdrh };
25*943aa77aSdrh
maxLimit(sqlite3 * db,int eCode)26*943aa77aSdrh static int maxLimit(sqlite3 *db, int eCode){
27*943aa77aSdrh int iOrig = sqlite3_limit(db, eCode, 0x7fffffff);
28*943aa77aSdrh return sqlite3_limit(db, eCode, iOrig);
29*943aa77aSdrh }
30*943aa77aSdrh
main(int argc,char ** argv)31*943aa77aSdrh int main(int argc, char **argv){
32*943aa77aSdrh sqlite3 *db;
33*943aa77aSdrh int j, rc;
34*943aa77aSdrh rc = sqlite3_open(":memory:", &db);
35*943aa77aSdrh if( rc==SQLITE_OK ){
36*943aa77aSdrh for(j=0; j<sizeof(aLimit)/sizeof(aLimit[0]); j++){
37*943aa77aSdrh printf("%-35s %10d\n", aLimit[j].zName, maxLimit(db, aLimit[j].eCode));
38*943aa77aSdrh }
39*943aa77aSdrh sqlite3_close(db);
40*943aa77aSdrh }
41*943aa77aSdrh }
42