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)
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)
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