summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/dialects/firebird/base.py6
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py7
-rw-r--r--lib/sqlalchemy/engine/reflection.py4
-rw-r--r--lib/sqlalchemy/test/requires.py9
4 files changed, 21 insertions, 5 deletions
diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py
index aab217450..e4a2c568a 100644
--- a/lib/sqlalchemy/dialects/firebird/base.py
+++ b/lib/sqlalchemy/dialects/firebird/base.py
@@ -484,7 +484,8 @@ class FBDialect(default.DefaultDialect):
if row is None:
break
name = self.normalize_name(row['fname'])
-
+ orig_colname = row['fname']
+
# get the data type
colspec = row['ftype'].rstrip()
coltype = self.ischema_names.get(colspec)
@@ -523,6 +524,9 @@ class FBDialect(default.DefaultDialect):
'nullable' : not bool(row['null_flag']),
'default' : defvalue
}
+
+ if orig_colname.lower() == orig_colname:
+ col_d['quote'] = True
# if the PK is a single field, try to see if its linked to
# a sequence thru a trigger
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index 926796961..bb9ed3250 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -718,8 +718,8 @@ class OracleDialect(default.DefaultDialect):
table_name=table_name, owner=schema)
for row in c:
- (colname, coltype, length, precision, scale, nullable, default) = \
- (self.normalize_name(row[0]), row[1], row[2], row[3], row[4], row[5]=='Y', row[6])
+ (colname, orig_colname, coltype, length, precision, scale, nullable, default) = \
+ (self.normalize_name(row[0]), row[0], row[1], row[2], row[3], row[4], row[5]=='Y', row[6])
if coltype == 'NUMBER' :
coltype = NUMBER(precision, scale)
@@ -740,6 +740,9 @@ class OracleDialect(default.DefaultDialect):
'nullable': nullable,
'default': default,
}
+ if orig_colname.lower() == orig_colname:
+ cdict['quote'] = True
+
columns.append(cdict)
return columns
diff --git a/lib/sqlalchemy/engine/reflection.py b/lib/sqlalchemy/engine/reflection.py
index 0d49b38bc..57f2205c1 100644
--- a/lib/sqlalchemy/engine/reflection.py
+++ b/lib/sqlalchemy/engine/reflection.py
@@ -292,7 +292,9 @@ class Inspector(object):
}
if 'autoincrement' in col_d:
col_kw['autoincrement'] = col_d['autoincrement']
-
+ if 'quote' in col_d:
+ col_kw['quote'] = col_d['quote']
+
colargs = []
if col_d.get('default') is not None:
# the "default" value is assumed to be a literal SQL expression,
diff --git a/lib/sqlalchemy/test/requires.py b/lib/sqlalchemy/test/requires.py
index be6ae9594..4f6c81a20 100644
--- a/lib/sqlalchemy/test/requires.py
+++ b/lib/sqlalchemy/test/requires.py
@@ -9,8 +9,10 @@ from testing import \
_block_unconditionally as no_support, \
_chain_decorators_on, \
exclude, \
- emits_warning_on
+ emits_warning_on,\
+ skip_if
+import testing
def deferrable_constraints(fn):
"""Target database must support derferable constraints."""
@@ -106,6 +108,11 @@ def savepoints(fn):
exclude('mysql', '<', (5, 0, 3), 'not supported by database'),
)
+def denormalized_names(fn):
+ """Target database must have 'denormalized', i.e. UPPERCASE as case insensitive names."""
+
+ return skip_if(lambda: not testing.db.dialect.requires_name_normalize)(fn)
+
def schemas(fn):
"""Target database must support external schemas, and have one named 'test_schema'."""