feat: parse IsDistinct
This commit is contained in:
parent
bc644c3640
commit
325f660a04
19
q/parse.go
19
q/parse.go
@ -136,6 +136,11 @@ func findQueryType(p *parser) (string, error) {
|
||||
func parseSelectStatement(p *parser) error {
|
||||
selectQuery := p.query.(*Select)
|
||||
|
||||
distinctErr := parseDistinct(p)
|
||||
if distinctErr != nil {
|
||||
return distinctErr
|
||||
}
|
||||
|
||||
foundWildcard, _ := p.findToken(func(t Token) bool {
|
||||
return t.Type == sqllexer.WILDCARD
|
||||
})
|
||||
@ -170,6 +175,20 @@ func parseSelectStatement(p *parser) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseDistinct(p *parser) error {
|
||||
selectQuery := p.query.(*Select)
|
||||
|
||||
foundDistinctKeyword, _ := p.findToken(func(t Token) bool {
|
||||
return t.Type == sqllexer.KEYWORD && strings.ToUpper(t.Value) == "DISTINCT"
|
||||
})
|
||||
|
||||
if foundDistinctKeyword != nil {
|
||||
selectQuery.IsDistinct = true
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseSelectColumns(p *parser) error {
|
||||
selectQuery := p.query.(*Select)
|
||||
|
||||
|
@ -43,6 +43,23 @@ func TestParseSelectStatement_StateMachine(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "SELECT DISTINCT username, email FROM users",
|
||||
expected: &Select{
|
||||
Type: SELECT,
|
||||
IsDistinct: true,
|
||||
Table: Table{Name: "users"},
|
||||
IsWildcard: false,
|
||||
Columns: []Column{
|
||||
{
|
||||
Name: "username",
|
||||
},
|
||||
{
|
||||
Name: "email",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
input: "SELECT CustomerName AS Customer, City AS town FROM Customers AS People",
|
||||
expected: &Select{
|
||||
@ -229,6 +246,9 @@ func TestParseSelectStatement_StateMachine(t *testing.T) {
|
||||
if answerAsSelect.Table.Alias != expected.Table.Alias {
|
||||
t.Errorf("got %s for Select.Table.Alias, expected %s", answerAsSelect.Table.Alias, expected.Table.Alias)
|
||||
}
|
||||
if answerAsSelect.IsDistinct != expected.IsDistinct {
|
||||
t.Errorf("got %v for Select.IsDistinct, expected %v", answerAsSelect.IsDistinct, expected.IsDistinct)
|
||||
}
|
||||
|
||||
if len(answerAsSelect.Columns) != len(expected.Columns) {
|
||||
t.Errorf("got %d number of columns for Select.Columns, expected %d", len(answerAsSelect.Columns), len(expected.Columns))
|
||||
|
Loading…
x
Reference in New Issue
Block a user