Skip to content

Commit 20247b5

Browse files
committed
change result
1 parent ee26552 commit 20247b5

File tree

5 files changed

+21
-14
lines changed

5 files changed

+21
-14
lines changed

docs/components/results.md

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ Currently there are two results:
1414
### Result
1515

1616
#### Parameters
17+
1718
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
18-
- `as_tuple`: return result as a tuple instead of dict.
19+
- `as_tuple`: Headless tuple output
1920

2021
Get the result as a list of dicts
2122

@@ -32,14 +33,15 @@ async def main() -> None:
3233
list_dict_result: List[Dict[str, Any]] = query_result.result()
3334

3435
# Result as tuple
35-
list_tuple_result: List[Tuple[Tuple[str, typing.Any], ...]] = query_result.result(
36+
list_tuple_result: List[Tuple[str, typing.Any], ...] = query_result.result(
3637
as_tuple=True,
3738
)
3839
```
3940

4041
### As class
4142

4243
#### Parameters
44+
4345
- `as_class`: Custom class from Python.
4446
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
4547

@@ -68,6 +70,7 @@ async def main() -> None:
6870
### Row Factory
6971

7072
#### Parameters
73+
7174
- `row_factory`: custom callable object.
7275
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
7376

@@ -78,8 +81,9 @@ async def main() -> None:
7881
### Result
7982

8083
#### Parameters
84+
8185
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
82-
- `as_tuple`: return result as a tuple instead of dict.
86+
- `as_tuple`: Headless tuple output
8387

8488
Get the result as a dict
8589

@@ -96,14 +100,15 @@ async def main() -> None:
96100
dict_result: Dict[str, Any] = query_result.result()
97101

98102
# Result as tuple
99-
tuple_result: Tuple[Tuple[str, typing.Any], ...] = query_result.result(
103+
tuple_result: Tuple[str, typing.Any] = query_result.result(
100104
as_tuple=True,
101105
)
102106
```
103107

104108
### As class
105109

106110
#### Parameters
111+
107112
- `as_class`: Custom class from Python.
108113
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
109114

@@ -131,6 +136,7 @@ async def main() -> None:
131136
### Row Factory
132137

133138
#### Parameters
139+
134140
- `row_factory`: custom callable object.
135141
- `custom_decoders`: custom decoders for unsupported types. [Read more](/usage/types/advanced_type_usage.md)
136142

python/tests/test_query_results.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async def test_result_as_tuple(
3939

4040
assert isinstance(conn_result, QueryResult)
4141
assert isinstance(single_tuple_row, tuple)
42-
assert single_tuple_row[0][0] == "id"
42+
assert single_tuple_row[0] == 1
4343

4444

4545
async def test_single_result_as_dict(
@@ -73,4 +73,4 @@ async def test_single_result_as_tuple(
7373

7474
assert isinstance(conn_result, SingleQueryResult)
7575
assert isinstance(result_tuple, tuple)
76-
assert result_tuple[0][0] == "id"
76+
assert result_tuple[0] == 1

python/tests/test_value_converter.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -672,7 +672,7 @@ def point_encoder(point_bytes: bytes) -> str: # noqa: ARG001
672672
as_tuple=True,
673673
)
674674

675-
assert result[0][0][1] == "Just An Example"
675+
assert result[0][0] == "Just An Example"
676676

677677

678678
async def test_row_factory_query_result(

src/query_result.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,15 @@ fn row_to_tuple<'a>(
4242
postgres_row: &'a Row,
4343
custom_decoders: &Option<Py<PyDict>>,
4444
) -> PSQLPyResult<Bound<'a, PyTuple>> {
45-
let mut rows: Vec<Bound<'_, PyTuple>> = vec![];
45+
let columns = postgres_row.columns();
46+
let mut tuple_items = Vec::with_capacity(columns.len());
4647

47-
for (column_idx, column) in postgres_row.columns().iter().enumerate() {
48-
let python_type = postgres_to_py(py, postgres_row, column, column_idx, custom_decoders)?;
49-
let timed_tuple = PyTuple::new(py, vec![column.name().into_py_any(py)?, python_type])?;
50-
rows.push(timed_tuple);
48+
for (column_idx, column) in columns.iter().enumerate() {
49+
let python_value = postgres_to_py(py, postgres_row, column, column_idx, custom_decoders)?;
50+
tuple_items.push(python_value);
5151
}
52-
Ok(PyTuple::new(py, rows)?)
52+
53+
Ok(PyTuple::new(py, tuple_items)?)
5354
}
5455

5556
#[pyclass(name = "QueryResult")]

src/value_converter/to_python.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,7 @@ pub fn raw_bytes_data_process(
604604

605605
if let Ok(Some(py_encoder_func)) = py_encoder_func {
606606
return Ok(py_encoder_func
607-
.call((raw_bytes_data.to_vec(),), None)?
607+
.call1((PyBytes::new(py, raw_bytes_data),))?
608608
.unbind());
609609
}
610610
}

0 commit comments

Comments
 (0)