query-interpreter/q/parse_test.go

55 lines
1.1 KiB
Go

package q
import (
"fmt"
"testing"
)
type ParsingTest struct {
input string
expected Query
}
func TestParseSelectStatement_StateMachine(t *testing.T) {
var testSqlStatements = []ParsingTest{
{
input: "SELECT * FROM users WHERE age >= 30",
expected: &Select{
Type: SELECT,
Table: Table{Name: "users"},
IsWildcard: true,
Conditionals: []Conditional{
{
Key: "age",
Operator: ">=",
Value: "30",
},
},
},
},
}
for _, sql := range testSqlStatements {
testName := fmt.Sprintf("%s", sql.input)
expected := sql.expected.(*Select)
t.Run(testName, func(t *testing.T) {
answer, err := Parse(sql.input)
if err != nil {
t.Error(err)
return
}
answerAsSelect := answer.(*Select)
if answerAsSelect.Type != expected.Type {
t.Errorf("got %d for Select.Type, expected %d", answerAsSelect.Type, expected.Type)
}
if answerAsSelect.IsWildcard != expected.IsWildcard {
t.Errorf("got %#v for Select.IsWildcard, expected %#v", answerAsSelect.IsWildcard, expected.IsWildcard)
}
})
}
}