From 09553dc90f4a95b314994b48068b046de1413104 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 28 Jan 2012 15:20:21 -0500 Subject: - [feature] Dialect-specific compilers now raise CompileException for all type/statement compilation issues, instead of InvalidRequestError or ArgumentError. The DDL for CREATE TABLE will re-raise CompileExceptions to include table/column information for the problematic column. [ticket:2361] --- lib/sqlalchemy/sql/compiler.py | 43 +++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) (limited to 'lib/sqlalchemy/sql') diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py index 93e2473d9..2690dd896 100644 --- a/lib/sqlalchemy/sql/compiler.py +++ b/lib/sqlalchemy/sql/compiler.py @@ -23,6 +23,7 @@ To generate user-defined SQL strings, see """ import re +import sys from sqlalchemy import schema, engine, util, exc from sqlalchemy.sql import operators, functions, util as sql_util, \ visitors @@ -1379,19 +1380,35 @@ class DDLCompiler(engine.Compiled): # if only one primary key, specify it along with the column first_pk = False for column in table.columns: - text += separator - separator = ", \n" - text += "\t" + self.get_column_specification( - column, - first_pk=column.primary_key and \ - not first_pk - ) - if column.primary_key: - first_pk = True - const = " ".join(self.process(constraint) \ - for constraint in column.constraints) - if const: - text += " " + const + try: + text += separator + separator = ", \n" + text += "\t" + self.get_column_specification( + column, + first_pk=column.primary_key and \ + not first_pk + ) + if column.primary_key: + first_pk = True + const = " ".join(self.process(constraint) \ + for constraint in column.constraints) + if const: + text += " " + const + except exc.CompileError, ce: + # Py3K + #raise exc.CompileError("(in table '%s', column '%s'): %s" + # % ( + # table.description, + # column.name, + # ce.args[0] + # )) from ce + # Py2K + raise exc.CompileError("(in table '%s', column '%s'): %s" + % ( + table.description, + column.name, + ce.args[0] + )), None, sys.exc_info()[2] const = self.create_table_constraints(table) if const: -- cgit v1.2.1