Django

Code

Changeset 7249

Show
Ignore:
Timestamp:
03/15/08 09:16:05 (10 months ago)
Author:
mtredinnick
Message:

queryset-refactor: Optimised the SQL portion of Model.save().

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/queryset-refactor/django/db/models/base.py

    r7221 r7249  
    316316            if values: 
    317317                # Create a new record. 
    318                 result = manager._insert(_return_id=update_pk, **dict(values)) 
     318                result = manager._insert(__return_id=update_pk, **dict(values)) 
    319319            else: 
    320320                # Create a new record with defaults for everything. 
    321                 result = manager._insert(_return_id=update_pk, 
    322                         _raw_values=True, pk=connection.ops.pk_default_value()) 
     321                result = manager._insert(__return_id=update_pk, 
     322                        __raw_values=True, pk=connection.ops.pk_default_value()) 
    323323 
    324324            if update_pk: 
  • django/branches/queryset-refactor/django/db/models/manager.py

    r7149 r7249  
    1 from django.db.models.query import QuerySet, EmptyQuerySet 
     1from django.db.models.query import QuerySet, EmptyQuerySet, insert_query 
    22from django.dispatch import dispatcher 
    33from django.db.models import signals 
     
    111111        return self.get_query_set().reverse(*args, **kwargs) 
    112112 
    113     def _insert(self, *args, **kwargs): 
    114         return self.get_query_set()._insert(*args, **kwargs) 
     113    def _insert(self, **kwargs): 
     114        return insert_query(self.model, **kwargs) 
    115115 
    116116class ManagerDescriptor(object): 
  • django/branches/queryset-refactor/django/db/models/query.py

    r7248 r7249  
    458458                self._iter = None 
    459459 
    460     def _insert(self, _return_id=False, _raw_values=False, **kwargs): 
    461         """ 
    462         Inserts a new record for the given model. This provides an interface to 
    463         the InsertQuery class and is how Model.save() is implemented. It is not 
    464         part of the public API of QuerySet, though. 
    465         """ 
    466         self._result_cache = None 
    467         query = self.query.clone(sql.InsertQuery) 
    468         query.insert_values(kwargs, _raw_values) 
    469         return query.execute_sql(_return_id) 
    470     _insert.alters_data = True 
    471  
    472460# Use the backend's QuerySet class if it defines one. Otherwise, use _QuerySet. 
    473461if connection.features.uses_custom_queryset: 
     
    682670    transaction.commit_unless_managed() 
    683671 
     672def insert_query(__model, __return_id=False, __raw_values=False, **kwargs): 
     673    """ 
     674    Inserts a new record for the given model. This provides an interface to 
     675    the InsertQuery class and is how Model.save() is implemented. It is not 
     676    part of the public API. 
     677    """ 
     678    query = sql.InsertQuery(__model, connection) 
     679    query.insert_values(kwargs, __raw_values) 
     680    return query.execute_sql(__return_id) 
     681