summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/compiler.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-01-28 15:20:21 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2012-01-28 15:20:21 -0500
commit09553dc90f4a95b314994b48068b046de1413104 (patch)
tree4103d05a99beb0ca07dea7def9aa0514809f10a1 /lib/sqlalchemy/sql/compiler.py
parent45e6875752fcaf7d3a60907959ed9d154cca0d5d (diff)
downloadsqlalchemy-09553dc90f4a95b314994b48068b046de1413104.tar.gz
- [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]
Diffstat (limited to 'lib/sqlalchemy/sql/compiler.py')
-rw-r--r--lib/sqlalchemy/sql/compiler.py43
1 files changed, 30 insertions, 13 deletions
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: