summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql/base.py
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2020-03-30 13:06:04 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2020-03-30 13:06:04 +0000
commit73f7f85d9da7ebe8811d180f113714bfd8283662 (patch)
treed47758d99e82d1f773670a3986251cab5961f023 /lib/sqlalchemy/sql/base.py
parent7b42cb5669578cec014ece650ce3d2c6051400f0 (diff)
parenta65d5c250e9fd7090311ef12f28d7d959c6c738e (diff)
downloadsqlalchemy-73f7f85d9da7ebe8811d180f113714bfd8283662.tar.gz
Merge "Add a third labeling mode for SELECT statements"
Diffstat (limited to 'lib/sqlalchemy/sql/base.py')
-rw-r--r--lib/sqlalchemy/sql/base.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql/base.py b/lib/sqlalchemy/sql/base.py
index 682ef891c..974ca6ddb 100644
--- a/lib/sqlalchemy/sql/base.py
+++ b/lib/sqlalchemy/sql/base.py
@@ -638,6 +638,27 @@ class Executable(Generative):
return None
+class prefix_anon_map(dict):
+ """A map that creates new keys for missing key access.
+
+ Considers keys of the form "<ident> <name>" to produce
+ new symbols "<name>_<index>", where "index" is an incrementing integer
+ corresponding to <name>.
+
+ Inlines the approach taken by :class:`sqlalchemy.util.PopulateDict` which
+ is otherwise usually used for this type of operation.
+
+ """
+
+ def __missing__(self, key):
+ (ident, derived) = key.split(" ", 1)
+ anonymous_counter = self.get(derived, 1)
+ self[derived] = anonymous_counter + 1
+ value = derived + "_" + str(anonymous_counter)
+ self[key] = value
+ return value
+
+
class SchemaEventTarget(object):
"""Base class for elements that are the targets of :class:`.DDLEvents`
events.