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