Browse Source

change to the real func parser.

RockyJin 5 years atrás
parent
commit
665c5388bd
2 changed files with 73 additions and 74 deletions
  1. 2 2
      xsql/ast_agg_stmt_test.go
  2. 71 72
      xsql/parser_test.go

+ 2 - 2
xsql/ast_agg_stmt_test.go

@@ -14,8 +14,8 @@ func TestIsAggStatement(t *testing.T) {
 		err  string
 	}{
 		{s: `SELECT avg(1) FROM tbl`,agg: true},
-		{s: `SELECT test(1) FROM tbl`,agg: false},
-		{s: `SELECT test(avg(f1)) FROM tbl`,agg: true},
+		{s: `SELECT sin(1) FROM tbl`,agg: false},
+		{s: `SELECT sin(avg(f1)) FROM tbl`,agg: true},
 
 		{s: `SELECT sum(f1) FROM tbl GROUP by f1`,agg: true},
 		{s: `SELECT f1 FROM tbl GROUP by f1`,agg: true},

+ 71 - 72
xsql/parser_test.go

@@ -198,14 +198,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample0("test") FROM tbl`,
+			s: `SELECT length("test") FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample0",
+						Name:  "length",
 						Expr: &Call{
-							Name: "sample0",
+							Name: "length",
 							Args: []Expr{&StringLiteral{Val: "test"}},
 						},
 					},
@@ -215,14 +215,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample1(test) FROM tbl`,
+			s: `SELECT length(test) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample1",
+						Name:  "length",
 						Expr: &Call{
-							Name: "sample1",
+							Name: "length",
 							Args: []Expr{&FieldRef{Name: "test"}},
 						},
 					},
