1from__future__importannotations 2 3fromsqlglotimporttokens 4fromsqlglot.dialects.dialectimport( 5Dialect, 6NormalizationStrategy, 7UsingColumnOrder, 8) 9fromsqlglot.generators.sqliteimportSQLiteGenerator10fromsqlglot.parsers.sqliteimportSQLiteParser11fromsqlglot.tokensimportTokenType121314classSQLite(Dialect):15# https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw16NORMALIZATION_STRATEGY=NormalizationStrategy.CASE_INSENSITIVE17ASCII_ONLY_NORMALIZATION=True18TYPED_DIVISION=True19SAFE_DIVISION=True20SAFE_TO_ELIMINATE_DOUBLE_NEGATION=False21USING_COLUMN_ORDER=UsingColumnOrder.IN_PLACE22CONCAT_COALESCE=True23CONCAT_WS_COALESCE=True24INTERSECT_BINDS_TIGHTER_THAN_UNION_AND_EXCEPT=False2526classTokenizer(tokens.Tokenizer):27IDENTIFIERS=['"',("[","]"),"`"]28HEX_STRINGS=[("x'","'"),("X'","'"),("0x",""),("0X","")]2930NESTED_COMMENTS=False31COMMENTS_TERMINATE_AT_NEWLINE_ONLY=True3233KEYWORDS={34**tokens.Tokenizer.KEYWORDS,35"ATTACH":TokenType.ATTACH,36"DETACH":TokenType.DETACH,37# REAL, FLOAT and DOUBLE are all 8-byte IEEE floats in SQLite (REAL affinity),38# so they must not become a 4-byte float in dialects where REAL/FLOAT means FLOAT439"FLOAT":TokenType.DOUBLE,40"INDEXED BY":TokenType.INDEXED_BY,41"MATCH":TokenType.MATCH,42"REAL":TokenType.DOUBLE,43}4445KEYWORDS.pop("/*+")4647COMMANDS={*tokens.Tokenizer.COMMANDS,TokenType.REPLACE}4849Parser=SQLiteParser5051Generator=SQLiteGenerator
classSQLite(sqlglot.dialects.dialect.Dialect):
15classSQLite(Dialect):16# https://sqlite.org/forum/forumpost/5e575586ac5c711b?raw17NORMALIZATION_STRATEGY=NormalizationStrategy.CASE_INSENSITIVE18ASCII_ONLY_NORMALIZATION=True19TYPED_DIVISION=True20SAFE_DIVISION=True21SAFE_TO_ELIMINATE_DOUBLE_NEGATION=False22USING_COLUMN_ORDER=UsingColumnOrder.IN_PLACE23CONCAT_COALESCE=True24CONCAT_WS_COALESCE=True25INTERSECT_BINDS_TIGHTER_THAN_UNION_AND_EXCEPT=False2627classTokenizer(tokens.Tokenizer):28IDENTIFIERS=['"',("[","]"),"`"]29HEX_STRINGS=[("x'","'"),("X'","'"),("0x",""),("0X","")]3031NESTED_COMMENTS=False32COMMENTS_TERMINATE_AT_NEWLINE_ONLY=True3334KEYWORDS={35**tokens.Tokenizer.KEYWORDS,36"ATTACH":TokenType.ATTACH,37"DETACH":TokenType.DETACH,38# REAL, FLOAT and DOUBLE are all 8-byte IEEE floats in SQLite (REAL affinity),39# so they must not become a 4-byte float in dialects where REAL/FLOAT means FLOAT440"FLOAT":TokenType.DOUBLE,41"INDEXED BY":TokenType.INDEXED_BY,42"MATCH":TokenType.MATCH,43"REAL":TokenType.DOUBLE,44}4546KEYWORDS.pop("/*+")4748COMMANDS={*tokens.Tokenizer.COMMANDS,TokenType.REPLACE}4950Parser=SQLiteParser5152Generator=SQLiteGenerator
Specifies the strategy according to which identifiers should be normalized.
ASCII_ONLY_NORMALIZATION =
True
Whether identifiers are only normalized with respect to ASCII characters, e.g. Ä and
ä are different identifiers in DuckDB, but the same identifier in Spark.
TYPED_DIVISION =
True
Whether the behavior of a / b depends on the types of a and b.
False means a / b is always float division.
True means a / b is integer division if both a and b are integers.
SAFE_DIVISION =
True
Whether division by zero throws an error (False) or returns NULL (True).
Whether INTERSECT binds more tightly than UNION and EXCEPT when a set operation chain isn't
parenthesized. If False, all set operations have equal precedence and associate left to right.
27classTokenizer(tokens.Tokenizer):28IDENTIFIERS=['"',("[","]"),"`"]29HEX_STRINGS=[("x'","'"),("X'","'"),("0x",""),("0X","")]3031NESTED_COMMENTS=False32COMMENTS_TERMINATE_AT_NEWLINE_ONLY=True3334KEYWORDS={35**tokens.Tokenizer.KEYWORDS,36"ATTACH":TokenType.ATTACH,37"DETACH":TokenType.DETACH,38# REAL, FLOAT and DOUBLE are all 8-byte IEEE floats in SQLite (REAL affinity),39# so they must not become a 4-byte float in dialects where REAL/FLOAT means FLOAT440"FLOAT":TokenType.DOUBLE,41"INDEXED BY":TokenType.INDEXED_BY,42"MATCH":TokenType.MATCH,43"REAL":TokenType.DOUBLE,44}4546KEYWORDS.pop("/*+")4748COMMANDS={*tokens.Tokenizer.COMMANDS,TokenType.REPLACE}