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) {