Comparison operators refactoring.
This commit is contained in:
parent
64ba909381
commit
7b89caa7e0
28 changed files with 694 additions and 384 deletions
|
|
@ -3,6 +3,7 @@ package tests
|
|||
import (
|
||||
"fmt"
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
. "github.com/sub0zero/go-sqlbuilder/sqlbuilder"
|
||||
"github.com/sub0zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/model"
|
||||
"github.com/sub0zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/table"
|
||||
"gotest.tools/assert"
|
||||
|
|
@ -12,7 +13,7 @@ import (
|
|||
func TestUUIDType(t *testing.T) {
|
||||
query := table.AllTypes.
|
||||
SELECT(table.AllTypes.AllColumns).
|
||||
WHERE(table.AllTypes.UUID.EqString("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11"))
|
||||
WHERE(table.AllTypes.UUID.EQ(String("a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11")))
|
||||
|
||||
queryStr, args, err := query.Sql()
|
||||
|
||||
|
|
|
|||
|
|
@ -191,10 +191,10 @@ func TestScanToStruct(t *testing.T) {
|
|||
|
||||
func TestScanToNestedStruct(t *testing.T) {
|
||||
query := Inventory.
|
||||
INNER_JOIN(Film, Inventory.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.Eq(Store.StoreID)).
|
||||
INNER_JOIN(Film, Inventory.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.EQ(Store.StoreID)).
|
||||
SELECT(Inventory.AllColumns, Film.AllColumns, Store.AllColumns).
|
||||
WHERE(Inventory.InventoryID.EqL(1))
|
||||
WHERE(Inventory.InventoryID.EQ(Int(1)))
|
||||
|
||||
t.Run("embedded structs", func(t *testing.T) {
|
||||
dest := struct {
|
||||
|
|
@ -267,10 +267,10 @@ func TestScanToNestedStruct(t *testing.T) {
|
|||
|
||||
t.Run("embedded pointer to selected column", func(t *testing.T) {
|
||||
query := Inventory.
|
||||
INNER_JOIN(Film, Inventory.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.Eq(Store.StoreID)).
|
||||
INNER_JOIN(Film, Inventory.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.EQ(Store.StoreID)).
|
||||
SELECT(Inventory.AllColumns, Film.AllColumns, Store.AllColumns, Literal("").AS("actor.first_name")).
|
||||
WHERE(Inventory.InventoryID.EqL(1))
|
||||
WHERE(Inventory.InventoryID.EQ(Int(1)))
|
||||
|
||||
dest := struct {
|
||||
model.Inventory
|
||||
|
|
@ -358,11 +358,11 @@ func TestScanToNestedStruct(t *testing.T) {
|
|||
|
||||
t.Run("embedded structs", func(t *testing.T) {
|
||||
query := Inventory.
|
||||
INNER_JOIN(Film, Inventory.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.Eq(Store.StoreID)).
|
||||
INNER_JOIN(Language, Film.LanguageID.Eq(Language.LanguageID)).
|
||||
INNER_JOIN(Film, Inventory.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.EQ(Store.StoreID)).
|
||||
INNER_JOIN(Language, Film.LanguageID.EQ(Language.LanguageID)).
|
||||
SELECT(Inventory.AllColumns, Film.AllColumns, Store.AllColumns, Language.AllColumns).
|
||||
WHERE(Inventory.InventoryID.EqL(1))
|
||||
WHERE(Inventory.InventoryID.EQ(Int(1)))
|
||||
|
||||
dest := struct {
|
||||
model.Inventory
|
||||
|
|
@ -434,8 +434,8 @@ func TestScanToSlice(t *testing.T) {
|
|||
|
||||
t.Run("slice of complex structs", func(t *testing.T) {
|
||||
query := Inventory.
|
||||
INNER_JOIN(Film, Inventory.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.Eq(Store.StoreID)).
|
||||
INNER_JOIN(Film, Inventory.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Store, Inventory.StoreID.EQ(Store.StoreID)).
|
||||
SELECT(Inventory.AllColumns, Film.AllColumns, Store.AllColumns).
|
||||
ORDER_BY(Inventory.InventoryID).
|
||||
LIMIT(10)
|
||||
|
|
@ -589,9 +589,9 @@ func TestScanToSlice(t *testing.T) {
|
|||
|
||||
t.Run("slice of complex structs 2", func(t *testing.T) {
|
||||
query := Country.
|
||||
INNER_JOIN(City, City.CountryID.Eq(Country.CountryID)).
|
||||
INNER_JOIN(Address, Address.CityID.Eq(City.CityID)).
|
||||
INNER_JOIN(Customer, Customer.AddressID.Eq(Address.AddressID)).
|
||||
INNER_JOIN(City, City.CountryID.EQ(Country.CountryID)).
|
||||
INNER_JOIN(Address, Address.CityID.EQ(City.CityID)).
|
||||
INNER_JOIN(Customer, Customer.AddressID.EQ(Address.AddressID)).
|
||||
SELECT(Country.AllColumns, City.AllColumns, Address.AllColumns, Customer.AllColumns).
|
||||
ORDER_BY(Country.CountryID.ASC(), City.CityID.ASC(), Address.AddressID.ASC(), Customer.CustomerID.ASC()).
|
||||
LIMIT(1000)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ WHERE actor.actor_id = 1;
|
|||
|
||||
query := Actor.
|
||||
SELECT(Actor.AllColumns).
|
||||
WHERE(Actor.ActorID.EqL(1))
|
||||
WHERE(Actor.ActorID.EQ(Int(1)))
|
||||
|
||||
assertQuery(t, query, expectedSql, 1)
|
||||
|
||||
|
|
@ -68,7 +68,7 @@ LIMIT 30;
|
|||
`
|
||||
|
||||
query := SELECT(Payment.AllColumns, Customer.AllColumns).
|
||||
FROM(Payment.INNER_JOIN(Customer, Payment.CustomerID.Eq(Customer.CustomerID))).
|
||||
FROM(Payment.INNER_JOIN(Customer, Payment.CustomerID.EQ(Customer.CustomerID))).
|
||||
ORDER_BY(Payment.PaymentID.ASC()).
|
||||
LIMIT(30)
|
||||
|
||||
|
|
@ -206,11 +206,11 @@ LIMIT 50;
|
|||
`
|
||||
for i := 0; i < 1; i++ {
|
||||
query := FilmActor.
|
||||
INNER_JOIN(Actor, FilmActor.ActorID.Eq(Actor.ActorID)).
|
||||
INNER_JOIN(Film, FilmActor.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Language, Film.LanguageID.Eq(Language.LanguageID)).
|
||||
INNER_JOIN(Inventory, Inventory.FilmID.Eq(Film.FilmID)).
|
||||
INNER_JOIN(Rental, Rental.InventoryID.Eq(Inventory.InventoryID)).
|
||||
INNER_JOIN(Actor, FilmActor.ActorID.EQ(Actor.ActorID)).
|
||||
INNER_JOIN(Film, FilmActor.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Language, Film.LanguageID.EQ(Language.LanguageID)).
|
||||
INNER_JOIN(Inventory, Inventory.FilmID.EQ(Film.FilmID)).
|
||||
INNER_JOIN(Rental, Rental.InventoryID.EQ(Inventory.InventoryID)).
|
||||
SELECT(
|
||||
FilmActor.AllColumns,
|
||||
Film.AllColumns,
|
||||
|
|
@ -285,9 +285,9 @@ LIMIT 15;
|
|||
limit := 15
|
||||
|
||||
query := Film.
|
||||
INNER_JOIN(Language, Film.LanguageID.Eq(Language.LanguageID)).
|
||||
INNER_JOIN(Language, Film.LanguageID.EQ(Language.LanguageID)).
|
||||
SELECT(Language.AllColumns, Film.AllColumns).
|
||||
WHERE(Film.Rating.EqString(model.MpaaRating_NC17.String())).
|
||||
WHERE(Film.Rating.EQ(String(model.MpaaRating_NC17.String()))).
|
||||
LIMIT(15)
|
||||
|
||||
assertQuery(t, query, expectedSql, model.MpaaRating_NC17.String(), int64(15))
|
||||
|
|
@ -318,7 +318,7 @@ func TestJoinQuerySliceWithPtrs(t *testing.T) {
|
|||
|
||||
limit := int64(3)
|
||||
|
||||
query := Film.INNER_JOIN(Language, Film.LanguageID.Eq(Language.LanguageID)).
|
||||
query := Film.INNER_JOIN(Language, Film.LanguageID.EQ(Language.LanguageID)).
|
||||
SELECT(Language.AllColumns, Film.AllColumns).
|
||||
LIMIT(limit)
|
||||
|
||||
|
|
@ -417,7 +417,7 @@ FROM dvds.customer
|
|||
ORDER BY customer.customer_id ASC;
|
||||
`
|
||||
query := Customer.
|
||||
FULL_JOIN(Address, Customer.AddressID.Eq(Address.AddressID)).
|
||||
FULL_JOIN(Address, Customer.AddressID.EQ(Address.AddressID)).
|
||||
SELECT(Customer.AllColumns, Address.AllColumns).
|
||||
ORDER_BY(Customer.CustomerID.ASC())
|
||||
|
||||
|
|
@ -506,7 +506,7 @@ ORDER BY employee.employee_id;
|
|||
|
||||
manager := Employee.AS("manager")
|
||||
query := Employee.
|
||||
LEFT_JOIN(manager, manager.EmployeeID.Eq(Employee.ManagerID)).
|
||||
LEFT_JOIN(manager, manager.EmployeeID.EQ(Employee.ManagerID)).
|
||||
SELECT(Employee.AllColumns, manager.AllColumns).
|
||||
ORDER_BY(Employee.EmployeeID)
|
||||
|
||||
|
|
@ -576,7 +576,7 @@ ORDER BY f1.film_id ASC;
|
|||
f2 := Film.AS("f2")
|
||||
|
||||
query := f1.
|
||||
INNER_JOIN(f2, f1.FilmID.Lt(f2.FilmID).AND(f1.Length.Eq(f2.Length))).
|
||||
INNER_JOIN(f2, f1.FilmID.LT(f2.FilmID).AND(f1.Length.EQ(f2.Length))).
|
||||
SELECT(f1.AllColumns, f2.AllColumns).
|
||||
ORDER_BY(f1.FilmID.ASC())
|
||||
|
||||
|
|
@ -612,8 +612,10 @@ LIMIT 1000;
|
|||
f1 := Film.AS("f1")
|
||||
f2 := Film.AS("f2")
|
||||
|
||||
f1.FilmID.EQ(Float(11))
|
||||
|
||||
query := f1.
|
||||
INNER_JOIN(f2, f1.FilmID.NotEq(f2.FilmID).AND(f1.Length.Eq(f2.Length))).
|
||||
INNER_JOIN(f2, f1.FilmID.NOT_EQ(f2.FilmID).AND(f1.Length.EQ(f2.Length))).
|
||||
SELECT(f1.Title.AS("thesame_length_films.title1"),
|
||||
f2.Title.AS("thesame_length_films.title2"),
|
||||
f1.Length.AS("thesame_length_films.length")).
|
||||
|
|
@ -679,8 +681,8 @@ LIMIT 1000;
|
|||
// manager := Staff.AS("manager")
|
||||
//
|
||||
// query := Staff.
|
||||
// INNER_JOIN(Address, Staff.AddressID.Eq(Address.AddressID)).
|
||||
// INNER_JOIN(manager, Staff.StaffID.Eq(manager.StaffID)).
|
||||
// INNER_JOIN(Address, Staff.AddressID.EQ(Address.AddressID)).
|
||||
// INNER_JOIN(manager, Staff.StaffID.EQ(manager.StaffID)).
|
||||
// SELECT(Staff.StaffID, Staff.FirstName, Staff.LastName, Address.AllColumns, manager.StaffID, manager.FirstName).
|
||||
// DISTINCT()
|
||||
//
|
||||
|
|
@ -714,7 +716,7 @@ func TestSubQuery(t *testing.T) {
|
|||
//avrgCustomer := NumExp(Customer.SELECT(Customer.LastName).LIMIT(1))
|
||||
//
|
||||
//Customer.
|
||||
// INNER_JOIN(selectStmtTable, Customer.LastName.Eq(selectStmtTable.RefStringColumn(Actor.FirstName))).
|
||||
// INNER_JOIN(selectStmtTable, Customer.LastName.EQ(selectStmtTable.RefStringColumn(Actor.FirstName))).
|
||||
// SELECT(Customer.AllColumns, selectStmtTable.RefIntColumnName("first_name")).
|
||||
// WHERE(Actor.LastName.Neq(avrgCustomer))
|
||||
|
||||
|
|
@ -740,11 +742,11 @@ FROM dvds.actor
|
|||
`
|
||||
|
||||
rFilmsOnly := Film.SELECT(Film.FilmID, Film.Title, Film.Rating).
|
||||
WHERE(Film.Rating.EqString("R")).
|
||||
WHERE(Film.Rating.EQ(String("R"))).
|
||||
AsTable("films")
|
||||
|
||||
query := Actor.INNER_JOIN(FilmActor, Actor.ActorID.Eq(FilmActor.FilmID)).
|
||||
INNER_JOIN(rFilmsOnly, FilmActor.FilmID.Eq(rFilmsOnly.RefIntColumn(Film.FilmID))).
|
||||
query := Actor.INNER_JOIN(FilmActor, Actor.ActorID.EQ(FilmActor.FilmID)).
|
||||
INNER_JOIN(rFilmsOnly, FilmActor.FilmID.EQ(rFilmsOnly.RefIntColumn(Film.FilmID))).
|
||||
SELECT(
|
||||
Actor.AllColumns,
|
||||
FilmActor.AllColumns,
|
||||
|
|
@ -809,7 +811,7 @@ ORDER BY film.film_id ASC;
|
|||
|
||||
query := Film.
|
||||
SELECT(Film.AllColumns).
|
||||
WHERE(Film.RentalRate.Eq(maxFilmRentalRate)).
|
||||
WHERE(Film.RentalRate.EQ(maxFilmRentalRate)).
|
||||
ORDER_BY(Film.FilmID.ASC())
|
||||
|
||||
fmt.Println(query.Sql())
|
||||
|
|
@ -856,8 +858,12 @@ ORDER BY SUM(payment.amount) ASC;
|
|||
SUM(Payment.Amount).AS("customer_payment_sum.amount_sum"),
|
||||
).
|
||||
GROUP_BY(Payment.CustomerID).
|
||||
ORDER_BY(SUM(Payment.Amount).ASC()).
|
||||
HAVING(SUM(Payment.Amount).Gt(NewNumericLiteral(100)))
|
||||
ORDER_BY(
|
||||
SUM(Payment.Amount).ASC(),
|
||||
).
|
||||
HAVING(
|
||||
SUM(Payment.Amount).GT(Int(100)),
|
||||
)
|
||||
|
||||
assertQuery(t, customersPaymentQuery, expectedSql, 100)
|
||||
|
||||
|
|
@ -913,7 +919,7 @@ ORDER BY customer_payment_sum.amount_sum ASC;
|
|||
amountSumColumn := customersPaymentTable.RefIntColumnName("amount_sum")
|
||||
|
||||
query := Customer.
|
||||
INNER_JOIN(customersPaymentTable, Customer.CustomerID.Eq(customersPaymentTable.RefIntColumn(Payment.CustomerID))).
|
||||
INNER_JOIN(customersPaymentTable, Customer.CustomerID.EQ(customersPaymentTable.RefIntColumn(Payment.CustomerID))).
|
||||
SELECT(Customer.AllColumns, amountSumColumn.AS("customer_with_amounts.amount_sum")).
|
||||
ORDER_BY(amountSumColumn.ASC())
|
||||
|
||||
|
|
@ -1018,10 +1024,10 @@ OFFSET 20;
|
|||
query := UNION_ALL(
|
||||
Payment.
|
||||
SELECT(Payment.PaymentID.AS("payment.payment_id"), Payment.Amount).
|
||||
WHERE(Payment.Amount.LtEqL(100)),
|
||||
WHERE(Payment.Amount.LT_EQ(Int(100))),
|
||||
Payment.
|
||||
SELECT(Payment.PaymentID, Payment.Amount).
|
||||
WHERE(Payment.Amount.GtEqL(200)),
|
||||
WHERE(Payment.Amount.GT_EQ(Int(200))),
|
||||
).
|
||||
ORDER_BY(RefColumn("payment.payment_id").ASC(), Payment.Amount.DESC()).
|
||||
LIMIT(10).
|
||||
|
|
@ -1061,9 +1067,9 @@ LIMIT 20;
|
|||
`
|
||||
query := Payment.SELECT(
|
||||
CASE(Payment.StaffID).
|
||||
WHEN(IntLiteral(1)).THEN(Literal("ONE")).
|
||||
WHEN(IntLiteral(2)).THEN(Literal("TWO")).
|
||||
WHEN(IntLiteral(3)).THEN(Literal("THREE")).
|
||||
WHEN(Int(1)).THEN(Literal("ONE")).
|
||||
WHEN(Int(2)).THEN(Literal("TWO")).
|
||||
WHEN(Int(3)).THEN(Literal("THREE")).
|
||||
ELSE(Literal("OTHER")).AS("staff_id_num"),
|
||||
).
|
||||
ORDER_BY(Payment.PaymentID.ASC()).
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ package tests
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/sub0zero/go-sqlbuilder/sqlbuilder"
|
||||
. "github.com/sub0zero/go-sqlbuilder/sqlbuilder"
|
||||
"github.com/sub0zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/model"
|
||||
"github.com/sub0zero/go-sqlbuilder/tests/.test_files/dvd_rental/test_sample/table"
|
||||
"gotest.tools/assert"
|
||||
|
|
@ -11,9 +11,9 @@ import (
|
|||
|
||||
func TestUpdateValues(t *testing.T) {
|
||||
_, err := table.Link.INSERT(table.Link.URL, table.Link.Name, table.Link.Rel).
|
||||
VALUES("http://www.postgresqltutorial.com", "PostgreSQL Tutorial", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.yahoo.com", "Yahoo", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.bing.com", "Bing", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT).
|
||||
VALUES("http://www.yahoo.com", "Yahoo", DEFAULT).
|
||||
VALUES("http://www.bing.com", "Bing", DEFAULT).
|
||||
RETURNING(table.Link.ID).Execute(db)
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
|
@ -21,7 +21,7 @@ func TestUpdateValues(t *testing.T) {
|
|||
query := table.Link.
|
||||
UPDATE(table.Link.Name, table.Link.URL).
|
||||
SET("Bong", "http://bong.com").
|
||||
WHERE(table.Link.Name.EqString("Bing"))
|
||||
WHERE(table.Link.Name.EQ(String("Bing")))
|
||||
|
||||
queryStr, args, err := query.Sql()
|
||||
|
||||
|
|
@ -38,7 +38,7 @@ func TestUpdateValues(t *testing.T) {
|
|||
links := []model.Link{}
|
||||
|
||||
err = table.Link.SELECT(table.Link.AllColumns).
|
||||
WHERE(table.Link.Name.EqString("Bong")).
|
||||
WHERE(table.Link.Name.EQ(String("Bong"))).
|
||||
Query(db, &links)
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
|
@ -48,11 +48,11 @@ func TestUpdateValues(t *testing.T) {
|
|||
|
||||
func TestUpdateAndReturning(t *testing.T) {
|
||||
_, err := table.Link.INSERT(table.Link.URL, table.Link.Name, table.Link.Rel).
|
||||
VALUES("http://www.postgresqltutorial.com", "PostgreSQL Tutorial", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.ask.com", "Ask", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.ask.com", "Ask", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.yahoo.com", "Yahoo", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.bing.com", "Bing", sqlbuilder.DEFAULT).
|
||||
VALUES("http://www.postgresqltutorial.com", "PostgreSQL Tutorial", DEFAULT).
|
||||
VALUES("http://www.ask.com", "Ask", DEFAULT).
|
||||
VALUES("http://www.ask.com", "Ask", DEFAULT).
|
||||
VALUES("http://www.yahoo.com", "Yahoo", DEFAULT).
|
||||
VALUES("http://www.bing.com", "Bing", DEFAULT).
|
||||
RETURNING(table.Link.ID).Execute(db)
|
||||
|
||||
assert.NilError(t, err)
|
||||
|
|
@ -60,7 +60,7 @@ func TestUpdateAndReturning(t *testing.T) {
|
|||
stmt := table.Link.
|
||||
UPDATE(table.Link.Name, table.Link.URL).
|
||||
SET("DuckDuckGo", "http://www.duckduckgo.com").
|
||||
WHERE(table.Link.Name.EqString("Ask")).
|
||||
WHERE(table.Link.Name.EQ(String("Ask"))).
|
||||
RETURNING(table.Link.AllColumns)
|
||||
|
||||
stmtStr, args, err := stmt.Sql()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue