SP/web2py/gluon/packages/dal/pydal/dialects/mysql.py
Saturneic 064f602b1a Add.
2018-10-25 23:33:13 +08:00

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)