package token

import (
	"github.com/cloudspannerecosystem/memefish/char"
)

var Keywords = []TokenKind{
	"ALL",
	"AND",
	"ANY",
	"ARRAY",
	"AS",
	"ASC",
	"ASSERT_ROWS_MODIFIED",
	"AT",
	"BETWEEN",
	"BY",
	"CASE",
	"CAST",
	"COLLATE",
	"CONTAINS",
	"CREATE",
	"CROSS",
	"CUBE",
	"CURRENT",
	"DEFAULT",
	"DEFINE",
	"DESC",
	"DISTINCT",
	"ELSE",
	"END",
	"ENUM",
	"ESCAPE",
	"EXCEPT",
	"EXCLUDE",
	"EXISTS",
	"EXTRACT",
	"FALSE",
	"FETCH",
	"FOLLOWING",
	"FOR",
	"FROM",
	"FULL",
	"GRAPH_TABLE",
	"GROUP",
	"GROUPING",
	"GROUPS",
	"HASH",
	"HAVING",
	"IGNORE",
	"IF",
	"IN",
	"INNER",
	"INTERSECT",
	"INTERVAL",
	"INTO",
	"IS",
	"JOIN",
	"LATERAL",
	"LEFT",
	"LIKE",
	"LIMIT",
	"LOOKUP",
	"MERGE",
	"NATURAL",
	"NEW",
	"NO",
	"NOT",
	"NULL",
	"NULLS",
	"OF",
	"ON",
	"OR",
	"ORDER",
	"OUTER",
	"OVER",
	"PARTITION",
	"PRECEDING",
	"PROTO",
	"RANGE",
	"RECURSIVE",
	"RESPECT",
	"RIGHT",
	"ROLLUP",
	"ROWS",
	"SELECT",
	"SET",
	"SOME",
	"STRUCT",
	"TABLESAMPLE",
	"THEN",
	"TO",
	"TREAT",
	"TRUE",
	"UNBOUNDED",
	"UNION",
	"UNNEST",
	"USING",
	"WHEN",
	"WHERE",
	"WINDOW",
	"WITH",
	"WITHIN",
}

var KeywordsMap map[TokenKind]struct{}

func init() {
	KeywordsMap = make(map[TokenKind]struct{})
	for _, k := range Keywords {
		KeywordsMap[k] = struct{}{}
	}
}

func IsKeyword(s string) bool {
	_, ok := KeywordsMap[TokenKind(char.ToUpper(s))]
	return ok
}
