1 | from .base import SQLAdapter |
---|
2 | from . import adapters |
---|
3 | |
---|
4 | |
---|
5 | @adapters.register_for("ingres") |
---|
6 | class Ingres(SQLAdapter): |
---|
7 | dbengine = "ingres" |
---|
8 | drivers = ("pyodbc",) |
---|
9 | |
---|
10 | def _initialize_(self): |
---|
11 | super(Ingres, self)._initialize_() |
---|
12 | ruri = self.uri.split("://", 1)[1] |
---|
13 | connstr = ruri.lstrip() |
---|
14 | while connstr.startswith("/"): |
---|
15 | connstr = connstr[1:] |
---|
16 | if "=" in connstr: |
---|
17 | # Assume we have a regular ODBC connection string and just use it |
---|
18 | ruri = connstr |
---|
19 | else: |
---|
20 | # Assume only (local) dbname is passed in with OS auth |
---|
21 | database_name = connstr |
---|
22 | default_driver_name = "Ingres" |
---|
23 | vnode = "(local)" |
---|
24 | ruri = "Driver={%s};Server=%s;Database=%s" % ( |
---|
25 | default_driver_name, |
---|
26 | vnode, |
---|
27 | database_name, |
---|
28 | ) |
---|
29 | self.ruri = ruri |
---|
30 | |
---|
31 | def connector(self): |
---|
32 | self.driver.connect(self.ruri, **self.driver_args) |
---|
33 | |
---|
34 | def create_sequence_and_triggers(self, query, table, **args): |
---|
35 | # post create table auto inc code (if needed) |
---|
36 | # modify table to btree for performance.... |
---|
37 | # Older Ingres releases could use rule/trigger like Oracle above. |
---|
38 | if hasattr(table, "_primarykey"): |
---|
39 | modify_tbl_sql = "modify %s to btree unique on %s" % ( |
---|
40 | table._rname, |
---|
41 | ", ".join(["'%s'" % x for x in table.primarykey]), |
---|
42 | ) |
---|
43 | self.execute(modify_tbl_sql) |
---|
44 | else: |
---|
45 | tmp_seqname = "%s_iisq" % table._raw_rname |
---|
46 | query = query.replace(self.dialect.INGRES_SEQNAME, tmp_seqname) |
---|
47 | self.execute("create sequence %s" % tmp_seqname) |
---|
48 | self.execute(query) |
---|
49 | self.execute("modify %s to btree unique on %s" % (table._rname, "id")) |
---|
50 | |
---|
51 | |
---|
52 | @adapters.register_for("ingresu") |
---|
53 | class IngresUnicode(Ingres): |
---|
54 | pass |
---|