101 lines
3.2 KiB
Python
101 lines
3.2 KiB
Python
|
from ..adapters.mysql import MySQL
|
||
|
from ..helpers.methods import varquote_aux
|
||
|
from .base import SQLDialect
|
||
|
from . import dialects, sqltype_for
|
||
|
|
||
|
|
||
|
@dialects.register_for(MySQL)
|
||
|
class MySQLDialect(SQLDialect):
|
||
|
quote_template = '`%s`'
|
||
|
|
||
|
@sqltype_for('datetime')
|
||
|
def type_datetime(self):
|
||
|
return 'DATETIME'
|
||
|
|
||
|
@sqltype_for('text')
|
||
|
def type_text(self):
|
||
|
return 'LONGTEXT'
|
||
|
|
||
|
@sqltype_for('blob')
|
||
|
def type_blob(self):
|
||
|
return 'LONGBLOB'
|
||
|
|
||
|
@sqltype_for('bigint')
|
||
|
def type_bigint(self):
|
||
|
return 'BIGINT'
|
||
|
|
||
|
@sqltype_for('id')
|
||
|
def type_id(self):
|
||
|
return 'INT AUTO_INCREMENT NOT NULL'
|
||
|
|
||
|
@sqltype_for('big-id')
|
||
|
def type_big_id(self):
|
||
|
return 'BIGINT AUTO_INCREMENT NOT NULL'
|
||
|
|
||
|
@sqltype_for('reference')
|
||
|
def type_reference(self):
|
||
|
return 'INT %(null)s %(unique)s, INDEX %(index_name)s ' + \
|
||
|
'(%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES ' + \
|
||
|
'%(foreign_key)s ON DELETE %(on_delete_action)s'
|
||
|
|
||
|
@sqltype_for('big-reference')
|
||
|
def type_big_reference(self):
|
||
|
return 'BIGINT %(null)s %(unique)s, INDEX %(index_name)s ' + \
|
||
|
'(%(field_name)s), FOREIGN KEY (%(field_name)s) REFERENCES ' + \
|
||
|
'%(foreign_key)s ON DELETE %(on_delete_action)s'
|
||
|
|
||
|
@sqltype_for('reference FK')
|
||
|
def type_reference_fk(self):
|
||
|
return ', CONSTRAINT `FK_%(constraint_name)s` FOREIGN KEY ' + \
|
||
|
'(%(field_name)s) REFERENCES %(foreign_key)s ON DELETE ' + \
|
||
|
'%(on_delete_action)s'
|
||
|
|
||
|
def varquote(self, val):
|
||
|
return varquote_aux(val, '`%s`')
|
||
|
|
||
|
def insert_empty(self, table):
|
||
|
return 'INSERT INTO %s VALUES (DEFAULT);' % table
|
||
|
|
||
|
def delete(self, table, where=None):
|
||
|
tablename = self.writing_alias(table)
|
||
|
whr = ''
|
||
|
if where:
|
||
|
whr = ' %s' % self.where(where)
|
||
|
return 'DELETE %s FROM %s%s;' % (table.sql_shortref, tablename, whr)
|
||
|
|
||
|
@property
|
||
|
def random(self):
|
||
|
return 'RAND()'
|
||
|
|
||
|
def substring(self, field, parameters, query_env={}):
|
||
|
return 'SUBSTRING(%s,%s,%s)' % (
|
||
|
self.expand(field, query_env=query_env), parameters[0],
|
||
|
parameters[1])
|
||
|
|
||
|
def epoch(self, first, query_env={}):
|
||
|
return "UNIX_TIMESTAMP(%s)" % self.expand(first, query_env=query_env)
|
||
|
|
||
|
def concat(self, *items, **kwargs):
|
||
|
query_env = kwargs.get('query_env', {})
|
||
|
tmp = (self.expand(x, 'string', query_env=query_env) for x in items)
|
||
|
return 'CONCAT(%s)' % ','.join(tmp)
|
||
|
|
||
|
def regexp(self, first, second, query_env={}):
|
||
|
return '(%s REGEXP %s)' % (
|
||
|
self.expand(first, query_env=query_env),
|
||
|
self.expand(second, 'string', query_env=query_env))
|
||
|
|
||
|
def cast(self, first, second, query_env={}):
|
||
|
if second == 'LONGTEXT':
|
||
|
second = 'CHAR'
|
||
|
return 'CAST(%s AS %s)' % (first, second)
|
||
|
|
||
|
def drop_table(self, table, mode):
|
||
|
# breaks db integrity but without this mysql does not drop table
|
||
|
return [
|
||
|
'SET FOREIGN_KEY_CHECKS=0;', 'DROP TABLE %s;' % table._rname,
|
||
|
'SET FOREIGN_KEY_CHECKS=1;']
|
||
|
|
||
|
def drop_index(self, name, table):
|
||
|
return 'DROP INDEX %s ON %s;' % (self.quote(name), table._rname)
|