feat: parse IsDistinct

This commit is contained in:
Yehoshua Sandler 2025-05-13 18:27:23 -05:00
parent bc644c3640
commit 325f660a04
2 changed files with 39 additions and 0 deletions

View File

@ -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)

View File

@ -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))