]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Deprecated DynamicMetaData- use ThreadLocalMetaData or MetaData instead
authorJason Kirtland <jek@discorporate.us>
Fri, 6 Jul 2007 00:58:09 +0000 (00:58 +0000)
committerJason Kirtland <jek@discorporate.us>
Fri, 6 Jul 2007 00:58:09 +0000 (00:58 +0000)
- Deprecated BoundMetaData- use MetaData instead
- Removed DMD and BMD from documentation

63 files changed:
CHANGES
doc/build/content/dbengine.txt
doc/build/content/metadata.txt
doc/build/content/plugins.txt
doc/build/content/sqlconstruction.txt
doc/build/content/tutorial.txt
examples/adjacencytree/basic_tree.py
examples/adjacencytree/byroot_tree.py
examples/association/basic_association.py
examples/association/proxied_association.py
examples/backref/backref_tree.py
examples/collections/large_collection.py
examples/graphs/graph1.py
examples/pickle/custom_pickler.py
examples/poly_assoc/poly_assoc.py
examples/poly_assoc/poly_assoc_fk.py
examples/poly_assoc/poly_assoc_generic.py
examples/polymorph/polymorph.py
examples/polymorph/single.py
examples/vertical/vertical.py
lib/sqlalchemy/ext/activemapper.py
lib/sqlalchemy/ext/sqlsoup.py
lib/sqlalchemy/schema.py
test/dialect/mysql.py
test/dialect/postgres.py
test/engine/execute.py
test/engine/reflection.py
test/ext/assignmapper.py
test/ext/associationproxy.py
test/ext/orderinglist.py
test/ext/selectresults.py
test/orm/association.py
test/orm/cascade.py
test/orm/compile.py
test/orm/cycles.py
test/orm/eagertest2.py
test/orm/eagertest3.py
test/orm/entity.py
test/orm/generative.py
test/orm/inheritance5.py
test/orm/lazytest1.py
test/orm/mapper.py
test/orm/memusage.py
test/orm/onetoone.py
test/orm/relationships.py
test/orm/single.py
test/orm/unitofwork.py
test/perf/cascade_speed.py
test/perf/masseagerload.py
test/perf/massload.py
test/perf/masssave.py
test/perf/poolload.py
test/perf/threaded_compile.py
test/perf/wsgi.py
test/sql/constraints.py
test/sql/defaults.py
test/sql/query.py
test/sql/quote.py
test/sql/rowcount.py
test/sql/testtypes.py
test/sql/unicode.py
test/tables.py
test/testbase.py

diff --git a/CHANGES b/CHANGES
index a20bc4cc8b1cb9eeb9b78c75d4d6aa625d2e23b0..3f486511d114919c887fdc6d1a0515cf85884aaf 100644 (file)
--- a/CHANGES
+++ b/CHANGES
       trip over synonyms (and others) that are named after the column's actual
       "key" (since, column_prefix means "dont use the key").
 - sql
+    - MetaData can now be constructed with an engine or url as the first
+      argument, just like BoundMetaData
+    - BoundMetaData is now deprecated, and MetaData is a direct substitute.
+    - DynamicMetaData has been renamed to ThreadLocalMetaData.  the
+      DynamicMetaData name is deprecated and is an alias for ThreadLocalMetaData
+      or a regular MetaData if threadlocal=False
     - MetaData and all SchemaItems are safe to use with pickle.  slow
       table reflections can be dumped into a pickled file to be reused later.
       Just reconnect the engine to the metadata after unpickling. [ticket:619]
index 203968ae40ae8729f738c279a63d121e0b0f1c27..5f6e78d10de5240823d39fd90ef0de0f489b1b53 100644 (file)
@@ -252,7 +252,7 @@ Using "bound" metadata:
 
     {python title="Implicit Execution Using Engine-Bound SQL Construct"}
     engine = create_engine('sqlite:///:memory:')
-    meta = BoundMetaData(engine)
+    meta = MetaData(engine)
     table = Table('mytable', meta, Column('col1', Integer), Column('col2', String(20)))
     r = table.insert().execute(col1=5, col2='some record')
 
index 01d5646cce14218ffb3e5b22b10713a796d30890..3f13a3c6989182ac3c9c97dafb800279e282fdce 100644 (file)
@@ -13,7 +13,7 @@ A collection of metadata entities is stored in an object aptly named `MetaData`.
     {python}
     from sqlalchemy import *
     
-    metadata = MetaData(name='my metadata')
+    metadata = MetaData()
 
 Then to construct a Table, use the `Table` class:
 
@@ -121,21 +121,26 @@ And `Table` provides an interface to the table's properties as well as that of i
 
 A MetaData object can be associated with one or more Engine instances.  This allows the MetaData and the elements within it to perform operations automatically, using the connection resources of that Engine.  This includes being able to "reflect" the columns of tables, as well as to perform create and drop operations without needing to pass an `Engine` or `Connection` around.  It also allows SQL constructs to be created which know how to execute themselves (called "implicit execution").
 
-To bind `MetaData` to a single `Engine`, use `BoundMetaData`:
+To bind `MetaData` to a single `Engine`, supply an Engine when creating the MetaData, or use the `.connect()` method:
 
     {python}
     engine = create_engine('sqlite://', **kwargs)
     
-    # create BoundMetaData from an Engine
-    meta = BoundMetaData(engine)
+    # create MetaData with an Engine
+    meta = MetaData(engine)
     
     # create the Engine and MetaData in one step
-    meta = BoundMetaData('postgres://db/', **kwargs)
+    meta = MetaData('postgres://db/', **kwargs)
+
+    # or bind later
+    meta = MetaData()
+    # ...
+    meta.connect(engine)
 
 Another form of `MetaData` exits which can connect to an engine within the current thread (or "on a per-thread basis"), allowing other threads to be connected to different engines simultaneously:
 
     {python}
-    meta = DynamicMetaData()
+    meta = ThreadLocalMetaData()
 
     # In thread 1, connect to an existing Engine    
     meta.connect(engine)
@@ -143,11 +148,11 @@ Another form of `MetaData` exits which can connect to an engine within the curre
     # Meanwhile in thread 2, create a new Engine and connect
     meta.connect('mysq://user@host/dsn')
 
-`DynamicMetaData` is intended for applications that need to use the same set of `Tables` for many different database connections in the same process, such as a CherryPy web application which handles multiple application instances in one process.
+`ThreadLocalMetaData` is intended for applications that need to use the same set of `Tables` for many different database connections in the same process, such as a CherryPy web application which handles multiple application instances in one process.
 
 #### Using the global Metadata object
 
-Some users prefer to create `Table` objects without specifying a `MetaData` object, having Tables scoped on an application-wide basis.  For them the `default_metadata` object and the `global_connect()` function is supplied.  `default_metadata` is simply an instance of `DynamicMetaData` that exists within the `sqlalchemy` namespace, and `global_connect()` is a synonym for `default_metadata.connect()`.  Defining a `Table` that has no `MetaData` argument will automatically use this default metadata as follows:
+Some users prefer to create `Table` objects without specifying a `MetaData` object, having Tables scoped on an application-wide basis.  For them the `default_metadata` object and the `global_connect()` function is supplied.  `default_metadata` is simply an instance of `ThreadLocalMetaData` that exists within the `sqlalchemy` namespace, and `global_connect()` is a synonym for `default_metadata.connect()`.  Defining a `Table` that has no `MetaData` argument will automatically use this default metadata as follows:
 
     {python}
     from sqlalchemy import *
@@ -169,7 +174,7 @@ Some users prefer to create `Table` objects without specifying a `MetaData` obje
     
 #### Reflecting Tables
 
-Once you have a `BoundMetaData` or a connected `DynamicMetaData`, you can create `Table` objects without specifying their columns, just their names, using `autoload=True`:
+Once you have a connected `MetaData` or `ThreadLocalMetaData`, you can create `Table` objects without specifying their columns, just their names, using `autoload=True`:
 
     {python}
     >>> messages = Table('messages', meta, autoload = True)
