Improve ql to support <ident>.<ident> syntax
This commit is contained in:
+12
-1
@@ -217,7 +217,18 @@ func (p *Parser) parseIdent(t Token) (list ASTNode, err error) {
|
||||
}
|
||||
}
|
||||
|
||||
return p.OnIdent(Ident{Value: t.literal})
|
||||
i := Ident{Value: t.literal}
|
||||
|
||||
if p.peekToken(1).Is(DOT) {
|
||||
p.nextToken()
|
||||
i.Value += "."
|
||||
l2 := p.nextToken()
|
||||
if l2.Is(IDENT) {
|
||||
i.Value += l2.literal
|
||||
}
|
||||
}
|
||||
|
||||
return p.OnIdent(i)
|
||||
}
|
||||
|
||||
func (p *Parser) parseSet() (list ASTSet, err error) {
|
||||
|
||||
@@ -269,6 +269,14 @@ func TestAstParser_ColumnParser(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
in: `a.b`,
|
||||
cols: Columns{
|
||||
Column{
|
||||
Expr: ASTNodes{Ident{Value: "a.b"}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
in: `DATE_FORMAT(some_date, '%Y-%m-01')`,
|
||||
cols: Columns{
|
||||
|
||||
@@ -44,6 +44,7 @@ func NewLexer(r io.Reader) *Lexer {
|
||||
// @todo ensure operator order (eg != is valid, =! is not)
|
||||
&TokenConsumerGeneric{token: OPERATOR, whitelist: CHAR_WHITELIST_OPERATORS},
|
||||
&TokenConsumerGeneric{token: COMMA, whitelist: ",", maxLength: 1},
|
||||
&TokenConsumerGeneric{token: DOT, whitelist: ".", maxLength: 1},
|
||||
&TokenConsumerGeneric{token: PARENTHESIS_OPEN, whitelist: "(", maxLength: 1},
|
||||
&TokenConsumerGeneric{token: PARENTHESIS_CLOSE, whitelist: ")", maxLength: 1},
|
||||
&TokenConsumerString{},
|
||||
|
||||
@@ -19,6 +19,7 @@ const (
|
||||
NUMBER // 4
|
||||
STRING
|
||||
COMMA // ,
|
||||
DOT // .
|
||||
OPERATOR // + - / *
|
||||
PARENTHESIS_OPEN
|
||||
PARENTHESIS_CLOSE
|
||||
|
||||
Reference in New Issue
Block a user