[Sqlalchemy-commits] [1072] sqlalchemy/trunk: postgres leaves parenthesis off functions only for no-
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-03-01 19:43:20
|
<!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>[1072] sqlalchemy/trunk: postgres leaves parenthesis off functions only for no-argument ANSI functions according to a list</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1072</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-03-01 13:43:07 -0600 (Wed, 01 Mar 2006)</dd> </dl> <h3>Log Message</h3> <pre>postgres leaves parenthesis off functions only for no-argument ANSI functions according to a list</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemytrunkCHANGES">sqlalchemy/trunk/CHANGES</a></li> <li><a href="#sqlalchemytrunklibsqlalchemydatabasespostgrespy">sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemytrunkCHANGES"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/CHANGES (1071 => 1072)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/CHANGES 2006-03-01 09:37:45 UTC (rev 1071) +++ sqlalchemy/trunk/CHANGES 2006-03-01 19:43:07 UTC (rev 1072) </span><span class="lines">@@ -25,7 +25,8 @@ </span><span class="cx"> - added "convert_unicode" flag to SQLEngine, will treat all String/CHAR types </span><span class="cx"> as Unicode types, with raw-byte/utf-8 translation on the bind parameter and </span><span class="cx"> result set side. </span><del>- </del><ins>+- postgres maintains a list of ANSI functions that must have no parenthesis so +function calls with no arguments work consistently </ins><span class="cx"> 0.1.2 </span><span class="cx"> - fixed a recursive call in schema that was somehow running 994 times then returning </span><span class="cx"> normally. broke nothing, slowed down everything. thanks to jpellerin for finding this. </span></span></pre></div> <a id="sqlalchemytrunklibsqlalchemydatabasespostgrespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py (1071 => 1072)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py 2006-03-01 09:37:45 UTC (rev 1071) +++ sqlalchemy/trunk/lib/sqlalchemy/databases/postgres.py 2006-03-01 19:43:07 UTC (rev 1072) </span><span class="lines">@@ -6,6 +6,7 @@ </span><span class="cx"> </span><span class="cx"> import sys, StringIO, string, types, re </span><span class="cx"> </span><ins>+import sqlalchemy.util as util </ins><span class="cx"> import sqlalchemy.sql as sql </span><span class="cx"> import sqlalchemy.engine as engine </span><span class="cx"> import sqlalchemy.schema as schema </span><span class="lines">@@ -101,7 +102,18 @@ </span><span class="cx"> class PGBoolean(sqltypes.Boolean): </span><span class="cx"> def get_col_spec(self): </span><span class="cx"> return "BOOLEAN" </span><del>- </del><ins>+ +ANSI_FUNCS = util.HashSet([ +'CURRENT_TIME', +'CURRENT_TIMESTAMP', +'CURRENT_DATE', +'LOCAL_TIME', +'LOCAL_TIMESTAMP', +'CURRENT_USER', +'SESSION_USER', +'USER' +]) + </ins><span class="cx"> pg2_colspecs = { </span><span class="cx"> sqltypes.Integer : PGInteger, </span><span class="cx"> sqltypes.Smallinteger : PGSmallInteger, </span><span class="lines">@@ -270,10 +282,11 @@ </span><span class="cx"> class PGCompiler(ansisql.ANSICompiler): </span><span class="cx"> </span><span class="cx"> def visit_function(self, func): </span><del>- if len(func.clauses): </del><ins>+ # PG has a bunch of funcs that explicitly need no parenthesis + if func.name.upper() in ANSI_FUNCS and not len(func.clauses): + self.strings[func] = func.name + else: </ins><span class="cx"> super(PGCompiler, self).visit_function(func) </span><del>- else: - self.strings[func] = func.name </del><span class="cx"> </span><span class="cx"> def visit_insert_column(self, column): </span><span class="cx"> # Postgres advises against OID usage and turns it off in 8.1, </span></span></pre> </div> </div> </body> </html> |