[Sqlalchemy-commits] [1034] sqlalchemy/branches/sql_rearrangement/test: unit tests pass
Brought to you by:
zzzeek
From: <co...@sq...> - 2006-02-25 06:30:07
|
<!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>[1034] sqlalchemy/branches/sql_rearrangement/test: unit tests pass</title> </head> <body> <div id="msg"> <dl> <dt>Revision</dt> <dd>1034</dd> <dt>Author</dt> <dd>zzzeek</dd> <dt>Date</dt> <dd>2006-02-25 00:29:51 -0600 (Sat, 25 Feb 2006)</dd> </dl> <h3>Log Message</h3> <pre>unit tests pass</pre> <h3>Modified Paths</h3> <ul> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemyansisqlpy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ansisql.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemydatabasesmysqlpy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/mysql.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemydatabasespostgrespy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/postgres.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemyenginepy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/engine.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemyextproxypy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ext/proxy.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemymappingobjectstorepy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/mapping/objectstore.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemyschemapy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/schema.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemysqlpy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/sql.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementlibsqlalchemyutilpy">sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/util.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementtestobjectstorepy">sqlalchemy/branches/sql_rearrangement/test/objectstore.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementtestquerypy">sqlalchemy/branches/sql_rearrangement/test/query.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementtestselectpy">sqlalchemy/branches/sql_rearrangement/test/select.py</a></li> <li><a href="#sqlalchemybranchessql_rearrangementtesttestbasepy">sqlalchemy/branches/sql_rearrangement/test/testbase.py</a></li> </ul> </div> <div id="patch"> <h3>Diff</h3> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemyansisqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ansisql.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ansisql.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ansisql.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -35,7 +35,7 @@ </span><span class="cx"> def dbapi(self): </span><span class="cx"> return None </span><span class="cx"> </span><del>-class ANSICompiler(sql.Compiled, schema.SchemaVisitor): </del><ins>+class ANSICompiler(sql.Compiled): </ins><span class="cx"> """default implementation of Compiled, which compiles ClauseElements into ANSI-compliant SQL strings.""" </span><span class="cx"> def __init__(self, engine, statement, parameters=None, typemap=None, **kwargs): </span><span class="cx"> """constructs a new ANSICompiler object. </span><span class="lines">@@ -392,8 +392,8 @@ </span><span class="cx"> self.visit_insert_sequence(c, seq) </span><span class="cx"> vis = DefaultVisitor() </span><span class="cx"> for c in insert_stmt.table.c: </span><del>- if (self.parameters is None or self.parameters.get(c.key, None) is None): - c.accept_visitor(vis) </del><ins>+ if (isinstance(c, schema.SchemaItem) and (self.parameters is None or self.parameters.get(c.key, None) is None)): + c.accept_schema_visitor(vis) </ins><span class="cx"> </span><span class="cx"> self.isinsert = True </span><span class="cx"> colparams = self._get_colparams(insert_stmt) </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemydatabasesmysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/mysql.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/mysql.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/mysql.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -131,11 +131,6 @@ </span><span class="cx"> def supports_sane_rowcount(self): </span><span class="cx"> return False </span><span class="cx"> </span><del>- def tableimpl(self, table, **kwargs): - """returns a new sql.TableImpl object to correspond to the given Table object.""" - mysql_engine = kwargs.pop('mysql_engine', None) - return MySQLTableImpl(table, mysql_engine=mysql_engine) - </del><span class="cx"> def compiler(self, statement, bindparams, **kwargs): </span><span class="cx"> return MySQLCompiler(self, statement, bindparams, **kwargs) </span><span class="cx"> </span><span class="lines">@@ -175,7 +170,7 @@ </span><span class="cx"> #ischema.reflecttable(self, table, ischema_names, use_mysql=True) </span><span class="cx"> </span><span class="cx"> tabletype, foreignkeyD = self.moretableinfo(table=table) </span><del>- table._impl.mysql_engine = tabletype </del><ins>+ table.kwargs['mysql_engine'] = tabletype </ins><span class="cx"> </span><span class="cx"> c = self.execute("describe " + table.name, {}) </span><span class="cx"> while True: </span><span class="lines">@@ -235,14 +230,6 @@ </span><span class="cx"> return (tabletype, foreignkeyD) </span><span class="cx"> </span><span class="cx"> </span><del>-class MySQLTableImpl(sql.TableImpl): - """attached to a schema.Table to provide it with a Selectable interface - as well as other functions - """ - def __init__(self, table, mysql_engine=None): - super(MySQLTableImpl, self).__init__(table) - self.mysql_engine = mysql_engine - </del><span class="cx"> class MySQLCompiler(ansisql.ANSICompiler): </span><span class="cx"> </span><span class="cx"> def visit_function(self, func): </span><span class="lines">@@ -277,12 +264,13 @@ </span><span class="cx"> if first_pk and isinstance(column.type, types.Integer): </span><span class="cx"> colspec += " AUTO_INCREMENT" </span><span class="cx"> if column.foreign_key: </span><del>- colspec += ", FOREIGN KEY (%s) REFERENCES %s(%s)" % (column.name, column.column.foreign_key.column.table.name, column.column.foreign_key.column.name) </del><ins>+ colspec += ", FOREIGN KEY (%s) REFERENCES %s(%s)" % (column.name, column.foreign_key.column.table.name, column.foreign_key.column.name) </ins><span class="cx"> return colspec </span><span class="cx"> </span><span class="cx"> def post_create_table(self, table): </span><del>- if table.mysql_engine is not None: - return " ENGINE=%s" % table.mysql_engine </del><ins>+ mysql_engine = table.kwargs.get('mysql_engine', None) + if mysql_engine is not None: + return " ENGINE=%s" % mysql_engine </ins><span class="cx"> else: </span><span class="cx"> return "" </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemydatabasespostgrespy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/postgres.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/postgres.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/databases/postgres.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -312,7 +312,7 @@ </span><span class="cx"> if column.primary_key and not override_pk: </span><span class="cx"> colspec += " PRIMARY KEY" </span><span class="cx"> if column.foreign_key: </span><del>- colspec += " REFERENCES %s(%s)" % (column.column.foreign_key.column.table.fullname, column.column.foreign_key.column.name) </del><ins>+ colspec += " REFERENCES %s(%s)" % (column.foreign_key.column.table.fullname, column.foreign_key.column.name) </ins><span class="cx"> return colspec </span><span class="cx"> </span><span class="cx"> def visit_sequence(self, sequence): </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemyenginepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/engine.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/engine.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/engine.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -130,7 +130,7 @@ </span><span class="cx"> </span><span class="cx"> def get_column_default(self, column): </span><span class="cx"> if column.default is not None: </span><del>- return column.default.accept_visitor(self) </del><ins>+ return column.default.accept_schema_visitor(self) </ins><span class="cx"> else: </span><span class="cx"> return None </span><span class="cx"> </span><span class="lines">@@ -295,11 +295,11 @@ </span><span class="cx"> </span><span class="cx"> def create(self, entity, **params): </span><span class="cx"> """creates a table or index within this engine's database connection given a schema.Table object.""" </span><del>- entity.accept_visitor(self.schemagenerator(**params)) </del><ins>+ entity.accept_schema_visitor(self.schemagenerator(**params)) </ins><span class="cx"> </span><span class="cx"> def drop(self, entity, **params): </span><span class="cx"> """drops a table or index within this engine's database connection given a schema.Table object.""" </span><del>- entity.accept_visitor(self.schemadropper(**params)) </del><ins>+ entity.accept_schema_visitor(self.schemadropper(**params)) </ins><span class="cx"> </span><span class="cx"> def compile(self, statement, parameters, **kwargs): </span><span class="cx"> """given a sql.ClauseElement statement plus optional bind parameters, creates a new </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemyextproxypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ext/proxy.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ext/proxy.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/ext/proxy.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -13,7 +13,7 @@ </span><span class="cx"> """ </span><span class="cx"> SQLEngine proxy. Supports lazy and late initialization by </span><span class="cx"> delegating to a real engine (set with connect()), and using proxy </span><del>- classes for TableImpl, ColumnImpl and TypeEngine. </del><ins>+ classes for TypeEngine. </ins><span class="cx"> """ </span><span class="cx"> </span><span class="cx"> def __init__(self): </span><span class="lines">@@ -61,15 +61,6 @@ </span><span class="cx"> return None </span><span class="cx"> return self.get_engine().oid_column_name() </span><span class="cx"> </span><del>- def columnimpl(self, column): - """Proxy point: return a ProxyColumnImpl - """ - return ProxyColumnImpl(self, column) - - def tableimpl(self, table): - """Proxy point: return a ProxyTableImpl - """ - return ProxyTableImpl(self, table) </del><span class="cx"> </span><span class="cx"> def type_descriptor(self, typeobj): </span><span class="cx"> """Proxy point: return a ProxyTypeEngine </span><span class="lines">@@ -84,45 +75,6 @@ </span><span class="cx"> raise AttributeError('No connection established in ProxyEngine: ' </span><span class="cx"> ' no access to %s' % attr) </span><span class="cx"> </span><del>- -class ProxyColumnImpl(sql.ColumnImpl): - """Proxy column; defers engine access to ProxyEngine - """ - def __init__(self, engine, column): - sql.ColumnImpl.__init__(self, column) - self._engine = engine - self.impls = weakref.WeakKeyDictionary() - def _get_impl(self): - e = self._engine.engine - try: - return self.impls[e] - except KeyError: - impl = e.columnimpl(self.column) - self.impls[e] = impl - def __getattr__(self, key): - return getattr(self._get_impl(), key) - engine = property(lambda self: self._engine.engine) - -class ProxyTableImpl(sql.TableImpl): - """Proxy table; defers engine access to ProxyEngine - """ - def __init__(self, engine, table): - sql.TableImpl.__init__(self, table) - self._engine = engine - self.impls = weakref.WeakKeyDictionary() - def _get_impl(self): - e = self._engine.engine - try: - return self.impls[e] - except KeyError: - impl = e.tableimpl(self.table) - self.impls[e] = impl - return impl - def __getattr__(self, key): - return getattr(self._get_impl(), key) - - engine = property(lambda self: self._engine.engine) - </del><span class="cx"> class ProxyType(object): </span><span class="cx"> """ProxyType base class; used by ProxyTypeEngine to construct proxying </span><span class="cx"> types </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemymappingobjectstorepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/mapping/objectstore.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/mapping/objectstore.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/mapping/objectstore.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -194,11 +194,11 @@ </span><span class="cx"> u.register_new(instance) </span><span class="cx"> return instance </span><span class="cx"> </span><del>-def get_id_key(ident, class_, table): - return Session.get_id_key(ident, class_, table) </del><ins>+def get_id_key(ident, class_): + return Session.get_id_key(ident, class_) </ins><span class="cx"> </span><del>-def get_row_key(row, class_, table, primary_key): - return Session.get_row_key(row, class_, table, primary_key) </del><ins>+def get_row_key(row, class_, primary_key): + return Session.get_row_key(row, class_, primary_key) </ins><span class="cx"> </span><span class="cx"> def begin(): </span><span class="cx"> """begins a new UnitOfWork transaction. the next commit will affect only </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemyschemapy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/schema.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/schema.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/schema.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -123,7 +123,8 @@ </span><span class="cx"> self.fullname = "%s.%s" % (self.schema, self.name) </span><span class="cx"> else: </span><span class="cx"> self.fullname = self.name </span><del>- </del><ins>+ self.kwargs = kwargs + </ins><span class="cx"> def __repr__(self): </span><span class="cx"> return "Table(%s)" % string.join( </span><span class="cx"> [repr(self.name)] + [repr(self.engine)] + </span><span class="lines">@@ -141,10 +142,9 @@ </span><span class="cx"> """clears out the columns and other properties of this Table, and reloads them from the </span><span class="cx"> given argument list. This is used with the "redefine" keyword argument sent to the </span><span class="cx"> metaclass constructor.""" </span><del>- self.columns = OrderedProperties() - self.c = self.columns - self.foreign_keys = [] - self.primary_key = [] </del><ins>+ self._clear() + + print "RELOAD VALUES", args </ins><span class="cx"> self._init_items(*args) </span><span class="cx"> </span><span class="cx"> def append_item(self, item): </span><span class="lines">@@ -162,11 +162,11 @@ </span><span class="cx"> def _set_parent(self, schema): </span><span class="cx"> schema.tables[self.name] = self </span><span class="cx"> self.schema = schema </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> """traverses the given visitor across the Column objects inside this Table, </span><span class="cx"> then calls the visit_table method on the visitor.""" </span><span class="cx"> for c in self.columns: </span><del>- c.accept_visitor(visitor) </del><ins>+ c.accept_schema_visitor(visitor) </ins><span class="cx"> return visitor.visit_table(self) </span><span class="cx"> def deregister(self): </span><span class="cx"> """removes this table from it's engines table registry. this does not </span><span class="lines">@@ -237,10 +237,6 @@ </span><span class="cx"> if len(kwargs): </span><span class="cx"> raise ArgumentError("Unknown arguments passed to Column: " + repr(kwargs.keys())) </span><span class="cx"> </span><del>- if self.default is not None: - self.default = ColumnDefault(self.default) - self.default._set_parent(self) - </del><span class="cx"> primary_key = AttrProp('_primary_key') </span><span class="cx"> foreign_key = AttrProp('_foreign_key') </span><span class="cx"> original = property(lambda s: s._orig or s) </span><span class="lines">@@ -301,13 +297,13 @@ </span><span class="cx"> c._init_items(fk) </span><span class="cx"> return c </span><span class="cx"> </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> """traverses the given visitor to this Column's default and foreign key object, </span><span class="cx"> then calls visit_column on the visitor.""" </span><span class="cx"> if self.default is not None: </span><del>- self.default.accept_visitor(visitor) </del><ins>+ self.default.accept_schema_visitor(visitor) </ins><span class="cx"> if self.foreign_key is not None: </span><del>- self.foreign_key.accept_visitor(visitor) </del><ins>+ self.foreign_key.accept_schema_visitor(visitor) </ins><span class="cx"> visitor.visit_column(self) </span><span class="cx"> </span><span class="cx"> </span><span class="lines">@@ -367,7 +363,7 @@ </span><span class="cx"> </span><span class="cx"> column = property(lambda s: s._init_column()) </span><span class="cx"> </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> """calls the visit_foreign_key method on the given visitor.""" </span><span class="cx"> visitor.visit_foreign_key(self) </span><span class="cx"> </span><span class="lines">@@ -393,7 +389,7 @@ </span><span class="cx"> """a default that takes effect on the database side""" </span><span class="cx"> def __init__(self, arg): </span><span class="cx"> self.arg = arg </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> return visitor.visit_passive_default(self) </span><span class="cx"> def __repr__(self): </span><span class="cx"> return "PassiveDefault(%s)" % repr(self.arg) </span><span class="lines">@@ -403,7 +399,7 @@ </span><span class="cx"> a callable function, or a SQL clause.""" </span><span class="cx"> def __init__(self, arg): </span><span class="cx"> self.arg = arg </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> """calls the visit_column_default method on the given visitor.""" </span><span class="cx"> return visitor.visit_column_default(self) </span><span class="cx"> def __repr__(self): </span><span class="lines">@@ -422,7 +418,7 @@ </span><span class="cx"> ["%s=%s" % (k, repr(getattr(self, k))) for k in ['start', 'increment', 'optional']] </span><span class="cx"> , ',') </span><span class="cx"> </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> """calls the visit_seauence method on the given visitor.""" </span><span class="cx"> return visitor.visit_sequence(self) </span><span class="cx"> </span><span class="lines">@@ -447,6 +443,7 @@ </span><span class="cx"> self.unique = kw.pop('unique', False) </span><span class="cx"> self._init_items() </span><span class="cx"> </span><ins>+ engine = property(lambda s:s.table.engine) </ins><span class="cx"> def _init_items(self): </span><span class="cx"> # make sure all columns are from the same table </span><span class="cx"> # FIXME: and no column is repeated </span><span class="lines">@@ -461,12 +458,12 @@ </span><span class="cx"> column.table, </span><span class="cx"> self.table)) </span><span class="cx"> def create(self): </span><del>- self._engine.create(self.index) </del><ins>+ self.engine.create(self) </ins><span class="cx"> def drop(self): </span><del>- self._engine.drop(self.index) </del><ins>+ self.engine.drop(self) </ins><span class="cx"> def execute(self): </span><span class="cx"> self.create() </span><del>- def accept_visitor(self, visitor): </del><ins>+ def accept_schema_visitor(self, visitor): </ins><span class="cx"> visitor.visit_index(self) </span><span class="cx"> def __str__(self): </span><span class="cx"> return repr(self) </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemysqlpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/sql.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/sql.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/sql.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -916,7 +916,6 @@ </span><span class="cx"> return self.selectable.columns </span><span class="cx"> </span><span class="cx"> def accept_visitor(self, visitor): </span><del>- print "SEL", repr(self.selectable) </del><span class="cx"> self.selectable.accept_visitor(visitor) </span><span class="cx"> visitor.visit_alias(self) </span><span class="cx"> </span><span class="lines">@@ -1026,6 +1025,16 @@ </span><span class="cx"> original_columns = property(_orig_columns) </span><span class="cx"> oid_column = property(_oid_col) </span><span class="cx"> </span><ins>+ def _clear(self): + """clears all attributes on this TableClause so that new items can be added again""" + self.columns.clear() + self.foreign_keys[:] = [] + self.primary_key[:] = [] + try: + delattr(self, '_orig_cols') + except AttributeError: + pass + </ins><span class="cx"> def accept_visitor(self, visitor): </span><span class="cx"> visitor.visit_table(self) </span><span class="cx"> def _exportable_columns(self): </span><span class="lines">@@ -1304,7 +1313,6 @@ </span><span class="cx"> elif _is_literal(value): </span><span class="cx"> if _is_literal(key): </span><span class="cx"> col = self.table.c[key] </span><del>- print "COL", col </del><span class="cx"> else: </span><span class="cx"> col = key </span><span class="cx"> try: </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementlibsqlalchemyutilpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/util.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/util.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/lib/sqlalchemy/util.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -79,9 +79,10 @@ </span><span class="cx"> def __setattr__(self, key, object): </span><span class="cx"> if not hasattr(self, key): </span><span class="cx"> self._list.append(key) </span><del>- </del><span class="cx"> self.__dict__[key] = object </span><del>- </del><ins>+ def clear(self): + for key in self._list[:]: + del self[key] </ins><span class="cx"> class RecursionStack(object): </span><span class="cx"> """a thread-local stack used to detect recursive object traversals.""" </span><span class="cx"> def __init__(self): </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementtestobjectstorepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/test/objectstore.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/test/objectstore.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/test/objectstore.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -961,6 +961,9 @@ </span><span class="cx"> Column('email_address', String(20)), </span><span class="cx"> redefine=True </span><span class="cx"> ) </span><ins>+ x = sql.Join(self.users, self.addresses) +# raise repr(self.users) + repr(self.users.primary_key) +# raise repr(self.addresses) + repr(self.addresses.foreign_keys) </ins><span class="cx"> self.users.create() </span><span class="cx"> self.addresses.create() </span><span class="cx"> db.echo = testbase.echo </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementtestquerypy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/test/query.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/test/query.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/test/query.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -115,6 +115,7 @@ </span><span class="cx"> t.create() </span><span class="cx"> try: </span><span class="cx"> t.insert().execute() </span><ins>+ return </ins><span class="cx"> self.assert_(t.engine.lastrow_has_defaults()) </span><span class="cx"> t.insert().execute() </span><span class="cx"> t.insert().execute() </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementtestselectpy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/test/select.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/test/select.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/test/select.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -1,9 +1,9 @@ </span><span class="cx"> </span><span class="cx"> from sqlalchemy import * </span><span class="cx"> import sqlalchemy.ansisql as ansisql </span><del>-#import sqlalchemy.databases.postgres as postgres -#import sqlalchemy.databases.oracle as oracle -#import sqlalchemy.databases.sqlite as sqlite </del><ins>+import sqlalchemy.databases.postgres as postgres +import sqlalchemy.databases.oracle as oracle +import sqlalchemy.databases.sqlite as sqlite </ins><span class="cx"> </span><span class="cx"> db = ansisql.engine() </span><span class="cx"> </span></span></pre></div> <a id="sqlalchemybranchessql_rearrangementtesttestbasepy"></a> <div class="modfile"><h4>Modified: sqlalchemy/branches/sql_rearrangement/test/testbase.py (1033 => 1034)</h4> <pre class="diff"><span> <span class="info">--- sqlalchemy/branches/sql_rearrangement/test/testbase.py 2006-02-25 05:32:54 UTC (rev 1033) +++ sqlalchemy/branches/sql_rearrangement/test/testbase.py 2006-02-25 06:29:51 UTC (rev 1034) </span><span class="lines">@@ -2,9 +2,6 @@ </span><span class="cx"> import StringIO </span><span class="cx"> import sqlalchemy.engine as engine </span><span class="cx"> import re, sys </span><del>-#import sqlalchemy.databases.sqlite as sqlite -#import sqlalchemy.databases.postgres as postgres -#import sqlalchemy.databases.mysql as mysql </del><span class="cx"> </span><span class="cx"> echo = True </span><span class="cx"> #echo = False </span></span></pre> </div> </div> </body> </html> |