@@ -233,14 +233,14 @@ func TestParser_ParseStatement(t *testing.T) {
 
 
 		{
-			s: `SELECT sample2(123) FROM tbl`,
+			s: `SELECT sin(123) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample2",
+						Name:  "sin",
 						Expr: &Call{
-							Name: "sample2",
+							Name: "sin",
 							Args: []Expr{&IntegerLiteral{Val: 123}},
 						},
 					},
@@ -250,15 +250,15 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample3(123, "abc") FROM tbl`,
+			s: `SELECT lpad("abc", 123) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample3",
+						Name:  "lpad",
 						Expr: &Call{
-							Name: "sample3",
-							Args: []Expr{&IntegerLiteral{Val: 123}, &StringLiteral{Val: "abc"}},
+							Name: "lpad",
+							Args: []Expr{&StringLiteral{Val: "abc"}, &IntegerLiteral{Val: 123}},
 						},
 					},
 				},
@@ -267,14 +267,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample3() FROM tbl`,
+			s: `SELECT newuuid() FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample3",
+						Name:  "newuuid",
 						Expr: &Call{
-							Name: "sample3",
+							Name: "newuuid",
 							Args: nil,
 						},
 					},
@@ -284,17 +284,16 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample4("abc", 1234, field1) FROM tbl`,
+			s: `SELECT indexof("abc", field1) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample4",
+						Name:  "indexof",
 						Expr: &Call{
-							Name: "sample4",
+							Name: "indexof",
 							Args: []Expr{
 								&StringLiteral{Val: "abc"},
-								&IntegerLiteral{Val: 1234},
 								&FieldRef{Name: "field1"},
 							},
 						},
@@ -305,17 +304,17 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample2(sample1(test),1) FROM tbl`,
+			s: `SELECT lpad(lower(test),1) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample2",
+						Name:  "lpad",
 						Expr: &Call{
-							Name: "sample2",
+							Name: "lpad",
 							Args: []Expr{
 								&Call{
-									Name: "sample1",
+									Name: "lower",
 									Args: []Expr{
 										&FieldRef{Name: "test"},
 									},
@@ -330,17 +329,17 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample2(sample1(test),1) AS field1 FROM tbl`,
+			s: `SELECT lpad(lower(test),1) AS field1 FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "field1",
-						Name:  "sample2",
+						Name:  "lpad",
 						Expr: &Call{
-							Name: "sample2",
+							Name: "lpad",
 							Args: []Expr{
 								&Call{
-									Name: "sample1",
+									Name: "lower",
 									Args: []Expr{
 										&FieldRef{Name: "test"},
 									},
@@ -355,17 +354,17 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample2(sample1("test")) FROM tbl`,
+			s: `SELECT length(lower("test")) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample2",
+						Name:  "length",
 						Expr: &Call{
-							Name: "sample2",
+							Name: "length",
 							Args: []Expr{
 								&Call{
-									Name: "sample1",
+									Name: "lower",
 									Args: []Expr{
 										&StringLiteral{Val: "test"},
 									},
@@ -615,14 +614,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(abc*2 + 3) FROM tbl`,
+			s: `SELECT ln(abc*2 + 3) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "ln",
 						Expr: &Call{
-							Name: "sample",
+							Name: "ln",
 							Args: []Expr{
 								&BinaryExpr{
 									LHS: &BinaryExpr{
@@ -642,14 +641,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(t1.abc*2 + 3) FROM tbl AS t1`,
+			s: `SELECT ln(t1.abc*2 + 3) FROM tbl AS t1`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "ln",
 						Expr: &Call{
-							Name: "sample",
+							Name: "ln",
 							Args: []Expr{
 								&BinaryExpr{
 									LHS: &BinaryExpr{
@@ -669,15 +668,16 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(abc*2 + 3, "param2") FROM tbl`,
+			s: `SELECT lpad("param2", abc*2 + 3) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "lpad",
 						Expr: &Call{
-							Name: "sample",
+							Name: "lpad",
 							Args: []Expr{
+								&StringLiteral{Val: "param2"},
 								&BinaryExpr{
 									LHS: &BinaryExpr{
 										LHS: &FieldRef{Name: "abc"},
@@ -687,7 +687,6 @@ func TestParser_ParseStatement(t *testing.T) {
 									OP:  ADD,
 									RHS: &IntegerLiteral{Val: 3},
 								},
-								&StringLiteral{Val: "param2"},
 							},
 						},
 					},
@@ -725,14 +724,14 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(.2) FROM tbl`,
+			s: `SELECT sin(.2) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "sin",
 						Expr: &Call{
-							Name: "sample",
+							Name: "sin",
 							Args: []Expr{&NumberLiteral{Val: 0.2}},
 						},
 					},
@@ -742,15 +741,15 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(.2, "abc") FROM tbl`,
+			s: `SELECT power(.2, 4) FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "power",
 						Expr: &Call{
-							Name: "sample",
-							Args: []Expr{&NumberLiteral{Val: 0.2}, &StringLiteral{Val: "abc"}},
+							Name: "power",
+							Args: []Expr{&NumberLiteral{Val: 0.2}, &IntegerLiteral{Val: 4}},
 						},
 					},
 				},
@@ -759,15 +758,15 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(.2, "abc") AS f1 FROM tbl WHERE f1 > 2.2`,
+			s: `SELECT power(.2, 4) AS f1 FROM tbl WHERE f1 > 2.2`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "f1",
-						Name:  "sample",
+						Name:  "power",
 						Expr: &Call{
-							Name: "sample",
-							Args: []Expr{&NumberLiteral{Val: 0.2}, &StringLiteral{Val: "abc"}},
+							Name: "power",
+							Args: []Expr{&NumberLiteral{Val: 0.2}, &IntegerLiteral{Val: 4}},
 						},
 					},
 				},
@@ -896,7 +895,7 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY sample(name,1)`,
+			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY lpad(name,1)`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{Expr: &FieldRef{Name: "temp"}, Name: "temp", AName: "t"},
@@ -905,14 +904,14 @@ func TestParser_ParseStatement(t *testing.T) {
 				Sources: []Source{&Table{Name:"topic/sensor1"}},
 				Condition: &BinaryExpr{LHS: &FieldRef{Name: "name"}, OP: EQ, RHS: &StringLiteral{Val: "dname"},},
 				Dimensions:Dimensions{Dimension{
-						Expr:&Call{Name:"sample", Args:[]Expr{&FieldRef{Name:"name"}, &IntegerLiteral{Val:1}}},
+						Expr:&Call{Name:"lpad", Args:[]Expr{&FieldRef{Name:"name"}, &IntegerLiteral{Val:1}}},
 					},
 				},
 			},
 		},
 
 		{
-			s: `SELECT temp AS t, name FROM topic/sensor1 AS s1 WHERE name = "dname" GROUP BY sample(s1.name,1)`,
+			s: `SELECT temp AS t, name FROM topic/sensor1 AS s1 WHERE name = "dname" GROUP BY lpad(s1.name,1)`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{Expr: &FieldRef{Name: "temp"}, Name: "temp", AName: "t"},
@@ -921,14 +920,14 @@ func TestParser_ParseStatement(t *testing.T) {
 				Sources: []Source{&Table{Name:"topic/sensor1", Alias:"s1"}},
 				Condition: &BinaryExpr{LHS: &FieldRef{Name: "name"}, OP: EQ, RHS: &StringLiteral{Val: "dname"},},
 				Dimensions:Dimensions{Dimension{
-					Expr:&Call{Name:"sample", Args:[]Expr{&FieldRef{StreamName:StreamName("s1"), Name:"name"}, &IntegerLiteral{Val:1}}},
+					Expr:&Call{Name:"lpad", Args:[]Expr{&FieldRef{StreamName:StreamName("s1"), Name:"name"}, &IntegerLiteral{Val:1}}},
 				},
 				},
 			},
 		},
 
 		{
-			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY sample(name,1) ORDER BY name`,
+			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY lpad(name,1) ORDER BY name`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{Expr: &FieldRef{Name: "temp"}, Name: "temp", AName: "t"},
@@ -938,7 +937,7 @@ func TestParser_ParseStatement(t *testing.T) {
 				Condition: &BinaryExpr{LHS: &FieldRef{Name: "name"}, OP: EQ, RHS: &StringLiteral{Val: "dname"},},
 				Dimensions:Dimensions{
 					Dimension{
-						Expr:&Call{Name:"sample", Args:[]Expr{
+						Expr:&Call{Name:"lpad", Args:[]Expr{
 							&FieldRef{Name:"name"},
 							&IntegerLiteral{Val:1}},
 						},
@@ -949,7 +948,7 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT temp AS t, name FROM topic/sensor1 AS s1 WHERE s1.name = "dname" GROUP BY sample(s1.name,1) ORDER BY s1.name`,
+			s: `SELECT temp AS t, name FROM topic/sensor1 AS s1 WHERE s1.name = "dname" GROUP BY lpad(s1.name,1) ORDER BY s1.name`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{Expr: &FieldRef{Name: "temp"}, Name: "temp", AName: "t"},
@@ -959,7 +958,7 @@ func TestParser_ParseStatement(t *testing.T) {
 				Condition: &BinaryExpr{LHS: &FieldRef{StreamName:StreamName("s1"), Name: "name"}, OP: EQ, RHS: &StringLiteral{Val: "dname"},},
 				Dimensions:Dimensions{
 					Dimension{
-						Expr:&Call{Name:"sample", Args:[]Expr{
+						Expr:&Call{Name:"lpad", Args:[]Expr{
 							&FieldRef{StreamName:StreamName("s1"), Name:"name"},
 							&IntegerLiteral{Val:1}},
 						},
@@ -970,7 +969,7 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY sample(name,1) ORDER BY name DESC`,
+			s: `SELECT temp AS t, name FROM topic/sensor1 WHERE name = "dname" GROUP BY lpad(name,1) ORDER BY name DESC`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{Expr: &FieldRef{Name: "temp"}, Name: "temp", AName: "t"},
@@ -980,7 +979,7 @@ func TestParser_ParseStatement(t *testing.T) {
 				Condition: &BinaryExpr{LHS: &FieldRef{Name: "name"}, OP: EQ, RHS: &StringLiteral{Val: "dname"},},
 				Dimensions:Dimensions{
 					Dimension{
-						Expr:&Call{Name:"sample", Args:[]Expr{
+						Expr:&Call{Name:"lpad", Args:[]Expr{
 							&FieldRef{Name:"name"},
 							&IntegerLiteral{Val:1}},
 						},
@@ -1020,7 +1019,7 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT * FROM topic/sensor1 GROUP BY name, name2,sample(name3,1.8) ORDER BY name DESC, name2 ASC`,
+			s: `SELECT * FROM topic/sensor1 GROUP BY name, name2,power(name3,1.8) ORDER BY name DESC, name2 ASC`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
@@ -1033,7 +1032,7 @@ func TestParser_ParseStatement(t *testing.T) {
 					Dimension{Expr:&FieldRef{Name:"name"}},
 					Dimension{Expr:&FieldRef{Name:"name2"}},
 					Dimension{
-						Expr:&Call{Name:"sample", Args:[]Expr{
+						Expr:&Call{Name:"power", Args:[]Expr{
 							&FieldRef{Name:"name3"},
 							&NumberLiteral{Val:1.8}},
 						},
@@ -1118,15 +1117,15 @@ func TestParser_ParseStatement(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(true, "abc") FROM tbl`,
+			s: `SELECT indexof(field1, "abc") FROM tbl`,
 			stmt: &SelectStatement{
 				Fields:    []Field{
 					{
 						AName: "",
-						Name:  "sample",
+						Name:  "indexof",
 						Expr: &Call{
-							Name: "sample",
-							Args: []Expr{&BooleanLiteral{Val: true}, &StringLiteral{Val: "abc"}},
+							Name: "indexof",
+							Args: []Expr{&FieldRef{Name:"field1"}, &StringLiteral{Val: "abc"}},
 						},
 					},
 				},
@@ -1553,12 +1552,12 @@ func TestParser_ParseJsonExpr(t *testing.T) {
 		},
 
 		{
-			s: `SELECT sample(demo.children[2:]->first) AS c FROM demo`,
+			s: `SELECT lower(demo.children[2:]->first) AS c FROM demo`,
 			stmt: &SelectStatement{
 				Fields: []Field{
 					{
 						Expr: &Call{
-							Name: "sample",
+							Name: "lower",
 							Args: []Expr{
 								&BinaryExpr{
 									LHS: &BinaryExpr{LHS: &FieldRef{StreamName: StreamName("demo"), Name: "children"}, OP: SUBSET, RHS: &ColonExpr{Start: 2, End: -1},
@@ -1568,7 +1567,7 @@ func TestParser_ParseJsonExpr(t *testing.T) {
 								},
 							},
 						},
-						Name:  "sample",
+						Name:  "lower",
 						AName: "c"},
 				},
 				Sources: []Source{&Table{Name: "demo"}},