[Sqlalchemy-commits] [1480] sqlalchemy/branches/schema/test: oracle working about as well as it did
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-05-21 18:18:09
|
<!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>[1480] sqlalchemy/branches/schema/test: oracle working about as well as it did with 0.1.....should get more unittests up with it</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1480</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-05-21 13:17:55 -0500 (Sun, 21 May 2006)</dd> </dl> <h3>Log Message</h3> <pre>oracle working about as well as it did with 0.1.....should get more unittests up with it</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchesschemalibsqlalchemydatabasesoraclepy">sqlalchemy/branches/schema/lib/sqlalchemy/databases/oracle.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemydatabasespostgrespy">sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py</a></li> <li><a href="#sqlalchemybranchesschemalibsqlalchemysqlpy">sqlalchemy/branches/schema/lib/sqlalchemy/sql.py</a></li> <li><a href="#sqlalchemybranchesschematestdefaultspy">sqlalchemy/branches/schema/test/defaults.py</a></li> <li><a href="#sqlalchemybranchesschematestquerypy">sqlalchemy/branches/schema/test/query.py</a></li> <li><a href="#sqlalchemybranchesschematestselectpy">sqlalchemy/branches/schema/test/select.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchesschemalibsqlalchemydatabasesoraclepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/databases/oracle.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/databases/oracle.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/lib/sqlalchemy/databases/oracle.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -110,14 +110,14 @@ </span><span class="cx"> pass </span><span class="cx"> </span><span class="cx"> class OracleDialect(ansisql.ANSIDialect): </span><del>- def __init__(self, use_ansi=True, module=None, threaded=True, **params): </del><ins>+ def __init__(self, use_ansi=True, module=None, threaded=True, **kwargs): </ins><span class="cx"> self.use_ansi = use_ansi </span><span class="cx"> self.threaded = threaded </span><span class="cx"> if module is None: </span><span class="cx"> self.module = cx_Oracle </span><span class="cx"> else: </span><span class="cx"> self.module = module </span><del>- ansisql.ANSISQLEngine.__init__(self, **params) </del><ins>+ ansisql.ANSIDialect.__init__(self, **kwargs) </ins><span class="cx"> </span><span class="cx"> def dbapi(self): </span><span class="cx"> return self.module </span><span class="lines">@@ -147,11 +147,11 @@ </span><span class="cx"> </span><span class="cx"> </span><span class="cx"> def has_table(self, connection, table_name): </span><del>- cursor = connection.execute("""select table_name from all_tables where table_name=:table_name""", {'name':table_name}) - return bool( not not cursor.rowcount ) </del><ins>+ cursor = connection.execute("""select table_name from all_tables where table_name=:name""", {'name':table_name.upper()}) + return bool( cursor.fetchone() is not None ) </ins><span class="cx"> </span><del>- def reflecttable(self, table): - c = self.execute ("select COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT from ALL_TAB_COLUMNS where TABLE_NAME = :table_name", {'table_name':table.name.upper()}) </del><ins>+ def reflecttable(self, connection, table): + c = connection.execute ("select COLUMN_NAME, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE, DATA_DEFAULT from ALL_TAB_COLUMNS where TABLE_NAME = :table_name", {'table_name':table.name.upper()}) </ins><span class="cx"> </span><span class="cx"> while True: </span><span class="cx"> row = c.fetchone() </span><span class="lines">@@ -180,14 +180,14 @@ </span><span class="cx"> </span><span class="cx"> colargs = [] </span><span class="cx"> if default is not None: </span><del>- colargs.append(PassiveDefault(sql.text(default))) </del><ins>+ colargs.append(schema.PassiveDefault(sql.text(default))) </ins><span class="cx"> </span><span class="cx"> name = name.lower() </span><span class="cx"> </span><span class="cx"> table.append_item (schema.Column(name, coltype, nullable=nullable, *colargs)) </span><span class="cx"> </span><span class="cx"> </span><del>- c = self.execute(constraintSQL, {'table_name' : table.name.upper()}) </del><ins>+ c = connection.execute(constraintSQL, {'table_name' : table.name.upper()}) </ins><span class="cx"> while True: </span><span class="cx"> row = c.fetchone() </span><span class="cx"> if row is None: </span><span class="lines">@@ -198,8 +198,8 @@ </span><span class="cx"> table.c[local_column]._set_primary_key() </span><span class="cx"> elif cons_type == 'R': </span><span class="cx"> table.c[local_column].append_item( </span><del>- schema.ForeignKey(Table(remote_table, - self, </del><ins>+ schema.ForeignKey(schema.Table(remote_table, + table.metadata, </ins><span class="cx"> autoload=True).c[remote_column] </span><span class="cx"> ) </span><span class="cx"> ) </span><span class="lines">@@ -281,6 +281,8 @@ </span><span class="cx"> orderby = self.strings[select.order_by_clause] </span><span class="cx"> if not orderby: </span><span class="cx"> orderby = select.oid_column </span><ins>+ orderby.accept_visitor(self) + orderby = self.strings[orderby] </ins><span class="cx"> select.append_column(sql.ColumnClause("ROW_NUMBER() OVER (ORDER BY %s)" % orderby).label("ora_rn")) </span><span class="cx"> limitselect = sql.select([c for c in select.c if c.key!='ora_rn']) </span><span class="cx"> if select.offset is not None: </span><span class="lines">@@ -330,3 +332,5 @@ </span><span class="cx"> </span><span class="cx"> def visit_sequence(self, seq): </span><span class="cx"> return self.proxy("SELECT " + seq.name + ".nextval FROM DUAL").fetchone()[0] </span><ins>+ +dialect = OracleDialect </ins></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemydatabasespostgrespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/lib/sqlalchemy/databases/postgres.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -201,8 +201,8 @@ </span><span class="cx"> def __init__(self, module=None, use_oids=False, **params): </span><span class="cx"> self.use_oids = use_oids </span><span class="cx"> if module is None: </span><del>- if psycopg is None: - raise exceptions.ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument") </del><ins>+ #if psycopg is None: + # raise exceptions.ArgumentError("Couldnt locate psycopg1 or psycopg2: specify postgres module argument") </ins><span class="cx"> self.module = psycopg </span><span class="cx"> else: </span><span class="cx"> self.module = module </span></span></pre></div> <a id="sqlalchemybranchesschemalibsqlalchemysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/lib/sqlalchemy/sql.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/lib/sqlalchemy/sql.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/lib/sqlalchemy/sql.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -965,7 +965,8 @@ </span><span class="cx"> self.__names.append(name) </span><span class="cx"> return self </span><span class="cx"> def __call__(self, *c, **kwargs): </span><del>- return Function(self.__names[-1], packagenames=self.__names[0:-1], engine=self.__engine, *c, **kwargs) </del><ins>+ kwargs.setdefault('engine', self.__engine) + return Function(self.__names[-1], packagenames=self.__names[0:-1], *c, **kwargs) </ins><span class="cx"> </span><span class="cx"> class BinaryClause(ClauseElement): </span><span class="cx"> """represents two clauses with an operator in between""" </span></span></pre></div> <a id="sqlalchemybranchesschematestdefaultspy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/defaults.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/defaults.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/test/defaults.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -20,15 +20,17 @@ </span><span class="cx"> use_function_defaults = db.engine.name == 'postgres' or db.engine.name == 'oracle' </span><span class="cx"> is_oracle = db.engine.name == 'oracle' </span><span class="cx"> </span><del>- # select "count(1)" from the DB which returns different results - # on different DBs - currenttime = db.func.current_date(type=Date); </del><ins>+ # select "count(1)" returns different results on different DBs + # also correct for "current_date" compatible as column default, value differences + currenttime = func.current_date(type=Date, engine=db); </ins><span class="cx"> if is_oracle: </span><del>- ts = db.func.sysdate().scalar() </del><ins>+ ts = db.func.trunc(func.sysdate(), column("'DAY'")).scalar() </ins><span class="cx"> f = select([func.count(1) + 5], engine=db).scalar() </span><span class="cx"> f2 = select([func.count(1) + 14], engine=db).scalar() </span><ins>+ # TODO: engine propigation across nested functions not working + currenttime = func.trunc(currenttime, column("'DAY'"), engine=db) </ins><span class="cx"> def1 = currenttime </span><del>- def2 = text("sysdate") </del><ins>+ def2 = func.trunc(text("sysdate"), column("'DAY'")) </ins><span class="cx"> deftype = Date </span><span class="cx"> elif use_function_defaults: </span><span class="cx"> f = select([func.count(1) + 5], engine=db).scalar() </span></span></pre></div> <a id="sqlalchemybranchesschematestquerypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/query.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/query.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/test/query.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -6,7 +6,6 @@ </span><span class="cx"> </span><span class="cx"> import tables </span><span class="cx"> db = testbase.db </span><del>-#db.echo='debug' </del><span class="cx"> from sqlalchemy import * </span><span class="cx"> from sqlalchemy.engine import ResultProxy, RowProxy </span><span class="cx"> </span><span class="lines">@@ -173,11 +172,9 @@ </span><span class="cx"> self.assertEqual(r[1], 1) </span><span class="cx"> self.assertEqual(r.keys(), ['user_name', 'user_id']) </span><span class="cx"> self.assertEqual(r.values(), ['foo', 1]) </span><del>- </del><ins>+ + @testbase.unsupported('oracle') </ins><span class="cx"> def test_column_accessor_shadow(self): </span><del>- if db.engine.__module__.endswith('oracle'): - return - </del><span class="cx"> shadowed = Table('test_shadowed', db, </span><span class="cx"> Column('shadow_id', INT, primary_key = True), </span><span class="cx"> Column('shadow_name', VARCHAR(20)), </span></span></pre></div> <a id="sqlalchemybranchesschematestselectpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/schema/test/select.py (1479 => 1480)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/schema/test/select.py 2006-05-21 17:00:17 UTC (rev 1479) +++ sqlalchemy/branches/schema/test/select.py 2006-05-21 18:17:55 UTC (rev 1480) </span><span class="lines">@@ -1,6 +1,6 @@ </span><span class="cx"> </span><span class="cx"> from sqlalchemy import * </span><del>-from sqlalchemy.databases import sqlite, postgres, mysql </del><ins>+from sqlalchemy.databases import sqlite, postgres, mysql, oracle </ins><span class="cx"> from testbase import PersistTest </span><span class="cx"> import unittest, re </span><span class="cx"> </span><span class="lines">@@ -225,10 +225,9 @@ </span><span class="cx"> ) </span><span class="cx"> </span><span class="cx"> def testoraclelimit(self): </span><del>- raise "notyet" - e = create_engine('oracle') - users = Table('users', e, Column('name', String(10), key='username')) - self.runtest(select([users.c.username], limit=5), "SELECT name FROM (SELECT users.name AS name, ROW_NUMBER() OVER (ORDER BY users.rowid ASC) AS ora_rn FROM users) WHERE ora_rn<=5", engine=e) </del><ins>+ metadata = MetaData() + users = Table('users', metadata, Column('name', String(10), key='username')) + self.runtest(select([users.c.username], limit=5), "SELECT name FROM (SELECT users.name AS name, ROW_NUMBER() OVER (ORDER BY users.rowid) AS ora_rn FROM users) WHERE ora_rn<=5", dialect=oracle.dialect()) </ins><span class="cx"> </span><span class="cx"> def testgroupby_and_orderby(self): </span><span class="cx"> self.runtest( </span></span></pre> </div> </div> </body> </html> |