app/django/db/backends/postgresql/base.py
changeset 323 ff1a9aa48cfd
parent 54 03e267d67478
--- a/app/django/db/backends/postgresql/base.py	Tue Oct 14 12:36:55 2008 +0000
+++ b/app/django/db/backends/postgresql/base.py	Tue Oct 14 16:00:59 2008 +0000
@@ -4,9 +4,14 @@
 Requires psycopg 1: http://initd.org/projects/psycopg1
 """
 
+from django.db.backends import *
+from django.db.backends.postgresql.client import DatabaseClient
+from django.db.backends.postgresql.creation import DatabaseCreation
+from django.db.backends.postgresql.introspection import DatabaseIntrospection
+from django.db.backends.postgresql.operations import DatabaseOperations
+from django.db.backends.postgresql.version import get_version
 from django.utils.encoding import smart_str, smart_unicode
-from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, util
-from django.db.backends.postgresql.operations import DatabaseOperations
+
 try:
     import psycopg as Database
 except ImportError, e:
@@ -60,16 +65,14 @@
         return iter(self.cursor)
 
 class DatabaseFeatures(BaseDatabaseFeatures):
-    pass # This backend uses all the defaults.
+    uses_savepoints = True
 
 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',
@@ -78,10 +81,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:
@@ -103,6 +116,11 @@
         cursor = self.connection.cursor()
         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
         cursor.execute("SET client_encoding to 'UNICODE'")
         cursor = UnicodeCursorWrapper(cursor, 'utf-8')
         return cursor