in pkg/data-query/parser.go [71:132]
func readQueryValue(value *fastjson.Value) (*Query, error) {
query := &Query{
Database: string(value.GetStringBytes("db")),
Table: string(value.GetStringBytes("table")),
Flat: value.GetBool("flat"),
}
switch {
case query.Database == "":
query.Database = "default"
case !reDbName.MatchString(query.Database):
return nil, http_error.NewHttpError(400, fmt.Sprintf("Database name %s contains illegal chars", query.Database))
case query.Table != "" && !reDbName.MatchString(query.Table):
return nil, http_error.NewHttpError(400, fmt.Sprintf("Table name %s contains illegal chars", query.Table))
}
err := readDimensions(value.GetArray("fields"), &query.Fields)
if err != nil {
return nil, err
}
err = readFilters(value.GetArray("filters"), query)
if err != nil {
return nil, err
}
orderValue := value.Get("order")
if orderValue == nil {
return nil, http_error.NewHttpError(400, "order is missing")
}
if orderValue.Type() == fastjson.TypeString {
field := string(orderValue.GetStringBytes())
if !reNestedFieldName.MatchString(field) {
return nil, http_error.NewHttpError(400, fmt.Sprintf("Order %s is not a valid field name", field))
}
query.Order = []string{field}
} else {
for _, v := range value.GetArray("order") {
field := string(v.GetStringBytes())
if !reNestedFieldName.MatchString(field) {
return nil, http_error.NewHttpError(400, fmt.Sprintf("Order %s is not a valid field name", field))
}
query.Order = append(query.Order, field)
}
}
query.Aggregator = string(value.GetStringBytes("aggregator"))
if query.Aggregator != "" && !reAggregator.MatchString(query.Aggregator) {
return nil, http_error.NewHttpError(400, fmt.Sprintf("Aggregator %s contains illegal chars", query.Aggregator))
}
err = readDimensions(value.GetArray("dimensions"), &query.Dimensions)
if err != nil {
return nil, err
}
query.TimeDimensionFormat = string(value.GetStringBytes("timeDimensionFormat"))
if query.Aggregator != "" && !reAggregator.MatchString(query.Aggregator) {
return nil, http_error.NewHttpError(400, fmt.Sprintf("timeDimensionFormat %s contains illegal chars", query.TimeDimensionFormat))
}
return query, nil
}