Fixed #5226. Now we check the Oracle version and give an explicit
error when we encounter a regex operator that isn't supported on 9i or earlier. git-svn-id: http://code.djangoproject.com/svn/django/trunk@6198 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
55d34c6cb3
commit
a6b1d65e33
|
@ -400,6 +400,7 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
'istartswith': "LIKE UPPER(%s) ESCAPE '\\'",
|
'istartswith': "LIKE UPPER(%s) ESCAPE '\\'",
|
||||||
'iendswith': "LIKE UPPER(%s) ESCAPE '\\'",
|
'iendswith': "LIKE UPPER(%s) ESCAPE '\\'",
|
||||||
}
|
}
|
||||||
|
oracle_version = None
|
||||||
|
|
||||||
def _valid_connection(self):
|
def _valid_connection(self):
|
||||||
return self.connection is not None
|
return self.connection is not None
|
||||||
|
@ -414,6 +415,10 @@ class DatabaseWrapper(BaseDatabaseWrapper):
|
||||||
else:
|
else:
|
||||||
conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
|
conn_string = "%s/%s@%s" % (settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME)
|
||||||
self.connection = Database.connect(conn_string, **self.options)
|
self.connection = Database.connect(conn_string, **self.options)
|
||||||
|
try:
|
||||||
|
self.oracle_version = int(self.connection.version.split('.')[0])
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
cursor = FormatStylePlaceholderCursor(self.connection)
|
cursor = FormatStylePlaceholderCursor(self.connection)
|
||||||
# Default arraysize of 1 is highly sub-optimal.
|
# Default arraysize of 1 is highly sub-optimal.
|
||||||
cursor.arraysize = 100
|
cursor.arraysize = 100
|
||||||
|
|
|
@ -816,6 +816,9 @@ def get_where_clause(lookup_type, table_prefix, field_name, value, db_type):
|
||||||
return connection.ops.fulltext_search_sql(field_sql)
|
return connection.ops.fulltext_search_sql(field_sql)
|
||||||
elif lookup_type in ('regex', 'iregex'):
|
elif lookup_type in ('regex', 'iregex'):
|
||||||
if settings.DATABASE_ENGINE == 'oracle':
|
if settings.DATABASE_ENGINE == 'oracle':
|
||||||
|
if connection.oracle_version and connection.oracle_version <= 9:
|
||||||
|
msg = "Regexes are not supported in Oracle before version 10g."
|
||||||
|
raise NotImplementedError(msg)
|
||||||
if lookup_type == 'regex':
|
if lookup_type == 'regex':
|
||||||
match_option = 'c'
|
match_option = 'c'
|
||||||
else:
|
else:
|
||||||
|
|
Loading…
Reference in New Issue