瀏覽代碼

Fixed #17339 -- Factor out has_result into database backend.

Thanks jonash.
Tim Graham 11 年之前
父節點
當前提交
95eb68c98f
共有 2 個文件被更改,包括 11 次插入3 次删除
  1. 10 0
      django/db/models/sql/compiler.py
  2. 1 3
      django/db/models/sql/query.py

+ 10 - 0
django/db/models/sql/compiler.py

@@ -750,6 +750,16 @@ class SQLCompiler(object):
 
                 yield row
 
+    def has_results(self):
+        """
+        Backends (e.g. NoSQL) can override this in order to use optimized
+        versions of "query has any results."
+        """
+        # This is always executed on a query clone, so we can modify self.query
+        self.query.add_extra({'a': 1}, None, None, None, None, None)
+        self.query.set_extra_mask(['a'])
+        return bool(self.execute_sql(SINGLE))
+
     def execute_sql(self, result_type=MULTI):
         """
         Run the query against the database and returns the result(s). The

+ 1 - 3
django/db/models/sql/query.py

@@ -401,12 +401,10 @@ class Query(object):
     def has_results(self, using):
         q = self.clone()
         q.clear_select_clause()
-        q.add_extra({'a': 1}, None, None, None, None, None)
-        q.set_extra_mask(['a'])
         q.clear_ordering(True)
         q.set_limits(high=1)
         compiler = q.get_compiler(using=using)
-        return bool(compiler.execute_sql(SINGLE))
+        return compiler.has_results()
 
     def combine(self, rhs, connector):
         """