diff -r b758351d191f -r cc9b7e14412b web/lib/django/db/backends/mysql/base.py --- a/web/lib/django/db/backends/mysql/base.py Wed May 19 17:43:59 2010 +0200 +++ b/web/lib/django/db/backends/mysql/base.py Tue May 25 02:43:45 2010 +0200 @@ -5,6 +5,7 @@ """ import re +import sys try: import MySQLdb as Database @@ -24,6 +25,7 @@ from MySQLdb.converters import conversions from MySQLdb.constants import FIELD_TYPE, FLAG, CLIENT +from django.db import utils from django.db.backends import * from django.db.backends.signals import connection_created from django.db.backends.mysql.client import DatabaseClient @@ -82,22 +84,30 @@ def execute(self, query, args=None): try: return self.cursor.execute(query, args) + except Database.IntegrityError, e: + raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2] except Database.OperationalError, e: # Map some error codes to IntegrityError, since they seem to be # misclassified and Django would prefer the more logical place. if e[0] in self.codes_for_integrityerror: - raise Database.IntegrityError(tuple(e)) + raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2] raise + except Database.DatabaseError, e: + raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2] def executemany(self, query, args): try: return self.cursor.executemany(query, args) + except Database.IntegrityError, e: + raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2] except Database.OperationalError, e: # Map some error codes to IntegrityError, since they seem to be # misclassified and Django would prefer the more logical place. if e[0] in self.codes_for_integrityerror: - raise Database.IntegrityError(tuple(e)) + raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2] raise + except Database.DatabaseError, e: + raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2] def __getattr__(self, attr): if attr in self.__dict__: @@ -113,8 +123,11 @@ update_can_self_select = False allows_group_by_pk = True related_fields_match_type = True + allow_sliced_subqueries = False class DatabaseOperations(BaseDatabaseOperations): + compiler_module = "django.db.backends.mysql.compiler" + def date_extract_sql(self, lookup_type, field_name): # http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html if lookup_type == 'week_day': @@ -214,6 +227,9 @@ second = '%s-12-31 23:59:59.99' return [first % value, second % value] + def max_name_length(self): + return 64 + class DatabaseWrapper(BaseDatabaseWrapper): operators = { @@ -242,7 +258,7 @@ self.client = DatabaseClient(self) self.creation = DatabaseCreation(self) self.introspection = DatabaseIntrospection(self) - self.validation = DatabaseValidation() + self.validation = DatabaseValidation(self) def _valid_connection(self): if self.connection is not None: @@ -262,22 +278,22 @@ 'use_unicode': True, } settings_dict = self.settings_dict - if settings_dict['DATABASE_USER']: - kwargs['user'] = settings_dict['DATABASE_USER'] - if settings_dict['DATABASE_NAME']: - kwargs['db'] = settings_dict['DATABASE_NAME'] - if settings_dict['DATABASE_PASSWORD']: - kwargs['passwd'] = settings_dict['DATABASE_PASSWORD'] - if settings_dict['DATABASE_HOST'].startswith('/'): - kwargs['unix_socket'] = settings_dict['DATABASE_HOST'] - elif settings_dict['DATABASE_HOST']: - kwargs['host'] = settings_dict['DATABASE_HOST'] - if settings_dict['DATABASE_PORT']: - kwargs['port'] = int(settings_dict['DATABASE_PORT']) + if settings_dict['USER']: + kwargs['user'] = settings_dict['USER'] + if settings_dict['NAME']: + kwargs['db'] = settings_dict['NAME'] + if settings_dict['PASSWORD']: + kwargs['passwd'] = settings_dict['PASSWORD'] + if settings_dict['HOST'].startswith('/'): + kwargs['unix_socket'] = settings_dict['HOST'] + elif settings_dict['HOST']: + kwargs['host'] = settings_dict['HOST'] + if settings_dict['PORT']: + kwargs['port'] = int(settings_dict['PORT']) # We need the number of potentially affected rows after an # "UPDATE", not the number of changed rows. kwargs['client_flag'] = CLIENT.FOUND_ROWS - kwargs.update(settings_dict['DATABASE_OPTIONS']) + kwargs.update(settings_dict['OPTIONS']) self.connection = Database.connect(**kwargs) self.connection.encoders[SafeUnicode] = self.connection.encoders[unicode] self.connection.encoders[SafeString] = self.connection.encoders[str]