From 8109d9e04298b453cc3e14ae053df4bc8c398860 Mon Sep 17 00:00:00 2001 From: Yanhu007 Date: Wed, 15 Apr 2026 04:40:36 +0800 Subject: [PATCH] fix: support non-string values in Case When/Then/Else clauses Previously, passing non-string, non-Sqlizer values (e.g., integers) to Case().When() or .Else() produced an error: "expected string or Sqlizer, not int" This made it impossible to use CASE expressions with numeric values like: sq.Case("order_no").When("ORD001", 500).Else(0) Now non-string, non-Sqlizer values are treated as parameterized values (using "?" placeholder), consistent with how other parts of squirrel handle arbitrary values. Fixes #388 --- part.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/part.go b/part.go index c58f68f1..918c5814 100644 --- a/part.go +++ b/part.go @@ -1,7 +1,6 @@ package squirrel import ( - "fmt" "io" ) @@ -24,7 +23,10 @@ func (p part) ToSql() (sql string, args []interface{}, err error) { sql = pred args = p.args default: - err = fmt.Errorf("expected string or Sqlizer, not %T", pred) + // For non-string, non-Sqlizer values (int, float, etc.), + // use a placeholder and pass the value as an argument. + sql = "?" + args = []interface{}{pred} } return }