33from sqlalchemy .testing .suite import ComponentReflectionTest as _ComponentReflectionTest
44from sqlalchemy .testing .suite import ExceptionTest as _ExceptionTest
55from sqlalchemy .testing .suite import OrderByLabelTest as _OrderByLabelTest
6-
76from sqlalchemy import inspect
8- from sqlalchemy .testing import eq_
7+ from sqlalchemy .testing import eq_ , is_
98from sqlalchemy import testing
10- from sqlalchemy .schema import DDL
9+ from sqlalchemy .schema import DDL , Index
1110from sqlalchemy import event
1211from sqlalchemy import MetaData
1312
13+ major , minor = [int (i ) for i in sa .__version__ .split ('.' )[:2 ]]
14+
1415
1516class ComponentReflectionTest (_ComponentReflectionTest ):
1617 @testing .requires .foreign_key_constraint_reflection
@@ -41,15 +42,6 @@ def test_get_temp_table_unique_constraints(self):
4142 # TODO: it looks like MonetDB doesn't show constains for temp tables (yet)
4243 return
4344
44- insp = inspect (self .bind )
45- reflected = insp .get_unique_constraints ('user_tmp' , schema = 'tmp' )
46- for refl in reflected :
47- # Different dialects handle duplicate index and constraints
48- # differently, so ignore this flag
49- refl .pop ('duplicates_index' , None )
50- eq_ (reflected , [{'column_names' : ['name' ], 'name' : 'user_tmp_uq' }])
51-
52-
5345 @classmethod
5446 def define_temp_tables (cls , metadata ):
5547 user_tmp = Table (
@@ -76,6 +68,13 @@ def define_temp_tables(cls, metadata):
7668
7769 @classmethod
7870 def define_reflected_tables (cls , metadata , schema ):
71+ if major >= 1 and minor >= 2 :
72+ cls ._define_reflected_tables_12 (metadata , schema )
73+ else :
74+ super (ComponentReflectionTest , cls ).define_reflected_tables (metadata , schema )
75+
76+ @classmethod
77+ def _define_reflected_tables_12 (cls , metadata , schema ):
7978 if schema :
8079 schema_prefix = schema + "."
8180 else :
@@ -88,7 +87,8 @@ def define_reflected_tables(cls, metadata, schema):
8887 Column ('test2' , sa .Float (5 ), nullable = False ),
8988 Column ('parent_user_id' , sa .Integer ,
9089 sa .ForeignKey ('%susers.user_id' %
91- schema_prefix )),
90+ schema_prefix ,
91+ name = 'user_id_fk' )),
9292 schema = schema ,
9393 test_needs_fk = True ,
9494 )
@@ -101,9 +101,16 @@ def define_reflected_tables(cls, metadata, schema):
101101 test_needs_fk = True ,
102102 )
103103
104- # somehow the dependencies are not properly resolved, so i modified
105- # the standard test to have a reference to the address_id column
106- mail = Table ('email_addresses' , metadata ,
104+ Table ("dingalings" , metadata ,
105+ Column ('dingaling_id' , sa .Integer , primary_key = True ),
106+ Column ('address_id' , sa .Integer ,
107+ sa .ForeignKey ('%semail_addresses.address_id' %
108+ schema_prefix )),
109+ Column ('data' , sa .String (30 )),
110+ schema = schema ,
111+ test_needs_fk = True ,
112+ )
113+ Table ('email_addresses' , metadata ,
107114 Column ('address_id' , sa .Integer ),
108115 Column ('remote_user_id' , sa .Integer ,
109116 sa .ForeignKey (users .c .user_id )),
@@ -112,24 +119,61 @@ def define_reflected_tables(cls, metadata, schema):
112119 schema = schema ,
113120 test_needs_fk = True ,
114121 )
115-
116-
117- Table ("dingalings" , metadata ,
118- Column ('dingaling_id' , sa .Integer , primary_key = True ),
119- Column ('address_id' , sa .Integer ,
120- sa .ForeignKey (mail .c .address_id )),
121- Column ('data' , sa .String (30 )),
122+ Table ('comment_test' , metadata ,
123+ Column ('id' , sa .Integer , primary_key = True , comment = 'id comment' ),
124+ Column ('data' , sa .String (20 ), comment = 'data % comment' ),
125+ Column (
126+ 'd2' , sa .String (20 ),
127+ comment = r"""Comment types type speedily ' " \ '' Fun!""" ),
122128 schema = schema ,
123- test_needs_fk = True ,
124- )
129+ comment = r"""the test % ' " \ table comment""" )
125130
126131 if testing .requires .index_reflection .enabled :
127132 cls .define_index (metadata , users )
133+
134+ if not schema :
135+ noncol_idx_test_nopk = Table (
136+ 'noncol_idx_test_nopk' , metadata ,
137+ Column ('q' , sa .String (5 )),
138+ )
139+ noncol_idx_test_pk = Table (
140+ 'noncol_idx_test_pk' , metadata ,
141+ Column ('id' , sa .Integer , primary_key = True ),
142+ Column ('q' , sa .String (5 )),
143+ )
144+ Index ('noncol_idx_nopk' , noncol_idx_test_nopk .c .q )
145+ Index ('noncol_idx_pk' , noncol_idx_test_pk .c .q )
146+
128147 if testing .requires .view_column_reflection .enabled :
129148 cls .define_views (metadata , schema )
130149 if not schema and testing .requires .temp_table_reflection .enabled :
131150 cls .define_temp_tables (metadata )
132151
152+ @testing .requires .index_reflection
153+ def test_get_noncol_index_pk (self ):
154+ # TODO: not working for now?
155+ return
156+
157+ tname = "noncol_idx_test_nopk"
158+ ixname = "noncol_idx_nopk"
159+ meta = self .metadata
160+ insp = inspect (meta .bind )
161+ indexes = insp .get_indexes (tname )
162+
163+ # reflecting an index that has "x DESC" in it as the column.
164+ # the DB may or may not give us "x", but make sure we get the index
165+ # back, it has a name, it's connected to the table.
166+ expected_indexes = [
167+ {'unique' : False ,
168+ 'name' : ixname }
169+ ]
170+ self ._assert_insp_indexes (indexes , expected_indexes )
171+
172+ t = Table (tname , meta , autoload_with = meta .bind )
173+ eq_ (len (t .indexes ), 2 )
174+ is_ (list (t .indexes )[0 ].table , t )
175+ eq_ (list (t .indexes )[0 ].name , ixname )
176+
133177
134178class ExceptionTest (_ExceptionTest ):
135179 """
0 commit comments