return all columns if a wildcard is used in the column names.

pull/17/head
John Shahid 2013-11-01 12:01:45 -04:00
parent 83b4ac5638
commit 559e7ed71b
2 changed files with 40 additions and 7 deletions

View File

@ -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
}

View File

@ -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)