package orm import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" ) type JoinTest struct { tableName struct{} `sql:"JoinTest,alias:JoinTest"` Id int HasOne *HasOne HasOneId int BelongsTo *BelongsTo } type HasOne struct { tableName struct{} `sql:"HasOne,alias:HasOne"` Id int HasOne *HasOne HasOneId int } type BelongsTo struct { tableName struct{} `sql:"BelongsTo,alias:BelongsTo"` Id int JoinTestId int } var _ = Describe("Select", func() { It("supports has one", func() { q := NewQuery(nil, &JoinTest{}).Relation("HasOne.HasOne", nil) b, err := (&selectQuery{q: q}).AppendQuery(nil) Expect(err).NotTo(HaveOccurred()) Expect(string(b)).To(Equal(`SELECT JoinTest."id", JoinTest."has_one_id", "has_one"."id" AS "has_one__id", "has_one"."has_one_id" AS "has_one__has_one_id", "has_one__has_one"."id" AS "has_one__has_one__id", "has_one__has_one"."has_one_id" AS "has_one__has_one__has_one_id" FROM JoinTest AS JoinTest LEFT JOIN HasOne AS "has_one" ON "has_one"."id" = JoinTest."has_one_id" LEFT JOIN HasOne AS "has_one__has_one" ON "has_one__has_one"."id" = "has_one"."has_one_id"`)) }) It("supports belongs to", func() { q := NewQuery(nil, &JoinTest{}).Relation("BelongsTo", nil) b, err := (&selectQuery{q: q}).AppendQuery(nil) Expect(err).NotTo(HaveOccurred()) Expect(string(b)).To(Equal(`SELECT JoinTest."id", JoinTest."has_one_id", "belongs_to"."id" AS "belongs_to__id", "belongs_to"."join_test_id" AS "belongs_to__join_test_id" FROM JoinTest AS JoinTest LEFT JOIN BelongsTo AS "belongs_to" ON "belongs_to"."join_test_id" = JoinTest."id"`)) }) })