- changed cache decorator call on default_schema_name call to a connection.info specific one
from array import array as _array
from sqlalchemy import exceptions, logging, schema, sql, util
+from sqlalchemy.pool import connection_cache_decorator
from sqlalchemy.sql import operators as sql_operators
from sqlalchemy.sql import functions as sql_functions
from sqlalchemy.sql import compiler
return False
def get_default_schema_name(self, connection):
- try:
- return connection.info['default_schema']
- except KeyError:
- connection.info['default_schema'] = schema = \
- connection.execute('SELECT DATABASE()').scalar()
- return schema
-
+ return connection.execute('SELECT DATABASE()').scalar()
+ get_default_schema_name = connection_cache_decorator(get_default_schema_name)
+
def table_names(self, connection, schema):
"""Return a Unicode SHOW TABLES from a given schema."""
from sqlalchemy.sql import compiler, visitors
from sqlalchemy.sql import operators as sql_operators, functions as sql_functions
from sqlalchemy import types as sqltypes
+from sqlalchemy.pool import connection_cache_decorator
class OracleNumeric(sqltypes.Numeric):
def get_default_schema_name(self,connection):
return connection.execute('SELECT USER FROM DUAL').scalar()
- get_default_schema_name = util.cache_decorator(get_default_schema_name)
-
+ get_default_schema_name = connection_cache_decorator(get_default_schema_name)
+
def table_names(self, connection, schema):
# note that table_names() isnt loading DBLINKed or synonym'ed tables
if schema is None:
from sqlalchemy.sql import compiler, expression
from sqlalchemy.sql import operators as sql_operators
from sqlalchemy import types as sqltypes
+from sqlalchemy.pool import connection_cache_decorator
class PGInet(sqltypes.TypeEngine):
def get_default_schema_name(self, connection):
return connection.scalar("select current_schema()", None)
- get_default_schema_name = util.cache_decorator(get_default_schema_name)
-
+ get_default_schema_name = connection_cache_decorator(get_default_schema_name)
+
def last_inserted_ids(self):
if self.context.last_inserted_ids is None:
raise exceptions.InvalidRequestError("no INSERT executed, or can't use cursor.lastrowid without Postgres OIDs enabled")
manager.close()
proxies.clear()
+def connection_cache_decorator(func):
+ """apply caching to the return value of a function, using
+ the 'info' collection on its given connection."""
+
+ name = func.__name__
+
+ def do_with_cache(self, connection):
+ try:
+ return connection.info[name]
+ except KeyError:
+ value = func(self, connection)
+ connection.info[name] = value
+ return value
+ return do_with_cache
+
class Pool(object):
"""Base class for connection pools.
return bind_name
def _truncated_identifier(self, ident_class, name):
- key = ident_class + "|" + name
- if key in self.generated_ids:
- return self.generated_ids[key]
+ if (ident_class, name) in self.generated_ids:
+ return self.generated_ids[(ident_class, name)]
anonname = ANONYMOUS_LABEL.sub(self._process_anon, name)
self.generated_ids[ident_class] = counter + 1
else:
truncname = anonname
- self.generated_ids[key] = truncname
+ self.generated_ids[(ident_class, name)] = truncname
return truncname
def _process_anon(self, match):
(ident, derived) = match.group(1,2)
- key = 'anonymous|' + ident
+ key = ('anonymous', ident)
if key in self.generated_ids:
return self.generated_ids[key]
else:
- counter_key = "anon_counter|" + derived
- anonymous_counter = self.generated_ids.get(counter_key, 1)
+ anonymous_counter = self.generated_ids.get(('anon_counter', derived), 1)
newname = derived + "_" + str(anonymous_counter)
- self.generated_ids[counter_key] = anonymous_counter + 1
+ self.generated_ids[('anon_counter', derived)] = anonymous_counter + 1
self.generated_ids[key] = newname
return newname