]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
table supports per-engine-type options, ansisql allows engines
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 5 Feb 2006 23:45:07 +0000 (23:45 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 5 Feb 2006 23:45:07 +0000 (23:45 +0000)
to add a "post table create" string
mysql gets mysql_engine argument
InnoDB set as default in engines test

lib/sqlalchemy/ansisql.py
lib/sqlalchemy/databases/mysql.py
lib/sqlalchemy/engine.py
lib/sqlalchemy/schema.py
test/engines.py

index fc4af5198f7e11429905b888da662c630fc75d4f..9688cb67bf1e1627f41175bb544440c70294472a 100644 (file)
@@ -515,9 +515,12 @@ class ANSISchemaGenerator(sqlalchemy.engine.SchemaIterator):
             self.append(", \n")
             self.append("\tPRIMARY KEY (%s)" % string.join([c.name for c in pks],', '))
                     
-        self.append("\n)\n\n")
+        self.append("\n)%s\n\n" % self.post_create_table(table))
         self.execute()
 
+    def post_create_table(self, table):
+        return ''
+
     def visit_column(self, column):
         pass
     
index 5dd89d97ef2a1c4a92c9f870cbe1729060f9f6bf..569ba6869ca0f88d3a54170fb61df087c3017d5a 100644 (file)
@@ -92,7 +92,6 @@ ischema_names = {
     'blob' : MSBinary,
 }
 
-
 def engine(opts, **params):
     return MySQLEngine(opts, **params)
 
@@ -125,9 +124,10 @@ class MySQLEngine(ansisql.ANSISQLEngine):
     def supports_sane_rowcount(self):
         return False
 
-    def tableimpl(self, table):
+    def tableimpl(self, table, **kwargs):
         """returns a new sql.TableImpl object to correspond to the given Table object."""
-        return MySQLTableImpl(table)
+        mysql_engine = kwargs.pop('mysql_engine', None)
+        return MySQLTableImpl(table, mysql_engine=mysql_engine)
 
     def compiler(self, statement, bindparams, **kwargs):
         return MySQLCompiler(self, statement, bindparams, **kwargs)
@@ -189,7 +189,9 @@ class MySQLTableImpl(sql.TableImpl):
     """attached to a schema.Table to provide it with a Selectable interface
     as well as other functions
     """
-    pass
+    def __init__(self, table, mysql_engine=None):
+        super(MySQLTableImpl, self).__init__(table)
+        self.mysql_engine = mysql_engine
 
 class MySQLCompiler(ansisql.ANSICompiler):
     def limit_clause(self, select):
@@ -218,3 +220,9 @@ class MySQLSchemaGenerator(ansisql.ANSISchemaGenerator):
             colspec += ", FOREIGN KEY (%s) REFERENCES %s(%s)" % (column.name, column.column.foreign_key.column.table.name, column.column.foreign_key.column.name) 
         return colspec
 
+    def post_create_table(self, table):
+        if table.mysql_engine is not None:
+            return " ENGINE=%s" % table.mysql_engine
+        else:
+            return ""
+
index b00d97de0ba475a9e58c409f033400e13feed1f6..8bb4767d95372d1a4e3e2494ef74c934c8976a1a 100644 (file)
@@ -318,7 +318,7 @@ class SQLEngine(schema.SchemaEngine):
         """given a Table object, reflects its columns and properties from the database."""
         raise NotImplementedError()
 
-    def tableimpl(self, table):
+    def tableimpl(self, table, **kwargs):
         """returns a new sql.TableImpl object to correspond to the given Table object.
         A TableImpl provides SQL statement builder operations on a Table metadata object, 
         and a subclass of this object may be provided by a SQLEngine subclass to provide
index de672dc9ee684e357c4a36c18eb4ca2508c6d730..01b7c7a1138a987ed4afd7c4f3dd669d89d89f66 100644 (file)
@@ -139,14 +139,12 @@ class Table(SchemaItem):
         self.foreign_keys = []
         self.primary_key = []
         self.engine = engine
-        self._impl = self.engine.tableimpl(self)
         self.schema = kwargs.pop('schema', None)
+        self._impl = self.engine.tableimpl(self, **kwargs)
         if self.schema is not None:
             self.fullname = "%s.%s" % (self.schema, self.name)
         else:
             self.fullname = self.name
-        if len(kwargs):
-            raise "Unknown arguments passed to Table: " + repr(kwargs.keys())
 
     def __repr__(self):
         return "Table(%s)" % string.join(
index 25bfb3eac05bc2cea07328b72480b3b7f1ae5fd1..f53dd35de643d301ae37a2a07ef43d5d5d4d867c 100644 (file)
@@ -26,13 +26,14 @@ class EngineTest(PersistTest):
             Column('test7', String),
             Column('test8', Binary),
             Column('test9', Binary(100)),
-            
+            mysql_engine='InnoDB'
         )
 
         addresses = Table('engine_email_addresses', testbase.db,
             Column('address_id', Integer, primary_key = True),
             Column('remote_user_id', Integer, ForeignKey(users.c.user_id)),
             Column('email_address', String(20)),
+            mysql_engine='InnoDB'
         )
 
         print repr(users)