@@ -291,7 +296,7 @@ To force quoting for an identifier, set the "quote=True" flag on `Column` or `Ta
 Creating and dropping individual tables can be done via the `create()` and `drop()` methods of `Table`; these methods take an optional `connectable` parameter which references an `Engine` or a `Connection`.  If not supplied, the `Engine` bound to the `MetaData` will be used, else an error is raised:
 
     {python}
-    meta = BoundMetaData('sqlite:///:memory:')
+    meta = MetaData('sqlite:///:memory:')
     employees = Table('employees', meta, 
         Column('employee_id', Integer, primary_key=True),
         Column('employee_name', String(60), nullable=False, key='name'),
@@ -560,7 +565,7 @@ A `Table` object created against a specific `MetaData` object can be re-created
 
     {python}
     # create two metadata
-    meta1 = BoundMetaData('sqlite:///querytest.db')
+    meta1 = MetaData('sqlite:///querytest.db')
     meta2 = MetaData()
                         
     # load 'users' from the sqlite engine
index b4a0bebae9f68e3517eb6bce46041e66ecc6850e..b7fc74fdb9a1d230c68209e17cec8878b9e6a25b 100644 (file)
@@ -474,7 +474,7 @@ To use `objectstore`:
     import sqlalchemy.mods.threadlocal
     from sqlalchemy import *
 
-    metadata = BoundMetaData('sqlite:///')
+    metadata = MetaData('sqlite:///')
     user_table = Table('users', metadata,
         Column('user_id', Integer, primary_key=True),
         Column('user_name', String(50), nullable=False)
@@ -501,7 +501,7 @@ To use `assign_mapper`:
     import sqlalchemy.mods.threadlocal
     from sqlalchemy import *
 
-    metadata = BoundMetaData('sqlite:///')
+    metadata = MetaData('sqlite:///')
     user_table = Table('users', metadata,
         Column('user_id', Integer, primary_key=True),
         Column('user_name', String(50), nullable=False)
@@ -602,7 +602,7 @@ Full SqlSoup documentation is on the [SQLAlchemy Wiki](http://www.sqlalchemy.org
 
 **Author:** Jason Pellerin
 
-The `ProxyEngine` is used to "wrap" an `Engine`, and via subclassing `ProxyEngine` one can instrument the functionality of an arbitrary `Engine` instance through the decorator pattern.  It also provides a `connect()` method which will send all `Engine` requests to different underlying engines.  Its functionality in that regard is largely superceded now by `DynamicMetaData` which is a better solution.
+The `ProxyEngine` is used to "wrap" an `Engine`, and via subclassing `ProxyEngine` one can instrument the functionality of an arbitrary `Engine` instance through the decorator pattern.  It also provides a `connect()` method which will send all `Engine` requests to different underlying engines.  Its functionality in that regard is largely superceded now by `MetaData` which is a better solution.
 
     {python}
     from sqlalchemy.ext.proxy import ProxyEngine
index 1996b5de4b8af6de77b3712c7504e6ddab3ef67d..e8077f5bd10188808b71a7764889f9852c337368 100644 (file)
@@ -9,11 +9,11 @@ Executing a `ClauseElement` structure can be performed in two general ways.  You
 
 The examples below all include a dump of the generated SQL corresponding to the query object, as well as a dump of the statement's bind parameters.  In all cases, bind parameters are shown as named parameters using the colon format (i.e. ':name').  When the statement is compiled into a database-specific version, the named-parameter statement and its bind values are converted to the proper paramstyle for that database automatically.
 
-For this section, we will mostly use the implcit style of execution, meaning the `Table` objects are associated with an instance of `BoundMetaData`, and constructed `ClauseElement` objects support self-execution.  Assume the following configuration:
+For this section, we will mostly use the implcit style of execution, meaning the `Table` objects are associated with a bound instance of `MetaData`, and constructed `ClauseElement` objects support self-execution.  Assume the following configuration:
 
     {python}
     from sqlalchemy import *
-    metadata = BoundMetaData('sqlite:///mydb.db', echo=True)
+    metadata = MetaData('sqlite:///mydb.db', echo=True)
     
     # a table to store users
     users = Table('users', metadata,
index 63c28860dd530c0baedfcc3aefb774f5fdc005ad..464d3044bcd97ed193af398a3a554f2628de64bf 100644 (file)
@@ -82,15 +82,16 @@ Working with Database Objects {@name=schemasql}
 
 ### Defining Metadata, Binding to Engines {@name=metadata}
 
-Configuring SQLAlchemy for your database consists of creating objects called `Tables`, each of which represent an actual table in the database.  A collection of `Table` objects resides in a `MetaData` object which is essentially a table collection.  We will create a handy form of `MetaData` that automatically connects to our `Engine` (connecting a schema object to an Engine is called *binding*):
+Configuring SQLAlchemy for your database consists of creating objects called `Tables`, each of which represent an actual table in the database.  A collection of `Table` objects resides in a `MetaData` object which is essentially a table collection.  We will create a `MetaData` and connect it to our `Engine` (connecting a schema object to an Engine is called *binding*):
 
     {python}
-    >>> metadata = BoundMetaData(db)
+    >>> metadata = MetaData()
+    >>> metadata.connect(db)
 
-An equivalent operation is to create the `BoundMetaData` object directly with an Engine URL, which calls the `create_engine` call for us:
+An equivalent operation is to create the `MetaData` object directly with an Engine URL, which calls the `create_engine` call for us:
 
     {python}
-    >>> metadata = BoundMetaData('sqlite:///tutorial.db')
+    >>> metadata = MetaData('sqlite:///tutorial.db')
 
 Now, when we tell "metadata" about the tables in our database, we can issue CREATE statements for those tables, as well as execute SQL statements derived from them, without needing to open or close any connections; that will be all done automatically.
 
@@ -107,7 +108,7 @@ With `metadata` as our established home for tables, lets make a Table for it:
     ...     Column('password', String(10))
     ... )
 
-As you might have guessed, we have just defined a table named `users` which has three columns: `user_id` (which is a primary key column), `user_name` and `password`. Currently it is just an object that doesn't necessarily correspond to an existing table in our database.  To actually create the table, we use the `create()` method.  To make it interesting, we will have SQLAlchemy echo the SQL statements it sends to the database, by setting the `echo` flag on the `Engine` associated with our `BoundMetaData`:
+As you might have guessed, we have just defined a table named `users` which has three columns: `user_id` (which is a primary key column), `user_name` and `password`. Currently it is just an object that doesn't necessarily correspond to an existing table in our database.  To actually create the table, we use the `create()` method.  To make it interesting, we will have SQLAlchemy echo the SQL statements it sends to the database, by setting the `echo` flag on the `Engine` associated with our `MetaData`:
 
     {python}
     >>> metadata.engine.echo = True
index 3f4f64e3f9c2a8bac3039d9eeda0ae4b4dc92a2b..9676fae89c189ef5fb010ea3a4cd954d7f8a6026 100644 (file)
@@ -3,7 +3,7 @@
 from sqlalchemy import *
 from sqlalchemy.util import OrderedDict
 
-metadata = BoundMetaData('sqlite:///', echo=True)
+metadata = MetaData('sqlite:///', echo=True)
 
 trees = Table('treenodes', metadata,
     Column('node_id', Integer, Sequence('treenode_id_seq',optional=False), primary_key=True),
index 5c5584d9679feebc61bb79a9e802462429bf7335..5ec055392db0a4889350b1f2cc32539c65b2a291 100644 (file)
@@ -7,7 +7,7 @@ from sqlalchemy.util import OrderedDict
 
 engine = create_engine('sqlite:///:memory:', echo=True)
 
-metadata = BoundMetaData(engine)
+metadata = MetaData(engine)
 
 """create the treenodes table.  This is ia basic adjacency list model table.
 One additional column, "root_node_id", references a "root node" row and is used
index 5ce6436717652c1e671bb8abf8b73a31a4e2d384..fabfdfa783061c8ea76478d4dd5e642842a9083a 100644 (file)
@@ -17,7 +17,7 @@ logging.basicConfig(format='%(message)s')
 logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
 
 engine = create_engine('sqlite://')
-metadata = BoundMetaData(engine)
+metadata = MetaData(engine)
 
 orders = Table('orders', metadata, 
     Column('order_id', Integer, primary_key=True),
index 31a64ce7a0d4b44b57664f3626af9afce579677e..2dd60158b9f39dde785486498848c16da2f9f923 100644 (file)
@@ -11,7 +11,7 @@ logging.basicConfig(format='%(message)s')
 #logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
 
 engine = create_engine('sqlite://')
-metadata = BoundMetaData(engine)
+metadata = MetaData(engine)
 
 orders = Table('orders', metadata, 
     Column('order_id', Integer, primary_key=True),
index 5f17396731056ffa32743364223a6c0adf40f6a4..7386d034ca785577b9938b992429387b67960792 100644 (file)
@@ -1,6 +1,6 @@
 from sqlalchemy import *
 
-metadata = BoundMetaData('sqlite:///', echo=True)
+metadata = MetaData('sqlite:///', echo=True)
 
 class Tree(object):
     def __init__(self, name='', father=None):
index 743624e99344eaf3f90a72ad3b032b624d595f2e..d592441ab9c6e9293eeb67fbba48a3819518a967 100644 (file)
@@ -1,7 +1,7 @@
 """illlustrates techniques for dealing with very large collections"""
 
 from sqlalchemy import *
-meta = BoundMetaData('sqlite://', echo=True)
+meta = MetaData('sqlite://', echo=True)
 
 org_table = Table('organizations', meta, 
     Column('org_id', Integer, primary_key=True),
index af75d0ff54571e3390674cd1cc33b6e82f06f054..c2eec44f9fbecec78721e52a1c02b0930407b309 100644 (file)
@@ -6,7 +6,7 @@ import logging
 logging.basicConfig()
 logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
 
-meta = BoundMetaData('sqlite://')
+meta = MetaData('sqlite://')
 
 nodes = Table('nodes', meta,
     Column("nodeid", Integer, primary_key=True)
index 34a2ff0e59bd0b3b5157395de4ea4c565f1af111..4b259c1f86093d694b8d8602a19702f6d40102f5 100644 (file)
@@ -6,7 +6,7 @@ from cStringIO import StringIO
 from pickle import Pickler, Unpickler
 import threading
 
-meta = BoundMetaData('sqlite://', echo=True)
+meta = MetaData('sqlite://', echo=True)
 
 class MyExt(MapperExtension):
     def populate_instance(self, mapper, selectcontext, row, instance, identitykey, isnew):
@@ -79,4 +79,4 @@ sess.clear()
 del MyPickler.sessions.current
 
 f = sess.query(Foo).get(f.id)
-assert f.bar.data == 'some bar'
\ No newline at end of file
+assert f.bar.data == 'some bar'
index faeabd95614e71fef88ede237ba46c66f362edc1..a2ac6140f4057ef70a83446485d768eba0663b4e 100644 (file)
@@ -22,7 +22,7 @@ the associated target object from those which associate with it.
 
 from sqlalchemy import *
 
-metadata = BoundMetaData('sqlite://', echo=False)
+metadata = MetaData('sqlite://', echo=False)
 
 #######
 # addresses table, class, 'addressable interface'.
index 53cb5c81f89383e287e41ddc3f1cdc51aa606f23..f3cedac7232530b4899e82ae51fd36d5abe5da4d 100644 (file)
@@ -21,7 +21,7 @@ poly_assoc_generic.py.
 
 from sqlalchemy import *
 
-metadata = BoundMetaData('sqlite://', echo=False)
+metadata = MetaData('sqlite://', echo=False)
 
 #######
 # addresses table, class, 'addressable interface'.
index b0418cd5c0cd97f193e64f9026c180f175cfbabc..9cc7321db0e3aebb1651a9edf6c9948abdc0ceee 100644 (file)
@@ -8,7 +8,7 @@ function "association" which creates a new polymorphic association
 
 from sqlalchemy import *
 
-metadata = BoundMetaData('sqlite://', echo=False)
+metadata = MetaData('sqlite://', echo=False)
 
 def association(cls, table):
     """create an association 'interface'."""
index 5ff1a6d411e21cf3f700b24a16df492dc2a015a2..231a9d8e45cdcb2ec4fad9ee8138fb772d49b42e 100644 (file)
@@ -4,7 +4,7 @@ import sets
 # this example illustrates a polymorphic load of two classes, where each class has a very 
 # different set of properties
 
-metadata = BoundMetaData('sqlite://', echo=True)
+metadata = MetaData('sqlite://', echo=True)
 
 # a table to store companies
 companies = Table('companies', metadata, 
index 11455a5905f82ab3782c1cd753c39c71e8d1dff8..dcdb3c8906bd1172d6fd1befcb075064a4edddd2 100644 (file)
@@ -1,6 +1,6 @@
 from sqlalchemy import *
 
-metadata = BoundMetaData('sqlite://', echo='debug')
+metadata = MetaData('sqlite://', echo='debug')
 
 # a table to store companies
 companies = Table('companies', metadata, 
index 720a1934d251f49a43eed1c3a0ecc69f455da6ef..e9fff9163bdd36e14653ac2644db7758078954c2 100644 (file)
@@ -5,7 +5,7 @@ fields that are all persisted in a normalized fashion."""
 from sqlalchemy import *
 import datetime
 
-e = BoundMetaData('sqlite://', echo=True)
+e = MetaData('sqlite://', echo=True)
 
 # this table represents Entity objects.  each Entity gets a row in this table,
 # with a primary key and a title.
@@ -177,4 +177,4 @@ for entity in entities:
 
 for entity in entities:
     session.delete(entity)
-session.flush()
\ No newline at end of file
+session.flush()
index 004caf84946038e4e31fe0532a366373981c5f47..2fcf44f6155ec9bb300d1b8147c9af5f762bf9a1 100644 (file)
@@ -1,5 +1,5 @@
 from sqlalchemy             import create_session, relation, mapper, \
-                                   join, DynamicMetaData, class_mapper, \
+                                   join, ThreadLocalMetaData, class_mapper, \
                                    util, Integer
 from sqlalchemy             import and_, or_
 from sqlalchemy             import Table, Column, ForeignKey
@@ -14,7 +14,7 @@ import sys
 #
 # the "proxy" to the database engine... this can be swapped out at runtime
 #
-metadata = DynamicMetaData("activemapper")
+metadata = ThreadLocalMetaData("activemapper")
 
 try:
     objectstore = sqlalchemy.objectstore
index a27ad5ac8b85c73cf117e294b246513181303b43..c320724ac9a3f9ed3a1041add26db8109f5ec14b 100644 (file)
@@ -22,7 +22,7 @@ engine::
 
 or, you can re-use an existing metadata::
 
-    >>> db = SqlSoup(BoundMetaData(e))
+    >>> db = SqlSoup(MetaData(e))
 
 You can optionally specify a schema within the database for your
 SqlSoup::
@@ -490,7 +490,7 @@ class SqlSoup:
             if args or kwargs:
                 raise ArgumentError('Extra arguments not allowed when metadata is given')
         else:
-            metadata = BoundMetaData(*args, **kwargs)
+            metadata = MetaData(*args, **kwargs)
         self._metadata = metadata
         self._cache = {}
         self.schema = None
index 5d3ca694b00551e2fb83a2aeaef5c28a1b248494..868dcb7b0ced691dd9dd54fd1463ab8fbdf76ce8 100644 (file)
@@ -17,13 +17,13 @@ objects as well as the visitor interface, so that the schema package
 *plugs in* to the SQL package.
 """
 
-from sqlalchemy import sql, types, exceptions,util, databases
+from sqlalchemy import sql, types, exceptions, util, databases
 import sqlalchemy
 import copy, re, string
 
 __all__ = ['SchemaItem', 'Table', 'Column', 'ForeignKey', 'Sequence', 'Index', 'ForeignKeyConstraint',
             'PrimaryKeyConstraint', 'CheckConstraint', 'UniqueConstraint', 'DefaultGenerator', 'Constraint',
-           'MetaData', 'BoundMetaData', 'DynamicMetaData', 'SchemaVisitor', 'PassiveDefault', 'ColumnDefault']
+           'MetaData', 'ThreadLocalMetaData', 'BoundMetaData', 'DynamicMetaData', 'SchemaVisitor', 'PassiveDefault', 'ColumnDefault']
 
 class SchemaItem(object):
     """Base class for items that define a database schema."""
@@ -127,7 +127,7 @@ class _TableSingleton(type):
             # backwards compatibility - get a BoundSchema associated with the engine
             engine = metadata
             if not hasattr(engine, '_legacy_metadata'):
-                engine._legacy_metadata = BoundMetaData(engine)
+                engine._legacy_metadata = MetaData(engine)
             metadata = engine._legacy_metadata
         elif metadata is not None and not isinstance(metadata, MetaData):
             # they left MetaData out, so assume its another SchemaItem, add it to *args
@@ -1067,32 +1067,59 @@ class Index(SchemaItem):
 class MetaData(SchemaItem):
     """Represent a collection of Tables and their associated schema constructs."""
 
-    def __init__(self, name=None, url=None, engine=None, **kwargs):
+    def __init__(self, engine_or_url=None, url=None, engine=None, **kwargs):
         """create a new MetaData object.
+
+            engine_or_url
+                an Engine, or a string or URL instance which will be passed
+                to create_engine(), along with \**kwargs - this MetaData will
+                be bound to the resulting engine.
         
-            name
-                optional name for this MetaData instance.
-            
             url
-                a string or URL instance which will be passed to create_engine(),
-                along with \**kwargs - this MetaData will be bound to the resulting
-                engine.
+                deprecated.  a string or URL instance which will be passed to
+                create_engine(), along with \**kwargs - this MetaData will be
+                bound to the resulting engine.
             
             engine
-                an Engine instance to which this MetaData will be bound.
+                deprecated. an Engine instance to which this MetaData will
+                be bound.
                 
             case_sensitive
-                popped from \**kwargs, indicates default case sensitive setting for
-                all contained objects.  defaults to True.
+                popped from \**kwargs, indicates default case sensitive
+                setting for all contained objects.  defaults to True.
+            
+            name
+                deprecated, optional name for this MetaData instance.
             
-        """        
+        """
+
+        # transition from <= 0.3.8 signature:
+        #   MetaData(name=None, url=None, engine=None)
+        # to 0.4 signature:
+        #   MetaData(engine_or_url=None)
+        name = kwargs.get('name', None)
+        if engine_or_url is None:
+            engine_or_url = url or engine
+        elif 'name' in kwargs:
+            engine_or_url = engine_or_url or engine or url
+        else:
+            import sqlalchemy.engine as engine
+            import sqlalchemy.engine.url as url
+            if (not isinstance(engine_or_url, url.URL) and
+                not isinstance(engine_or_url, engine.Connectable)):
+                try:
+                    url.make_url(engine_or_url)
+                except exceptions.ArgumentError:
+                    # nope, must have been a name as 1st positional
+                    name, engine_or_url = engine_or_url, (url or engine)
+        kwargs.pop('name', None)
 
         self.tables = {}
         self.name = name
         self._engine = None
         self._set_casing_strategy(name, kwargs)
-        if engine or url:
-            self.connect(engine or url, **kwargs)
+        if engine_or_url:
+            self.connect(engine_or_url, **kwargs)
 
     def __getstate__(self):
         return {'tables':self.tables, 'name':self.name, 'casesensitive':self._case_sensitive_setting}
@@ -1188,32 +1215,23 @@ class MetaData(SchemaItem):
             return None
         return self._engine
 
+
 class BoundMetaData(MetaData):
-    """``MetaData`` for which the first argument is a required Engine, url string, or URL instance.
-    
-    """
+    """Deprecated.  Use ``MetaData``."""
 
     def __init__(self, engine_or_url, name=None, **kwargs):
-        from sqlalchemy.engine.url import URL
-        if isinstance(engine_or_url, basestring) or isinstance(engine_or_url, URL):
-            super(BoundMetaData, self).__init__(name=name, url=engine_or_url, **kwargs)
-        else:
-            super(BoundMetaData, self).__init__(name=name, engine=engine_or_url, **kwargs)
-            
+        super(BoundMetaData, self).__init__(engine_or_url=engine_or_url,
+                                            name=name, **kwargs)
 
-class DynamicMetaData(MetaData):
-    """Build upon ``MetaData`` to provide the capability to bind to 
-multiple ``Engine`` implementations on a dynamically alterable,
-thread-local basis.
-    """
 
-    def __init__(self, name=None, threadlocal=True, **kwargs):
-        if threadlocal:
-            self.context = util.ThreadLocal()
-        else:
-            self.context = self
+class ThreadLocalMetaData(MetaData):
+    """A ``MetaData`` that binds to multiple ``Engine`` implementations on a thread-local basis."""
+
+    def __init__(self, name=None, **kwargs):
+        self.context = util.ThreadLocal()
         self.__engines = {}
-        super(DynamicMetaData, self).__init__(name=name, **kwargs)
+        super(ThreadLocalMetaData, self).__init__(engine_or_url=None,
+                                                  name=name, **kwargs)
 
     def connect(self, engine_or_url, **kwargs):
         from sqlalchemy.engine.url import URL
@@ -1233,7 +1251,7 @@ thread-local basis.
         return hasattr(self.context, '_engine') and self.context._engine is not None
 
     def dispose(self):
-        """Dispose all ``Engines`` to which this ``DynamicMetaData`` has been connected."""
+        """Dispose all ``Engines`` to which this ``ThreadLocalMetaData`` has been connected."""
 
         for e in self.__engines.values():
             e.dispose()
@@ -1245,6 +1263,16 @@ thread-local basis.
             return None
     engine=property(_get_engine)
 
+
+def DynamicMetaData(name=None, threadlocal=True, **kw): 
+    """Deprecated.  Use ``MetaData`` or ``ThreadLocalMetaData``.""" 
+
+    if threadlocal: 
+        return ThreadLocalMetaData(**kw) 
+    else: 
+        return MetaData(name=name, **kw) 
+
+
 class SchemaVisitor(sql.ClauseVisitor):
     """Define the visiting for ``SchemaItem`` objects."""
 
@@ -1306,4 +1334,4 @@ class SchemaVisitor(sql.ClauseVisitor):
         """Visit a ``CheckConstraint`` on a ``Column``."""
         pass
 
-default_metadata = DynamicMetaData('default')
+default_metadata = ThreadLocalMetaData(name='default')
index 4972c8e2437abaa331c86798ee68e03d526c362c..d9227383fc25423a39cc415e7a8b94c9733ec03d 100644 (file)
@@ -325,12 +325,12 @@ class TypesTest(AssertMixin):
 
         columns = [Column('c%i' % (i + 1), t[0]) for i, t in enumerate(specs)]
 
-        m = BoundMetaData(db)
+        m = MetaData(db)
         t_table = Table('mysql_types', m, *columns)
         m.drop_all()
         m.create_all()
         
-        m2 = BoundMetaData(db)
+        m2 = MetaData(db)
         rt = Table('mysql_types', m2, autoload=True)
 
         #print
index 254309d2287a8a804bb41ff60851270908cf2463..8a69f24536792b4852df79cb3e3eae31ff5289ac 100644 (file)
@@ -28,35 +28,35 @@ class DomainReflectionTest(AssertMixin):
 
     @testbase.supported('postgres')
     def test_table_is_reflected(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('testtable', metadata, autoload=True)
         self.assertEquals(set(table.columns.keys()), set(['question', 'answer']), "Columns of reflected table didn't equal expected columns")
         self.assertEquals(table.c.answer.type.__class__, postgres.PGInteger)
         
     @testbase.supported('postgres')
     def test_domain_is_reflected(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('testtable', metadata, autoload=True)
         self.assertEquals(str(table.columns.answer.default.arg), '42', "Reflected default value didn't equal expected value")
         self.assertFalse(table.columns.answer.nullable, "Expected reflected column to not be nullable.")
 
     @testbase.supported('postgres')
     def test_table_is_reflected_alt_schema(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('testtable', metadata, autoload=True, schema='alt_schema')
         self.assertEquals(set(table.columns.keys()), set(['question', 'answer', 'anything']), "Columns of reflected table didn't equal expected columns")
         self.assertEquals(table.c.anything.type.__class__, postgres.PGInteger)
 
     @testbase.supported('postgres')
     def test_schema_domain_is_reflected(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('testtable', metadata, autoload=True, schema='alt_schema')
         self.assertEquals(str(table.columns.answer.default.arg), '0', "Reflected default value didn't equal expected value")
         self.assertTrue(table.columns.answer.nullable, "Expected reflected column to be nullable.")
 
     @testbase.supported('postgres')
     def test_crosschema_domain_is_reflected(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('crosschema', metadata, autoload=True)
         self.assertEquals(str(table.columns.answer.default.arg), '0', "Reflected default value didn't equal expected value")
         self.assertTrue(table.columns.answer.nullable, "Expected reflected column to be nullable.")
@@ -64,14 +64,14 @@ class DomainReflectionTest(AssertMixin):
 class MiscTest(AssertMixin):
     @testbase.supported('postgres')
     def test_date_reflection(self):
-        m1 = BoundMetaData(testbase.db)
+        m1 = MetaData(testbase.db)
         t1 = Table('pgdate', m1, 
             Column('date1', DateTime(timezone=True)),
             Column('date2', DateTime(timezone=False))
             )
         m1.create_all()
         try:
-            m2 = BoundMetaData(testbase.db)
+            m2 = MetaData(testbase.db)
             t2 = Table('pgdate', m2, autoload=True)
             assert t2.c.date1.type.timezone is True
             assert t2.c.date2.type.timezone is False
@@ -80,7 +80,7 @@ class MiscTest(AssertMixin):
 
     @testbase.supported('postgres')
     def test_checksfor_sequence(self):
-        meta1 = BoundMetaData(testbase.db)
+        meta1 = MetaData(testbase.db)
         t = Table('mytable', meta1, 
             Column('col1', Integer, Sequence('fooseq')))
         try:
@@ -93,7 +93,7 @@ class MiscTest(AssertMixin):
     def test_schema_reflection(self):
         """note: this test requires that the 'alt_schema' schema be separate and accessible by the test user"""
 
-        meta1 = BoundMetaData(testbase.db)
+        meta1 = MetaData(testbase.db)
         users = Table('users', meta1,
             Column('user_id', Integer, primary_key = True),
             Column('user_name', String(30), nullable = False),
@@ -108,7 +108,7 @@ class MiscTest(AssertMixin):
         )
         meta1.create_all()
         try:
-            meta2 = BoundMetaData(testbase.db)
+            meta2 = MetaData(testbase.db)
             addresses = Table('email_addresses', meta2, autoload=True, schema="alt_schema")
             users = Table('users', meta2, mustexist=True, schema="alt_schema")
 
@@ -127,7 +127,7 @@ class MiscTest(AssertMixin):
         that PassiveDefault upon insert."""
         
         try:
-            meta = BoundMetaData(testbase.db)
+            meta = MetaData(testbase.db)
             testbase.db.execute("""
              CREATE TABLE speedy_users
              (
@@ -154,7 +154,7 @@ class TimezoneTest(AssertMixin):
     @testbase.supported('postgres')
     def setUpAll(self):
         global tztable, notztable, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
 
         # current_timestamp() in postgres is assumed to return TIMESTAMP WITH TIMEZONE
         tztable = Table('tztable', metadata,
index 33c25201824faecd20fb1a4292b31c2520bcf220..283006cfac37da8dc8a4759614522f51cffc5c1b 100644 (file)
@@ -9,7 +9,7 @@ from sqlalchemy import *
 class ExecuteTest(testbase.PersistTest):
     def setUpAll(self):
         global users, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         users = Table('users', metadata,
             Column('user_id', INT, primary_key = True),
             Column('user_name', VARCHAR(20)),
index a9a1f934e5c4575101bc74e239ad132b2920e81c..344d5a94f5938254d91c21fc265379ada0fe0449 100644 (file)
@@ -34,7 +34,7 @@ class ReflectionTest(PersistTest):
             deftype2, deftype3 = Integer, Integer
             defval2, defval3 = "15", "16"
         
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         
         users = Table('engine_users', meta,
             Column('user_id', INT, primary_key = True),
@@ -108,7 +108,7 @@ class ReflectionTest(PersistTest):
     
     def testoverridecolumns(self):
         """test that you can override columns which contain foreign keys to other reflected tables"""
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         users = Table('users', meta, 
             Column('id', Integer, primary_key=True),
             Column('name', String(30)))
@@ -119,7 +119,7 @@ class ReflectionTest(PersistTest):
             
         meta.create_all()            
         try:
-            meta2 = BoundMetaData(testbase.db)
+            meta2 = MetaData(testbase.db)
             a2 = Table('addresses', meta2, 
                 Column('user_id', Integer, ForeignKey('users.id')),
                 autoload=True)
@@ -129,7 +129,7 @@ class ReflectionTest(PersistTest):
             assert list(a2.c.user_id.foreign_keys)[0].parent is a2.c.user_id
             assert u2.join(a2).onclause == u2.c.id==a2.c.user_id
 
-            meta3 = BoundMetaData(testbase.db)
+            meta3 = MetaData(testbase.db)
             u3 = Table('users', meta3, autoload=True)
             a3 = Table('addresses', meta3, 
                 Column('user_id', Integer, ForeignKey('users.id')),
@@ -143,7 +143,7 @@ class ReflectionTest(PersistTest):
     def testoverridecolumns2(self):
         """test that you can override columns which contain foreign keys to other reflected tables,
         where the foreign key column is also a primary key column"""
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         users = Table('users', meta, 
             Column('id', Integer, primary_key=True),
             Column('name', String(30)))
@@ -154,7 +154,7 @@ class ReflectionTest(PersistTest):
 
         meta.create_all()            
         try:
-            meta2 = BoundMetaData(testbase.db)
+            meta2 = MetaData(testbase.db)
             a2 = Table('addresses', meta2, 
                 Column('id', Integer, ForeignKey('users.id'), primary_key=True, ),
                 autoload=True)
@@ -173,7 +173,7 @@ class ReflectionTest(PersistTest):
             #sess.save(add1)
             #sess.flush()
             
-            meta3 = BoundMetaData(testbase.db)
+            meta3 = MetaData(testbase.db)
             u3 = Table('users', meta3, autoload=True)
             a3 = Table('addresses', meta3, 
                 Column('id', Integer, ForeignKey('users.id'), primary_key=True),
@@ -188,7 +188,7 @@ class ReflectionTest(PersistTest):
             
     @testbase.supported('mysql')
     def testmysqltypes(self):
-        meta1 = BoundMetaData(testbase.db)
+        meta1 = MetaData(testbase.db)
         table = Table(
             'mysql_types', meta1,
             Column('id', Integer, primary_key=True),
@@ -204,7 +204,7 @@ class ReflectionTest(PersistTest):
         try:
             table.drop(checkfirst=True)
             table.create()
-            meta2 = BoundMetaData(testbase.db)
+            meta2 = MetaData(testbase.db)
             t2 = Table('mysql_types', meta2, autoload=True)
             assert isinstance(t2.c.num1.type, mysql.MSInteger)
             assert t2.c.num1.type.unsigned
@@ -281,7 +281,7 @@ class ReflectionTest(PersistTest):
         )
         """)
         try:
-            meta = BoundMetaData(testbase.db)
+            meta = MetaData(testbase.db)
             table1 = Table("django_admin_log", meta, autoload=True)
             table2 = Table("django_content_type", meta, autoload=True)
             j = table1.join(table2)
@@ -292,7 +292,7 @@ class ReflectionTest(PersistTest):
 
     def test_composite_fk(self):
         """test reflection of composite foreign keys"""
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         table = Table(
             'multi', meta, 
             Column('multi_id', Integer, primary_key=True),
@@ -411,7 +411,7 @@ class ReflectionTest(PersistTest):
                           testbase.db, autoload=True)
         
     def testoverride(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         table = Table(
             'override_test', meta, 
             Column('col1', Integer, primary_key=True),
@@ -421,7 +421,7 @@ class ReflectionTest(PersistTest):
         table.create()
         # clear out table registry
 
-        meta2 = BoundMetaData(testbase.db)
+        meta2 = MetaData(testbase.db)
         try:
             table = Table(
                 'override_test', meta2,
index d42a809c204077907bcb41401c46a07c724f3a42..6509949872a406bcaa106c9f6eed3af8e1ec80d6 100644 (file)
@@ -9,7 +9,7 @@ from sqlalchemy.ext.sessioncontext import SessionContext
 class OverrideAttributesTest(PersistTest):
     def setUpAll(self):
         global metadata, table, table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table = Table('sometable', metadata, 
             Column('id', Integer, primary_key=True),
             Column('data', String(30)))
@@ -48,4 +48,4 @@ class OverrideAttributesTest(PersistTest):
         assert SomeObject.get_by(id=s.id).options[0].id == sso.id
         
 if __name__ == '__main__':
-    testbase.main()
\ No newline at end of file
+    testbase.main()
index 4935f4b6eae384b1c39bcde25de17b280f798995..3b18581bbd2173a1055bc295b633152f7ae967eb 100644 (file)
@@ -33,7 +33,7 @@ class _CollectionOperations(PersistTest):
     def setUp(self):
         collection_class = self.collection_class
 
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
     
         parents_table = Table('Parent', metadata,
                               Column('id', Integer, primary_key=True),
@@ -434,7 +434,7 @@ class CustomObjectTest(_CollectionOperations):
 
 class ScalarTest(PersistTest):
     def test_scalar_proxy(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
     
         parents_table = Table('Parent', metadata,
                               Column('id', Integer, primary_key=True),
@@ -550,7 +550,7 @@ class ScalarTest(PersistTest):
 
 class LazyLoadTest(PersistTest):
     def setUp(self):
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
     
         parents_table = Table('Parent', metadata,
                               Column('id', Integer, primary_key=True),
index 73d0405a4a5509c049e1ec9b0cb7c17b53046305..6dcf057d4641e7be50810d8d83e76ffa15a55065 100644 (file)
@@ -52,7 +52,7 @@ class OrderingListTest(PersistTest):
 
         global metadata, slides_table, bullets_table, Slide, Bullet
 
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         slides_table = Table('test_Slides', metadata,
                              Column('id', Integer, primary_key=True),
                              Column('name', String))
index 8df416be94c9ce74475ab64a2065bd244665bc9e..1ec724c3d9cb90c5ecc23c81d7f5eb1e4cce613c 100644 (file)
@@ -13,7 +13,7 @@ class SelectResultsTest(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global foo, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         foo = Table('foo', metadata,
                     Column('id', Integer, Sequence('foo_id_seq'), primary_key=True),
                     Column('bar', Integer),
@@ -107,7 +107,7 @@ class SelectResultsTest2(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global metadata, table1, table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table1 = Table('Table1', metadata,
             Column('id', Integer, primary_key=True),
             )
@@ -201,7 +201,7 @@ class CaseSensitiveTest(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global metadata, table1, table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table1 = Table('Table1', metadata,
             Column('ID', Integer, primary_key=True),
             )
index 755f6cf8908d802b473495d7000c69588d6189a2..416cfabbb4c0d0bb37d04346a5edfe5376ff6452 100644 (file)
@@ -6,7 +6,7 @@ from sqlalchemy import *
 class AssociationTest(testbase.PersistTest):
     def setUpAll(self):
         global items, item_keywords, keywords, metadata, Item, Keyword, KeywordAssociation
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         items = Table('items', metadata, 
             Column('item_id', Integer, primary_key=True),
             Column('name', String(40)),
@@ -141,7 +141,7 @@ class AssociationTest(testbase.PersistTest):
 class AssociationTest2(testbase.PersistTest):
     def setUpAll(self):
         global table_originals, table_people, table_isauthor, metadata, Originals, People, IsAuthor
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table_originals = Table('Originals', metadata,
             Column('ID',        Integer,        primary_key=True),
             Column('Title',     String(200),    nullable=False),
index 7cb1231608bf6bd0eec735e45243885a2af5281f..16c4db40f38a5dd06ea5cc2e086af880d3fc5d2b 100644 (file)
@@ -185,7 +185,7 @@ class M2OCascadeTest(testbase.AssertMixin):
     def setUpAll(self):
         global ctx, data, metadata, User, Pref, Extra
         ctx = SessionContext(create_session)
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         extra = Table("extra", metadata, 
             Column("extra_id", Integer, Sequence("extra_id_seq", optional=True), primary_key=True),
             Column("prefs_id", Integer, ForeignKey("prefs.prefs_id"))
@@ -263,7 +263,7 @@ class M2OCascadeTest(testbase.AssertMixin):
 class M2MCascadeTest(testbase.AssertMixin):
     def setUpAll(self):
         global metadata, a, b, atob
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         a = Table('a', metadata, 
             Column('id', Integer, primary_key=True),
             Column('data', String(30))
@@ -460,7 +460,7 @@ class DoubleParentOrphanTest(testbase.AssertMixin):
     
     def setUpAll(self):
         global metadata, address_table, businesses, homes
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         address_table = Table('addresses', metadata,
             Column('address_id', Integer, primary_key=True),
             Column('street', String(30)),
index 96e56e59728de639b9d48b1c50ac9612b7c684f3..61107ce8e165b2bc2218ee95e98edc9aaece1652 100644 (file)
@@ -8,7 +8,7 @@ class CompileTest(testbase.AssertMixin):
         
     def testone(self):
         global metadata, order, employee, product, tax, orderproduct
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
 
         order = Table('orders', metadata, 
             Column('id', Integer, primary_key=True),
@@ -69,7 +69,7 @@ class CompileTest(testbase.AssertMixin):
     def testtwo(self):
         """test that conflicting backrefs raises an exception"""
         global metadata, order, employee, product, tax, orderproduct
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
 
         order = Table('orders', metadata, 
             Column('id', Integer, primary_key=True),
@@ -118,7 +118,7 @@ class CompileTest(testbase.AssertMixin):
             assert str(e).index("Backrefs do not match") > -1
 
     def testthree(self):
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         node_table = Table("node", metadata, 
             Column('node_id', Integer, primary_key=True),
             Column('name_index', Integer, nullable=True),
index d02a8c8d2df3cf59ca201235f0b59780684ae54d..c53e9e8468280cbed98cc82ea69807fd1f3d3a21 100644 (file)
@@ -26,7 +26,7 @@ class SelfReferentialTest(AssertMixin):
     """tests a self-referential mapper, with an additional list of child objects."""
     def setUpAll(self):
         global t1, t2, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         t1 = Table('t1', metadata, 
             Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('parent_c1', Integer, ForeignKey('t1.c1')),
@@ -128,7 +128,7 @@ class SelfReferentialNoPKTest(AssertMixin):
     """test self-referential relationship that joins on a column other than the primary key column"""
     def setUpAll(self):
         global table, meta
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         table = Table('item', meta,
            Column('id', Integer, primary_key=True),
            Column('uuid', String(32), unique=True, nullable=False),
@@ -173,7 +173,7 @@ class SelfReferentialNoPKTest(AssertMixin):
 class InheritTestOne(AssertMixin):
     def setUpAll(self):
         global parent, child1, child2, meta
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         parent = Table("parent", meta,
             Column("id", Integer, primary_key=True),
             Column("parent_data", String(50)),
@@ -375,7 +375,7 @@ class BiDirectionalOneToManyTest(AssertMixin):
     """tests two mappers with a one-to-many relation to each other."""
     def setUpAll(self):
         global t1, t2, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         t1 = Table('t1', metadata, 
             Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('c2', Integer, ForeignKey('t2.c1'))
@@ -416,7 +416,7 @@ class BiDirectionalOneToManyTest2(AssertMixin):
     """tests two mappers with a one-to-many relation to each other, with a second one-to-many on one of the mappers"""
     def setUpAll(self):
         global t1, t2, t3, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         t1 = Table('t1', metadata, 
             Column('c1', Integer, Sequence('t1c1_id_seq', optional=True), primary_key=True),
             Column('c2', Integer, ForeignKey('t2.c1')),
@@ -478,7 +478,7 @@ class OneToManyManyToOneTest(AssertMixin):
     raise an exception when dependencies are sorted."""
     def setUpAll(self):
         global metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         global person    
         global ball
         ball = Table('ball', metadata,
@@ -770,7 +770,7 @@ class SelfReferentialPostUpdateTest(AssertMixin):
     """test using post_update on a single self-referential mapper"""
     def setUpAll(self):
         global metadata, node_table
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         node_table = Table('node', metadata,
             Column('id', Integer, Sequence('nodeid_id_seq', optional=True), primary_key=True),
             Column('path', String(50), nullable=False),
@@ -873,7 +873,7 @@ class SelfReferentialPostUpdateTest(AssertMixin):
 class SelfReferentialPostUpdateTest2(AssertMixin):
     def setUpAll(self):
         global metadata, a_table
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         a_table = Table("a", metadata,
                 Column("id", Integer(), primary_key=True),
                 Column("fui", String()),
index ef385df16314b9ed2d754bde13d47ab34b616d15..04de56f0101f5ef34844bed2074f866c532f7e11 100644 (file)
@@ -9,7 +9,7 @@ class EagerTest(AssertMixin):
     def setUpAll(self):
         global companies_table, addresses_table, invoice_table, phones_table, items_table, ctx, metadata
 
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         ctx = SessionContext(create_session)
         
         companies_table = Table('companies', metadata,
index c92444dd61cc58586754e9f84797cd046f920242..a731581d55ad70a53c6ea082688579ba8a599165 100644 (file)
@@ -7,7 +7,7 @@ import random
 class EagerTest(AssertMixin):
     def setUpAll(self):
         global dbmeta, owners, categories, tests, options, Owner, Category, Test, Option, false
-        dbmeta = BoundMetaData(testbase.db)
+        dbmeta = MetaData(testbase.db)
         
         # determine a literal value for "false" based on the dialect
         false = Boolean().dialect_impl(testbase.db.dialect).convert_bind_param(False, testbase.db.dialect)
@@ -149,7 +149,7 @@ class EagerTest(AssertMixin):
 class EagerTest2(AssertMixin):
     def setUpAll(self):
         global metadata, middle, left, right
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         middle = Table('middle', metadata,
             Column('id', Integer, primary_key = True),
             Column('data', String(50)),
index 202964a6985c38a1aac287ea669197ab10480fb1..86486cafcf0f947196b3ee0e3bacc82ee8a0e9ee 100644 (file)
@@ -12,7 +12,7 @@ class EntityTest(AssertMixin):
     to have multiple primary mappers """
     def setUpAll(self):
         global user1, user2, address1, address2, metadata, ctx
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         ctx = SessionContext(create_session)
         
         user1 = Table('user1', metadata, 
index 11daf6348d5106ddd8447e3949f479b506344759..75280deedb11e48492a909554544946944d5d435 100644 (file)
@@ -12,7 +12,7 @@ class GenerativeQueryTest(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global foo, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         foo = Table('foo', metadata,
                     Column('id', Integer, Sequence('foo_id_seq'), primary_key=True),
                     Column('bar', Integer),
@@ -111,7 +111,7 @@ class GenerativeTest2(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global metadata, table1, table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table1 = Table('Table1', metadata,
             Column('id', Integer, primary_key=True),
             )
@@ -205,7 +205,7 @@ class CaseSensitiveTest(PersistTest):
     def setUpAll(self):
         self.install_threadlocal()
         global metadata, table1, table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table1 = Table('Table1', metadata,
             Column('ID', Integer, primary_key=True),
             )
index b0a905f33991e818d27ad4deb91dc00da8b381ca..cf7224fa47546e02157eeae5565a59fa45118097 100644 (file)
@@ -593,7 +593,7 @@ class GenerativeTest(testbase.AssertMixin):
         #   +--------------------------------------- has a ------+
 
         global metadata, status, people, engineers, managers, cars
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         # table definitions
         status = Table('status', metadata, 
            Column('status_id', Integer, primary_key=True),
index 9f2d53e9d0bc1f2b205f3202458cfe8861a29015..2cabac3a2a531b6453ec3f6b1e7b025a88c9b7d6 100644 (file)
@@ -7,7 +7,7 @@ import datetime
 class LazyTest(AssertMixin):
     def setUpAll(self):
         global info_table, data_table, rel_table, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         info_table = Table('infos', metadata,
                Column('pk', Integer, primary_key=True),
                Column('info', String))
index 88b474e24263b4f141e5fade376fd83ed631872e..63af53b967ed0799c9fbc25d95b42dc5fe121938 100644 (file)
@@ -38,7 +38,7 @@ class MapperTest(MapperSuperTest):
     def testunicodeget(self):
         """test that Query.get properly sets up the type for the bind parameter.  using unicode would normally fail 
         on postgres, mysql and oracle unless it is converted to an encoded string"""
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         table = Table('foo', metadata, 
             Column('id', Unicode(10), primary_key=True),
             Column('data', Unicode(40)))
index b456a1abbc715b562d4167f56122519e28a74d09..4e961a6d7090f7f8fe77c33a55b3674a9dd9f152 100644 (file)
@@ -33,7 +33,7 @@ class MapperCleanoutTest(testbase.AssertMixin):
         assert True
         
     def do_test(self):
-        metadata = BoundMetaData(engine)
+        metadata = MetaData(engine)
 
         table1 = Table("mytable", metadata, 
             Column('col1', Integer, primary_key=True),
index 525c8db7e88a2003355e0df04b46d172f4f0d162..6ac7c514debeb3e7b0ae7796a059ad1ac4412af4 100644 (file)
@@ -25,7 +25,7 @@ class Port(object):
 class O2OTest(testbase.AssertMixin):
     def setUpAll(self):
         global jack, port, metadata, ctx
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         ctx = SessionContext(create_session)
         jack = Table('jack', metadata, 
             Column('id', Integer, primary_key=True),
index 5f53af080f5754a2d9de18b712b357637e8d7f0a..6f652e692e72899ce9400e18e91b37676e0a340a 100644 (file)
@@ -2,7 +2,6 @@ import testbase
 import unittest, sys, datetime
 
 db = testbase.db
-#db. 
 
 from sqlalchemy import *
 
@@ -106,7 +105,7 @@ class RelationTest2(testbase.PersistTest):
     is 'joined to itself'."""
     def setUpAll(self):
         global metadata, company_tbl, employee_tbl
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         
         company_tbl = Table('company', metadata,
              Column('company_id', Integer, primary_key=True),
@@ -221,7 +220,7 @@ class RelationTest3(testbase.PersistTest):
     def setUpAll(self):
         global jobs, pageversions, pages, metadata, Job, Page, PageVersion, PageComment
         import datetime
-        metadata = BoundMetaData(testbase.db)  
+        metadata = MetaData(testbase.db)  
         jobs = Table("jobs", metadata,
                         Column("jobno", Unicode(15), primary_key=True),
                         Column("created", DateTime, nullable=False, default=datetime.datetime.now),
index d78084fe1180dd9bfb373659db9fe5971cbc5de6..31a90da21b83fe2012365b913f598374b68834fb 100644 (file)
@@ -3,7 +3,7 @@ import testbase
 
 class SingleInheritanceTest(testbase.AssertMixin):
     def setUpAll(self):
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         global employees_table
         employees_table = Table('employees', metadata, 
             Column('employee_id', Integer, primary_key=True),
@@ -60,4 +60,4 @@ class SingleInheritanceTest(testbase.AssertMixin):
         assert session.query(JuniorEngineer).select() == [e2]
         
 if __name__ == '__main__':
-    testbase.main()
\ No newline at end of file
+    testbase.main()
index bf40a49f705aafbd7e2541b01c412e6f864d6fd6..6ba3f8c4b95fe1c3238f2ee8bdf0ee39922ef8a5 100644 (file)
@@ -164,7 +164,7 @@ class UnicodeTest(UnitOfWorkTest):
     def setUpAll(self):
         UnitOfWorkTest.setUpAll(self)
         global metadata, uni_table, uni_table2
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         uni_table = Table('uni_test', metadata,
             Column('id',  Integer, Sequence("uni_test_id_seq", optional=True), primary_key=True),
             Column('txt', Unicode(50), unique=True))
@@ -215,7 +215,7 @@ class MutableTypesTest(UnitOfWorkTest):
     def setUpAll(self):
         UnitOfWorkTest.setUpAll(self)
         global metadata, table
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table = Table('mutabletest', metadata,
             Column('id', Integer, Sequence('mutableidseq', optional=True), primary_key=True),
             Column('data', PickleType),
@@ -421,7 +421,7 @@ class ForeignPKTest(UnitOfWorkTest):
     def setUpAll(self):
         UnitOfWorkTest.setUpAll(self)
         global metadata, people, peoplesites
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         people = Table("people", metadata,
            Column('person', String(10), primary_key=True),
            Column('firstname', String(10)),
@@ -462,7 +462,7 @@ class PassiveDeletesTest(UnitOfWorkTest):
     def setUpAll(self):
         UnitOfWorkTest.setUpAll(self)
         global metadata, mytable,myothertable
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         mytable = Table('mytable', metadata,
             Column('id', Integer, primary_key=True),
             Column('data', String(30)),
@@ -1427,7 +1427,7 @@ class SaveTest2(UnitOfWorkTest):
         ctx.current.clear()
         clear_mappers()
         global meta, users, addresses
-        meta = BoundMetaData(db)
+        meta = MetaData(db)
         users = Table('users', meta,
             Column('user_id', Integer, Sequence('user_id_seq', optional=True), primary_key = True),
             Column('user_name', String(20)),
index a09e9dd6f74e185af72ad33cd6f96663df1477f3..d2e7414425784697410738cef77eec3e25fedda5 100644 (file)
@@ -1,8 +1,9 @@
+import testbase
 from sqlalchemy import *
 from timeit import Timer
 import sys
 
-meta = DynamicMetaData("time_trial")
+meta = MetaData()
 
 orders = Table('orders', meta,
     Column('id', Integer, Sequence('order_id_seq'), primary_key = True),
@@ -87,4 +88,4 @@ if __name__ == "__main__":
 
     print "\nCreate backward associations"
     create_it = tt.create_back_assoc
-    tt.run(10)
\ No newline at end of file
+    tt.run(10)
index d4076f5ba91382e13df8df7617fb8d98e8670f07..9d77fed54d4c286751403aabc3398fe13b86b918 100644 (file)
@@ -16,7 +16,7 @@ DIVISOR = 50
 class LoadTest(AssertMixin):
     def setUpAll(self):
         global items, meta,subitems
-        meta = BoundMetaData(db)
+        meta = MetaData(db)
         items = Table('items', meta, 
             Column('item_id', Integer, primary_key=True),
             Column('value', String(100)))
index 9cbabea17a7420b675e6317a11e9d383d8a93eef..3530e4a658051d3deb261c61afcf1f98c0b4e417 100644 (file)
@@ -20,7 +20,7 @@ for best results, dont run with sqlite :memory: database, and keep an eye on top
 class LoadTest(AssertMixin):
     def setUpAll(self):
         global items, meta
-        meta = BoundMetaData(db)
+        meta = MetaData(db)
         items = Table('items', meta, 
             Column('item_id', Integer, primary_key=True),
             Column('value', String(100)))
index 8e4d5e3fff5cbe1d228d5207ef9eb00ac234a71c..5690eac3f4e8f39e0ad472da9e892dbfd34662f2 100644 (file)
@@ -14,7 +14,7 @@ NUM = 250000
 class SaveTest(AssertMixin):
     def setUpAll(self):
         global items, metadata
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         items = Table('items', metadata, 
             Column('item_id', Integer, primary_key=True),
             Column('value', String(100)))
index 1b130f568bd1633d278a3e65658d97ebe7d47190..090827709da5d372ed680db0ce12e98a91e238ba 100644 (file)
@@ -10,7 +10,7 @@ psycopg = pool.manage(psycopg,pool_size=2,max_overflow=1, timeout=5, echo=True)
 print psycopg
 db = create_engine('postgres://scott:tiger@127.0.0.1/test',pool=psycopg,strategy='threadlocal')
 print db.connection_provider._pool
-metadata = BoundMetaData(db)
+metadata = MetaData(db)
 
 users_table = Table('users', metadata,
   Column('user_id', Integer, primary_key=True),
@@ -33,4 +33,4 @@ for x in range(0,50):
     thread.start_new_thread(run, ())
 
 while True:
-    time.sleep(5)
\ No newline at end of file
+    time.sleep(5)
index 4c9723b437939193ef8d172383511ca1d91f8b6b..eb9e2f6693ff5bfde46596ea1cb36de4a47a4687 100644 (file)
@@ -6,7 +6,7 @@ from sqlalchemy import *
 import thread, time
 from sqlalchemy.orm import mapperlib
 
-meta = BoundMetaData('sqlite:///foo.db')
+meta = MetaData('sqlite:///foo.db')
 
 t1 = Table('t1', meta, 
     Column('c1', Integer, primary_key=True),
index 7068de1fdeda77284e073dfb62a1cd8e74d0cd7a..365956dc7037c7f06f9a149d348b378acca994f0 100644 (file)
@@ -10,10 +10,10 @@ logging.basicConfig()
 logging.getLogger('sqlalchemy.pool').setLevel(logging.INFO)
 
 threadids = set()
-#meta = BoundMetaData('postgres://scott:tiger@127.0.0.1/test')
+#meta = MetaData('postgres://scott:tiger@127.0.0.1/test')
 
-#meta = BoundMetaData('mysql://scott:tiger@localhost/test', poolclass=pool.SingletonThreadPool)
-meta = BoundMetaData('mysql://scott:tiger@localhost/test')
+#meta = MetaData('mysql://scott:tiger@localhost/test', poolclass=pool.SingletonThreadPool)
+meta = MetaData('mysql://scott:tiger@localhost/test')
 foo = Table('foo', meta, 
     Column('id', Integer, primary_key=True),
     Column('data', String(30)))
index d695e824c757989d74ed5daff15b5ccbfee54f2c..7e1172850b5d9a1674c4827ecd78e8457a719b6a 100644 (file)
@@ -6,7 +6,7 @@ class ConstraintTest(testbase.AssertMixin):
     
     def setUp(self):
         global metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         
     def tearDown(self):
         metadata.drop_all()
index 0bc1a6b2e10d8bbad74a240cfe0a8bd3621e85eb..331fac429f4352ea68d129aa8e099cf2c7c20034 100644 (file)
@@ -127,7 +127,7 @@ class DefaultTest(PersistTest):
 class AutoIncrementTest(PersistTest):
     @testbase.supported('postgres', 'mysql')
     def testnonautoincrement(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         nonai_table = Table("aitest", meta, 
             Column('id', Integer, autoincrement=False, primary_key=True),
             Column('data', String(20)))
@@ -147,7 +147,7 @@ class AutoIncrementTest(PersistTest):
             nonai_table.drop()    
 
     def testwithautoincrement(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         table = Table("aitest", meta, 
             Column('id', Integer, primary_key=True),
             Column('data', String(20)))
@@ -159,7 +159,7 @@ class AutoIncrementTest(PersistTest):
             table.drop()    
 
     def testfetchid(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         table = Table("aitest", meta, 
             Column('id', Integer, primary_key=True),
             Column('data', String(20)))
@@ -167,7 +167,7 @@ class AutoIncrementTest(PersistTest):
 
         try:
             # simulate working on a table that doesn't already exist
-            meta2 = BoundMetaData(testbase.db)
+            meta2 = MetaData(testbase.db)
             table2 = Table("aitest", meta2,
                 Column('id', Integer, primary_key=True),
                 Column('data', String(20)))
@@ -189,7 +189,7 @@ class SequenceTest(PersistTest):
     @testbase.supported('postgres', 'oracle')
     def setUpAll(self):
         global cartitems, sometable, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         cartitems = Table("cartitems", metadata, 
             Column("cart_id", Integer, Sequence('cart_id_seq'), primary_key=True),
             Column("description", String(40)),
index 2fe5715c201330992d64cc41fc5c16531c6f8bdd..bf781777096780942f71ae2014fae261618ba08e 100644 (file)
@@ -13,7 +13,7 @@ class QueryTest(PersistTest):
     
     def setUpAll(self):
         global users, addresses, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         users = Table('query_users', metadata,
             Column('user_id', INT, primary_key = True),
             Column('user_name', VARCHAR(20)),
@@ -301,7 +301,7 @@ class QueryTest(PersistTest):
     def test_update_functions(self):
         """test sending functions and SQL expressions to the VALUES and SET clauses of INSERT/UPDATE instances,
         and that column-level defaults get overridden"""
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         t = Table('t1', meta,
             Column('id', Integer, Sequence('t1idseq', optional=True), primary_key=True),
             Column('value', Integer)
@@ -383,7 +383,7 @@ class QueryTest(PersistTest):
     
     @testbase.unsupported('oracle', 'firebird') 
     def test_column_accessor_shadow(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         shadowed = Table('test_shadowed', meta,
                          Column('shadow_id', INT, primary_key = True),
                          Column('shadow_name', VARCHAR(20)),
@@ -413,7 +413,7 @@ class QueryTest(PersistTest):
     
     @testbase.supported('mssql')
     def test_fetchid_trigger(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         t1 = Table('t1', meta,
                 Column('id', Integer, Sequence('fred', 100, 1), primary_key=True),
                 Column('descr', String(200)))
@@ -439,7 +439,7 @@ class QueryTest(PersistTest):
     
     @testbase.supported('mssql')
     def test_insertid_schema(self):
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         con = testbase.db.connect()
         con.execute('create schema paj')
         tbl = Table('test', meta, Column('id', Integer, primary_key=True), schema='paj')
@@ -505,7 +505,7 @@ class CompoundTest(PersistTest):
     different databases."""
     def setUpAll(self):
         global metadata, t1, t2, t3
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         t1 = Table('t1', metadata, 
             Column('col1', Integer, Sequence('t1pkseq'), primary_key=True),
             Column('col2', String(30)),
@@ -619,7 +619,7 @@ class CompoundTest(PersistTest):
 class OperatorTest(PersistTest):
     def setUpAll(self):
         global metadata, flds
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         flds = Table('flds', metadata, 
             Column('idcol', Integer, Sequence('t1pkseq'), primary_key=True),
             Column('intcol', Integer),
index 5259437fc748a03994268f59ce0fbd2b4a12a7db..bc40d52ee3d0b28c511abbb3e040365104e4086c 100644 (file)
@@ -8,7 +8,7 @@ class QuoteTest(PersistTest):
         # such as:  spaces, quote characters, punctuation characters, set up tests for those as
         # well.
         global table1, table2, table3
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         table1 = Table('WorstCase1', metadata,
             Column('lowercase', Integer, primary_key=True),
             Column('UPPERCASE', Integer),
@@ -46,7 +46,7 @@ class QuoteTest(PersistTest):
         assert(res2==[(1,2,3),(2,2,3),(4,3,2)])
         
     def testreflect(self):
-        meta2 = BoundMetaData(testbase.db)
+        meta2 = MetaData(testbase.db)
         t2 = Table('WorstCase2', meta2, autoload=True, quote=True)
         assert t2.c.has_key('MixedCase')
 
@@ -119,7 +119,7 @@ class QuoteTest(PersistTest):
             Column('MixedCase', Integer))
         
         # first test case sensitive tables migrating via tometadata
-        meta = BoundMetaData(testbase.db, case_sensitive=False)
+        meta = MetaData(testbase.db, case_sensitive=False)
         lc_table1 = table1.tometadata(meta)
         lc_table2 = table2.tometadata(meta)
         assert lc_table1.case_sensitive is False
index 95cab898c3cd223deef184ebe2b2ff2132774a17..df6a2a883f6b6454f2b072fa41574b7c191cc9e1 100644 (file)
@@ -4,7 +4,7 @@ import testbase
 class FoundRowsTest(testbase.AssertMixin):
     """tests rowcount functionality"""
     def setUpAll(self):
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
 
         global employees_table
 
index c3dff527210b5cf7ba1dfad7747c1a522124176f..cf5ce1f1ac49f266ee70ed1aba4423b8ecc0145b 100644 (file)
@@ -360,7 +360,7 @@ class DateTest(AssertMixin):
 class IntervalTest(AssertMixin):
     def setUpAll(self):
         global interval_table, metadata
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         interval_table = Table("intervaltable", metadata, 
             Column("id", Integer, primary_key=True),
             Column("interval", Interval),
@@ -378,7 +378,7 @@ class IntervalTest(AssertMixin):
 class BooleanTest(AssertMixin):
     def setUpAll(self):
         global bool_table
-        metadata = BoundMetaData(testbase.db)
+        metadata = MetaData(testbase.db)
         bool_table = Table('booltest', metadata, 
             Column('id', Integer, primary_key=True),
             Column('value', Boolean))
index 65a7cce0d095df386d9a9687a10f2a4e4b45bcb1..7ce42bf4ca5262b8ebd362f03fadb7fe98ee4042 100644 (file)
@@ -39,7 +39,7 @@ class UnicodeSchemaTest(testbase.PersistTest):
         t1.insert().execute({u'méil':2, u'éXXm':7})
         t2.insert().execute({'a':2, 'b':2})
 
-        meta = BoundMetaData(testbase.db)
+        meta = MetaData(testbase.db)
         tt1 = Table(t1.name, meta, autoload=True)
         tt2 = Table(t2.name, meta, autoload=True)
         tt1.insert().execute({u'méil':1, u'éXXm':5})
@@ -76,4 +76,4 @@ class UnicodeSchemaTest(testbase.PersistTest):
         assert new_a1.t2s[0].a == b1.a
         
 if __name__ == '__main__':
-    testbase.main()
\ No newline at end of file
+    testbase.main()
index 8f00ea6acd4b1fe88185fce7affa76ead607b100..8e337999c3c3fa17a6d6051fc82d712e03555c68 100644 (file)
@@ -6,7 +6,7 @@ import testbase
 
 ECHO = testbase.echo
 db = testbase.db
-metadata = BoundMetaData(db)
+metadata = MetaData(db)
 
 users = Table('users', metadata,
     Column('user_id', Integer, Sequence('user_id_seq', optional=True), primary_key = True),
index fab8da9e421dc383a6813a92d0cc2c3b4533f36c..335a6953ddc0d6d856ccfcd649e789467598fa73 100644 (file)
@@ -5,7 +5,7 @@ import sqlalchemy
 from sqlalchemy import sql, engine, pool
 import sqlalchemy.engine.base as base
 import optparse
-from sqlalchemy.schema import BoundMetaData
+from sqlalchemy.schema import MetaData
 from sqlalchemy.orm import clear_mappers
 
 db = None
@@ -157,7 +157,7 @@ firebird=firebird://sysdba:s@localhost/tmp/test.fdb
     if options.log_debug is not None:
         for elem in options.log_debug:
             logging.getLogger(elem).setLevel(logging.DEBUG)
-    metadata = sqlalchemy.BoundMetaData(db)
+    metadata = sqlalchemy.MetaData(db)
     
 def unsupported(*dbs):
     """a decorator that marks a test as unsupported by one or more database implementations"""
@@ -264,7 +264,7 @@ class ORMTest(AssertMixin):
     keep_data = False
     def setUpAll(self):
         global metadata
-        metadata = BoundMetaData(db)
+        metadata = MetaData(db)
         self.define_tables(metadata)
         metadata.create_all()
     def define_tables(self, metadata):