示例#1
0
    def test_submit_query_for_execution_with_duplicated_column_names(
        self, mock_connection_settings, mock_schema_suffix
    ):
        mock_schema_suffix.return_value = "12b9377c"
        # See utils.TYPE_CODES_REVERSED for data type codes returned in cursor description
        self.mock_cursor.description = [("bar", 23), ("bar", 25)]
        query = SimpleQueryFactory(sql="select * from foo", connection="conn", id=1)

        submit_query_for_execution(
            query.final_sql(), query.connection, query.id, self.user.id, 1, 100, 10000
        )
        query_log_id = QueryLog.objects.first().id

        expected_calls = [
            call("SET statement_timeout = 10000"),
            call("SELECT * FROM (select * from foo) sq LIMIT 0"),
            call(
                f"CREATE TABLE _user_12b9377c._data_explorer_tmp_query_{query_log_id}"
                ' ("col_1_bar" integer, "col_2_bar" text)'
            ),
            call(
                f"INSERT INTO _user_12b9377c._data_explorer_tmp_query_{query_log_id}"
                " SELECT * FROM (select * from foo) sq LIMIT 100"
            ),
            call("SELECT COUNT(*) FROM (select * from foo) sq"),
        ]
        self.mock_cursor.execute.assert_has_calls(expected_calls)
示例#2
0
    def test_submit_query_for_execution_with_pagination(
            self, mock_connection_settings, mock_schema_suffix):
        mock_schema_suffix.return_value = '12b9377c'
        # See utils.TYPE_CODES_REVERSED for data type codes returned in cursor description
        self.mock_cursor.description = [('foo', 23), ('bar', 25)]
        query = SimpleQueryFactory(sql='select * from foo',
                                   connection='conn',
                                   id=1)

        submit_query_for_execution(query.final_sql(), query.connection,
                                   query.id, self.user.id, 2, 100, 10000)
        query_log_id = QueryLog.objects.first().id

        expected_calls = [
            call('SET statement_timeout = 10000'),
            call('SELECT * FROM (select * from foo) sq LIMIT 0'),
            call(
                f'CREATE TABLE _user_12b9377c._data_explorer_tmp_query_{query_log_id} ("foo" integer, "bar" text)'
            ),
            call(
                f'INSERT INTO _user_12b9377c._data_explorer_tmp_query_{query_log_id}'
                ' SELECT * FROM (select * from foo) sq LIMIT 100 OFFSET 100'),
            call('SELECT COUNT(*) FROM (select * from foo) sq'),
        ]
        self.mock_cursor.execute.assert_has_calls(expected_calls)
示例#3
0
    def test_final_sql_uses_merged_params(self):
        q = SimpleQueryFactory(sql="select '$$foo:bar$$', '$$qux$$';")
        q.params = {'qux': 'mux'}
        expected = "select 'bar', 'mux';"

        assert q.final_sql() == expected