--- a/app/django/db/backends/postgresql_psycopg2/base.py Tue Oct 14 12:36:55 2008 +0000
+++ b/app/django/db/backends/postgresql_psycopg2/base.py Tue Oct 14 16:00:59 2008 +0000
@@ -4,9 +4,14 @@
Requires psycopg 2: http://initd.org/projects/psycopg2
"""
-from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures
+from django.db.backends import *
from django.db.backends.postgresql.operations import DatabaseOperations as PostgresqlDatabaseOperations
-from django.utils.safestring import SafeUnicode
+from django.db.backends.postgresql.client import DatabaseClient
+from django.db.backends.postgresql.creation import DatabaseCreation
+from django.db.backends.postgresql.version import get_version
+from django.db.backends.postgresql_psycopg2.introspection import DatabaseIntrospection
+from django.utils.safestring import SafeUnicode, SafeString
+
try:
import psycopg2 as Database
import psycopg2.extensions
@@ -18,10 +23,12 @@
IntegrityError = Database.IntegrityError
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
+psycopg2.extensions.register_adapter(SafeString, psycopg2.extensions.QuotedString)
psycopg2.extensions.register_adapter(SafeUnicode, psycopg2.extensions.QuotedString)
class DatabaseFeatures(BaseDatabaseFeatures):
needs_datetime_string_cast = False
+ uses_savepoints = True
class DatabaseOperations(PostgresqlDatabaseOperations):
def last_executed_query(self, cursor, sql, params):
@@ -31,13 +38,11 @@
return cursor.query
class DatabaseWrapper(BaseDatabaseWrapper):
- features = DatabaseFeatures()
- ops = DatabaseOperations()
operators = {
'exact': '= %s',
- 'iexact': 'ILIKE %s',
+ 'iexact': '= UPPER(%s)',
'contains': 'LIKE %s',
- 'icontains': 'ILIKE %s',
+ 'icontains': 'LIKE UPPER(%s)',
'regex': '~ %s',
'iregex': '~* %s',
'gt': '> %s',
@@ -46,10 +51,20 @@
'lte': '<= %s',
'startswith': 'LIKE %s',
'endswith': 'LIKE %s',
- 'istartswith': 'ILIKE %s',
- 'iendswith': 'ILIKE %s',
+ 'istartswith': 'LIKE UPPER(%s)',
+ 'iendswith': 'LIKE UPPER(%s)',
}
+ def __init__(self, *args, **kwargs):
+ super(DatabaseWrapper, self).__init__(*args, **kwargs)
+
+ self.features = DatabaseFeatures()
+ self.ops = DatabaseOperations()
+ self.client = DatabaseClient()
+ self.creation = DatabaseCreation(self)
+ self.introspection = DatabaseIntrospection(self)
+ self.validation = BaseDatabaseValidation()
+
def _cursor(self, settings):
set_tz = False
if self.connection is None:
@@ -73,4 +88,9 @@
cursor.tzinfo_factory = None
if set_tz:
cursor.execute("SET TIME ZONE %s", [settings.TIME_ZONE])
+ if not hasattr(self, '_version'):
+ self.__class__._version = get_version(cursor)
+ if self._version < (8, 0):
+ # No savepoint support for earlier version of PostgreSQL.
+ self.features.uses_savepoints = False
return cursor