Exemple #1
0
 def test_get_combinator_sql_empty_queryset_raises_exception(self):
     """
     Tries sql generator with empty queryset.
     """
     compiler = SQLCompiler(QuerySet().query, self.connection, "default")
     with self.assertRaises(EmptyResultSet):
         compiler.get_combinator_sql("union", False)
Exemple #2
0
    def test_get_combinator_sql_parentheses_in_compound_not_supported(self):
        """
        Tries sql generator with union of queryset with queryset of difference,
        adding support for parentheses in compound sql statement.
        """

        qs1 = Number.objects.filter(num__lte=1).values("num")
        qs2 = Number.objects.filter(num__gte=8).values("num")
        qs3 = Number.objects.filter(num__exact=10).values("num")
        qs4 = qs1.union(qs2.difference(qs3))

        compiler = SQLCompiler(qs4.query, self.connection, "default")
        compiler.connection.features.supports_parentheses_in_compound = False
        sql_compiled, params = compiler.get_combinator_sql("union", False)
        self.assertEqual(
            sql_compiled,
            [
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num <= %s UNION DISTINCT SELECT * FROM (" +
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num >= %s EXCEPT DISTINCT " +
                "SELECT tests_number.num FROM tests_number " +
                "WHERE tests_number.num = %s)"
            ],
        )
        self.assertEqual(params, [1, 8, 10])
Exemple #3
0
    def test_get_combinator_sql_difference_all_sql_generated(self):
        """
        Tries difference sql generator.
        """
        qs1 = Number.objects.filter(num__lte=1).values("num")
        qs2 = Number.objects.filter(num__gte=8).values("num")
        qs4 = qs1.difference(qs2)

        compiler = SQLCompiler(qs4.query, self.connection, "default")
        sql_compiled, params = compiler.get_combinator_sql("difference", True)

        self.assertEqual(
            sql_compiled,
            [
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num <= %s EXCEPT ALL SELECT tests_number.num " +
                "FROM tests_number WHERE tests_number.num >= %s"
            ],
        )
        self.assertEqual(params, [1, 8])
Exemple #4
0
    def test_get_combinator_sql_distinct_union_sql_generated(self):
        """
        Tries union sql generator with distinct.
        """

        qs1 = Number.objects.filter(num__lte=1).values("num")
        qs2 = Number.objects.filter(num__gte=8).values("num")
        qs4 = qs1.union(qs2)

        compiler = SQLCompiler(qs4.query, self.connection, "default")
        sql_compiled, params = compiler.get_combinator_sql("union", False)
        self.assertEqual(
            sql_compiled,
            [
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num <= %s UNION DISTINCT SELECT " +
                "tests_number.num FROM tests_number WHERE " +
                "tests_number.num >= %s"
            ],
        )
        self.assertEqual(params, [1, 8])
Exemple #5
0
    def test_get_combinator_sql_union_and_difference_query_together(self):
        """
        Tries sql generator with union of queryset with queryset of difference.
        """
        qs1 = Number.objects.filter(num__lte=1).values("num")
        qs2 = Number.objects.filter(num__gte=8).values("num")
        qs3 = Number.objects.filter(num__exact=10).values("num")
        qs4 = qs1.union(qs2.difference(qs3))

        compiler = SQLCompiler(qs4.query, self.connection, "default")
        sql_compiled, params = compiler.get_combinator_sql("union", False)
        self.assertEqual(
            sql_compiled,
            [
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num <= %s UNION DISTINCT SELECT * FROM (" +
                "SELECT tests_number.num FROM tests_number WHERE " +
                "tests_number.num >= %s EXCEPT DISTINCT " +
                "SELECT tests_number.num FROM tests_number " +
                "WHERE tests_number.num = %s)"
            ],
        )
        self.assertEqual(params, [1, 8, 10])