return all columns if a wildcard is used in the column names.
parent
83b4ac5638
commit
559e7ed71b
|
@ -81,6 +81,7 @@ func getColumns(values []*parser.Value, columns map[string]bool) {
|
|||
case parser.ValueSimpleName:
|
||||
columns[v.Name] = true
|
||||
case parser.ValueWildcard:
|
||||
columns["*"] = true
|
||||
return
|
||||
case parser.ValueFunctionCall:
|
||||
getColumns(v.Elems, columns)
|
||||
|
@ -89,6 +90,10 @@ func getColumns(values []*parser.Value, columns map[string]bool) {
|
|||
}
|
||||
|
||||
func filterColumns(columns map[string]bool, fields []string, point *protocol.Point) {
|
||||
if columns["*"] {
|
||||
return
|
||||
}
|
||||
|
||||
newValues := []*protocol.FieldValue{}
|
||||
newFields := []string{}
|
||||
for idx, f := range fields {
|
||||
|
@ -125,14 +130,16 @@ func Filter(query *parser.Query, series *protocol.Series) (*protocol.Series, err
|
|||
}
|
||||
}
|
||||
|
||||
newFields := []string{}
|
||||
for _, f := range series.Fields {
|
||||
if _, ok := columns[f]; !ok {
|
||||
continue
|
||||
}
|
||||
if !columns["*"] {
|
||||
newFields := []string{}
|
||||
for _, f := range series.Fields {
|
||||
if _, ok := columns[f]; !ok {
|
||||
continue
|
||||
}
|
||||
|
||||
newFields = append(newFields, f)
|
||||
newFields = append(newFields, f)
|
||||
}
|
||||
series.Fields = newFields
|
||||
}
|
||||
series.Fields = newFields
|
||||
return series, nil
|
||||
}
|
||||
|
|
|
@ -36,6 +36,32 @@ func (self *FilteringSuite) TestEqualityFiltering(c *C) {
|
|||
c.Assert(*result.Points[0].Values[1].Int64Value, Equals, int64(5))
|
||||
}
|
||||
|
||||
func (self *FilteringSuite) TestReturnAllColumnsIfAskedForWildcard(c *C) {
|
||||
queryStr := "select * from t where column_one == 100 and column_two != 6;"
|
||||
query, err := parser.ParseQuery(queryStr)
|
||||
c.Assert(err, IsNil)
|
||||
series, err := common.StringToSeriesArray(`
|
||||
[
|
||||
{
|
||||
"points": [
|
||||
{"values": [{"int64_value": 100},{"int64_value": 5 }], "timestamp": 1381346631, "sequence_number": 1},
|
||||
{"values": [{"int64_value": 100},{"int64_value": 6 }], "timestamp": 1381346631, "sequence_number": 1},
|
||||
{"values": [{"int64_value": 90 },{"int64_value": 15}], "timestamp": 1381346632, "sequence_number": 1}
|
||||
],
|
||||
"name": "t",
|
||||
"fields": ["column_one", "column_two"]
|
||||
}
|
||||
]
|
||||
`)
|
||||
c.Assert(err, IsNil)
|
||||
result, err := Filter(query, series[0])
|
||||
c.Assert(err, IsNil)
|
||||
c.Assert(result, NotNil)
|
||||
c.Assert(result.Points, HasLen, 1)
|
||||
c.Assert(result.Fields, HasLen, 2)
|
||||
c.Assert(result.Points[0].Values, HasLen, 2)
|
||||
}
|
||||
|
||||
func (self *FilteringSuite) TestReturnRequestedColumnsOnly(c *C) {
|
||||
queryStr := "select column_two from t where column_one == 100 and column_two != 6;"
|
||||
query, err := parser.ParseQuery(queryStr)
|
||||
|
|
Loading…
Reference in New Issue