65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
from ..helpers.classes import ConnectionConfigurationMixin
|
|
from .base import SQLAdapter
|
|
from . import adapters, with_connection_or_raise
|
|
|
|
|
|
@adapters.register_for('informix')
|
|
class Informix(ConnectionConfigurationMixin, SQLAdapter):
|
|
dbengine = 'informix'
|
|
drivers = ('informixdb',)
|
|
|
|
def _initialize_(self, do_connect):
|
|
super(Informix, self)._initialize_(do_connect)
|
|
ruri = self.uri.split('://', 1)[1]
|
|
m = self.REGEX_URI.match(ruri)
|
|
if not m:
|
|
raise SyntaxError("Invalid URI string in DAL")
|
|
user = self.credential_decoder(m.group('user'))
|
|
if not user:
|
|
raise SyntaxError('User required')
|
|
password = self.credential_decoder(m.group('password'))
|
|
if not password:
|
|
password = ''
|
|
host = m.group('host')
|
|
if not host:
|
|
raise SyntaxError('Host name required')
|
|
db = m.group('db')
|
|
if not db:
|
|
raise SyntaxError('Database name required')
|
|
self.dsn = '%s@%s' % (db, host)
|
|
self.driver_args.update(user=user, password=password)
|
|
self._mock_reconnect()
|
|
|
|
def connector(self):
|
|
return self.driver.connect(self.dsn, **self.driver_args)
|
|
|
|
def _configure_on_first_reconnect(self):
|
|
self.dbms_version = int(self.connection.dbms_version.split('.')[0])
|
|
|
|
@with_connection_or_raise
|
|
def execute(self, *args, **kwargs):
|
|
command = self.filter_sql_command(args[0])
|
|
if command[-1:] == ';':
|
|
command = command[:-1]
|
|
handlers = self._build_handlers_for_execution()
|
|
for handler in handlers:
|
|
handler.before_execute(command)
|
|
rv = self.cursor.execute(command, *args[1:], **kwargs)
|
|
for handler in handlers:
|
|
handler.after_execute(command)
|
|
return rv
|
|
|
|
def test_connection(self):
|
|
self.execute('SELECT COUNT(*) FROM systables;')
|
|
|
|
def lastrowid(self, table):
|
|
return self.cursor.sqlerrd[1]
|
|
|
|
|
|
@adapters.register_for('informix-se')
|
|
class InformixSE(Informix):
|
|
def rowslice(self, rows, minimum=0, maximum=None):
|
|
if maximum is None:
|
|
return rows[minimum:]
|
|
return rows[minimum:maximum]
|