diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-04 19:26:23 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-03-04 19:26:23 +0000 |
| commit | 7c0ff2178bb338f1792a6efb961effcde79eef8b (patch) | |
| tree | a3a9093585fb7ecc28981e8be95530f3cd6fd5d9 /lib/sqlalchemy | |
| parent | 7ad8cc9420f796dfcafbc84dc06453fc3eb51abe (diff) | |
| download | sqlalchemy-7c0ff2178bb338f1792a6efb961effcde79eef8b.tar.gz | |
making sequences, column defaults independently executeable
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/schema.py | 19 |
3 files changed, 20 insertions, 9 deletions
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 592bac79c..105fe7a76 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -218,7 +218,7 @@ class PGSQLEngine(ansisql.ANSISQLEngine): def schemadropper(self, **params): return PGSchemaDropper(self, **params) - def defaultrunner(self, proxy): + def defaultrunner(self, proxy=None): return PGDefaultRunner(self, proxy) def get_default_schema_name(self): @@ -346,7 +346,7 @@ class PGSchemaDropper(ansisql.ANSISchemaDropper): self.execute() class PGDefaultRunner(ansisql.ANSIDefaultRunner): - def get_column_default(self, column): + def get_column_default(self, column, isinsert=True): if column.primary_key: # passive defaults on primary keys have to be overridden if isinstance(column.default, schema.PassiveDefault): diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index d07dd5734..0f6b65909 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -265,7 +265,7 @@ class SQLEngine(schema.SchemaEngine): """ raise NotImplementedError() - def defaultrunner(self, proxy): + def defaultrunner(self, proxy=None): """Returns a schema.SchemaVisitor instance that can execute the default values on a column. The base class for this visitor is the DefaultRunner class inside this module. This visitor will typically only receive schema.DefaultGenerator schema objects. The given @@ -275,7 +275,7 @@ class SQLEngine(schema.SchemaEngine): defaultrunner is called within the context of the execute_compiled() method.""" return DefaultRunner(self, proxy) - + def compiler(self, statement, parameters): """returns a sql.ClauseVisitor which will produce a string representation of the given ClauseElement and parameter dictionary. This object is usually a subclass of @@ -529,7 +529,7 @@ class SQLEngine(schema.SchemaEngine): self.post_exec(proxy, compiled, parameters, **kwargs) return ResultProxy(cursor, self, typemap=compiled.typemap) - def execute(self, statement, parameters, connection=None, cursor=None, echo=None, typemap=None, commit=False, return_raw=False, **kwargs): + def execute(self, statement, parameters=None, connection=None, cursor=None, echo=None, typemap=None, commit=False, return_raw=False, **kwargs): """executes the given string-based SQL statement with the given parameters. The parameters can be a dictionary or a list, or a list of dictionaries or lists, depending diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index a11a1539e..17e421f22 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -434,11 +434,12 @@ class ForeignKey(SchemaItem): self.parent.table.foreign_keys.append(self) class DefaultGenerator(SchemaItem): - """Base class for column "default" values, which can be a plain default - or a Sequence.""" + """Base class for column "default" values.""" def _set_parent(self, column): self.column = column self.column.default = self + def execute(self): + return self.accept_schema_visitor(self.engine.defaultrunner(self.engine.execute)) def __repr__(self): return "DefaultGenerator()" @@ -464,17 +465,27 @@ class ColumnDefault(DefaultGenerator): class Sequence(DefaultGenerator): """represents a sequence, which applies to Oracle and Postgres databases.""" - def __init__(self, name, start = None, increment = None, optional=False): + def __init__(self, name, start = None, increment = None, optional=False, engine=None): self.name = name self.start = start self.increment = increment self.optional=optional + self.engine = engine def __repr__(self): return "Sequence(%s)" % string.join( [repr(self.name)] + ["%s=%s" % (k, repr(getattr(self, k))) for k in ['start', 'increment', 'optional']] , ',') - + def _set_parent(self, column): + super(Sequence, self)._set_parent(column) + column.sequence = self + if self.engine is None: + self.engine = column.table.engine + def create(self): + self.engine.create(self) + return self + def drop(self): + self.engine.drop(self) def accept_schema_visitor(self, visitor): """calls the visit_seauence method on the given visitor.""" return visitor.visit_sequence(self) |
