From e215ae0cd73acc7dca2c2e7b982ed20789d52cd0 Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Sat, 29 Aug 2020 21:18:10 +0300 Subject: [PATCH] dialect/sql: make WriteOp chainable (#710) --- dialect/sql/builder.go | 3 ++- dialect/sql/builder_test.go | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index 01d79aaf3..2fc6163f2 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -1915,10 +1915,11 @@ var ops = [...]string{ } // WriteOp writes an operator to the builder. -func (b *Builder) WriteOp(op Op) { +func (b *Builder) WriteOp(op Op) *Builder { if op >= OpEQ && op <= OpLike { b.Pad().WriteString(ops[op]).Pad() } + return b } // JSONOption allows for calling database JSON paths with functional options. diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index cc9ef5041..b46c4feba 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -1249,6 +1249,16 @@ WHERE wantQuery: `SELECT * FROM "users" WHERE CAST("a"->'b'->'c'->1->'d' AS int) = $1`, wantArgs: []interface{}{1}, }, + { + input: Dialect(dialect.Postgres). + Select("*"). + From(Table("test")). + Where(P(func(b *Builder) { + b.WriteString("nlevel(").Ident("path").WriteByte(')').WriteOp(OpGT).Arg(1) + })), + wantQuery: `SELECT * FROM "test" WHERE nlevel("path") > $1`, + wantArgs: []interface{}{1}, + }, } for i, tt := range tests { t.Run(strconv.Itoa(i), func(t *testing.T) {