diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/dialects/firebird/base.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/oracle/base.py | 7 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/reflection.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/test/requires.py | 9 |
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'.""" |
