From 42a878cfeadf00f036a6110941550505d4d007af Mon Sep 17 00:00:00 2001
From: Adrian Holovaty <adrian@holovaty.com>
Date: Tue, 9 Sep 2008 02:13:58 +0000
Subject: [PATCH] db: Gave each DatabaseClient class an 'executable_name'
 attribute (e.g., 'psql' or 'mysql'), so that we can use it to make a more
 helpful error message. Refs #8978

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8989 bcc190cf-cafb-0310-a4f2-bffc1f526a37
---
 django/db/backends/__init__.py          | 8 ++++++--
 django/db/backends/mysql/client.py      | 6 ++++--
 django/db/backends/oracle/client.py     | 6 ++++--
 django/db/backends/postgresql/client.py | 6 ++++--
 django/db/backends/sqlite3/client.py    | 4 +++-
 5 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/django/db/backends/__init__.py b/django/db/backends/__init__.py
index 23ce12960c..bda0cbc463 100644
--- a/django/db/backends/__init__.py
+++ b/django/db/backends/__init__.py
@@ -439,9 +439,13 @@ class BaseDatabaseIntrospection(object):
 
 class BaseDatabaseClient(object):
     """
-    This class encapsualtes all backend-specific methods for opening a
-    client shell
+    This class encapsulates all backend-specific methods for opening a
+    client shell.
     """
+    # This should be a string representing the name of the executable
+    # (e.g., "psql"). Subclasses must override this.
+    executable_name = None
+
     def runshell(self):
         raise NotImplementedError()
 
diff --git a/django/db/backends/mysql/client.py b/django/db/backends/mysql/client.py
index 24758867af..17daca9fd6 100644
--- a/django/db/backends/mysql/client.py
+++ b/django/db/backends/mysql/client.py
@@ -3,6 +3,8 @@ from django.conf import settings
 import os
 
 class DatabaseClient(BaseDatabaseClient):
+    executable_name = 'mysql'
+
     def runshell(self):
         args = ['']
         db = settings.DATABASE_OPTIONS.get('db', settings.DATABASE_NAME)
@@ -11,7 +13,7 @@ class DatabaseClient(BaseDatabaseClient):
         host = settings.DATABASE_OPTIONS.get('host', settings.DATABASE_HOST)
         port = settings.DATABASE_OPTIONS.get('port', settings.DATABASE_PORT)
         defaults_file = settings.DATABASE_OPTIONS.get('read_default_file')
-        # Seems to be no good way to set sql_mode with CLI
+        # Seems to be no good way to set sql_mode with CLI.
     
         if defaults_file:
             args += ["--defaults-file=%s" % defaults_file]
@@ -26,4 +28,4 @@ class DatabaseClient(BaseDatabaseClient):
         if db:
             args += [db]
 
-        os.execvp('mysql', args)
+        os.execvp(self.executable_name, args)
diff --git a/django/db/backends/oracle/client.py b/django/db/backends/oracle/client.py
index 77fc9b9847..52c4880e0e 100644
--- a/django/db/backends/oracle/client.py
+++ b/django/db/backends/oracle/client.py
@@ -3,11 +3,13 @@ from django.conf import settings
 import os
 
 class DatabaseClient(BaseDatabaseClient):
+    executable_name = 'sqlplus'
+
     def runshell(self):
         dsn = settings.DATABASE_USER
         if settings.DATABASE_PASSWORD:
             dsn += "/%s" % settings.DATABASE_PASSWORD
         if settings.DATABASE_NAME:
             dsn += "@%s" % settings.DATABASE_NAME
-        args = ["sqlplus", "-L", dsn]
-        os.execvp("sqlplus", args)
+        args = [self.executable_name, "-L", dsn]
+        os.execvp(self.executable_name, args)
diff --git a/django/db/backends/postgresql/client.py b/django/db/backends/postgresql/client.py
index 28daed833a..63f28a7b57 100644
--- a/django/db/backends/postgresql/client.py
+++ b/django/db/backends/postgresql/client.py
@@ -3,8 +3,10 @@ from django.conf import settings
 import os
 
 class DatabaseClient(BaseDatabaseClient):
+    executable_name = 'psql'
+
     def runshell(self):
-        args = ['psql']
+        args = [self.executable_name]
         if settings.DATABASE_USER:
             args += ["-U", settings.DATABASE_USER]
         if settings.DATABASE_PASSWORD:
@@ -14,4 +16,4 @@ class DatabaseClient(BaseDatabaseClient):
         if settings.DATABASE_PORT:
             args.extend(["-p", str(settings.DATABASE_PORT)])
         args += [settings.DATABASE_NAME]
-        os.execvp('psql', args)
+        os.execvp(self.executable_name, args)
diff --git a/django/db/backends/sqlite3/client.py b/django/db/backends/sqlite3/client.py
index affb1c228c..239e72f1e9 100644
--- a/django/db/backends/sqlite3/client.py
+++ b/django/db/backends/sqlite3/client.py
@@ -3,6 +3,8 @@ from django.conf import settings
 import os
 
 class DatabaseClient(BaseDatabaseClient):
+    executable_name = 'sqlite3'
+
     def runshell(self):
         args = ['', settings.DATABASE_NAME]
-        os.execvp('sqlite3', args)
+        os.execvp(self.executable_name, args)