expression_evaluator_test.go 639 B

12345678910111213141516171819202122232425262728293031
  1. package xsql
  2. import (
  3. "fmt"
  4. "strings"
  5. "testing"
  6. )
  7. func TestEE(t *testing.T) {
  8. //stmt, err := NewParser(strings.NewReader(`SELECT * FROM TBL AS t1 WHERE t1.a*2+3>25 AND t1.b='hello'`)).Parse()
  9. stmt, err := NewParser(strings.NewReader(`SELECT abc FROM tbl WHERE abc*2+3 > 12 AND abc < 20`)).Parse()
  10. if err != nil {
  11. t.Errorf("%s.\n", err)
  12. return
  13. }
  14. d := []byte(`{"abc":21, "def":"hello"}`)
  15. ee := newExpressionEvaluator(d)
  16. Walk(ee, stmt.Condition)
  17. if ee.operands.Len() <= 0 {
  18. t.Error("No operands evaluated")
  19. } else {
  20. for {
  21. if ee.operands.Len() <= 0 {
  22. break
  23. }
  24. fmt.Printf("%s\n", ee.operands.Pop())
  25. }
  26. }
  27. }