]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
(no commit message)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Oct 2005 17:31:32 +0000 (17:31 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 23 Oct 2005 17:31:32 +0000 (17:31 +0000)
examples/adjacencytree/tables.py
lib/sqlalchemy/databases/oracle.py
lib/sqlalchemy/engine.py

index 364ddd7370c3f167245cdb8c608dc442ecfb1e8f..7dad950cc74453bf43874c217e7ce82363826407 100644 (file)
@@ -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()
 
 
index 57cb8eba40fa9b7347265de2a8a6cd083cddca3e..8c71ef4ad2049029b3e92efc49afd034fc888092 100644 (file)
@@ -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()
+
index 9957fe315e1f6952f9a3385089cc745eeb9f82a7..dd27558974421d2bec1794b9920be41521dd5fba 100644 (file)
@@ -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: