@@ -516,3 +516,90 @@ func TestJoinsPreload_Issue7013_NoEntries(t *testing.T) {
516516
517517 tests .AssertEqual (t , len (entries ), 0 )
518518}
519+
520+ type JoinCompany struct {
521+ ID int64 `gorm:"column:id;primaryKey"`
522+ Name string `gorm:"column:name"`
523+ }
524+
525+ type JoinUser struct {
526+ ID int64 `gorm:"column:id;primaryKey"`
527+ Name string `gorm:"column:name"`
528+ CompanyID int64 `gorm:"column:company_id"`
529+ Company JoinCompany `gorm:"foreignKey:CompanyID"`
530+ }
531+
532+ func TestJoinWithOrderLimit (t * testing.T ) {
533+ _ = DB .Migrator ().DropTable (& JoinUser {}, & JoinCompany {})
534+ if err := DB .Migrator ().CreateTable (& JoinCompany {}, & JoinUser {}); err != nil {
535+ t .Fatalf ("failed to create tables: %v" , err )
536+ }
537+
538+ company := JoinCompany {Name : "TestCompany" }
539+ if err := DB .Create (& company ).Error ; err != nil {
540+ t .Fatalf ("failed to insert company: %v" , err )
541+ }
542+
543+ users := []JoinUser {
544+ {Name : "order-limit-1" , CompanyID : company .ID },
545+ {Name : "order-limit-2" , CompanyID : company .ID },
546+ }
547+ if err := DB .Create (& users ).Error ; err != nil {
548+ t .Fatalf ("failed to insert users: %v" , err )
549+ }
550+
551+ var result []JoinUser
552+ err := DB .
553+ Joins ("Company" ).
554+ Order ("\" join_users\" .\" id\" DESC" ).
555+ Limit (1 ).
556+ Find (& result ).Error
557+
558+ if err != nil {
559+ t .Fatalf ("unexpected error: %v" , err )
560+ }
561+ if len (result ) != 1 {
562+ t .Errorf ("expected 1 result with limit, got %d" , len (result ))
563+ }
564+ }
565+
566+ func TestJoinOnNilDB (t * testing.T ) {
567+ var users []JoinUser
568+ var nilDB * gorm.DB
569+
570+ defer func () {
571+ if r := recover (); r == nil {
572+ t .Errorf ("expected panic when calling Joins on nil DB, got none" )
573+ }
574+ }()
575+
576+ nilDB .Joins ("Company" ).Find (& users )
577+ }
578+
579+ func TestJoinNonExistentRelation (t * testing.T ) {
580+ var user JoinUser
581+ err := DB .Joins ("NonExistentRelation" ).First (& user ).Error
582+ if err == nil {
583+ t .Errorf ("expected error when joining on non-existent relation, got nil" )
584+ }
585+ }
586+
587+ func TestJoinAmbiguousColumnError (t * testing.T ) {
588+ var result []JoinUser
589+ err := DB .Table ("join_users" ).
590+ Select ("id" ). // ambiguous since multiple tables have id
591+ Joins ("join companies on companies.id = join_users.company_id" ).
592+ Scan (& result ).Error
593+
594+ if err == nil {
595+ t .Errorf ("expected error for ambiguous column selection, got nil" )
596+ }
597+ }
598+
599+ func TestJoinInvalidSQL (t * testing.T ) {
600+ var users []JoinUser
601+ err := DB .Joins ("LEFT JOIN invalid_table ON" ).Find (& users ).Error
602+ if err == nil {
603+ t .Errorf ("expected SQL error for invalid join, got nil" )
604+ }
605+ }
0 commit comments