Ejemplo n.º 1
0
    def get_related_where(self, fk_name, using, type):
        qn = self.get_quote_name(using)

        related_where = [
            "%s = %s.%s" % (qn(self.model._meta.pk.get_attname_column()[1]),
                            type, qn(fk_name))
        ]
        related_query = Query(self.manager.related.model)
        for name, value in self.filter.iteritems():
            related_query.add_q(Q(**{name: value}))
        for name, value in self.exclude.iteritems():
            related_query.add_q(~Q(**{name: value}))
        related_query.add_extra(None, None, [
            "%s = %s.%s" %
            (qn(self.model._meta.pk.get_attname_column()[1]), type,
             qn(self.manager.related.field.m2m_column_name()))
        ], None, None, None)
        related_query.add_count_column()
        related_query.clear_ordering(force_empty=True)
        related_query.default_cols = False
        related_filter_where, related_where_params = related_query.get_compiler(
            using=using).as_sql()
        if related_filter_where is not None:
            related_where.append('(' + related_filter_where + ') > 0')
        return related_where, related_where_params
Ejemplo n.º 2
0
    def get_related_where(self, fk_name, using, type):
        qn = self.get_quote_name(using)

        related_where = ["%s = %s.%s" % (qn(self.model._meta.pk.get_attname_column()[1]), type, qn(fk_name))]
        related_query = Query(self.manager.related.model)
        for name, value in self.filter.iteritems():
            related_query.add_q(Q(**{name: value}))
        for name, value in self.exclude.iteritems():
            related_query.add_q(~Q(**{name: value}))
        related_query.add_extra(
            None,
            None,
            [
                "%s = %s.%s"
                % (
                    qn(self.model._meta.pk.get_attname_column()[1]),
                    type,
                    qn(self.manager.related.field.m2m_column_name()),
                )
            ],
            None,
            None,
            None,
        )
        related_query.add_count_column()
        related_query.clear_ordering(force_empty=True)
        related_query.default_cols = False
        related_filter_where, related_where_params = related_query.get_compiler(using=using).as_sql()
        if related_filter_where is not None:
            related_where.append("(" + related_filter_where + ") > 0")
        return related_where, related_where_params
Ejemplo n.º 3
0
 def _get_condition_sql(self, model, schema_editor):
     if self.condition is None:
         return None
     query = Query(model=model, alias_cols=False)
     where = query.build_where(self.condition)
     compiler = query.get_compiler(connection=schema_editor.connection)
     sql, params = where.as_sql(compiler, schema_editor.connection)
     return sql % tuple(schema_editor.quote_value(p) for p in params)
Ejemplo n.º 4
0
 def _get_condition_sql(self, model, schema_editor):
     if self.condition is None:
         return None
     query = Query(model=model)
     where = query.build_where(self.condition)
     compiler = query.get_compiler(connection=schema_editor.connection)
     sql, params = where.as_sql(compiler, schema_editor.connection)
     return sql % tuple(schema_editor.quote_value(p) for p in params)
Ejemplo n.º 5
0
 def test_q_annotation(self):
     query = Query(None)
     check = ExpressionWrapper(
         Q(RawSQL("%s IS NULL", (None, ), BooleanField()))
         | Q(Exists(Item.objects.all())),
         BooleanField(),
     )
     query.add_annotation(check, "_check")
     result = query.get_compiler(using=DEFAULT_DB_ALIAS).execute_sql(SINGLE)
     self.assertEqual(result[0], 1)
Ejemplo n.º 6
0
 def test_rawsql_annotation(self):
     query = Query(None)
     sql = "%s IS NULL"
     # Wrap with a CASE WHEN expression if a database backend (e.g. Oracle)
     # doesn't support boolean expression in SELECT list.
     if not connection.features.supports_boolean_expr_in_select_clause:
         sql = f"CASE WHEN {sql} THEN 1 ELSE 0 END"
     query.add_annotation(RawSQL(sql, (None, ), BooleanField()), "_check")
     result = query.get_compiler(using=DEFAULT_DB_ALIAS).execute_sql(SINGLE)
     self.assertEqual(result[0], 1)
Ejemplo n.º 7
0
    def get_related_decrement_value(self, using):
        qn = self.get_quote_name(using)

        related_query = Query(self.manager.related.model)
        related_query.add_extra(None, None,
            ["%s = %s.%s" % (qn(self.model._meta.pk.get_attname_column()[1]), 'OLD', qn(self.manager.related.field.m2m_column_name()))],
            None, None, None)
        related_query.add_fields([self.fieldname])
        related_query.clear_ordering(force_empty=True)
        related_query.default_cols = False
        related_filter_where, related_where_params = related_query.get_compiler(using=using).as_sql()
        return "%s - (%s)" % (qn(self.fieldname), related_filter_where)
Ejemplo n.º 8
0
    def get_related_decrement_value(self, using):
        qn = self.get_quote_name(using)

        related_query = Query(self.manager.related.model)
        related_query.add_extra(None, None, [
            "%s = %s.%s" %
            (qn(self.model._meta.pk.get_attname_column()[1]), 'OLD',
             qn(self.manager.related.field.m2m_column_name()))
        ], None, None, None)
        related_query.add_fields([self.fieldname])
        related_query.clear_ordering(force_empty=True)
        related_query.default_cols = False
        related_filter_where, related_where_params = related_query.get_compiler(
            using=using).as_sql()
        return "%s - (%s)" % (qn(self.fieldname), related_filter_where)
Ejemplo n.º 9
0
 def _get_check_sql(self, model, schema_editor):
     query = Query(model=model)
     where = query.build_where(self.check)
     compiler = query.get_compiler(connection=schema_editor.connection)
     sql, params = where.as_sql(compiler, schema_editor.connection)
     return sql % tuple(schema_editor.quote_value(p) for p in params)
Ejemplo n.º 10
0
 def test_subquery_annotation(self):
     query = Query(None)
     query.add_annotation(Exists(Item.objects.all()), "_check")
     result = query.get_compiler(using=DEFAULT_DB_ALIAS).execute_sql(SINGLE)
     self.assertEqual(result[0], 0)