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

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]