From d6f6c81a22189b253946f7d9cfb8ae5b58375f2b Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Fri, 19 Feb 2021 17:29:16 +0200 Subject: [PATCH] dialect/sql: allow creating predicate from raw expression (#1263) --- dialect/sql/builder.go | 10 ++++++++++ dialect/sql/builder_test.go | 4 +--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index 173fb076d..f9d6b7067 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -891,6 +891,16 @@ func P(fns ...func(*Builder)) *Predicate { return &Predicate{fns: fns} } +// ExprP creates a new predicate from the given expression. +// +// ExprP("A = ? AND B > ?", args...) +// +func ExprP(exr string, args ...interface{}) *Predicate { + return P(func(b *Builder) { + b.Join(Expr(exr, args...)) + }) +} + // Or combines all given predicates with OR between them. // // Or(EQ("name", "foo"), EQ("name", "bar")) diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index a4e8853e7..08cbf643f 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -1376,9 +1376,7 @@ WHERE input: Dialect(dialect.Postgres). Select("*"). From(Table("users")). - Where(P(func(b *Builder) { - b.Join(Expr("name = $1", "pedro")) - })). + Where(ExprP("name = $1", "pedro")). Where(P(func(b *Builder) { b.Join(Expr("name = $2", "pedro")) })).