1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

[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
This commit is contained in:
Alex Gaynor 2010-06-07 17:53:34 +00:00
parent 4c45befaad
commit 1f9e422b8d
4 changed files with 45 additions and 1 deletions

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -788,6 +788,9 @@ class SQLInsertCompiler(SQLCompiler):
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):
def as_sql(self):