[Sqlalchemy-commits] [1488] sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py: Implemented the c
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-05-23 01:03:54
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head><style type="text/css"><!-- #msg dl { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; } #msg dt { float: left; width: 6em; font-weight: bold; } #msg dt:after { content:':';} #msg dl, #msg dt, #msg ul, #msg li { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; } #msg dl a { font-weight: bold} #msg dl a:link { color:#fc3; } #msg dl a:active { color:#ff0; } #msg dl a:visited { color:#cc6; } h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; } #msg pre { overflow: auto; background: #ffc; border: 1px #fc0 solid; padding: 6px; } #msg ul, pre { overflow: auto; } #patch { width: 100%; } #patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;} #patch .propset h4, #patch .binary h4 {margin:0;} #patch pre {padding:0;line-height:1.2em;margin:0;} #patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;} #patch .propset .diff, #patch .binary .diff {padding:10px 0;} #patch span {display:block;padding:0 10px;} #patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;} #patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;} #patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;} #patch .lines, .info {color:#888;background:#fff;} --></style> <title>[1488] sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py: Implemented the changes from ticket 94</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1488</dd> <dt>Author</dt> <dd>jralston</dd> <dt>Date</dt> <dd>2006-05-22 20:03:34 -0500 (Mon, 22 May 2006)</dd> </dl> <h3>Log Message</h3> <pre>Implemented the changes from ticket 94</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunklibsqlalchemydatabasesfirebirdpy">sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunklibsqlalchemydatabasesfirebirdpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py (1487 => 1488)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py 2006-05-22 19:34:44 UTC (rev 1487) +++ sqlalchemy/trunk/lib/sqlalchemy/databases/firebird.py 2006-05-23 01:03:34 UTC (rev 1488) </span><span class="lines">@@ -5,7 +5,7 @@ </span><span class="cx"> # the MIT License: http://www.opensource.org/licenses/mit-license.php </span><span class="cx"> </span><span class="cx"> </span><del>-import sys, StringIO, string </del><ins>+import sys, StringIO, string, datetime </ins><span class="cx"> </span><span class="cx"> import sqlalchemy.sql as sql </span><span class="cx"> import sqlalchemy.schema as schema </span><span class="lines">@@ -30,6 +30,16 @@ </span><span class="cx"> class FBDateTime(sqltypes.DateTime): </span><span class="cx"> def get_col_spec(self): </span><span class="cx"> return "DATE" </span><ins>+ def convert_bind_param(self, value, engine): + if value is not None: + if isinstance(value, datetime.datetime): + seconds = float(str(value.second) + "." + + str(value.microsecond)) + return kinterbasdb.date_conv_out((value.year, value.month, value.day, + value.hour, value.minute, seconds)) + return kinterbasdb.timestamp_conv_in(value) + else: + return None </ins><span class="cx"> class FBText(sqltypes.TEXT): </span><span class="cx"> def get_col_spec(self): </span><span class="cx"> return "BLOB SUB_TYPE 2" </span><span class="lines">@@ -74,13 +84,12 @@ </span><span class="cx"> ]} </span><span class="cx"> </span><span class="cx"> class FBSQLEngine(ansisql.ANSISQLEngine): </span><del>- def __init__(self, opts, use_ansi = True, module = None, **params): - self._use_ansi = use_ansi - self.opts = opts or {} </del><ins>+ def __init__(self, opts, module=None, use_oids=False, **params): </ins><span class="cx"> if module is None: </span><span class="cx"> self.module = kinterbasdb </span><span class="cx"> else: </span><span class="cx"> self.module = module </span><ins>+ self.opts = self._translate_connect_args(('host', 'database', 'user', 'password'), opts) </ins><span class="cx"> ansisql.ANSISQLEngine.__init__(self, **params) </span><span class="cx"> </span><span class="cx"> def do_commit(self, connection): </span><span class="lines">@@ -102,7 +111,7 @@ </span><span class="cx"> return self.context.last_inserted_ids </span><span class="cx"> </span><span class="cx"> def compiler(self, statement, bindparams, **kwargs): </span><del>- return FBCompiler(statement, bindparams, engine=self, use_ansi=self._use_ansi, **kwargs) </del><ins>+ return FBCompiler(statement, bindparams, engine=self, **kwargs) </ins><span class="cx"> </span><span class="cx"> def schemagenerator(self, **params): </span><span class="cx"> return FBSchemaGenerator(self, **params) </span><span class="lines">@@ -188,21 +197,6 @@ </span><span class="cx"> class FBCompiler(ansisql.ANSICompiler): </span><span class="cx"> """firebird compiler modifies the lexical structure of Select statements to work under </span><span class="cx"> non-ANSI configured Firebird databases, if the use_ansi flag is False.""" </span><del>- - def __init__(self, engine, statement, parameters, use_ansi = True, **kwargs): - self._outertable = None - self._use_ansi = use_ansi - ansisql.ANSICompiler.__init__(self, engine, statement, parameters, **kwargs) - - def visit_column(self, column): - if self._use_ansi: - return ansisql.ANSICompiler.visit_column(self, column) - - if column.table is self._outertable: - self.strings[column] = "%s.%s(+)" % (column.table.name, column.name) - else: - self.strings[column] = "%s.%s" % (column.table.name, column.name) - </del><span class="cx"> def visit_function(self, func): </span><span class="cx"> if len(func.clauses): </span><span class="cx"> super(FBCompiler, self).visit_function(func) </span><span class="lines">@@ -223,10 +217,11 @@ </span><span class="cx"> """ called when building a SELECT statment, position is just before column list </span><span class="cx"> Firebird puts the limit and offset right after the select...thanks for adding the </span><span class="cx"> visit_select_precolumns!!!""" </span><ins>+ result = '' </ins><span class="cx"> if select.offset: </span><del>- result +=" FIRST " + select.offset </del><ins>+ result +=" FIRST %s " % select.offset </ins><span class="cx"> if select.limit: </span><del>- result += " SKIP " + select.limit </del><ins>+ result += " SKIP %s " % select.limit </ins><span class="cx"> if select.distinct: </span><span class="cx"> result += " DISTINCT " </span><span class="cx"> return result </span><span class="lines">@@ -234,6 +229,8 @@ </span><span class="cx"> def limit_clause(self, select): </span><span class="cx"> """Already taken care of in the visit_select_precolumns method.""" </span><span class="cx"> return "" </span><ins>+ def default_from(self): + return ' from RDB$DATABASE ' </ins><span class="cx"> </span><span class="cx"> class FBSchemaGenerator(ansisql.ANSISchemaGenerator): </span><span class="cx"> def get_column_specification(self, column, override_pk=False, **kwargs): </span></span></pre> </div> </div> </body> </html> |