From e2524ff0adc7c043ea192723185a1bcfba7600ec Mon Sep 17 00:00:00 2001 From: Ariel Mashraki Date: Tue, 20 Aug 2019 07:51:45 -0700 Subject: [PATCH] ent/dialect/sql: add upper and lower methods Summary: Pull Request resolved: https://github.com/facebookincubator/ent/pull/18 Reviewed By: elys1um Differential Revision: D16916563 fbshipit-source-id: f758536103356cb5b2bacf707c7c7da931bb4560 --- dialect/sql/builder.go | 26 ++++++++++++++++++++++++++ dialect/sql/builder_test.go | 24 ++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index 6d916d6a1..f04239534 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -1028,6 +1028,32 @@ func (p *Predicate) Contains(col, sub string) *Predicate { return p.Like(col, "%"+sub+"%") } +// Lower wraps the given column with the LOWER function. +// +// P().EQ(sql.Lower("name"), "a8m") +// +func Lower(name string) string { + var b Builder + b.WriteString("LOWER") + b.Nested(func(b *Builder) { + b.Append(name) + }) + return b.String() +} + +// Upper wraps the given column with the UPPER function. +// +// P().EQ(sql.Upper("name"), "a8m") +// +func Upper(name string) string { + var b Builder + b.WriteString("UPPER") + b.Nested(func(b *Builder) { + b.Append(name) + }) + return b.String() +} + // Query returns query representation of a predicate. func (p *Predicate) Query() (string, []interface{}) { return p.b.String(), p.b.args diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index 62b8a3554..281a6efe8 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -234,6 +234,30 @@ func TestBuilder(t *testing.T) { wantQuery: "DELETE FROM `users` WHERE (`name` = ? AND `age` = ?) OR (`name` = ? AND `age` = ?) OR ((`name` = ?) AND (`age` = ? OR `age` = ?))", wantArgs: []interface{}{"foo", 10, "bar", 20, "qux", 1, 2}, }, + { + input: Select(Lower("name")). + From(Table("users")), + wantQuery: "SELECT LOWER(`name`) FROM `users`", + }, + { + input: Select(Lower("name")). + From(Table("users")). + Where(EQ(Lower("name"), "a8m")), + wantQuery: "SELECT LOWER(`name`) FROM `users` WHERE LOWER(`name`) = ?", + wantArgs: []interface{}{"a8m"}, + }, + { + input: Select(Upper("name")). + From(Table("users")), + wantQuery: "SELECT UPPER(`name`) FROM `users`", + }, + { + input: Select(Upper("name")). + From(Table("users")). + Where(EQ(Upper("name"), "a8m")), + wantQuery: "SELECT UPPER(`name`) FROM `users` WHERE UPPER(`name`) = ?", + wantArgs: []interface{}{"a8m"}, + }, { input: Select().From(Table("users")), wantQuery: "SELECT * FROM `users`",