@@ -649,6 +649,149 @@ class UnicodeTextTest(UnicodeFixtureTest, _UnicodeTextTest):
649
649
650
650
651
651
class ComponentReflectionTest (_ComponentReflectionTest ):
652
+ @classmethod
653
+ def define_reflected_tables (cls , metadata , schema ):
654
+ if schema :
655
+ schema_prefix = schema + "."
656
+ else :
657
+ schema_prefix = ""
658
+
659
+ if testing .requires .self_referential_foreign_keys .enabled :
660
+ users = Table (
661
+ "users" ,
662
+ metadata ,
663
+ Column ("user_id" , sqlalchemy .INT , primary_key = True ),
664
+ Column ("test1" , sqlalchemy .CHAR (5 ), nullable = False ),
665
+ Column ("test2" , sqlalchemy .Float (5 ), nullable = False ),
666
+ Column (
667
+ "parent_user_id" ,
668
+ sqlalchemy .Integer ,
669
+ sqlalchemy .ForeignKey (
670
+ "%susers.user_id" % schema_prefix , name = "user_id_fk"
671
+ ),
672
+ ),
673
+ schema = schema ,
674
+ test_needs_fk = True ,
675
+ )
676
+ else :
677
+ users = Table (
678
+ "users" ,
679
+ metadata ,
680
+ Column ("user_id" , sqlalchemy .INT , primary_key = True ),
681
+ Column ("test1" , sqlalchemy .CHAR (5 ), nullable = False ),
682
+ Column ("test2" , sqlalchemy .Float (5 ), nullable = False ),
683
+ schema = schema ,
684
+ test_needs_fk = True ,
685
+ )
686
+
687
+ Table (
688
+ "dingalings" ,
689
+ metadata ,
690
+ Column ("dingaling_id" , sqlalchemy .Integer , primary_key = True ),
691
+ Column (
692
+ "address_id" ,
693
+ sqlalchemy .Integer ,
694
+ sqlalchemy .ForeignKey ("%semail_addresses.address_id" % schema_prefix ),
695
+ ),
696
+ Column ("data" , sqlalchemy .String (30 )),
697
+ schema = schema ,
698
+ test_needs_fk = True ,
699
+ )
700
+ Table (
701
+ "email_addresses" ,
702
+ metadata ,
703
+ Column ("address_id" , sqlalchemy .Integer , primary_key = True ),
704
+ Column (
705
+ "remote_user_id" ,
706
+ sqlalchemy .Integer ,
707
+ sqlalchemy .ForeignKey (users .c .user_id ),
708
+ ),
709
+ Column ("email_address" , sqlalchemy .String (20 )),
710
+ sqlalchemy .PrimaryKeyConstraint ("address_id" , name = "email_ad_pk" ),
711
+ schema = schema ,
712
+ test_needs_fk = True ,
713
+ )
714
+ Table (
715
+ "comment_test" ,
716
+ metadata ,
717
+ Column ("id" , sqlalchemy .Integer , primary_key = True , comment = "id comment" ),
718
+ Column ("data" , sqlalchemy .String (20 ), comment = "data % comment" ),
719
+ Column (
720
+ "d2" ,
721
+ sqlalchemy .String (20 ),
722
+ comment = r"""Comment types type speedily ' " \ '' Fun!""" ,
723
+ ),
724
+ schema = schema ,
725
+ comment = r"""the test % ' " \ table comment""" ,
726
+ )
727
+
728
+ if testing .requires .cross_schema_fk_reflection .enabled :
729
+ if schema is None :
730
+ Table (
731
+ "local_table" ,
732
+ metadata ,
733
+ Column ("id" , sqlalchemy .Integer , primary_key = True ),
734
+ Column ("data" , sqlalchemy .String (20 )),
735
+ Column (
736
+ "remote_id" ,
737
+ ForeignKey ("%s.remote_table_2.id" % testing .config .test_schema ),
738
+ ),
739
+ test_needs_fk = True ,
740
+ schema = config .db .dialect .default_schema_name ,
741
+ )
742
+ else :
743
+ Table (
744
+ "remote_table" ,
745
+ metadata ,
746
+ Column ("id" , sqlalchemy .Integer , primary_key = True ),
747
+ Column (
748
+ "local_id" ,
749
+ ForeignKey (
750
+ "%s.local_table.id" % config .db .dialect .default_schema_name
751
+ ),
752
+ ),
753
+ Column ("data" , sqlalchemy .String (20 )),
754
+ schema = schema ,
755
+ test_needs_fk = True ,
756
+ )
757
+ Table (
758
+ "remote_table_2" ,
759
+ metadata ,
760
+ Column ("id" , sqlalchemy .Integer , primary_key = True ),
761
+ Column ("data" , sqlalchemy .String (20 )),
762
+ schema = schema ,
763
+ test_needs_fk = True ,
764
+ )
765
+
766
+ if testing .requires .index_reflection .enabled :
767
+ cls .define_index (metadata , users )
768
+
769
+ if not schema :
770
+ # test_needs_fk is at the moment to force MySQL InnoDB
771
+ # noncol_idx_test_nopk = Table(
772
+ # "noncol_idx_test_nopk",
773
+ # metadata,
774
+ # Column("q", sqlalchemy.String(5)),
775
+ # test_needs_fk=True,
776
+ # )
777
+
778
+ noncol_idx_test_pk = Table (
779
+ "noncol_idx_test_pk" ,
780
+ metadata ,
781
+ Column ("id" , sqlalchemy .Integer , primary_key = True ),
782
+ Column ("q" , sqlalchemy .String (5 )),
783
+ test_needs_fk = True ,
784
+ )
785
+
786
+ if testing .requires .indexes_with_ascdesc .enabled :
787
+ # Index("noncol_idx_nopk", noncol_idx_test_nopk.c.q.desc())
788
+ sqlalchemy .Index ("noncol_idx_pk" , noncol_idx_test_pk .c .q .desc ())
789
+
790
+ if testing .requires .view_column_reflection .enabled :
791
+ cls .define_views (metadata , schema )
792
+ if not schema and testing .requires .temp_table_reflection .enabled :
793
+ cls .define_temp_tables (metadata )
794
+
652
795
@classmethod
653
796
def define_temp_tables (cls , metadata ):
654
797
"""
0 commit comments