xsql_parser_tree_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. package xsql
  2. import (
  3. "fmt"
  4. "reflect"
  5. "strings"
  6. "testing"
  7. )
  8. func TestParser_ParseTree(t *testing.T) {
  9. var tests = []struct {
  10. s string
  11. stmt Statement
  12. err string
  13. }{
  14. {
  15. s: `CREATE STREAM demo (
  16. USERID BIGINT,
  17. ) WITH (DATASOURCE="users", FORMAT="JSON", KEY="USERID");`,
  18. stmt: &StreamStmt{
  19. Name: StreamName("demo"),
  20. StreamFields: []StreamField{
  21. {Name: "USERID", FieldType: &BasicType{Type: BIGINT}},
  22. },
  23. Options: map[string]string{
  24. "DATASOURCE" : "users",
  25. "FORMAT" : "JSON",
  26. "KEY" : "USERID",
  27. },
  28. },
  29. },
  30. {
  31. s: `SHOW STREAMS`,
  32. stmt: &ShowStreamsStatement{},
  33. },
  34. {
  35. s: `SHOW STREAMSf`,
  36. stmt: nil,
  37. err: `found "STREAMSf", expected keyword streams.`,
  38. },
  39. {
  40. s: `SHOW STREAMS d`,
  41. stmt: nil,
  42. err: `found "d", expected semecolon or EOF.`,
  43. },
  44. {
  45. s: `DESCRIBE STREAM demo`,
  46. stmt: &DescribeStreamStatement{
  47. Name: "demo",
  48. },
  49. err: ``,
  50. },
  51. {
  52. s: `EXPLAIN STREAM demo1`,
  53. stmt: &ExplainStreamStatement{
  54. Name: "demo1",
  55. },
  56. err: ``,
  57. },
  58. {
  59. s: `DROP STREAM demo1`,
  60. stmt: &DropStreamStatement{
  61. Name: "demo1",
  62. },
  63. err: ``,
  64. },
  65. }
  66. fmt.Printf("The test bucket size is %d.\n\n", len(tests))
  67. for i, tt := range tests {
  68. p := NewParser(strings.NewReader(tt.s))
  69. stmt, err := Language.Parse(p)
  70. if !reflect.DeepEqual(tt.err, errstring(err)) {
  71. t.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.s, tt.err, err)
  72. } else if tt.err == "" && !reflect.DeepEqual(tt.stmt, stmt) {
  73. t.Errorf("%d. %q\n\nstmt mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.s, tt.stmt, stmt)
  74. }
  75. }
  76. }