@@ -601,5 +601,70 @@ public void Passing_Negative_Boolean_False_To_Where_Should_Call_WhereTrue_Or_Whe
601601
602602 Assert . Equal ( "SELECT * FROM [Table] WHERE [Col] != cast(0 as bit)" , c [ EngineCodes . SqlServer ] . ToString ( ) ) ;
603603 }
604+
605+ [ Fact ]
606+ public void Clone_ShouldProduceIndependentIncludesList ( )
607+ {
608+ var query = new Query ( "users" )
609+ . Include ( "posts" , new Query ( "posts" ) , "user_id" , "id" ) ;
610+
611+ var clone = query . Clone ( ) ;
612+
613+ // Adding an include to the clone should not affect the original
614+ clone . Include ( "comments" , new Query ( "comments" ) , "user_id" , "id" ) ;
615+
616+ Assert . Single ( query . Includes ) ;
617+ Assert . Equal ( 2 , clone . Includes . Count ) ;
618+ }
619+
620+ [ Fact ]
621+ public void Clone_ShouldProduceIndependentIncludeObjects ( )
622+ {
623+ var query = new Query ( "users" )
624+ . Include ( "posts" , new Query ( "posts" ) , "user_id" , "id" ) ;
625+
626+ var clone = query . Clone ( ) ;
627+
628+ // Modifying an include property on the clone should not affect the original
629+ clone . Includes [ 0 ] . Name = "modified_name" ;
630+
631+ Assert . Equal ( "posts" , query . Includes [ 0 ] . Name ) ;
632+ Assert . Equal ( "modified_name" , clone . Includes [ 0 ] . Name ) ;
633+ }
634+
635+ [ Fact ]
636+ public void Clone_ShouldProduceIndependentVariablesDictionary ( )
637+ {
638+ var query = new Query ( "users" ) . Define ( "limit" , 10 ) ;
639+
640+ var clone = query . Clone ( ) ;
641+
642+ // Adding a variable to the clone should not affect the original
643+ clone . Define ( "offset" , 5 ) ;
644+
645+ Assert . False ( query . Variables . ContainsKey ( "offset" ) ) ;
646+ Assert . True ( clone . Variables . ContainsKey ( "offset" ) ) ;
647+ }
648+
649+ [ Fact ]
650+ public void Clone_ShouldPreserveAllProperties ( )
651+ {
652+ var query = new Query ( "users" )
653+ . Select ( "id" , "name" )
654+ . Where ( "active" , true )
655+ . Distinct ( )
656+ . As ( "u" )
657+ . Include ( "posts" , new Query ( "posts" ) , "user_id" , "id" )
658+ . Define ( "myvar" , 42 ) ;
659+
660+ var clone = query . Clone ( ) ;
661+
662+ Assert . Equal ( query . QueryAlias , clone . QueryAlias ) ;
663+ Assert . Equal ( query . IsDistinct , clone . IsDistinct ) ;
664+ Assert . Equal ( query . Method , clone . Method ) ;
665+ Assert . Equal ( query . Includes . Count , clone . Includes . Count ) ;
666+ Assert . Equal ( query . Includes [ 0 ] . Name , clone . Includes [ 0 ] . Name ) ;
667+ Assert . Equal ( query . Variables [ "myvar" ] , clone . Variables [ "myvar" ] ) ;
668+ }
604669 }
605670}
0 commit comments