From: Mike Bayer Date: Sun, 23 Oct 2005 17:31:32 +0000 (+0000) Subject: (no commit message) X-Git-Tag: rel_0_1_0~456 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1c320a34432d3deb96b30e978a88b71e6591316;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git --- diff --git a/examples/adjacencytree/tables.py b/examples/adjacencytree/tables.py index 364ddd7370..7dad950cc7 100644 --- a/examples/adjacencytree/tables.py +++ b/examples/adjacencytree/tables.py @@ -4,7 +4,7 @@ import os #engine = sqlalchemy.engine.create_engine('sqlite', ':memory:', {}, echo = True) #engine = sqlalchemy.engine.create_engine('postgres', {'database':'test', 'host':'127.0.0.1', 'user':'scott', 'password':'tiger'}, echo=True) -db = sqlalchemy.engine.create_engine('oracle', {'dsn':os.environ['DSN'], 'user':os.environ['USER'], 'password':os.environ['PASSWORD']}, echo=True) +engine = sqlalchemy.engine.create_engine('oracle', {'dsn':os.environ['DSN'], 'user':os.environ['USER'], 'password':os.environ['PASSWORD']}, echo=True) """create the treenodes table. This is ia basic adjacency list model table. @@ -29,7 +29,7 @@ print "\n\n\n----------------------------" print "Creating Tree Table:" print "----------------------------" -treedata.create() -trees.create() +#treedata.create() +#trees.create() diff --git a/lib/sqlalchemy/databases/oracle.py b/lib/sqlalchemy/databases/oracle.py index 57cb8eba40..8c71ef4ad2 100644 --- a/lib/sqlalchemy/databases/oracle.py +++ b/lib/sqlalchemy/databases/oracle.py @@ -37,7 +37,7 @@ class OracleInteger(sqltypes.Integer): return "INTEGER" class OracleDateTime(sqltypes.DateTime): def get_col_spec(self): - return "TIMESTAMP" + return "DATE" class OracleText(sqltypes.TEXT): def get_col_spec(self): return "TEXT" @@ -95,36 +95,36 @@ class OracleSQLEngine(ansisql.ANSISQLEngine): def schemagenerator(self, proxy, **params): return OracleSchemaGenerator(proxy, **params) + def schemadropper(self, proxy, **params): + return OracleSchemaDropper(proxy, **params) def reflecttable(self, table): raise "not implemented" def last_inserted_ids(self): - table = self.context.last_inserted_table - if self.context.lastrowid is not None and table is not None and len(table.primary_keys): - row = sql.select(table.primary_keys, table.rowid_column == self.context.lastrowid).execute().fetchone() - return [v for v in row] - else: - return None + return self.context.last_inserted_ids def pre_exec(self, connection, cursor, statement, parameters, echo = None, compiled = None, **kwargs): # if a sequence was explicitly defined we do it here if compiled is None: return if getattr(compiled, "isinsert", False): + last_inserted_ids = [] for primary_key in compiled.statement.table.primary_keys: - if primary_key.sequence is not None and not primary_key.sequence.optional and parameters[primary_key.key] is None: + if not parameters.has_key(primary_key.key) or parameters[primary_key.key] is None: + if primary_key.sequence is None: + raise "Oracle primary key columns require schema.Sequence to create ids" if echo is True or self.echo: self.log("select %s.nextval from dual" % primary_key.sequence.name) cursor.execute("select %s.nextval from dual" % primary_key.sequence.name) newid = cursor.fetchone()[0] parameters[primary_key.key] = newid + if compiled.statement.parameters is not None: + compiled.statement.parameters[primary_key.key] = bindparam(primary_key.key) + last_inserted_ids.append(parameters[primary_key.key]) + self.context.last_inserted_ids = last_inserted_ids def post_exec(self, connection, cursor, statement, parameters, echo = None, compiled = None, **kwargs): - if compiled is None: return - if getattr(compiled, "isinsert", False): - table = compiled.statement.table - self.context.last_inserted_table = table - self.context.lastrowid = cursor.lastrowid + pass def _executemany(self, c, statement, parameters): rowcount = 0 @@ -192,6 +192,11 @@ class OracleSchemaGenerator(ansisql.ANSISchemaGenerator): def visit_sequence(self, sequence): self.append("CREATE SEQUENCE %s" % sequence.name) - print "HI" self.execute() - print "THERE" + +class OracleSchemaDropper(ansisql.ANSISchemaDropper): + def visit_sequence(self, sequence): + if not sequence.optional: + self.append("DROP SEQUENCE %s" % sequence.name) + self.execute() + diff --git a/lib/sqlalchemy/engine.py b/lib/sqlalchemy/engine.py index 9957fe315e..dd27558974 100644 --- a/lib/sqlalchemy/engine.py +++ b/lib/sqlalchemy/engine.py @@ -195,9 +195,6 @@ class SQLEngine(schema.SchemaEngine): def execute(self, statement, parameters, connection = None, echo = None, typemap = None, commit=False, **kwargs): if parameters is None: parameters = {} - if echo is True or self.echo: - self.log(statement) - self.log(repr(parameters)) if connection is None: connection = self.connection() @@ -206,6 +203,11 @@ class SQLEngine(schema.SchemaEngine): c = connection.cursor() self.pre_exec(connection, c, statement, parameters, echo = echo, **kwargs) + + if echo is True or self.echo: + self.log(statement) + self.log(repr(parameters)) + if isinstance(parameters, list): self._executemany(c, statement, parameters) else: