in common/archiver/gcloud/queryParser.go [135:232]
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 WorkflowID:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Google Cloud Storage", WorkflowID)
}
if parsedQuery.workflowID != nil && *parsedQuery.workflowID != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowID = common.StringPtr(val)
case RunID:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Google Cloud Storage", RunID)
}
if parsedQuery.runID != nil && *parsedQuery.runID != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.runID = 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 Google Cloud Storage", CloseTime)
}
parsedQuery.closeTime = timestamp
case StartTime:
timestamp, err := convertToTimestamp(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Google Cloud Storage", StartTime)
}
parsedQuery.startTime = timestamp
case WorkflowType:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Google Cloud Storage", WorkflowType)
}
if parsedQuery.workflowType != nil && *parsedQuery.workflowType != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowType = common.StringPtr(val)
case SearchPrecision:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with Google Cloud Storage", 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
}