aboutsummaryrefslogtreecommitdiff
path: root/tool/sqldiff.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2018-04-25 19:02:48 +0000
committerdrh <drh@noemail.net>2018-04-25 19:02:48 +0000
commitfc0ec3e5e839e92f8205804b1b1e836a51a8e5b5 (patch)
tree5f6e2771e8db993566953918f8a0817c598900b7 /tool/sqldiff.c
parent7eabc44dee611a7ffa90ab388892ac92d118061a (diff)
downloadsqlite-fc0ec3e5e839e92f8205804b1b1e836a51a8e5b5.tar.gz
sqlite-fc0ec3e5e839e92f8205804b1b1e836a51a8e5b5.zip
Add new interfaces for accessing the list of SQL keywords:
sqlite3_keyword_count(), sqlite3_keyword_name(), sqlite3_keyword_check(). FossilOrigin-Name: 7dd34e3776fed90a49344d54a1b68bb59f7957b5a8a1a367087b7cafb63111c1
Diffstat (limited to 'tool/sqldiff.c')
-rw-r--r--tool/sqldiff.c41
1 files changed, 5 insertions, 36 deletions
diff --git a/tool/sqldiff.c b/tool/sqldiff.c
index 44f05e75f..509470a15 100644
--- a/tool/sqldiff.c
+++ b/tool/sqldiff.c
@@ -134,29 +134,8 @@ static void strPrintf(Str *p, const char *zFormat, ...){
** needed.
*/
static char *safeId(const char *zId){
- /* All SQLite keywords, in alphabetical order */
- static const char *azKeywords[] = {
- "ABORT", "ACTION", "ADD", "AFTER", "ALL", "ALTER", "ANALYZE", "AND", "AS",
- "ASC", "ATTACH", "AUTOINCREMENT", "BEFORE", "BEGIN", "BETWEEN", "BY",
- "CASCADE", "CASE", "CAST", "CHECK", "COLLATE", "COLUMN", "COMMIT",
- "CONFLICT", "CONSTRAINT", "CREATE", "CROSS", "CURRENT_DATE",
- "CURRENT_TIME", "CURRENT_TIMESTAMP", "DATABASE", "DEFAULT", "DEFERRABLE",
- "DEFERRED", "DELETE", "DESC", "DETACH", "DISTINCT", "DO", "DROP", "EACH",
- "ELSE", "END", "ESCAPE", "EXCEPT", "EXCLUSIVE", "EXISTS", "EXPLAIN",
- "FAIL", "FOR", "FOREIGN", "FROM", "FULL", "GLOB", "GROUP", "HAVING", "IF",
- "IGNORE", "IMMEDIATE", "IN", "INDEX", "INDEXED", "INITIALLY", "INNER",
- "INSERT", "INSTEAD", "INTERSECT", "INTO", "IS", "ISNULL", "JOIN", "KEY",
- "LEFT", "LIKE", "LIMIT",
- "MATCH", "NATURAL", "NO", "NOT", "NOTHING", "NOTNULL",
- "NULL", "OF", "OFFSET", "ON", "OR", "ORDER", "OUTER", "PLAN", "PRAGMA",
- "PRIMARY", "QUERY", "RAISE", "RECURSIVE", "REFERENCES", "REGEXP",
- "REINDEX", "RELEASE", "RENAME", "REPLACE", "RESTRICT", "RIGHT",
- "ROLLBACK", "ROW", "SAVEPOINT", "SELECT", "SET", "TABLE", "TEMP",
- "TEMPORARY", "THEN", "TO", "TRANSACTION", "TRIGGER", "UNION", "UNIQUE",
- "UPDATE", "USING", "VACUUM", "VALUES", "VIEW", "VIRTUAL", "WHEN", "WHERE",
- "WITH", "WITHOUT",
- };
- int lwr, upr, mid, c, i, x;
+ int i, x;
+ char c;
if( zId[0]==0 ) return sqlite3_mprintf("\"\"");
for(i=x=0; (c = zId[i])!=0; i++){
if( !isalpha(c) && c!='_' ){
@@ -167,20 +146,10 @@ static char *safeId(const char *zId){
}
}
}
- if( x ) return sqlite3_mprintf("%s", zId);
- lwr = 0;
- upr = sizeof(azKeywords)/sizeof(azKeywords[0]) - 1;
- while( lwr<=upr ){
- mid = (lwr+upr)/2;
- c = sqlite3_stricmp(azKeywords[mid], zId);
- if( c==0 ) return sqlite3_mprintf("\"%w\"", zId);
- if( c<0 ){
- lwr = mid+1;
- }else{
- upr = mid-1;
- }
+ if( x || !sqlite3_keyword_check(zId,i) ){
+ return sqlite3_mprintf("%s", zId);
}
- return sqlite3_mprintf("%s", zId);
+ return sqlite3_mprintf("\"%w\"", zId);
}
/*