source: OpenRLabs-Git/deploy/rlabs-docker/web2py-rlabs/gluon/packages/dal/pydal/adapters/firebird.py

main
Last change on this file was 42bd667, checked in by David Fuertes <dfuertes@…>, 4 years ago

Historial Limpio

  • Property mode set to 100755
File size: 3.1 KB
Line 
1import re
2from .._compat import long
3from .base import SQLAdapter
4from . import adapters
5
6
7@adapters.register_for("firebird")
8class FireBird(SQLAdapter):
9    dbengine = "firebird"
10    drivers = ("kinterbasdb", "firebirdsql", "fdb", "pyodbc")
11
12    support_distributed_transaction = True
13    commit_on_alter_table = True
14
15    REGEX_URI = (
16        "^(?P<user>[^:@]+)(:(?P<password>[^@]*))?"
17        r"@(?P<host>[^:/]+|\[[^\]]+\])(:(?P<port>\d+))?"
18        "/(?P<db>[^?]+)"
19        r"(\?set_encoding=(?P<charset>\w+))?$"
20    )
21
22    def _initialize_(self):
23        super(FireBird, self)._initialize_()
24        ruri = self.uri.split("://", 1)[1]
25        m = re.match(self.REGEX_URI, ruri)
26        if not m:
27            raise SyntaxError("Invalid URI string in DAL")
28        user = self.credential_decoder(m.group("user"))
29        password = self.credential_decoder(m.group("password"))
30        if password is None:
31            password = ""
32        host = m.group("host")
33        db = self.credential_decoder(m.group("db"))
34        port = int(m.group("port") or 3050)
35        charset = m.group("charset") or "UTF8"
36        self.driver_args.update(
37            dsn="%s/%s:%s" % (host, port, db),
38            user=user,
39            password=password,
40            charset=charset,
41        )
42
43    def connector(self):
44        return self.driver.connect(**self.driver_args)
45
46    def test_connection(self):
47        self.execute('select current_timestamp from RDB$DATABASE')
48   
49    def lastrowid(self, table):
50        sequence_name = table._sequence_name
51        self.execute("SELECT gen_id(%s, 0) FROM rdb$database" % sequence_name)
52        return long(self.cursor.fetchone()[0])
53
54    def create_sequence_and_triggers(self, query, table, **args):
55        tablename = table._rname
56        sequence_name = table._sequence_name
57        trigger_name = table._trigger_name
58        self.execute(query)
59        self.execute("create generator %s;" % sequence_name)
60        self.execute("set generator %s to 0;" % sequence_name)
61        qid = self.dialect.quote_template % "id"
62        self.execute(
63            "create trigger %s for %s active before insert position 0 as\n"
64            "begin\nif(new.%s is null) then new.%s = gen_id(%s, 1);\n"
65            "end;" % (trigger_name, tablename, qid, qid, sequence_name)
66        )
67
68
69@adapters.register_for("firebird_embedded")
70class FireBirdEmbedded(FireBird):
71    REGEX_URI = (
72        "^(?P<user>[^:@]+)(:(?P<password>[^@]*))?"
73        r"@(?P<path>[^?]+)(\?set_encoding=(?P<charset>\w+))?$"
74    )
75
76    def _initialize_(self):
77        super(FireBird, self)._initialize_()
78        ruri = self.uri.split("://", 1)[1]
79        m = re.match(self.REGEX_URI, ruri)
80        if not m:
81            raise SyntaxError("Invalid URI string in DAL")
82        user = self.credential_decoder(m.group("user"))
83        password = self.credential_decoder(m.group("password"))
84        if password is None:
85            password = ""
86        pathdb = m.group("path")
87        charset = m.group("charset") or "UTF8"
88        self.driver_args.update(
89            host="", database=pathdb, user=user, password=password, charset=charset
90        )
Note: See TracBrowser for help on using the repository browser.