mirror of
https://github.com/sqlitebrowser/sqlitebrowser.git
synced 2026-01-19 18:40:13 -06:00
Fix an issue with keywords in table or column names
note: table names are a bit more restrictive than column names And btw. you can always have any name you want, just put it in quotes.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
#define INC_Sqlite3Parser_hpp_
|
||||
|
||||
#include <antlr/config.hpp>
|
||||
/* $ANTLR 2.7.7 (20121001): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */
|
||||
/* $ANTLR 2.7.7 (20130818): "sqlite3.g" -> "Sqlite3Parser.hpp"$ */
|
||||
#include <antlr/TokenStream.hpp>
|
||||
#include <antlr/TokenBuffer.hpp>
|
||||
#include "sqlite3TokenTypes.hpp"
|
||||
@@ -45,9 +45,11 @@ public:
|
||||
public: void statement();
|
||||
public: void createtable();
|
||||
public: void create_statements();
|
||||
public: void keywordastablename();
|
||||
public: void columndef();
|
||||
public: void tableconstraint();
|
||||
public: void selectstmt();
|
||||
public: void keywordascolumnname();
|
||||
public: void type_name();
|
||||
public: void columnconstraint();
|
||||
public: void name();
|
||||
@@ -74,10 +76,10 @@ protected:
|
||||
private:
|
||||
static const char* tokenNames[];
|
||||
#ifndef NO_STATIC_CONSTS
|
||||
static const int NUM_TOKENS = 100;
|
||||
static const int NUM_TOKENS = 102;
|
||||
#else
|
||||
enum {
|
||||
NUM_TOKENS = 100
|
||||
NUM_TOKENS = 102
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -127,6 +129,12 @@ private:
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_21;
|
||||
static const unsigned long _tokenSet_22_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_22;
|
||||
static const unsigned long _tokenSet_23_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_23;
|
||||
static const unsigned long _tokenSet_24_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_24;
|
||||
static const unsigned long _tokenSet_25_data_[];
|
||||
static const ANTLR_USE_NAMESPACE(antlr)BitSet _tokenSet_25;
|
||||
};
|
||||
|
||||
#endif /*INC_Sqlite3Parser_hpp_*/
|
||||
|
||||
@@ -76,6 +76,8 @@ tokens {
|
||||
COLUMNCONSTRAINT;
|
||||
TABLECONSTRAINT;
|
||||
CREATETABLE;
|
||||
KEYWORDASTABLENAME;
|
||||
KEYWORDASCOLUMNNAME;
|
||||
}
|
||||
|
||||
protected
|
||||
@@ -207,19 +209,109 @@ create_statements
|
||||
:
|
||||
createtable
|
||||
;
|
||||
|
||||
|
||||
keywordastablename
|
||||
:
|
||||
( ABORT
|
||||
| ACTION
|
||||
| ASC
|
||||
| CASCADE
|
||||
| CAST
|
||||
| CONFLICT
|
||||
| CURRENT_TIME
|
||||
| CURRENT_DATE
|
||||
| CURRENT_TIMESTAMP
|
||||
| DEFERRED
|
||||
| DESC
|
||||
| END
|
||||
| FAIL
|
||||
| GLOB
|
||||
| KEY
|
||||
| LIKE
|
||||
| IGNORE
|
||||
| INITIALLY
|
||||
| IMMEDIATE
|
||||
| MATCH
|
||||
| RAISE
|
||||
| REGEXP
|
||||
| REPLACE
|
||||
| RESTRICT
|
||||
| ROLLBACK
|
||||
| TEMPORARY
|
||||
| TEMP
|
||||
)
|
||||
{#keywordastablename = #([KEYWORDASTABLENAME, "KEYWORDASTABLENAME"], #keywordastablename);}
|
||||
;
|
||||
|
||||
createtable
|
||||
:
|
||||
CREATE (TEMP|TEMPORARY)? TABLE (IF_T NOT EXISTS)? tablename
|
||||
CREATE (TEMP|TEMPORARY)? TABLE (IF_T NOT EXISTS)? (tablename | keywordastablename)
|
||||
( LPAREN columndef (COMMA columndef)* (COMMA tableconstraint)* RPAREN
|
||||
| AS selectstmt
|
||||
)
|
||||
{#createtable = #([CREATETABLE, "CREATETABLE"], #createtable);}
|
||||
;
|
||||
|
||||
keywordascolumnname
|
||||
:
|
||||
( ABORT
|
||||
| ACTION
|
||||
| AUTOINCREMENT
|
||||
| AS
|
||||
| ASC
|
||||
| AND
|
||||
| OR
|
||||
| CASCADE
|
||||
| CASE_T
|
||||
| CAST
|
||||
| CREATE
|
||||
| COLLATE
|
||||
| CONFLICT
|
||||
| CURRENT_TIME
|
||||
| CURRENT_DATE
|
||||
| CURRENT_TIMESTAMP
|
||||
| DEFAULT
|
||||
| DEFERRABLE
|
||||
| DEFERRED
|
||||
| DELETE
|
||||
| DESC
|
||||
| ELSE_T
|
||||
| END
|
||||
| ESCAPE
|
||||
| FAIL
|
||||
| GLOB
|
||||
| KEY
|
||||
| LIKE
|
||||
| TABLE
|
||||
| IF_T
|
||||
| IGNORE
|
||||
| INITIALLY
|
||||
| IMMEDIATE
|
||||
| IS
|
||||
| NOT
|
||||
| NULL_T
|
||||
| MATCH
|
||||
| EXISTS
|
||||
| ON
|
||||
| RAISE
|
||||
| REFERENCES
|
||||
| REGEXP
|
||||
| REPLACE
|
||||
| RESTRICT
|
||||
| ROLLBACK
|
||||
| SET
|
||||
| TEMPORARY
|
||||
| TEMP
|
||||
| THEN
|
||||
| UPDATE
|
||||
| WHEN
|
||||
)
|
||||
{#keywordascolumnname = #([KEYWORDASCOLUMNNAME, "KEYWORDASCOLUMNNAME"], #keywordascolumnname);}
|
||||
;
|
||||
|
||||
columndef
|
||||
:
|
||||
columnname (type_name)? (columnconstraint)*
|
||||
(columnname | keywordascolumnname) (type_name)? (columnconstraint)*
|
||||
{#columndef = #([COLUMNDEF, "COLUMNDEF"], #columndef);}
|
||||
;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef INC_sqlite3TokenTypes_hpp_
|
||||
#define INC_sqlite3TokenTypes_hpp_
|
||||
|
||||
/* $ANTLR 2.7.7 (20121001): "sqlite3.g" -> "sqlite3TokenTypes.hpp"$ */
|
||||
/* $ANTLR 2.7.7 (20130818): "sqlite3.g" -> "sqlite3TokenTypes.hpp"$ */
|
||||
|
||||
#ifndef CUSTOM_API
|
||||
# define CUSTOM_API
|
||||
@@ -73,41 +73,43 @@ struct CUSTOM_API sqlite3TokenTypes {
|
||||
COLUMNCONSTRAINT = 62,
|
||||
TABLECONSTRAINT = 63,
|
||||
CREATETABLE = 64,
|
||||
DIGIT = 65,
|
||||
DOT = 66,
|
||||
ID = 67,
|
||||
QUOTEDID = 68,
|
||||
NUMERIC = 69,
|
||||
NL = 70,
|
||||
COMMENT = 71,
|
||||
WS = 72,
|
||||
STRINGLITERAL = 73,
|
||||
LPAREN = 74,
|
||||
RPAREN = 75,
|
||||
COMMA = 76,
|
||||
SEMI = 77,
|
||||
PLUS = 78,
|
||||
MINUS = 79,
|
||||
STAR = 80,
|
||||
TILDE = 81,
|
||||
AMPERSAND = 82,
|
||||
BITOR = 83,
|
||||
OROP = 84,
|
||||
EQUAL = 85,
|
||||
EQUAL2 = 86,
|
||||
GREATER = 87,
|
||||
GREATEREQUAL = 88,
|
||||
LOWER = 89,
|
||||
LOWEREQUAL = 90,
|
||||
UNEQUAL = 91,
|
||||
UNEQUAL2 = 92,
|
||||
BITWISELEFT = 93,
|
||||
BITWISERIGHT = 94,
|
||||
NO = 95,
|
||||
SELECT = 96,
|
||||
SLASH = 97,
|
||||
PERCENT = 98,
|
||||
IN = 99,
|
||||
KEYWORDASTABLENAME = 65,
|
||||
KEYWORDASCOLUMNNAME = 66,
|
||||
DIGIT = 67,
|
||||
DOT = 68,
|
||||
ID = 69,
|
||||
QUOTEDID = 70,
|
||||
NUMERIC = 71,
|
||||
NL = 72,
|
||||
COMMENT = 73,
|
||||
WS = 74,
|
||||
STRINGLITERAL = 75,
|
||||
LPAREN = 76,
|
||||
RPAREN = 77,
|
||||
COMMA = 78,
|
||||
SEMI = 79,
|
||||
PLUS = 80,
|
||||
MINUS = 81,
|
||||
STAR = 82,
|
||||
TILDE = 83,
|
||||
AMPERSAND = 84,
|
||||
BITOR = 85,
|
||||
OROP = 86,
|
||||
EQUAL = 87,
|
||||
EQUAL2 = 88,
|
||||
GREATER = 89,
|
||||
GREATEREQUAL = 90,
|
||||
LOWER = 91,
|
||||
LOWEREQUAL = 92,
|
||||
UNEQUAL = 93,
|
||||
UNEQUAL2 = 94,
|
||||
BITWISELEFT = 95,
|
||||
BITWISERIGHT = 96,
|
||||
NO = 97,
|
||||
SELECT = 98,
|
||||
SLASH = 99,
|
||||
PERCENT = 100,
|
||||
IN = 101,
|
||||
NULL_TREE_LOOKAHEAD = 3
|
||||
};
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -248,7 +248,8 @@ Table CreateTableWalker::table()
|
||||
//skip to tablename
|
||||
while(s->getType() != Sqlite3Lexer::ID &&
|
||||
s->getType() != Sqlite3Lexer::QUOTEDID &&
|
||||
s->getType() != Sqlite3Lexer::STRINGLITERAL)
|
||||
s->getType() != Sqlite3Lexer::STRINGLITERAL &&
|
||||
s->getType() != sqlite3TokenTypes::KEYWORDASTABLENAME)
|
||||
{
|
||||
s = s->getNextSibling();
|
||||
}
|
||||
@@ -315,7 +316,10 @@ void CreateTableWalker::parsecolumn(FieldPtr& f, antlr::RefAST c)
|
||||
QString defaultvalue;
|
||||
QString check;
|
||||
|
||||
columnname = identifier(c);
|
||||
if(c->getType() == sqlite3TokenTypes::KEYWORDASCOLUMNNAME)
|
||||
columnname = concatTextAST(c->getFirstChild());
|
||||
else
|
||||
columnname = identifier(c);
|
||||
c = c->getNextSibling(); //type?
|
||||
if(c != antlr::nullAST && c->getType() == sqlite3TokenTypes::TYPE_NAME)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user