diff --git a/go.mod b/go.mod index 6af918b..b16e707 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( github.com/stretchr/testify v1.8.1 - github.com/viant/parsly v0.3.0 + github.com/viant/parsly v0.3.2-0.20231120160314-11ec855ce00a ) require ( diff --git a/go.sum b/go.sum index 255b483..49dae7c 100644 --- a/go.sum +++ b/go.sum @@ -125,6 +125,10 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/viant/assertly v0.9.0/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/parsly v0.3.0 h1:UR4/ml87j4StdEa+CeSicKlW+pXMMFx0J+U95YcfE0o= github.com/viant/parsly v0.3.0/go.mod h1:4PKQzioRT9R99ceIhZ6tCD3tp0H0n2dEoIOaLulVvrg= +github.com/viant/parsly v0.3.2-0.20231120155145-7e5a15fa9a7f h1:yKoMkkyqy095iRe6wRfvo+q0ZQ0yblFOB5Ev7PBM6GU= +github.com/viant/parsly v0.3.2-0.20231120155145-7e5a15fa9a7f/go.mod h1:4PKQzioRT9R99ceIhZ6tCD3tp0H0n2dEoIOaLulVvrg= +github.com/viant/parsly v0.3.2-0.20231120160314-11ec855ce00a h1:H+7xS8C8Ywjxc0EfiKL9m+A7AF6JqkJKu5W+7zus/W0= +github.com/viant/parsly v0.3.2-0.20231120160314-11ec855ce00a/go.mod h1:4PKQzioRT9R99ceIhZ6tCD3tp0H0n2dEoIOaLulVvrg= github.com/viant/toolbox v0.34.5/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= diff --git a/lex.go b/lex.go index 5cb3ab4..a81784d 100644 --- a/lex.go +++ b/lex.go @@ -70,10 +70,10 @@ const ( var whitespaceMatcher = parsly.NewToken(whitespaceCode, "whitespace", matcher.NewWhiteSpace()) var parenthesesMatcher = parsly.NewToken(parenthesesCode, "()", matcher.NewBlock('(', ')', '\\')) var nextMatcher = parsly.NewToken(nextCode, ",", matcher.NewByte(',')) -var asKeywordMatcher = parsly.NewToken(asKeyword, "AS", matcher.NewFragment("as", &option.Case{})) +var asKeywordMatcher = parsly.NewToken(asKeyword, "AS", matcher.NewKeyword("as", &option.Case{})) var starTokenMatcher = parsly.NewToken(starTokenCode, "*", matcher.NewByte('*')) -var notOperatorMatcher = parsly.NewToken(notOperator, "NOT", matcher.NewFragment("not", &option.Case{})) -var nullMatcher = parsly.NewToken(nullTokenCode, "NULL", matcher.NewFragment("null", &option.Case{})) +var notOperatorMatcher = parsly.NewToken(notOperator, "NOT", matcher.NewKeyword("not", &option.Case{})) +var nullMatcher = parsly.NewToken(nullTokenCode, "NULL", matcher.NewKeyword("null", &option.Case{})) var selectionKindMatcher = parsly.NewToken(selectionKindCode, "ALL|DISTINCT|STRUCT", matcher.NewSet([]string{ "ALL", "DISTINCT", "STRUCT", }, &option.Case{})) @@ -84,11 +84,11 @@ var caseBlockMatcher = parsly.NewToken(caseBlock, "CASE", matcher.NewSeqBlock("C var commentBlockMatcher = parsly.NewToken(commentBlock, "/* */", matcher.NewSeqBlock("/*", "*/")) var inlineCommentMatcher = parsly.NewToken(commentBlock, "--", matcher.NewSeqBlock("--", "\n")) -var selectKeywordMatcher = parsly.NewToken(selectKeyword, "SELECT", matcher.NewFragment("select", &option.Case{})) -var exceptKeywordMatcher = parsly.NewToken(exceptKeyword, "EXCEPT", matcher.NewFragment("except", &option.Case{})) -var betweenKeywordMatcher = parsly.NewToken(betweenToken, "BETWEEN", matcher.NewFragment("between", &option.Case{})) +var selectKeywordMatcher = parsly.NewToken(selectKeyword, "SELECT", matcher.NewKeyword("select", &option.Case{})) +var exceptKeywordMatcher = parsly.NewToken(exceptKeyword, "EXCEPT", matcher.NewKeyword("except", &option.Case{})) +var betweenKeywordMatcher = parsly.NewToken(betweenToken, "BETWEEN", matcher.NewKeyword("between", &option.Case{})) -var fromKeywordMatcher = parsly.NewToken(fromKeyword, "FROM", matcher.NewFragment("from", &option.Case{})) +var fromKeywordMatcher = parsly.NewToken(fromKeyword, "FROM", matcher.NewKeyword("from", &option.Case{})) var joinMatcher = parsly.NewToken(joinToken, "LEFT OUTER JOIN|LEFT JOIN|JOIN", matcher.NewSpacedSet([]string{ "left outer join", "cross join", @@ -103,22 +103,22 @@ var keyMatcher = parsly.NewToken(keyTokenCode, "[RANGE|HASH|PRIMARY] KEY", match "primary key", }, &option.Case{})) -var onKeywordMatcher = parsly.NewToken(onKeyword, "ON", matcher.NewFragment("on", &option.Case{})) +var onKeywordMatcher = parsly.NewToken(onKeyword, "ON", matcher.NewKeyword("on", &option.Case{})) -var whereKeywordMatcher = parsly.NewToken(whereKeyword, "WHERE", matcher.NewFragment("where", &option.Case{})) +var whereKeywordMatcher = parsly.NewToken(whereKeyword, "WHERE", matcher.NewKeyword("where", &option.Case{})) var groupByMatcher = parsly.NewToken(groupByKeyword, "GROUP BY", matcher.NewSpacedFragment("group by", &option.Case{})) -var havingKeywordMatcher = parsly.NewToken(havingKeyword, "HAVING", matcher.NewFragment("having", &option.Case{})) +var havingKeywordMatcher = parsly.NewToken(havingKeyword, "HAVING", matcher.NewKeyword("having", &option.Case{})) var orderByKeywordMatcher = parsly.NewToken(orderByKeyword, "ORDER BY", matcher.NewSpacedFragment("order by", &option.Case{})) var windowMatcher = parsly.NewToken(windowTokenCode, "LIMIT|OFFSET", matcher.NewSet([]string{"limit", "offset"}, &option.Case{})) -var updateKeywordMatcher = parsly.NewToken(updateKeyword, "UPDATE", matcher.NewFragment("update", &option.Case{})) -var setKeywordMatcher = parsly.NewToken(setKeyword, "SET", matcher.NewFragment("set", &option.Case{})) +var updateKeywordMatcher = parsly.NewToken(updateKeyword, "UPDATE", matcher.NewKeyword("update", &option.Case{})) +var setKeywordMatcher = parsly.NewToken(setKeyword, "SET", matcher.NewKeyword("set", &option.Case{})) var insertIntoKeywordMatcher = parsly.NewToken(insertIntoKeyword, "INSERT INTO", matcher.NewSpacedSet([]string{ "insert into"}, &option.Case{})) -var insertValesKeywordMatcher = parsly.NewToken(insertValuesKeyword, "VALUES", matcher.NewFragment("values", &option.Case{})) +var insertValesKeywordMatcher = parsly.NewToken(insertValuesKeyword, "VALUES", matcher.NewKeyword("values", &option.Case{})) var binaryOperatorMatcher = parsly.NewToken(binaryOperator, "binary OPERATOR", matcher.NewSpacedSet([]string{"+", "!=", ">=", "<=", "=", "-", ">", "<", "*", "/", "in", "not in", "is not", "is"}, &option.Case{})) var assignOperatorMatcher = parsly.NewToken(assignOperator, "assign OPERATOR", matcher.NewSpacedSet([]string{"="}, &option.Case{})) @@ -126,7 +126,7 @@ var assignOperatorMatcher = parsly.NewToken(assignOperator, "assign OPERATOR", m var logicalOperatorMatcher = parsly.NewToken(logicalOperator, "AND|OR", matcher.NewSet([]string{"and", "or"}, &option.Case{})) var rangeOperatorMatcher = parsly.NewToken(rangeOperator, ".. AND .. ", matcher.NewSet([]string{"and"}, &option.Case{})) -var nullKeywordMatcher = parsly.NewToken(nullKeyword, "NULL", matcher.NewFragment("null", &option.Case{})) +var nullKeywordMatcher = parsly.NewToken(nullKeyword, "NULL", matcher.NewKeyword("null", &option.Case{})) var boolLiteralMatcher = parsly.NewToken(boolLiteral, "true|false", matcher.NewSet([]string{"true", "false"}, &option.Case{})) var singleQuotedStringLiteralMatcher = parsly.NewToken(singleQuotedStringLiteral, `'...'`, matcher.NewByteQuote('\'', '\\')) var doubleQuotedStringLiteralMatcher = parsly.NewToken(doubleQuotedStringLiteral, `"..."`, matcher.NewByteQuote('\'', '\\')) @@ -140,14 +140,14 @@ var tableMatcher = parsly.NewToken(tableSelectorTokenCode, "TABLE MATCHER", smat var placeholderMatcher = parsly.NewToken(placeholderTokenCode, "SELECTOR", smatcher.NewPlaceholder()) var literalMatcher = parsly.NewToken(literalCode, "LITERAL", matcher.NewNop()) -var withKeywordMatcher = parsly.NewToken(withKeyword, "WITH", matcher.NewFragment("with", &option.Case{})) +var withKeywordMatcher = parsly.NewToken(withKeyword, "WITH", matcher.NewKeyword("with", &option.Case{})) var unionMatcher = parsly.NewToken(unionKeyword, "UNION|UNION ALL", matcher.NewSpacedSet([]string{ "union all", "union", }, &option.Case{})) var exprMatcher = parsly.NewToken(exprToken, ",EXPR", matcher.NewNop()) -var deleteMatcher = parsly.NewToken(deleteCode, "DELETE", matcher.NewFragmentsFold([]byte("delete"))) +var deleteMatcher = parsly.NewToken(deleteCode, "DELETE", matcher.NewKeyword("delete", &option.Case{})) var notNullMatcher = parsly.NewToken(notNullToken, "NOT NULL", matcher.NewSpacedSet([]string{ "not null"}, &option.Case{})) var ifNotExistsMatcher = parsly.NewToken(ifNotExistsToken, "IF NOT EXISTS", matcher.NewSpacedSet([]string{ @@ -159,7 +159,7 @@ var ifExistsMatcher = parsly.NewToken(ifExistsToken, "IF EXISTS", matcher.NewSpa var createTableMatcher = parsly.NewToken(createTableToken, "CREATE TABLE", matcher.NewSpacedSet([]string{ "create table"}, &option.Case{})) -var defaultMatcher = parsly.NewToken(defaultToken, "DEFAULT", matcher.NewFragment("default", &option.Case{})) +var defaultMatcher = parsly.NewToken(defaultToken, "DEFAULT", matcher.NewKeyword("default", &option.Case{})) var dropTableMatcher = parsly.NewToken(dropTableToken, "DROP TABLE", matcher.NewSpacedSet([]string{ "drop table"}, &option.Case{}))