Skip to content

Commit

Permalink
feat: support more operators in filter
Browse files Browse the repository at this point in the history
  • Loading branch information
johnnyjoygh committed Feb 3, 2025
1 parent 03189ee commit ff04fdc
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 2 deletions.
19 changes: 19 additions & 0 deletions store/db/mysql/memo_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,25 @@ func ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error {
return err
}
ctx.Args = append(ctx.Args, timestamp.Unix())
} else if identifier == "visibility" || identifier == "content" {
if operator != "=" && operator != "!=" {
return errors.Errorf("invalid operator for %s", v.CallExpr.Function)
}
valueStr, ok := value.(string)
if !ok {
return errors.New("invalid string value")
}

var factor string
if identifier == "visibility" {
factor = "`memo`.`visibility`"
} else if identifier == "content" {
factor = "`memo`.`content`"
}
if _, err := ctx.Buffer.WriteString(fmt.Sprintf("%s %s ?", factor, operator)); err != nil {
return err
}
ctx.Args = append(ctx.Args, valueStr)
}
case "@in":
if len(v.CallExpr.Args) != 2 {
Expand Down
21 changes: 20 additions & 1 deletion store/db/postgres/memo_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error {
if err != nil {
return err
}
if !slices.Contains([]string{"create_time", "update_time"}, identifier) {
if !slices.Contains([]string{"create_time", "update_time", "visibility", "content"}, identifier) {
return errors.Errorf("invalid identifier for %s", v.CallExpr.Function)
}
value, err := filter.GetConstValue(v.CallExpr.Args[1])
Expand Down Expand Up @@ -102,6 +102,25 @@ func ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error {
return err
}
ctx.Args = append(ctx.Args, timestamp.Unix())
} else if identifier == "visibility" || identifier == "content" {
if operator != "=" && operator != "!=" {
return errors.Errorf("invalid operator for %s", v.CallExpr.Function)
}
valueStr, ok := value.(string)
if !ok {
return errors.New("invalid string value")
}

var factor string
if identifier == "visibility" {
factor = "memo.visibility"
} else if identifier == "content" {
factor = "memo.content"
}
if _, err := ctx.Buffer.WriteString(fmt.Sprintf("%s %s %s", factor, operator, placeholder(len(ctx.Args)+ctx.ArgsOffset+1))); err != nil {
return err
}
ctx.Args = append(ctx.Args, valueStr)
}
case "@in":
if len(v.CallExpr.Args) != 2 {
Expand Down
21 changes: 20 additions & 1 deletion store/db/sqlite/memo_filter.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error {
if err != nil {
return err
}
if !slices.Contains([]string{"create_time", "update_time"}, identifier) {
if !slices.Contains([]string{"create_time", "update_time", "visibility", "content"}, identifier) {
return errors.Errorf("invalid identifier for %s", v.CallExpr.Function)
}
value, err := filter.GetConstValue(v.CallExpr.Args[1])
Expand Down Expand Up @@ -102,6 +102,25 @@ func ConvertExprToSQL(ctx *filter.ConvertContext, expr *exprv1.Expr) error {
return err
}
ctx.Args = append(ctx.Args, timestamp.Unix())
} else if identifier == "visibility" || identifier == "content" {
if operator != "=" && operator != "!=" {
return errors.Errorf("invalid operator for %s", v.CallExpr.Function)
}
valueStr, ok := value.(string)
if !ok {
return errors.New("invalid string value")
}

var factor string
if identifier == "visibility" {
factor = "`memo`.`visibility`"
} else if identifier == "content" {
factor = "`memo`.`content`"
}
if _, err := ctx.Buffer.WriteString(fmt.Sprintf("%s %s ?", factor, operator)); err != nil {
return err
}
ctx.Args = append(ctx.Args, valueStr)
}
case "@in":
if len(v.CallExpr.Args) != 2 {
Expand Down

0 comments on commit ff04fdc

Please sign in to comment.