From 3a11beba45883343565347d63a371b7ad0457005 Mon Sep 17 00:00:00 2001 From: aacebo Date: Fri, 22 Nov 2024 16:09:15 -0500 Subject: [PATCH] base join --- sqlx/join.go | 4 ++++ sqlx/select_test.go | 32 +++++++++++++++++++++++++++ sqlx/testcases/select/join.sql | 1 + sqlx/testcases/select/join_pretty.sql | 6 +++++ 4 files changed, 43 insertions(+) create mode 100644 sqlx/testcases/select/join.sql create mode 100644 sqlx/testcases/select/join_pretty.sql diff --git a/sqlx/join.go b/sqlx/join.go index 6d8f577..983f3ea 100644 --- a/sqlx/join.go +++ b/sqlx/join.go @@ -11,6 +11,10 @@ type JoinClause struct { where *WhereClause } +func Join(table string, predicate any) *JoinClause { + return &JoinClause{nil, table, Where(predicate)} +} + func LeftJoin(table string, predicate any) *JoinClause { method := "LEFT" return &JoinClause{&method, table, Where(predicate)} diff --git a/sqlx/select_test.go b/sqlx/select_test.go index 12b13a0..cb50465 100644 --- a/sqlx/select_test.go +++ b/sqlx/select_test.go @@ -167,6 +167,22 @@ func TestSelect(t *testing.T) { }) t.Run("join", func(t *testing.T) { + t.Run("join", func(t *testing.T) { + expected, err := os.ReadFile("./testcases/select/join.sql") + + if err != nil { + t.Fatal(err) + } + + sql := sqlx.Select("*").From("a").Join( + sqlx.Join("b", "a.id = b.id").And("b.deleted_at IS NULL"), + ).Sql() + + if sql != strings.TrimSuffix(string(expected), "\n") { + t.Fatalf(sql) + } + }) + t.Run("left", func(t *testing.T) { expected, err := os.ReadFile("./testcases/select/left_join.sql") @@ -434,6 +450,22 @@ func TestSelect(t *testing.T) { }) t.Run("join", func(t *testing.T) { + t.Run("join", func(t *testing.T) { + expected, err := os.ReadFile("./testcases/select/join_pretty.sql") + + if err != nil { + t.Fatal(err) + } + + sql := sqlx.Select("*").From("a").Join( + sqlx.Join("b", "a.id = b.id").And("b.deleted_at IS NULL"), + ).SqlPretty(" ") + + if sql != strings.TrimSuffix(string(expected), "\n") { + t.Fatalf(sql) + } + }) + t.Run("left", func(t *testing.T) { expected, err := os.ReadFile("./testcases/select/left_join_pretty.sql") diff --git a/sqlx/testcases/select/join.sql b/sqlx/testcases/select/join.sql new file mode 100644 index 0000000..8cfd6be --- /dev/null +++ b/sqlx/testcases/select/join.sql @@ -0,0 +1 @@ +SELECT * FROM a JOIN b ON a.id = b.id AND b.deleted_at IS NULL; diff --git a/sqlx/testcases/select/join_pretty.sql b/sqlx/testcases/select/join_pretty.sql new file mode 100644 index 0000000..a6a68e8 --- /dev/null +++ b/sqlx/testcases/select/join_pretty.sql @@ -0,0 +1,6 @@ +SELECT + * +FROM a +JOIN b + ON a.id = b.id + AND b.deleted_at IS NULL;