xsql_parser_tree_test.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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: `CREATE TABLE demo (
  32. USERID BIGINT,
  33. ) WITH (DATASOURCE="users", FORMAT="JSON", KEY="USERID");`,
  34. stmt: &StreamStmt{
  35. Name: StreamName("demo"),
  36. StreamFields: []StreamField{
  37. {Name: "USERID", FieldType: &BasicType{Type: BIGINT}},
  38. },
  39. Options: map[string]string{
  40. "DATASOURCE": "users",
  41. "FORMAT": "JSON",
  42. "KEY": "USERID",
  43. },
  44. StreamType: TypeTable,
  45. },
  46. },
  47. {
  48. s: `SHOW STREAMS`,
  49. stmt: &ShowStreamsStatement{},
  50. },
  51. {
  52. s: `SHOW TABLES`,
  53. stmt: &ShowTablesStatement{},
  54. },
  55. {
  56. s: `SHOW STREAMSf`,
  57. stmt: nil,
  58. err: `found "STREAMSf", expected keyword streams or tables.`,
  59. },
  60. {
  61. s: `SHOW STREAMS d`,
  62. stmt: nil,
  63. err: `found "d", expected semecolon or EOF.`,
  64. },
  65. {
  66. s: `DESCRIBE STREAM demo`,
  67. stmt: &DescribeStreamStatement{
  68. Name: "demo",
  69. },
  70. err: ``,
  71. },
  72. {
  73. s: `EXPLAIN STREAM demo1`,
  74. stmt: &ExplainStreamStatement{
  75. Name: "demo1",
  76. },
  77. err: ``,
  78. },
  79. {
  80. s: `DROP STREAM demo1`,
  81. stmt: &DropStreamStatement{
  82. Name: "demo1",
  83. },
  84. err: ``,
  85. },
  86. {
  87. s: `DESCRIBE TABLE demo`,
  88. stmt: &DescribeTableStatement{
  89. Name: "demo",
  90. },
  91. err: ``,
  92. },
  93. {
  94. s: `EXPLAIN TABLE demo1`,
  95. stmt: &ExplainTableStatement{
  96. Name: "demo1",
  97. },
  98. err: ``,
  99. },
  100. {
  101. s: `DROP TABLE demo1`,
  102. stmt: &DropTableStatement{
  103. Name: "demo1",
  104. },
  105. err: ``,
  106. },
  107. }
  108. fmt.Printf("The test bucket size is %d.\n\n", len(tests))
  109. for i, tt := range tests {
  110. p := NewParser(strings.NewReader(tt.s))
  111. stmt, err := Language.Parse(p)
  112. if !reflect.DeepEqual(tt.err, errstring(err)) {
  113. t.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.s, tt.err, err)
  114. } else if tt.err == "" && !reflect.DeepEqual(tt.stmt, stmt) {
  115. t.Errorf("%d. %q\n\nstmt mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.s, tt.stmt, stmt)
  116. }
  117. }
  118. }