in common/archiver/s3store/queryParser.go [136:218]
func (p *queryParser) convertComparisonExpr(compExpr *sqlparser.ComparisonExpr, parsedQuery *parsedQuery) error {
colName, ok := compExpr.Left.(*sqlparser.ColName)
if !ok {
return fmt.Errorf("invalid filter name: %s", sqlparser.String(compExpr.Left))
}
colNameStr := sqlparser.String(colName)
op := compExpr.Operator
valExpr, ok := compExpr.Right.(*sqlparser.SQLVal)
if !ok {
return fmt.Errorf("invalid value: %s", sqlparser.String(compExpr.Right))
}
valStr := sqlparser.String(valExpr)
switch colNameStr {
case WorkflowTypeName:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Amazon S3", WorkflowTypeName)
}
if parsedQuery.workflowTypeName != nil {
return fmt.Errorf("can not query %s multiple times", WorkflowTypeName)
}
parsedQuery.workflowTypeName = common.StringPtr(val)
case WorkflowID:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Amazon S3", WorkflowID)
}
if parsedQuery.workflowID != nil {
return fmt.Errorf("can not query %s multiple times", WorkflowID)
}
parsedQuery.workflowID = common.StringPtr(val)
case CloseTime:
timestamp, err := convertToTimestamp(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Amazon S3", CloseTime)
}
parsedQuery.closeTime = ×tamp
case StartTime:
timestamp, err := convertToTimestamp(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Amazon S3", StartTime)
}
parsedQuery.startTime = ×tamp
case SearchPrecision:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Amazon S3", SearchPrecision)
}
if parsedQuery.searchPrecision != nil && *parsedQuery.searchPrecision != val {
return fmt.Errorf("only one expression is allowed for %s", SearchPrecision)
}
switch val {
case PrecisionDay:
case PrecisionHour:
case PrecisionMinute:
case PrecisionSecond:
default:
return fmt.Errorf("invalid value for %s: %s", SearchPrecision, val)
}
parsedQuery.searchPrecision = common.StringPtr(val)
default:
return fmt.Errorf("unknown filter name: %s", colNameStr)
}
return nil
}