initialize sets up the initial keyword mappings
()
| 64 | |
| 65 | // initialize sets up the initial keyword mappings |
| 66 | func (k *Keywords) initialize() { |
| 67 | // Initialize DML keywords |
| 68 | k.DMLKeywords = map[string]models.TokenType{ |
| 69 | "DISTINCT": models.TokenTypeDistinct, |
| 70 | "ALL": models.TokenTypeAll, |
| 71 | "FETCH": models.TokenTypeFetch, |
| 72 | "NEXT": models.TokenTypeNext, |
| 73 | "ROWS": models.TokenTypeRows, |
| 74 | "ONLY": models.TokenTypeOnly, |
| 75 | "WITH": models.TokenTypeWith, |
| 76 | "TIES": models.TokenTypeTies, |
| 77 | "NULLS": models.TokenTypeNulls, |
| 78 | "FIRST": models.TokenTypeFirst, |
| 79 | "LAST": models.TokenTypeLast, |
| 80 | "PERCENT": models.TokenTypePercent, // SQL-99 FETCH ... PERCENT ROWS |
| 81 | "ROLLUP": models.TokenTypeRollup, // SQL-99 grouping operation |
| 82 | "CUBE": models.TokenTypeCube, // SQL-99 grouping operation |
| 83 | "GROUPING": models.TokenTypeGrouping, // SQL-99 GROUPING SETS |
| 84 | "SETS": models.TokenTypeSets, // SQL-99 GROUPING SETS |
| 85 | "CAST": models.TokenTypeCast, // CAST expression |
| 86 | "INTERVAL": models.TokenTypeInterval, // INTERVAL expression |
| 87 | // Row locking keywords (SQL:2003, PostgreSQL, MySQL) |
| 88 | "FOR": models.TokenTypeFor, |
| 89 | "SHARE": models.TokenTypeShare, |
| 90 | "NOWAIT": models.TokenTypeNoWait, |
| 91 | "SKIP": models.TokenTypeSkip, |
| 92 | "LOCKED": models.TokenTypeLocked, |
| 93 | "OF": models.TokenTypeOf, |
| 94 | } |
| 95 | |
| 96 | // Initialize compound keywords |
| 97 | k.CompoundKeywords = map[string]models.TokenType{ |
| 98 | "FULL JOIN": models.TokenTypeKeyword, |
| 99 | "CROSS JOIN": models.TokenTypeKeyword, |
| 100 | "NATURAL JOIN": models.TokenTypeKeyword, |
| 101 | "GROUP BY": models.TokenTypeKeyword, |
| 102 | "ORDER BY": models.TokenTypeKeyword, |
| 103 | "LEFT JOIN": models.TokenTypeKeyword, |
| 104 | "GROUPING SETS": models.TokenTypeKeyword, // SQL-99 grouping operation |
| 105 | } |
| 106 | |
| 107 | // Add all keywords to the main keyword map |
| 108 | for word, tokenType := range k.DMLKeywords { |
| 109 | k.keywordMap[word] = Keyword{ |
| 110 | Word: word, |
| 111 | Type: tokenType, |
| 112 | Reserved: true, |
| 113 | } |
| 114 | k.reservedKeywords[word] = true |
| 115 | } |
| 116 | |
| 117 | for word, tokenType := range k.CompoundKeywords { |
| 118 | k.keywordMap[word] = Keyword{ |
| 119 | Word: word, |
| 120 | Type: tokenType, |
| 121 | Reserved: true, |
| 122 | } |
| 123 | k.reservedKeywords[word] = true |