⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mkkeywordhash.c

📁 一个小型的嵌入式数据库
💻 C
📖 第 1 页 / 共 2 页
字号:
/*** Compile and run this standalone program in order to generate code that** implements a function that will translate alphabetic identifiers into** parser token codes.*/#include <stdio.h>#include <string.h>#include <stdlib.h>/*** All the keywords of the SQL language are stored as in a hash** table composed of instances of the following structure.*/typedef struct Keyword Keyword;struct Keyword {  char *zName;         /* The keyword name */  char *zTokenType;    /* Token value for this keyword */  int mask;            /* Code this keyword if non-zero */  int id;              /* Unique ID for this record */  int hash;            /* Hash on the keyword */  int offset;          /* Offset to start of name string */  int len;             /* Length of this keyword, not counting final \000 */  int prefix;          /* Number of characters in prefix */  int iNext;           /* Index in aKeywordTable[] of next with same hash */  int substrId;        /* Id to another keyword this keyword is embedded in */  int substrOffset;    /* Offset into substrId for start of this keyword */};/*** Define masks used to determine which keywords are allowed*/#ifdef SQLITE_OMIT_ALTERTABLE#  define ALTER      0#else#  define ALTER      1#endif#define ALWAYS     2#ifdef SQLITE_OMIT_ATTACH#  define ATTACH     0#else#  define ATTACH     4#endif#ifdef SQLITE_OMIT_AUTOINCREMENT#  define AUTOINCR   0#else#  define AUTOINCR   8#endif#ifdef SQLITE_OMIT_COMPOUND_SELECT#  define COMPOUND   0#else#  define COMPOUND   16#endif#ifdef SQLITE_OMIT_CONFLICT_CLAUSE#  define CONFLICT   0#else#  define CONFLICT   32#endif#ifdef SQLITE_OMIT_EXPLAIN#  define EXPLAIN    0#else#  define EXPLAIN    128#endif#ifdef SQLITE_OMIT_FOREIGN_KEY#  define FKEY       0#else#  define FKEY       256#endif#ifdef SQLITE_OMIT_PRAGMA#  define PRAGMA     0#else#  define PRAGMA     512#endif#ifdef SQLITE_OMIT_REINDEX#  define REINDEX    0#else#  define REINDEX    1024#endif#ifdef SQLITE_OMIT_SUBQUERY#  define SUBQUERY   0#else#  define SUBQUERY   2048#endif#ifdef SQLITE_OMIT_TRIGGER#  define TRIGGER    0#else#  define TRIGGER    4096#endif#ifdef SQLITE_OMIT_VACUUM#  define VACUUM     0#else#  define VACUUM     8192#endif#ifdef SQLITE_OMIT_VIEW#  define VIEW       0#else#  define VIEW       16384#endif/*** These are the keywords*/static Keyword aKeywordTable[] = {  { "ABORT",            "TK_ABORT",        CONFLICT|TRIGGER       },  { "AFTER",            "TK_AFTER",        TRIGGER                },  { "ALL",              "TK_ALL",          ALWAYS                 },  { "ALTER",            "TK_ALTER",        ALTER                  },  { "AND",              "TK_AND",          ALWAYS                 },  { "AS",               "TK_AS",           ALWAYS                 },  { "ASC",              "TK_ASC",          ALWAYS                 },  { "ATTACH",           "TK_ATTACH",       ATTACH                 },  { "AUTOINCREMENT",    "TK_AUTOINCR",     AUTOINCR               },  { "BEFORE",           "TK_BEFORE",       TRIGGER                },  { "BEGIN",            "TK_BEGIN",        ALWAYS                 },  { "BETWEEN",          "TK_BETWEEN",      ALWAYS                 },  { "BY",               "TK_BY",           ALWAYS                 },  { "CASCADE",          "TK_CASCADE",      FKEY                   },  { "CASE",             "TK_CASE",         ALWAYS                 },  { "CHECK",            "TK_CHECK",        ALWAYS                 },  { "COLLATE",          "TK_COLLATE",      ALWAYS                 },  { "COMMIT",           "TK_COMMIT",       ALWAYS                 },  { "CONFLICT",         "TK_CONFLICT",     CONFLICT               },  { "CONSTRAINT",       "TK_CONSTRAINT",   ALWAYS                 },  { "CREATE",           "TK_CREATE",       ALWAYS                 },  { "CROSS",            "TK_JOIN_KW",      ALWAYS                 },  { "CURRENT_DATE",     "TK_CDATE",        ALWAYS                 },  { "CURRENT_TIME",     "TK_CTIME",        ALWAYS                 },  { "CURRENT_TIMESTAMP","TK_CTIMESTAMP",   ALWAYS                 },  { "DATABASE",         "TK_DATABASE",     ATTACH                 },  { "DEFAULT",          "TK_DEFAULT",      ALWAYS                 },  { "DEFERRED",         "TK_DEFERRED",     ALWAYS                 },  { "DEFERRABLE",       "TK_DEFERRABLE",   FKEY                   },  { "DELETE",           "TK_DELETE",       ALWAYS                 },  { "DESC",             "TK_DESC",         ALWAYS                 },  { "DETACH",           "TK_DETACH",       ATTACH                 },  { "DISTINCT",         "TK_DISTINCT",     ALWAYS                 },  { "DROP",             "TK_DROP",         ALWAYS                 },  { "END",              "TK_END",          ALWAYS                 },  { "EACH",             "TK_EACH",         TRIGGER                },  { "ELSE",             "TK_ELSE",         ALWAYS                 },  { "ESCAPE",           "TK_ESCAPE",       ALWAYS                 },  { "EXCEPT",           "TK_EXCEPT",       COMPOUND               },  { "EXCLUSIVE",        "TK_EXCLUSIVE",    ALWAYS                 },  { "EXISTS",           "TK_EXISTS",       SUBQUERY               },  { "EXPLAIN",          "TK_EXPLAIN",      EXPLAIN                },  { "FAIL",             "TK_FAIL",         CONFLICT|TRIGGER       },  { "FOR",              "TK_FOR",          TRIGGER                },  { "FOREIGN",          "TK_FOREIGN",      FKEY                   },  { "FROM",             "TK_FROM",         ALWAYS                 },  { "FULL",             "TK_JOIN_KW",      ALWAYS                 },  { "GLOB",             "TK_GLOB",         ALWAYS                 },  { "GROUP",            "TK_GROUP",        ALWAYS                 },  { "HAVING",           "TK_HAVING",       ALWAYS                 },  { "IGNORE",           "TK_IGNORE",       CONFLICT|TRIGGER       },  { "IMMEDIATE",        "TK_IMMEDIATE",    ALWAYS                 },  { "IN",               "TK_IN",           ALWAYS                 },  { "INDEX",            "TK_INDEX",        ALWAYS                 },  { "INITIALLY",        "TK_INITIALLY",    FKEY                   },  { "INNER",            "TK_JOIN_KW",      ALWAYS                 },  { "INSERT",           "TK_INSERT",       ALWAYS                 },  { "INSTEAD",          "TK_INSTEAD",      TRIGGER                },  { "INTERSECT",        "TK_INTERSECT",    COMPOUND               },  { "INTO",             "TK_INTO",         ALWAYS                 },  { "IS",               "TK_IS",           ALWAYS                 },  { "ISNULL",           "TK_ISNULL",       ALWAYS                 },  { "JOIN",             "TK_JOIN",         ALWAYS                 },  { "KEY",              "TK_KEY",          ALWAYS                 },  { "LEFT",             "TK_JOIN_KW",      ALWAYS                 },  { "LIKE",             "TK_LIKE",         ALWAYS                 },  { "LIMIT",            "TK_LIMIT",        ALWAYS                 },  { "MATCH",            "TK_MATCH",        ALWAYS                 },  { "NATURAL",          "TK_JOIN_KW",      ALWAYS                 },  { "NOT",              "TK_NOT",          ALWAYS                 },  { "NOTNULL",          "TK_NOTNULL",      ALWAYS                 },  { "NULL",             "TK_NULL",         ALWAYS                 },  { "OF",               "TK_OF",           ALWAYS                 },  { "OFFSET",           "TK_OFFSET",       ALWAYS                 },  { "ON",               "TK_ON",           ALWAYS                 },  { "OR",               "TK_OR",           ALWAYS                 },  { "ORDER",            "TK_ORDER",        ALWAYS                 },  { "OUTER",            "TK_JOIN_KW",      ALWAYS                 },  { "PRAGMA",           "TK_PRAGMA",       PRAGMA                 },  { "PRIMARY",          "TK_PRIMARY",      ALWAYS                 },  { "RAISE",            "TK_RAISE",        TRIGGER                },  { "REFERENCES",       "TK_REFERENCES",   FKEY                   },  { "REINDEX",          "TK_REINDEX",      REINDEX                },  { "RENAME",           "TK_RENAME",       ALTER                  },  { "REPLACE",          "TK_REPLACE",      CONFLICT               },  { "RESTRICT",         "TK_RESTRICT",     FKEY                   },  { "RIGHT",            "TK_JOIN_KW",      ALWAYS                 },  { "ROLLBACK",         "TK_ROLLBACK",     ALWAYS                 },  { "ROW",              "TK_ROW",          TRIGGER                },  { "SELECT",           "TK_SELECT",       ALWAYS                 },  { "SET",              "TK_SET",          ALWAYS                 },  { "STATEMENT",        "TK_STATEMENT",    TRIGGER                },  { "TABLE",            "TK_TABLE",        ALWAYS                 },  { "TEMP",             "TK_TEMP",         ALWAYS                 },  { "TEMPORARY",        "TK_TEMP",         ALWAYS                 },  { "THEN",             "TK_THEN",         ALWAYS                 },  { "TO",               "TK_TO",           ALTER                  },  { "TRANSACTION",      "TK_TRANSACTION",  ALWAYS                 },  { "TRIGGER",          "TK_TRIGGER",      TRIGGER                },  { "UNION",            "TK_UNION",        COMPOUND               },  { "UNIQUE",           "TK_UNIQUE",       ALWAYS                 },  { "UPDATE",           "TK_UPDATE",       ALWAYS                 },  { "USING",            "TK_USING",        ALWAYS                 },  { "VACUUM",           "TK_VACUUM",       VACUUM                 },  { "VALUES",           "TK_VALUES",       ALWAYS                 },  { "VIEW",             "TK_VIEW",         VIEW                   },  { "WHEN",             "TK_WHEN",         ALWAYS                 },  { "WHERE",            "TK_WHERE",        ALWAYS                 },};/* Number of keywords */static int NKEYWORD = (sizeof(aKeywordTable)/sizeof(aKeywordTable[0]));/* An array to map all upper-case characters into their corresponding** lower-case character. */const unsigned char sqlite3UpperToLower[] = {      0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,     18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,     36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,     54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,    104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,    122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,    108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,    126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,    144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,    162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,    180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,    198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,    216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,    234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,    252,253,254,255};#define UpperToLower sqlite3UpperToLower/*** Comparision function for two Keyword records*/static int keywordCompare1(const void *a, const void *b){  const Keyword *pA = (Keyword*)a;  const Keyword *pB = (Keyword*)b;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -