summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-08-27 20:43:22 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-08-27 20:43:22 -0400
commit031ef0807838842a827135dbace760da7aec215e (patch)
treea677555dd6f39e64da0880035a378ed4323c8e82 /doc
parent99732dd29bd69a4a3808bfaa86c8e378d7a5e28b (diff)
downloadsqlalchemy-031ef0807838842a827135dbace760da7aec215e.tar.gz
- A rework to the way that "quoted" identifiers are handled, in that
instead of relying upon various ``quote=True`` flags being passed around, these flags are converted into rich string objects with quoting information included at the point at which they are passed to common schema constructs like :class:`.Table`, :class:`.Column`, etc. This solves the issue of various methods that don't correctly honor the "quote" flag such as :meth:`.Engine.has_table` and related methods. The :class:`.quoted_name` object is a string subclass that can also be used explicitly if needed; the object will hold onto the quoting preferences passed and will also bypass the "name normalization" performed by dialects that standardize on uppercase symbols, such as Oracle, Firebird and DB2. The upshot is that the "uppercase" backends can now work with force-quoted names, such as lowercase-quoted names and new reserved words. [ticket:2812]
Diffstat (limited to 'doc')
-rw-r--r--doc/build/changelog/changelog_09.rst22
-rw-r--r--doc/build/changelog/migration_09.rst28
-rw-r--r--doc/build/core/metadata.rst5
-rw-r--r--doc/build/core/reflection.rst4
-rw-r--r--doc/build/core/sqlelement.rst2
5 files changed, 59 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_09.rst b/doc/build/changelog/changelog_09.rst
index be7a7fc7c..b0492e897 100644
--- a/doc/build/changelog/changelog_09.rst
+++ b/doc/build/changelog/changelog_09.rst
@@ -7,6 +7,28 @@
:version: 0.9.0
.. change::
+ :tags: bug, sql
+ :tickets: 2812
+
+ A rework to the way that "quoted" identifiers are handled, in that
+ instead of relying upon various ``quote=True`` flags being passed around,
+ these flags are converted into rich string objects with quoting information
+ included at the point at which they are passed to common schema constructs
+ like :class:`.Table`, :class:`.Column`, etc. This solves the issue
+ of various methods that don't correctly honor the "quote" flag such
+ as :meth:`.Engine.has_table` and related methods. The :class:`.quoted_name`
+ object is a string subclass that can also be used explicitly if needed;
+ the object will hold onto the quoting preferences passed and will
+ also bypass the "name normalization" performed by dialects that
+ standardize on uppercase symbols, such as Oracle, Firebird and DB2.
+ The upshot is that the "uppercase" backends can now work with force-quoted
+ names, such as lowercase-quoted names and new reserved words.
+
+ .. seealso::
+
+ :ref:`change_2812`
+
+ .. change::
:tags: feature, orm
:tickets: 2793
diff --git a/doc/build/changelog/migration_09.rst b/doc/build/changelog/migration_09.rst
index b8328ce7b..82314cce4 100644
--- a/doc/build/changelog/migration_09.rst
+++ b/doc/build/changelog/migration_09.rst
@@ -292,6 +292,34 @@ against ``b_value`` directly.
:ticket:`2751`
+.. _change_2812:
+
+Schema identifiers now carry along their own quoting information
+---------------------------------------------------------------------
+
+This change simplifies the Core's usage of so-called "quote" flags, such
+as the ``quote`` flag passed to :class:`.Table` and :class:`.Column`. The flag
+is now internalized within the string name itself, which is now represented
+as an instance of :class:`.quoted_name`, a string subclass. The
+:class:`.IdentifierPreparer` now relies solely on the quoting preferences
+reported by the :class:`.quoted_name` object rather than checking for any
+explicit ``quote`` flags in most cases. The issue resolved here includes
+that various case-sensitive methods such as :meth:`.Engine.has_table` as well
+as similar methods within dialects now function with explicitly quoted names,
+without the need to complicate or introduce backwards-incompatible changes
+to those APIs (many of which are 3rd party) with the details of quoting flags -
+in particular, a wider range of identifiers now function correctly with the
+so-called "uppercase" backends like Oracle, Firebird, and DB2 (backends that
+store and report upon table and column names using all uppercase for case
+insensitive names).
+
+The :class:`.quoted_name` object is used internally as needed; however if
+other keywords require fixed quoting preferences, the class is available
+publically.
+
+:ticket:`2812`
+
+
New Features
============
diff --git a/doc/build/core/metadata.rst b/doc/build/core/metadata.rst
index e4b50f63a..d6fc8c6af 100644
--- a/doc/build/core/metadata.rst
+++ b/doc/build/core/metadata.rst
@@ -1,12 +1,15 @@
.. _metadata_toplevel:
+
.. _metadata_describing_toplevel:
+
.. _metadata_describing:
-.. module:: sqlalchemy.schema
==================================
Describing Databases with MetaData
==================================
+.. module:: sqlalchemy.schema
+
This section discusses the fundamental :class:`.Table`, :class:`.Column`
and :class:`.MetaData` objects.
diff --git a/doc/build/core/reflection.rst b/doc/build/core/reflection.rst
index 17ff0b99e..2e9a2de64 100644
--- a/doc/build/core/reflection.rst
+++ b/doc/build/core/reflection.rst
@@ -112,6 +112,8 @@ object's dictionary of tables::
for table in reversed(meta.sorted_tables):
someengine.execute(table.delete())
+.. _metadata_reflection_inspector:
+
Fine Grained Reflection with Inspector
--------------------------------------
@@ -128,5 +130,5 @@ database is also available. This is known as the "Inspector"::
.. autoclass:: sqlalchemy.engine.reflection.Inspector
:members:
:undoc-members:
-
+
diff --git a/doc/build/core/sqlelement.rst b/doc/build/core/sqlelement.rst
index 953f48c98..0676f18d0 100644
--- a/doc/build/core/sqlelement.rst
+++ b/doc/build/core/sqlelement.rst
@@ -105,6 +105,8 @@ used to construct any kind of typed SQL expression.
:members:
:special-members:
+.. autoclass:: sqlalchemy.sql.elements.quoted_name
+
.. autoclass:: UnaryExpression
:members: