in common/archiver/filestore/queryParser.go [121:203]
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 file system", 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 file system", RunID)
}
if parsedQuery.runID != nil && *parsedQuery.runID != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.runID = common.StringPtr(val)
case WorkflowType:
val, err := extractStringValue(valStr)
if err != nil {
return err
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with file system", WorkflowType)
}
if parsedQuery.workflowTypeName != nil && *parsedQuery.workflowTypeName != val {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.workflowTypeName = common.StringPtr(val)
case CloseStatus:
val, err := extractStringValue(valStr)
if err != nil {
// if failed to extract string value, it means user input close status as a number
val = valStr
}
if op != "=" {
return fmt.Errorf("only operator = is supported for %s with file system", CloseStatus)
}
status, err := convertStatusStr(val)
if err != nil {
return err
}
if parsedQuery.closeStatus != nil && *parsedQuery.closeStatus != status {
parsedQuery.emptyResult = true
return nil
}
parsedQuery.closeStatus = status.Ptr()
case CloseTime:
timestamp, err := convertToTimestamp(valStr)
if err != nil {
return err
}
return p.convertCloseTime(timestamp, op, parsedQuery)
default:
return fmt.Errorf("unknown filter name: %s", colNameStr)
}
return nil
}