Re: [Sqlalchemy-tickets] [sqlalchemy] #2728: potential glitch in schema calcs for metadata.reflect
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-06-02 00:30:52
|
#2728: potential glitch in schema calcs for metadata.reflect
------------------------------+-------------------------------
Reporter: zzzeek | Owner: zzzeek
Type: defect | Status: new
Priority: high | Milestone: 0.8.xx
Component: schema | Severity: major - 1-3 hours
Resolution: | Keywords:
Progress State: needs tests |
------------------------------+-------------------------------
Description changed by zzzeek:
Old description:
> {{{
> #!diff
> diff -r cfb0f9ca14f82c9ba06c4d5cbc992f821eb2234e lib/sqlalchemy/schema.py
> --- a/lib/sqlalchemy/schema.py Wed May 15 15:46:29 2013 -0400
> +++ b/lib/sqlalchemy/schema.py Thu May 16 12:58:47 2013 -0400
> @@ -2716,20 +2716,28 @@
> if schema is not None:
> reflect_opts['schema'] = schema
>
> - available = util.OrderedSet(bind.engine.table_names(schema,
> -
> connection=conn))
> + available = util.OrderedSet(bind.engine.table_names(schema,
> connection=conn))
> if views:
> available.update(
> bind.dialect.get_view_names(conn, schema)
> )
>
> + if schema is not None:
> + available_w_schema = util.OrderedSet(["%s.%s" % (schema,
> name)
> + for name in available])
> + else:
> + available_w_schema = available
> +
> current = set(self.tables.iterkeys())
>
> if only is None:
> - load = [name for name in available if name not in
> current]
> + load = [name for name, schname in
> + zip(available, available_w_schema)
> + if schname not in current]
> elif util.callable(only):
> - load = [name for name in available
> - if name not in current and only(name, self)]
> + load = [name for name, schname
> + in zip(available, available_w_schema)
> + if schname not in current and only(name, self)]
> else:
> missing = [name for name in only if name not in
> available]
> if missing:
> }}}
New description:
{{{
#!diff
diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py
index 3a74cbd..3d59e82 100644
--- a/lib/sqlalchemy/schema.py
+++ b/lib/sqlalchemy/schema.py
@@ -2711,13 +2711,22 @@ class MetaData(SchemaItem):
bind.dialect.get_view_names(conn, schema)
)
+ if schema is not None:
+ available_w_schema = util.OrderedSet(["%s.%s" % (schema,
name)
+ for name in available])
+ else:
+ available_w_schema = available
+
current = set(self.tables)
if only is None:
- load = [name for name in available if name not in
current]
+ load = [name for name, schname in
+ zip(available, available_w_schema)
+ if schname not in current]
elif util.callable(only):
- load = [name for name in available
- if name not in current and only(name, self)]
+ load = [name for name, schname in
+ zip(available, available_w_schema)
+ if schname not in current and only(name,
self)]
else:
missing = [name for name in only if name not in
available]
if missing:
}}}
--
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2728#comment:2>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|