Index: third_party/sqlite/src/tool/mkkeywordhash.c |
diff --git a/third_party/sqlite/src/tool/mkkeywordhash.c b/third_party/sqlite/src/tool/mkkeywordhash.c |
index 509aeef9ea0a4e3b579e9bcf45004f8fbda9807f..721611f5a36ce8e00b1a106348a17b9dff532c92 100644 |
--- a/third_party/sqlite/src/tool/mkkeywordhash.c |
+++ b/third_party/sqlite/src/tool/mkkeywordhash.c |
@@ -138,6 +138,11 @@ struct Keyword { |
#else |
# define AUTOVACUUM 0x00020000 |
#endif |
+#ifdef SQLITE_OMIT_CTE |
+# define CTE 0 |
+#else |
+# define CTE 0x00040000 |
+#endif |
/* |
** These are the keywords |
@@ -234,6 +239,7 @@ static Keyword aKeywordTable[] = { |
{ "PRIMARY", "TK_PRIMARY", ALWAYS }, |
{ "QUERY", "TK_QUERY", EXPLAIN }, |
{ "RAISE", "TK_RAISE", TRIGGER }, |
+ { "RECURSIVE", "TK_RECURSIVE", CTE }, |
{ "REFERENCES", "TK_REFERENCES", FKEY }, |
{ "REGEXP", "TK_LIKE_KW", ALWAYS }, |
{ "REINDEX", "TK_REINDEX", REINDEX }, |
@@ -262,6 +268,8 @@ static Keyword aKeywordTable[] = { |
{ "VALUES", "TK_VALUES", ALWAYS }, |
{ "VIEW", "TK_VIEW", VIEW }, |
{ "VIRTUAL", "TK_VIRTUAL", VTAB }, |
+ { "WITH", "TK_WITH", CTE }, |
+ { "WITHOUT", "TK_WITHOUT", ALWAYS }, |
{ "WHEN", "TK_WHEN", ALWAYS }, |
{ "WHERE", "TK_WHERE", ALWAYS }, |
}; |
@@ -360,9 +368,9 @@ int main(int argc, char **argv){ |
/* Fill in the lengths of strings and hashes for all entries. */ |
for(i=0; i<nKeyword; i++){ |
Keyword *p = &aKeywordTable[i]; |
- p->len = strlen(p->zName); |
+ p->len = (int)strlen(p->zName); |
assert( p->len<sizeof(p->zOrigName) ); |
- strcpy(p->zOrigName, p->zName); |
+ memcpy(p->zOrigName, p->zName, p->len+1); |
totalLen += p->len; |
p->hash = (UpperToLower[(int)p->zName[0]]*4) ^ |
(UpperToLower[(int)p->zName[p->len-1]]*3) ^ p->len; |