瀏覽代碼

feat(plan): return error for function call

ngjaying 5 年之前
父節點
當前提交
e2a1455804
共有 2 個文件被更改,包括 64 次插入1 次删除
  1. 1 1
      xsql/ast.go
  2. 63 0
      xsql/plans/project_test.go

+ 1 - 1
xsql/ast.go

@@ -859,7 +859,7 @@ func (a multiValuer) Call(name string, args []interface{}) (interface{}, bool) {
 			if v, ok := valuer.Call(name, args); ok {
 				return v, true
 			} else {
-				common.Log.Println(fmt.Sprintf("Found error \"%s\" when call func %s.\n", v, name))
+				return fmt.Errorf("found error \"%s\" when call func %s", v, name), false
 			}
 		}
 	}

+ 63 - 0
xsql/plans/project_test.go

@@ -1352,6 +1352,69 @@ func TestProjectPlanError(t *testing.T) {
 				},
 			},
 			result: errors.New("run Select error: invalid operation string(common string) [] *xsql.BracketEvalResult(&{0 0})"),
+		}, {
+			sql: `SELECT round(a) as r FROM test`,
+			data: &xsql.Tuple{
+				Emitter: "test",
+				Message: xsql.Message{
+					"a": "common string",
+				},
+			},
+			result: errors.New("run Select error: found error \"only float64 & int type are supported\" when call func round"),
+		}, {
+			sql: `SELECT round(a) as r FROM test`,
+			data: &xsql.Tuple{
+				Emitter: "test",
+				Message: xsql.Message{
+					"abc": "common string",
+				},
+			},
+			result: errors.New("run Select error: found error \"only float64 & int type are supported\" when call func round"),
+		}, {
+			sql: "SELECT avg(a) as avg FROM test Inner Join test1 on test.id = test1.id GROUP BY TumblingWindow(ss, 10), test1.color",
+			data: xsql.GroupedTuplesSet{
+				{
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 1, "a": 122.33}},
+							{Emitter: "src2", Message: xsql.Message{"id": 1, "color": "w2"}},
+						},
+					},
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 1, "a": 68.54}},
+							{Emitter: "src2", Message: xsql.Message{"id": 1, "color": "w2"}},
+						},
+					},
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 4, "a": "dde"}},
+							{Emitter: "src2", Message: xsql.Message{"id": 4, "color": "w2"}},
+						},
+					},
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 5, "a": 177.54}},
+							{Emitter: "src2", Message: xsql.Message{"id": 5, "color": "w2"}},
+						},
+					},
+				},
+				{
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 2, "a": 89.03}},
+							{Emitter: "src2", Message: xsql.Message{"id": 2, "color": "w1"}},
+						},
+					},
+					&xsql.JoinTuple{
+						Tuples: []xsql.Tuple{
+							{Emitter: "test", Message: xsql.Message{"id": 4, "a": 14.6}},
+							{Emitter: "src2", Message: xsql.Message{"id": 4, "color": "w1"}},
+						},
+					},
+				},
+			},
+			result: errors.New("run Select error: found error \"%!s(<nil>)\" when call func avg"),
 		},
 	}
 	fmt.Printf("The test bucket size is %d.\n\n", len(tests))