summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAlex Gaynor <alex.gaynor@gmail.com>2010-06-07 17:53:34 +0000
committerAlex Gaynor <alex.gaynor@gmail.com>2010-06-07 17:53:34 +0000
commit1f9e422b8d31303a97da950edab3678f4e42f024 (patch)
tree7297167c64a1cc05b2c1c935b1ec939e00086858 /django
parent4c45befaad280ec3b1b330a4787564081b8fac6f (diff)
[soc2010/query-refactor] Refactor, and implement a few more methods to get models saving under the mongodb backend.
git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2010/query-refactor@13332 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rw-r--r--django/contrib/mongodb/base.py26
-rw-r--r--django/contrib/mongodb/compiler.py15
-rw-r--r--django/db/models/query.py2
-rw-r--r--django/db/models/sql/compiler.py3
4 files changed, 45 insertions, 1 deletions
diff --git a/django/contrib/mongodb/base.py b/django/contrib/mongodb/base.py
index 17c5f28067..825a39787d 100644
--- a/django/contrib/mongodb/base.py
+++ b/django/contrib/mongodb/base.py
@@ -3,6 +3,7 @@ from pymongo import Connection
from django.db.backends import BaseDatabaseWrapper
from django.db.backends.signals import connection_created
from django.contrib.mongodb.creation import DatabaseCreation
+from django.utils.importlib import import_module
class DatabaseFeatures(object):
@@ -10,12 +11,29 @@ class DatabaseFeatures(object):
class DatabaseOperations(object):
+ compiler_module = "django.contrib.mongodb.compiler"
+
+ def __init__(self, *args, **kwargs):
+ self._cache = {}
+
def max_name_length(self):
return 254
def value_to_db_datetime(self, value):
return value
+ # TODO: this is copy pasta, fix the abstractions in Ops
+ def compiler(self, compiler_name):
+ """
+ Returns the SQLCompiler class corresponding to the given name,
+ in the namespace corresponding to the `compiler_module` attribute
+ on this backend.
+ """
+ if compiler_name not in self._cache:
+ self._cache[compiler_name] = getattr(
+ import_module(self.compiler_module), compiler_name
+ )
+ return self._cache[compiler_name]
class DatabaseWrapper(BaseDatabaseWrapper):
def __init__(self, *args, **kwargs):
@@ -33,6 +51,14 @@ class DatabaseWrapper(BaseDatabaseWrapper):
connection_created.send(sender=self.__class__)
return self._connection
+ @property
+ def db(self):
+ return self.connection[self.settings_dict["NAME"]]
+
def _rollback(self):
# TODO: ???
pass
+
+ def _commit(self):
+ # TODO: ???
+ pass
diff --git a/django/contrib/mongodb/compiler.py b/django/contrib/mongodb/compiler.py
new file mode 100644
index 0000000000..b4c4cbd347
--- /dev/null
+++ b/django/contrib/mongodb/compiler.py
@@ -0,0 +1,15 @@
+# TODO: ...
+class SQLCompiler(object):
+ def __init__(self, query, connection, using):
+ self.query = query
+ self.connection = connection
+ self.using = using
+
+
+class SQLInsertCompiler(SQLCompiler):
+ def insert(self, return_id=False):
+ values = dict([
+ (c, v)
+ for c, v in zip(self.query.columns, self.query.params)
+ ])
+ return self.connection.db[self.query.model._meta.db_table].insert(values)
diff --git a/django/db/models/query.py b/django/db/models/query.py
index d9fbd9b8cb..a2a82f85ee 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1476,4 +1476,4 @@ def insert_query(model, values, return_id=False, raw_values=False, using=None):
"""
query = sql.InsertQuery(model)
query.insert_values(values, raw_values)
- return query.get_compiler(using=using).execute_sql(return_id)
+ return query.get_compiler(using=using).insert(return_id)
diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index eaf2cd2569..2877171fd2 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -787,6 +787,9 @@ class SQLInsertCompiler(SQLCompiler):
return self.connection.ops.fetch_returned_insert_id(cursor)
return self.connection.ops.last_insert_id(cursor,
self.query.model._meta.db_table, self.query.model._meta.pk.column)
+
+ def insert(self, *args, **kwargs):
+ return self.execute_sql(*args, **kwargs)
class SQLDeleteCompiler(SQLCompiler):