From cc0dcfc64405419d95e87c8dcc612bd441a8d6de Mon Sep 17 00:00:00 2001
From: Shai Berger <shai@platonix.com>
Date: Mon, 21 Oct 2013 18:12:48 +0300
Subject: [PATCH] Fixed #13245: Explained Oracle's behavior w.r.t db_table and
 how to prevent table-name truncation

Thanks russellm & timo for discussion, and timo for review.

Backported from master 317040a73b77be8f8210801793b2ce6d1a69301e
---
 docs/ref/databases.txt      | 16 ++++++++++++++++
 docs/ref/models/options.txt | 12 ++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/docs/ref/databases.txt b/docs/ref/databases.txt
index f4656adf96..cd6c50903a 100644
--- a/docs/ref/databases.txt
+++ b/docs/ref/databases.txt
@@ -699,6 +699,22 @@ Naming issues
 Oracle imposes a name length limit of 30 characters. To accommodate this, the
 backend truncates database identifiers to fit, replacing the final four
 characters of the truncated name with a repeatable MD5 hash value.
+Additionally, the backend turns database identifiers to all-uppercase.
+
+To prevent these transformations (this is usually required only when dealing
+with legacy databases or accessing tables which belong to other users), use
+a quoted name as the value for ``db_table``::
+
+    class LegacyModel(models.Model):
+        class Meta:
+       	    db_table = '"name_left_in_lowercase"'
+
+    class ForeignModel(models.Model):
+        class Meta:
+       	    db_table = '"OTHER_USER"."NAME_ONLY_SEEMS_OVER_30"'
+
+Quoted names can also be used with Django's other supported database 
+backends; except for Oracle, however, the quotes have no effect.
 
 When running syncdb, an ``ORA-06552`` error may be encountered if
 certain Oracle keywords are used as the name of a model field or the
diff --git a/docs/ref/models/options.txt b/docs/ref/models/options.txt
index c2a3430c2b..e2a502cf25 100644
--- a/docs/ref/models/options.txt
+++ b/docs/ref/models/options.txt
@@ -67,6 +67,18 @@ Django quotes column and table names behind the scenes.
     the table name via ``db_table``, particularly if you are using the MySQL
     backend. See the :ref:`MySQL notes <mysql-notes>` for more details.
 
+.. admonition:: Table name quoting for Oracle
+
+   In order to to meet the 30-char limitation Oracle has on table names,
+   and match the usual conventions for Oracle databases, Django may shorten
+   table names and turn them all-uppercase. To prevent such transformations,
+   use a quoted name as the value for ``db_table``::
+
+       db_table = '"name_left_in_lowercase"'
+
+   Such quoted names can also be used with Django's other supported database 
+   backends; except for Oracle, however, the quotes have no effect. See the
+   :ref:`Oracle notes <oracle-notes>` for more details.
 
 ``db_tablespace``
 -----------------