80 lines
2.8 KiB
Python
80 lines
2.8 KiB
Python
|
from ..adapters.informix import Informix, InformixSE
|
||
|
from .firebird import FireBirdDialect
|
||
|
from . import dialects, sqltype_for
|
||
|
|
||
|
|
||
|
@dialects.register_for(Informix)
|
||
|
class InformixDialect(FireBirdDialect):
|
||
|
@sqltype_for('id')
|
||
|
def type_id(self):
|
||
|
return 'SERIAL'
|
||
|
|
||
|
@sqltype_for('big-id')
|
||
|
def type_big_id(self):
|
||
|
return 'BIGSERIAL'
|
||
|
|
||
|
@sqltype_for('reference FK')
|
||
|
def type_reference_fk(self):
|
||
|
return 'REFERENCES %(foreign_key)s ON DELETE %(on_delete_action)s ' + \
|
||
|
'CONSTRAINT FK_%(table_name)s_%(field_name)s'
|
||
|
|
||
|
@sqltype_for('reference TFK')
|
||
|
def type_reference_tfk(self):
|
||
|
return 'FOREIGN KEY (%(field_name)s) REFERENCES %(foreign_table)s' + \
|
||
|
'(%(foreign_key)s) ON DELETE %(on_delete_action)s ' + \
|
||
|
'CONSTRAINT TFK_%(table_name)s_%(field_name)s'
|
||
|
|
||
|
@property
|
||
|
def random(self):
|
||
|
return 'Random()'
|
||
|
|
||
|
def select(self, fields, tables, where=None, groupby=None, having=None,
|
||
|
orderby=None, limitby=None, distinct=False, for_update=False):
|
||
|
dst, whr, grp, order, limit, offset, upd = '', '', '', '', '', '', ''
|
||
|
if distinct is True:
|
||
|
dst = ' DISTINCT'
|
||
|
elif distinct:
|
||
|
dst = ' DISTINCT ON (%s)' % distinct
|
||
|
if where:
|
||
|
whr = ' %s' % self.where(where)
|
||
|
if groupby:
|
||
|
grp = ' GROUP BY %s' % groupby
|
||
|
if having:
|
||
|
grp += ' HAVING %s' % having
|
||
|
if orderby:
|
||
|
order = ' ORDER BY %s' % orderby
|
||
|
if limitby:
|
||
|
(lmin, lmax) = limitby
|
||
|
fetch_amt = lmax - lmin
|
||
|
if lmin and self.adapter.dbms_version >= 10:
|
||
|
offset = ' SKIP %i' % lmin
|
||
|
if fetch_amt and self.adapter.dbms_version >= 9:
|
||
|
limit = ' FIRST %i' % fetch_amt
|
||
|
if for_update:
|
||
|
upd = ' FOR UPDATE'
|
||
|
return 'SELECT%s%s%s %s FROM %s%s%s%s%s;' % (
|
||
|
dst, offset, limit, fields, tables, whr, grp, order, upd)
|
||
|
|
||
|
|
||
|
@dialects.register_for(InformixSE)
|
||
|
class InformixSEDialect(InformixDialect):
|
||
|
def select(self, fields, tables, where=None, groupby=None, having=None,
|
||
|
orderby=None, limitby=None, distinct=False, for_update=False):
|
||
|
dst, whr, grp, order, limit, offset, upd = '', '', '', '', '', '', ''
|
||
|
if distinct is True:
|
||
|
dst = ' DISTINCT'
|
||
|
elif distinct:
|
||
|
dst = ' DISTINCT ON (%s)' % distinct
|
||
|
if where:
|
||
|
whr = ' %s' % self.where(where)
|
||
|
if groupby:
|
||
|
grp = ' GROUP BY %s' % groupby
|
||
|
if having:
|
||
|
grp += ' HAVING %s' % having
|
||
|
if orderby:
|
||
|
order = ' ORDER BY %s' % orderby
|
||
|
if for_update:
|
||
|
upd = ' FOR UPDATE'
|
||
|
return 'SELECT%s %s FROM %s%s%s%s%s%s%s;' % (
|
||
|
dst, fields, tables, whr, grp, order, limit, offset, upd)
|