@@ -516,3 +516,90 @@ func TestJoinsPreload_Issue7013_NoEntries(t *testing.T) {
516
516
517
517
tests .AssertEqual (t , len (entries ), 0 )
518
518
}
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