]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
add example for changing TypeEngine compilation
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 7 Apr 2010 20:21:01 +0000 (16:21 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 7 Apr 2010 20:21:01 +0000 (16:21 -0400)
lib/sqlalchemy/ext/compiler.py

index 20d6aa05f814f88d71e33f95ad697489ad829ce4..68c434fd916819a0c6be6ec02231eca2f3a11bb0 100644 (file)
@@ -119,6 +119,23 @@ overriding routine and cause an endless loop.   Such as, to add "prefix" to all
 
 The above compiler will prefix all INSERT statements with "some prefix" when compiled.
 
+Changing Compilation of Types
+=============================
+
+``compiler`` works for types, too, such as below where we implement the MS-SQL specific 'max' keyword for ``String``/``VARCHAR``::
+
+    @compiles(String, 'mssql')
+    @compiles(VARCHAR, 'mssql')
+    def compile_varchar(element, compiler, **kw):
+        if element.length == 'max':
+            return "VARCHAR('max')"
+        else:
+            return compiler.visit_VARCHAR(element, **kw)
+    
+    foo = Table('foo', metadata,
+        Column('data', VARCHAR('max'))
+    )
+
 Subclassing Guidelines
 ======================
 
@@ -175,7 +192,7 @@ A big part of using the compiler extension is subclassing SQLAlchemy expression
   used with any expression class that represents a "standalone" SQL statement that
   can be passed directly to an ``execute()`` method.  It is already implicit 
   within ``DDLElement`` and ``FunctionElement``.
-  
+
 """
 
 def compiles(class_, *specs):