/usr/lib/python2.7/dist-packages/mysql/connector/django/creation.py is in python-mysql.connector 1.2.3-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | # MySQL Connector/Python - MySQL driver written in Python.
import django
from django.db import models
from django.db.backends.creation import BaseDatabaseCreation
if django.VERSION < (1, 7):
from django.db.backends.util import truncate_name
else:
from django.db.backends.utils import truncate_name
class DatabaseCreation(BaseDatabaseCreation):
"""Maps Django Field object with MySQL data types
"""
def __init__(self, connection):
super(DatabaseCreation, self).__init__(connection)
self.data_types = {
'AutoField': 'integer AUTO_INCREMENT',
'BinaryField': 'longblob',
'BooleanField': 'bool',
'CharField': 'varchar(%(max_length)s)',
'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
'DateField': 'date',
'DateTimeField': 'datetime', # ms support set later
'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
'FileField': 'varchar(%(max_length)s)',
'FilePathField': 'varchar(%(max_length)s)',
'FloatField': 'double precision',
'IntegerField': 'integer',
'BigIntegerField': 'bigint',
'IPAddressField': 'char(15)',
'GenericIPAddressField': 'char(39)',
'NullBooleanField': 'bool',
'OneToOneField': 'integer',
'PositiveIntegerField': 'integer UNSIGNED',
'PositiveSmallIntegerField': 'smallint UNSIGNED',
'SlugField': 'varchar(%(max_length)s)',
'SmallIntegerField': 'smallint',
'TextField': 'longtext',
'TimeField': 'time', # ms support set later
}
# Support for microseconds
if self.connection.get_server_version() >= (5, 6, 4):
self.data_types.update({
'DateTimeField': 'datetime(6)',
'TimeField': 'time(6)',
})
def sql_table_creation_suffix(self):
suffix = []
if django.VERSION < (1, 7):
if self.connection.settings_dict['TEST_CHARSET']:
suffix.append('CHARACTER SET {0}'.format(
self.connection.settings_dict['TEST_CHARSET']))
if self.connection.settings_dict['TEST_COLLATION']:
suffix.append('COLLATE {0}'.format(
self.connection.settings_dict['TEST_COLLATION']))
else:
test_settings = self.connection.settings_dict['TEST']
if test_settings['CHARSET']:
suffix.append('CHARACTER SET %s' % test_settings['CHARSET'])
if test_settings['COLLATION']:
suffix.append('COLLATE %s' % test_settings['COLLATION'])
return ' '.join(suffix)
if django.VERSION < (1, 6):
def sql_for_inline_foreign_key_references(self, field, known_models,
style):
"All inline references are pending under MySQL"
return [], True
else:
def sql_for_inline_foreign_key_references(self, model, field,
known_models, style):
"All inline references are pending under MySQL"
return [], True
def sql_for_inline_many_to_many_references(self, model, field, style):
opts = model._meta
qn = self.connection.ops.quote_name
columndef = ' {column} {type} {options},'
table_output = [
columndef.format(
column=style.SQL_FIELD(qn(field.m2m_column_name())),
type=style.SQL_COLTYPE(models.ForeignKey(model).db_type(
connection=self.connection)),
options=style.SQL_KEYWORD('NOT NULL')
),
columndef.format(
column=style.SQL_FIELD(qn(field.m2m_reverse_name())),
type=style.SQL_COLTYPE(models.ForeignKey(field.rel.to).db_type(
connection=self.connection)),
options=style.SQL_KEYWORD('NOT NULL')
),
]
deferred = [
(field.m2m_db_table(), field.m2m_column_name(), opts.db_table,
opts.pk.column),
(field.m2m_db_table(), field.m2m_reverse_name(),
field.rel.to._meta.db_table, field.rel.to._meta.pk.column)
]
return table_output, deferred
def sql_destroy_indexes_for_fields(self, model, fields, style):
# Django 1.6
if len(fields) == 1 and fields[0].db_tablespace:
tablespace_sql = self.connection.ops.tablespace_sql(
fields[0].db_tablespace)
elif model._meta.db_tablespace:
tablespace_sql = self.connection.ops.tablespace_sql(
model._meta.db_tablespace)
else:
tablespace_sql = ""
if tablespace_sql:
tablespace_sql = " " + tablespace_sql
field_names = []
qn = self.connection.ops.quote_name
for f in fields:
field_names.append(style.SQL_FIELD(qn(f.column)))
index_name = "{0}_{1}".format(model._meta.db_table,
self._digest([f.name for f in fields]))
return [
style.SQL_KEYWORD("DROP INDEX") + " " +
style.SQL_TABLE(qn(truncate_name(index_name,
self.connection.ops.max_name_length()))) + " " +
style.SQL_KEYWORD("ON") + " " +
style.SQL_TABLE(qn(model._meta.db_table)) + ";",
]
|