Documentation
¶
Index ¶
- Variables
- type Keyword
- type KeywordCategory
- type Keywords
- func (k *Keywords) AddKeyword(keyword Keyword) error
- func (k *Keywords) GetCompoundKeywordType(s string) (models.TokenType, bool)
- func (k *Keywords) GetCompoundKeywords() KeywordCategory
- func (k *Keywords) GetDMLKeywordType(s string) (models.TokenType, bool)
- func (k *Keywords) GetKeyword(word string) (Keyword, bool)
- func (k *Keywords) GetKeywordType(s string) models.TokenType
- func (k *Keywords) GetTokenType(word string) models.TokenType
- func (k *Keywords) IsCompoundKeyword(s string) bool
- func (k *Keywords) IsCompoundKeywordStart(word string) bool
- func (k *Keywords) IsDMLKeyword(s string) bool
- func (k *Keywords) IsKeyword(s string) bool
- func (k *Keywords) IsReserved(s string) bool
- type SQLDialect
Constants ¶
This section is empty.
Variables ¶
var ADDITIONAL_KEYWORDS = []Keyword{ {Word: "BETWEEN", Type: models.TokenTypeBetween, Reserved: true, ReservedForTableAlias: false}, {Word: "IS", Type: models.TokenTypeIs, Reserved: true, ReservedForTableAlias: false}, {Word: "NULL", Type: models.TokenTypeNull, Reserved: true, ReservedForTableAlias: false}, {Word: "TRUE", Type: models.TokenTypeTrue, Reserved: true, ReservedForTableAlias: false}, {Word: "FALSE", Type: models.TokenTypeFalse, Reserved: true, ReservedForTableAlias: false}, {Word: "ASC", Type: models.TokenTypeAsc, Reserved: true, ReservedForTableAlias: false}, {Word: "DESC", Type: models.TokenTypeDesc, Reserved: true, ReservedForTableAlias: false}, {Word: "CASE", Type: models.TokenTypeCase, Reserved: true, ReservedForTableAlias: false}, {Word: "WHEN", Type: models.TokenTypeWhen, Reserved: true, ReservedForTableAlias: false}, {Word: "THEN", Type: models.TokenTypeThen, Reserved: true, ReservedForTableAlias: false}, {Word: "ELSE", Type: models.TokenTypeElse, Reserved: true, ReservedForTableAlias: false}, {Word: "END", Type: models.TokenTypeEnd, Reserved: true, ReservedForTableAlias: false}, }
var MYSQL_SPECIFIC = []Keyword{ {Word: "BINARY", Type: models.TokenTypeKeyword}, {Word: "CHAR", Type: models.TokenTypeKeyword}, {Word: "DATETIME", Type: models.TokenTypeKeyword}, {Word: "DECIMAL", Type: models.TokenTypeKeyword}, {Word: "UNSIGNED", Type: models.TokenTypeKeyword}, {Word: "ZEROFILL", Type: models.TokenTypeKeyword}, {Word: "FORCE", Type: models.TokenTypeKeyword}, {Word: "IGNORE", Type: models.TokenTypeKeyword}, {Word: "INDEX", Type: models.TokenTypeKeyword}, {Word: "KEY", Type: models.TokenTypeKeyword}, {Word: "KEYS", Type: models.TokenTypeKeyword}, {Word: "KILL", Type: models.TokenTypeKeyword}, {Word: "OPTION", Type: models.TokenTypeKeyword}, {Word: "PURGE", Type: models.TokenTypeKeyword}, {Word: "READ", Type: models.TokenTypeKeyword}, {Word: "WRITE", Type: models.TokenTypeKeyword}, {Word: "STATUS", Type: models.TokenTypeKeyword}, {Word: "VARIABLES", Type: models.TokenTypeKeyword}, }
MySQL specific keywords
var POSTGRESQL_SPECIFIC = []Keyword{ {Word: "MATERIALIZED", Type: models.TokenTypeKeyword}, {Word: "ILIKE", Type: models.TokenTypeKeyword}, {Word: "SIMILAR", Type: models.TokenTypeKeyword}, {Word: "FREEZE", Type: models.TokenTypeKeyword}, {Word: "ANALYSE", Type: models.TokenTypeKeyword}, {Word: "ANALYZE", Type: models.TokenTypeKeyword}, {Word: "CONCURRENTLY", Type: models.TokenTypeKeyword}, {Word: "REINDEX", Type: models.TokenTypeKeyword}, {Word: "TOAST", Type: models.TokenTypeKeyword}, {Word: "NOWAIT", Type: models.TokenTypeKeyword}, {Word: "RECURSIVE", Type: models.TokenTypeKeyword}, {Word: "RETURNING", Type: models.TokenTypeKeyword}, }
PostgreSQL specific keywords
var RESERVED_FOR_TABLE_ALIAS = []Keyword{ {Word: "AS", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "WITH", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "EXPLAIN", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "ANALYZE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "SELECT", Type: models.TokenTypeSelect, Reserved: true, ReservedForTableAlias: true}, {Word: "WHERE", Type: models.TokenTypeWhere, Reserved: true, ReservedForTableAlias: true}, {Word: "GROUP", Type: models.TokenTypeGroup, Reserved: true, ReservedForTableAlias: true}, {Word: "SORT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "HAVING", Type: models.TokenTypeHaving, Reserved: true, ReservedForTableAlias: true}, {Word: "ORDER", Type: models.TokenTypeOrder, Reserved: true, ReservedForTableAlias: true}, {Word: "PIVOT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "UNPIVOT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "TOP", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "LATERAL", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "VIEW", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "LIMIT", Type: models.TokenTypeLimit, Reserved: true, ReservedForTableAlias: true}, {Word: "OFFSET", Type: models.TokenTypeOffset, Reserved: true, ReservedForTableAlias: true}, {Word: "FETCH", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "UNION", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "EXCEPT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "INTERSECT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "MINUS", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "ON", Type: models.TokenTypeOn, Reserved: true, ReservedForTableAlias: true}, {Word: "JOIN", Type: models.TokenTypeJoin, Reserved: true, ReservedForTableAlias: true}, {Word: "INNER", Type: models.TokenTypeInner, Reserved: true, ReservedForTableAlias: true}, {Word: "CROSS", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "FULL", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "LEFT", Type: models.TokenTypeLeft, Reserved: true, ReservedForTableAlias: true}, {Word: "RIGHT", Type: models.TokenTypeRight, Reserved: true, ReservedForTableAlias: true}, {Word: "NATURAL", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "USING", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "CLUSTER", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "DISTRIBUTE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "GLOBAL", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "ANTI", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "SEMI", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "RETURNING", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "ASOF", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "MATCH_CONDITION", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "OUTER", Type: models.TokenTypeOuter, Reserved: true, ReservedForTableAlias: true}, {Word: "SET", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "QUALIFY", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "WINDOW", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "END", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "FOR", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "PARTITION", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "PREWHERE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "SETTINGS", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "FORMAT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "START", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "CONNECT", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "AND", Type: models.TokenTypeAnd, Reserved: true, ReservedForTableAlias: true}, {Word: "LIKE", Type: models.TokenTypeLike, Reserved: true, ReservedForTableAlias: true}, {Word: "ASC", Type: models.TokenTypeAsc, Reserved: true, ReservedForTableAlias: true}, {Word: "MATCH_RECOGNIZE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "SAMPLE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "TABLESAMPLE", Type: models.TokenTypeKeyword, Reserved: true, ReservedForTableAlias: true}, {Word: "FROM", Type: models.TokenTypeFrom, Reserved: true, ReservedForTableAlias: true}, {Word: "BY", Type: models.TokenTypeBy, Reserved: true, ReservedForTableAlias: true}, {Word: "OR", Type: models.TokenTypeOr, Reserved: true, ReservedForTableAlias: true}, {Word: "NOT", Type: models.TokenTypeNot, Reserved: true, ReservedForTableAlias: true}, {Word: "IN", Type: models.TokenTypeIn, Reserved: true, ReservedForTableAlias: true}, {Word: "COUNT", Type: models.TokenTypeCount, Reserved: true, ReservedForTableAlias: true}, {Word: "SUM", Type: models.TokenTypeSum, Reserved: true, ReservedForTableAlias: true}, {Word: "AVG", Type: models.TokenTypeAvg, Reserved: true, ReservedForTableAlias: true}, {Word: "MIN", Type: models.TokenTypeMin, Reserved: true, ReservedForTableAlias: true}, {Word: "MAX", Type: models.TokenTypeMax, Reserved: true, ReservedForTableAlias: true}, }
Reserved keywords that can't be used as table aliases
var SQLITE_SPECIFIC = []Keyword{ {Word: "ABORT", Type: models.TokenTypeKeyword}, {Word: "ACTION", Type: models.TokenTypeKeyword}, {Word: "AFTER", Type: models.TokenTypeKeyword}, {Word: "ATTACH", Type: models.TokenTypeKeyword}, {Word: "AUTOINCREMENT", Type: models.TokenTypeKeyword}, {Word: "CONFLICT", Type: models.TokenTypeKeyword}, {Word: "DATABASE", Type: models.TokenTypeKeyword}, {Word: "DETACH", Type: models.TokenTypeKeyword}, {Word: "EXCLUSIVE", Type: models.TokenTypeKeyword}, {Word: "INDEXED", Type: models.TokenTypeKeyword}, {Word: "INSTEAD", Type: models.TokenTypeKeyword}, {Word: "PLAN", Type: models.TokenTypeKeyword}, {Word: "QUERY", Type: models.TokenTypeKeyword}, {Word: "RAISE", Type: models.TokenTypeKeyword}, {Word: "REPLACE", Type: models.TokenTypeKeyword}, {Word: "TEMP", Type: models.TokenTypeKeyword}, {Word: "TEMPORARY", Type: models.TokenTypeKeyword}, {Word: "VACUUM", Type: models.TokenTypeKeyword}, {Word: "VIRTUAL", Type: models.TokenTypeKeyword}, }
SQLite specific keywords
Functions ¶
This section is empty.
Types ¶
type KeywordCategory ¶
KeywordCategory represents a category of SQL keywords
type Keywords ¶
type Keywords struct { // Keyword categories DMLKeywords KeywordCategory CompoundKeywords KeywordCategory // contains filtered or unexported fields }
Keywords holds all SQL keyword categories and configuration
func New ¶
func New(dialect SQLDialect, ignoreCase bool) *Keywords
addKeywordsWithCategory is a helper method to add multiple keywords New creates a new Keywords instance with the specified dialect and case sensitivity
func (*Keywords) AddKeyword ¶
func (*Keywords) GetCompoundKeywordType ¶
GetCompoundKeywordType returns the token type for a compound keyword
func (*Keywords) GetCompoundKeywords ¶
func (k *Keywords) GetCompoundKeywords() KeywordCategory
GetCompoundKeywords returns the compound keywords map
func (*Keywords) GetDMLKeywordType ¶
GetDMLKeywordType returns the token type for a DML keyword
func (*Keywords) GetKeywordType ¶
GetKeywordType returns the token type for a keyword
func (*Keywords) GetTokenType ¶
GetTokenType returns the token type for a given keyword
func (*Keywords) IsCompoundKeyword ¶
IsCompoundKeyword checks if a string is a compound keyword
func (*Keywords) IsCompoundKeywordStart ¶
IsCompoundKeywordStart checks if a word can start a compound keyword
func (*Keywords) IsDMLKeyword ¶
IsDMLKeyword checks if a given string is a DML keyword
func (*Keywords) IsReserved ¶
IsReserved checks if a keyword is reserved
type SQLDialect ¶
type SQLDialect string
SQLDialect represents different SQL dialects
const ( DialectUnknown SQLDialect = "unknown" DialectGeneric SQLDialect = "generic" DialectMySQL SQLDialect = "mysql" DialectPostgreSQL SQLDialect = "postgresql" DialectSQLite SQLDialect = "sqlite" )