1
1
# MySQL Connector/Python - MySQL driver written in Python.
2
- # Copyright (c) 2014, 2015 , Oracle and/or its affiliates. All rights reserved.
2
+ # Copyright (c) 2014, 2017 , Oracle and/or its affiliates. All rights reserved.
3
3
4
4
# MySQL Connector/Python is licensed under the terms of the GPLv2
5
5
# <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>, like most
60
60
'TEST_COLLATION' : 'utf8_general_ci' ,
61
61
'CONN_MAX_AGE' : 0 ,
62
62
'AUTOCOMMIT' : True ,
63
+ 'TIME_ZONE' : None ,
63
64
},
64
65
}
65
66
settings .SECRET_KEY = "django_tests_secret_key"
92
93
93
94
# Have to load django.db to make importing db backend work for Django < 1.6
94
95
import django .db # pylint: disable=W0611
95
- if tests .DJANGO_VERSION >= (1 , 6 ):
96
- if tests .DJANGO_VERSION >= (1 , 8 ):
97
- from django .db .backends .base .introspection import FieldInfo
98
- else :
99
- from django .db .backends import FieldInfo
100
96
from django .db .backends .signals import connection_created
101
97
from django .utils .safestring import SafeBytes , SafeText
102
98
103
99
import mysql .connector
100
+ from mysql .connector .django .introspection import FieldInfo
104
101
105
102
if DJANGO_AVAILABLE :
106
103
from mysql .connector .django .base import (
@@ -147,14 +144,14 @@ def tearDownClass(cls):
147
144
148
145
def test_get_table_list (self ):
149
146
cur = self .cnx .cursor ()
150
- exp = list (TABLES .keys ())
151
- for exp in list (TABLES .keys ()):
147
+ for exp in TABLES .keys ():
152
148
if sys .version_info < (2 , 7 ):
153
149
self .assertTrue (exp in self .introspect .get_table_list (cur ))
154
150
else :
155
- self .assertIn (exp , self .introspect .get_table_list (cur ),
156
- "Table {table_name} not in table list" .format (
157
- table_name = exp ))
151
+ res = any (table .name == exp
152
+ for table in self .introspect .get_table_list (cur ))
153
+ self .assertTrue (res , "Table {table_name} not in table list"
154
+ "" .format (table_name = exp ))
158
155
159
156
def test_get_table_description (self ):
160
157
cur = self .cnx .cursor ()
@@ -165,24 +162,39 @@ def test_get_table_description(self):
165
162
('c1' , 3 , None , None , None , None , 1 , 16392 ),
166
163
('c2' , 253 , None , 20 , None , None , 1 , 16388 )
167
164
]
168
- else :
165
+ elif tests . DJANGO_VERSION < ( 1 , 8 ) :
169
166
exp = [
170
- FieldInfo (name = 'id' , type_code = 3 , display_size = None ,
167
+ FieldInfo (name = u 'id' , type_code = 3 , display_size = None ,
171
168
internal_size = None , precision = None , scale = None ,
172
169
null_ok = 0 ),
173
- FieldInfo (name = 'c1' , type_code = 3 , display_size = None ,
170
+ FieldInfo (name = u 'c1' , type_code = 3 , display_size = None ,
174
171
internal_size = None , precision = None , scale = None ,
175
172
null_ok = 1 ),
176
- FieldInfo (name = 'c2' , type_code = 253 , display_size = None ,
173
+ FieldInfo (name = u 'c2' , type_code = 253 , display_size = None ,
177
174
internal_size = 20 , precision = None , scale = None ,
178
175
null_ok = 1 )
179
176
]
177
+ else :
178
+ exp = [
179
+ FieldInfo (name = u'id' , type_code = 3 , display_size = None ,
180
+ internal_size = None , precision = 10 , scale = None ,
181
+ null_ok = 0 , extra = u'auto_increment' ),
182
+ FieldInfo (name = u'c1' , type_code = 3 , display_size = None ,
183
+ internal_size = None , precision = 10 , scale = None ,
184
+ null_ok = 1 , extra = u'' ),
185
+ FieldInfo (name = u'c2' , type_code = 253 , display_size = None ,
186
+ internal_size = 20 , precision = None , scale = None ,
187
+ null_ok = 1 , extra = u'' )
188
+ ]
180
189
res = self .introspect .get_table_description (cur , 'django_t1' )
181
190
self .assertEqual (exp , res )
182
191
183
192
def test_get_relations (self ):
184
193
cur = self .cnx .cursor ()
185
- exp = {1 : (0 , 'django_t1' )}
194
+ if tests .DJANGO_VERSION < (1 , 8 ):
195
+ exp = {1 : (0 , 'django_t1' )}
196
+ else :
197
+ exp = {u'id_t1' : (u'id' , u'django_t1' )}
186
198
self .assertEqual (exp , self .introspect .get_relations (cur , 'django_t2' ))
187
199
188
200
def test_get_key_columns (self ):
@@ -204,6 +216,30 @@ def test_get_primary_key_column(self):
204
216
res = self .introspect .get_primary_key_column (cur , 'django_t1' )
205
217
self .assertEqual ('id' , res )
206
218
219
+ def test_get_constraints (self ):
220
+ cur = self .cnx .cursor ()
221
+ exp = {
222
+ 'PRIMARY' : {'check' : False ,
223
+ 'columns' : ['id' ],
224
+ 'foreign_key' : None ,
225
+ 'index' : True ,
226
+ 'primary_key' : True ,
227
+ 'unique' : True },
228
+ 'django_t2_ibfk_1' : {'check' : False ,
229
+ 'columns' : ['id_t1' ],
230
+ 'foreign_key' : ('django_t1' , 'id' ),
231
+ 'index' : False ,
232
+ 'primary_key' : False ,
233
+ 'unique' : False },
234
+ 'id_t1' : {'check' : False ,
235
+ 'columns' : ['id_t1' ],
236
+ 'foreign_key' : None ,
237
+ 'index' : True ,
238
+ 'primary_key' : False ,
239
+ 'unique' : False }
240
+ }
241
+ self .assertEqual (
242
+ exp , self .introspect .get_constraints (cur , 'django_t2' ))
207
243
208
244
@unittest .skipIf (not DJANGO_AVAILABLE , "Django not available" )
209
245
class DjangoDatabaseWrapper (tests .MySQLConnectorTests ):
@@ -277,26 +313,49 @@ def setUp(self):
277
313
self .dbo = DatabaseOperations (self .cnx )
278
314
279
315
def test_value_to_db_time (self ):
280
- self .assertEqual (None , self .dbo .value_to_db_time (None ))
316
+ if tests .DJANGO_VERSION < (1 , 9 ):
317
+ value_to_db_time = self .dbo .value_to_db_time
318
+ else :
319
+ value_to_db_time = self .dbo .adapt_timefield_value
320
+
321
+ self .assertEqual (None , value_to_db_time (None ))
281
322
282
323
value = datetime .time (0 , 0 , 0 )
283
324
exp = self .conn .converter ._time_to_mysql (value )
284
- self .assertEqual (exp , self . dbo . value_to_db_time (value ))
325
+ self .assertEqual (exp , value_to_db_time (value ))
285
326
286
327
value = datetime .time (2 , 5 , 7 )
287
328
exp = self .conn .converter ._time_to_mysql (value )
288
- self .assertEqual (exp , self . dbo . value_to_db_time (value ))
329
+ self .assertEqual (exp , value_to_db_time (value ))
289
330
290
331
def test_value_to_db_datetime (self ):
291
- self .assertEqual (None , self .dbo .value_to_db_datetime (None ))
332
+ if tests .DJANGO_VERSION < (1 , 9 ):
333
+ value_to_db_datetime = self .dbo .value_to_db_datetime
334
+ else :
335
+ value_to_db_datetime = self .dbo .adapt_datetimefield_value
336
+
337
+ self .assertEqual (None , value_to_db_datetime (None ))
292
338
293
339
value = datetime .datetime (1 , 1 , 1 )
294
340
exp = self .conn .converter ._datetime_to_mysql (value )
295
- self .assertEqual (exp , self . dbo . value_to_db_datetime (value ))
341
+ self .assertEqual (exp , value_to_db_datetime (value ))
296
342
297
343
value = datetime .datetime (2 , 5 , 7 , 10 , 10 )
298
344
exp = self .conn .converter ._datetime_to_mysql (value )
299
- self .assertEqual (exp , self .dbo .value_to_db_datetime (value ))
345
+ self .assertEqual (exp , value_to_db_datetime (value ))
346
+
347
+ def test_bulk_insert_sql (self ):
348
+ num_values = 5
349
+ fields = ["col1" , "col2" , "col3" ]
350
+ placeholder_rows = [["%s" ] * len (fields ) for _ in range (num_values )]
351
+ exp = "VALUES {0}" .format (", " .join (
352
+ ["({0})" .format (", " .join (["%s" ] * len (fields )))] * num_values ))
353
+ if tests .DJANGO_VERSION < (1 , 9 ):
354
+ self .assertEqual (
355
+ exp , self .dbo .bulk_insert_sql (fields , num_values ))
356
+ else :
357
+ self .assertEqual (
358
+ exp , self .dbo .bulk_insert_sql (fields , placeholder_rows ))
300
359
301
360
302
361
class DjangoMySQLConverterTests (tests .MySQLConnectorTests ):
0 commit comments