summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-03-04 19:26:23 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-03-04 19:26:23 +0000
commit7c0ff2178bb338f1792a6efb961effcde79eef8b (patch)
treea3a9093585fb7ecc28981e8be95530f3cd6fd5d9 /lib/sqlalchemy
parent7ad8cc9420f796dfcafbc84dc06453fc3eb51abe (diff)
downloadsqlalchemy-7c0ff2178bb338f1792a6efb961effcde79eef8b.tar.gz
making sequences, column defaults independently executeable
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/databases/postgres.py4
-rw-r--r--lib/sqlalchemy/engine.py6
-rw-r--r--lib/sqlalchemy/schema.py19
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)