From a1c0d6ae7cbfa5215a7e3cd0ce657f6155a57fbb Mon Sep 17 00:00:00 2001 From: mtredinnick Date: Wed, 26 Mar 2008 08:25:48 +0000 Subject: [PATCH] Removed the ado_mssql database backend. It has not been maintained, contains bugs, and improved versions are available externally(e.g. django-mssql and django-pyodbc at Google code). git-svn-id: http://code.djangoproject.com/svn/django/trunk@7364 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/conf/global_settings.py | 2 +- django/db/backends/ado_mssql/__init__.py | 0 django/db/backends/ado_mssql/base.py | 112 ------------------ django/db/backends/ado_mssql/client.py | 2 - django/db/backends/ado_mssql/creation.py | 25 ---- django/db/backends/ado_mssql/introspection.py | 13 -- docs/db-api.txt | 3 - docs/settings.txt | 2 +- 8 files changed, 2 insertions(+), 157 deletions(-) delete mode 100644 django/db/backends/ado_mssql/__init__.py delete mode 100644 django/db/backends/ado_mssql/base.py delete mode 100644 django/db/backends/ado_mssql/client.py delete mode 100644 django/db/backends/ado_mssql/creation.py delete mode 100644 django/db/backends/ado_mssql/introspection.py diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py index 76cf6b71dd..84b3f5796e 100644 --- a/django/conf/global_settings.py +++ b/django/conf/global_settings.py @@ -114,7 +114,7 @@ SEND_BROKEN_LINK_EMAILS = False # Database connection info. -DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'. +DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = '' # Or path to database file if using sqlite3. DATABASE_USER = '' # Not used with sqlite3. DATABASE_PASSWORD = '' # Not used with sqlite3. diff --git a/django/db/backends/ado_mssql/__init__.py b/django/db/backends/ado_mssql/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/django/db/backends/ado_mssql/base.py b/django/db/backends/ado_mssql/base.py deleted file mode 100644 index 07ce02d591..0000000000 --- a/django/db/backends/ado_mssql/base.py +++ /dev/null @@ -1,112 +0,0 @@ -""" -ADO MSSQL database backend for Django. - -Requires adodbapi 2.0.1: http://adodbapi.sourceforge.net/ -""" - -from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseOperations, util -try: - import adodbapi as Database -except ImportError, e: - from django.core.exceptions import ImproperlyConfigured - raise ImproperlyConfigured("Error loading adodbapi module: %s" % e) -import datetime -try: - import mx -except ImportError: - mx = None - -DatabaseError = Database.DatabaseError -IntegrityError = Database.IntegrityError - -# We need to use a special Cursor class because adodbapi expects question-mark -# param style, but Django expects "%s". This cursor converts question marks to -# format-string style. -class Cursor(Database.Cursor): - def executeHelper(self, operation, isStoredProcedureCall, parameters=None): - if parameters is not None and "%s" in operation: - operation = operation.replace("%s", "?") - Database.Cursor.executeHelper(self, operation, isStoredProcedureCall, parameters) - -class Connection(Database.Connection): - def cursor(self): - return Cursor(self) -Database.Connection = Connection - -origCVtoP = Database.convertVariantToPython -def variantToPython(variant, adType): - if type(variant) == bool and adType == 11: - return variant # bool not 1/0 - res = origCVtoP(variant, adType) - if mx is not None and type(res) == mx.DateTime.mxDateTime.DateTimeType: - # Convert ms.DateTime objects to Python datetime.datetime objects. - tv = list(res.tuple()[:7]) - tv[-2] = int(tv[-2]) - return datetime.datetime(*tuple(tv)) - if type(res) == float and str(res)[-2:] == ".0": - return int(res) # If float but int, then int. - return res -Database.convertVariantToPython = variantToPython - -class DatabaseFeatures(BaseDatabaseFeatures): - supports_tablespaces = True - -class DatabaseOperations(BaseDatabaseOperations): - def date_extract_sql(self, lookup_type, field_name): - return "DATEPART(%s, %s)" % (lookup_type, field_name) - - def date_trunc_sql(self, lookup_type, field_name): - if lookup_type == 'year': - return "Convert(datetime, Convert(varchar, DATEPART(year, %s)) + '/01/01')" % field_name - if lookup_type == 'month': - return "Convert(datetime, Convert(varchar, DATEPART(year, %s)) + '/' + Convert(varchar, DATEPART(month, %s)) + '/01')" % (field_name, field_name) - if lookup_type == 'day': - return "Convert(datetime, Convert(varchar(12), %s))" % field_name - - def deferrable_sql(self): - return " DEFERRABLE INITIALLY DEFERRED" - - def last_insert_id(self, cursor, table_name, pk_name): - cursor.execute("SELECT %s FROM %s WHERE %s = @@IDENTITY" % (pk_name, table_name, pk_name)) - return cursor.fetchone()[0] - - def quote_name(self, name): - if name.startswith('[') and name.endswith(']'): - return name # Quoting once is enough. - return '[%s]' % name - - def random_function_sql(self): - return 'RAND()' - - def tablespace_sql(self, tablespace, inline=False): - return "ON %s" % self.quote_name(tablespace) - -class DatabaseWrapper(BaseDatabaseWrapper): - features = DatabaseFeatures() - ops = DatabaseOperations() - operators = { - 'exact': '= %s', - 'iexact': 'LIKE %s', - 'contains': 'LIKE %s', - 'icontains': 'LIKE %s', - 'gt': '> %s', - 'gte': '>= %s', - 'lt': '< %s', - 'lte': '<= %s', - 'startswith': 'LIKE %s', - 'endswith': 'LIKE %s', - 'istartswith': 'LIKE %s', - 'iendswith': 'LIKE %s', - } - - def _cursor(self, settings): - if self.connection is None: - if settings.DATABASE_NAME == '' or settings.DATABASE_USER == '': - from django.core.exceptions import ImproperlyConfigured - raise ImproperlyConfigured("You need to specify both DATABASE_NAME and DATABASE_USER in your Django settings file.") - if not settings.DATABASE_HOST: - settings.DATABASE_HOST = "127.0.0.1" - # TODO: Handle DATABASE_PORT. - conn_string = "PROVIDER=SQLOLEDB;DATA SOURCE=%s;UID=%s;PWD=%s;DATABASE=%s" % (settings.DATABASE_HOST, settings.DATABASE_USER, settings.DATABASE_PASSWORD, settings.DATABASE_NAME) - self.connection = Database.connect(conn_string) - return self.connection.cursor() diff --git a/django/db/backends/ado_mssql/client.py b/django/db/backends/ado_mssql/client.py deleted file mode 100644 index 5c197cafa4..0000000000 --- a/django/db/backends/ado_mssql/client.py +++ /dev/null @@ -1,2 +0,0 @@ -def runshell(): - raise NotImplementedError diff --git a/django/db/backends/ado_mssql/creation.py b/django/db/backends/ado_mssql/creation.py deleted file mode 100644 index d4ba8f2897..0000000000 --- a/django/db/backends/ado_mssql/creation.py +++ /dev/null @@ -1,25 +0,0 @@ -DATA_TYPES = { - 'AutoField': 'int IDENTITY (1, 1)', - 'BooleanField': 'bit', - 'CharField': 'varchar(%(max_length)s)', - 'CommaSeparatedIntegerField': 'varchar(%(max_length)s)', - 'DateField': 'smalldatetime', - 'DateTimeField': 'smalldatetime', - 'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)', - 'FileField': 'varchar(%(max_length)s)', - 'FilePathField': 'varchar(%(max_length)s)', - 'FloatField': 'double precision', - 'ImageField': 'varchar(%(max_length)s)', - 'IntegerField': 'int', - 'IPAddressField': 'char(15)', - 'NullBooleanField': 'bit', - 'OneToOneField': 'int', - 'PhoneNumberField': 'varchar(20)', - 'PositiveIntegerField': 'int CONSTRAINT [CK_int_pos_%(column)s] CHECK ([%(column)s] > 0)', - 'PositiveSmallIntegerField': 'smallint CONSTRAINT [CK_smallint_pos_%(column)s] CHECK ([%(column)s] > 0)', - 'SlugField': 'varchar(%(max_length)s)', - 'SmallIntegerField': 'smallint', - 'TextField': 'text', - 'TimeField': 'time', - 'USStateField': 'varchar(2)', -} diff --git a/django/db/backends/ado_mssql/introspection.py b/django/db/backends/ado_mssql/introspection.py deleted file mode 100644 index b125cc995f..0000000000 --- a/django/db/backends/ado_mssql/introspection.py +++ /dev/null @@ -1,13 +0,0 @@ -def get_table_list(cursor): - raise NotImplementedError - -def get_table_description(cursor, table_name): - raise NotImplementedError - -def get_relations(cursor, table_name): - raise NotImplementedError - -def get_indexes(cursor, table_name): - raise NotImplementedError - -DATA_TYPES_REVERSE = {} diff --git a/docs/db-api.txt b/docs/db-api.txt index e9b5c05f6b..f8ed16988e 100644 --- a/docs/db-api.txt +++ b/docs/db-api.txt @@ -1306,9 +1306,6 @@ SQL equivalents:: Using raw strings (e.g., ``r'foo'`` instead of ``'foo'``) for passing in the regular expression syntax is recommended. -Regular expression matching is not supported on the ``ado_mssql`` backend. -It will raise a ``NotImplementedError`` at runtime. - iregex ~~~~~~ diff --git a/docs/settings.txt b/docs/settings.txt index fb2e04f1ea..5aee19102b 100644 --- a/docs/settings.txt +++ b/docs/settings.txt @@ -279,7 +279,7 @@ Default: ``''`` (Empty string) The database backend to use. The build-in database backends are ``'postgresql_psycopg2'``, ``'postgresql'``, ``'mysql'``, ``'mysql_old'``, -``'sqlite3'``, ``'oracle'``, or ``'ado_mssql'``. +``'sqlite3'`` and ``'oracle'``. In the Django development version, you can use a database backend that doesn't ship with Django by setting ``DATABASE_ENGINE`` to a fully-qualified path (i.e.