From fe9a575e9a3ddbbb642f3dc58e696f94f8680813 Mon Sep 17 00:00:00 2001 From: amochin Date: Sat, 15 Feb 2025 10:31:47 +0200 Subject: [PATCH] Support RF dotted dictionary access syntax when returning query results as a dictionary --- src/DatabaseLibrary/query.py | 3 ++- test/tests/common_tests/basic_tests.robot | 13 +++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/DatabaseLibrary/query.py b/src/DatabaseLibrary/query.py index 43e146f..5b4f0c0 100644 --- a/src/DatabaseLibrary/query.py +++ b/src/DatabaseLibrary/query.py @@ -19,6 +19,7 @@ from typing import List, Optional, Tuple from robot.api import logger +from robot.utils.dotdict import DotDict from .connection_manager import Connection from .params_decorator import renamed_args @@ -91,7 +92,7 @@ def query( col_names = [c[0] for c in cur.description] self._log_query_results(col_names, all_rows) if return_dict: - return [dict(zip(col_names, row)) for row in all_rows] + return [DotDict(zip(col_names, row)) for row in all_rows] return all_rows except Exception as e: self._rollback_and_raise(db_connection, no_transaction, e) diff --git a/test/tests/common_tests/basic_tests.robot b/test/tests/common_tests/basic_tests.robot index 6bcc44e..adbd93e 100644 --- a/test/tests/common_tests/basic_tests.robot +++ b/test/tests/common_tests/basic_tests.robot @@ -113,6 +113,19 @@ Verify Query - Get results as a list of dictionaries Should Be Equal As Strings ${value 1} Franz Allan Should Be Equal As Strings ${value 2} Jerry +Return As Dictionary - Dotted Syntax + ${output}= Query SELECT * FROM person return_dict=True + ${field_names}= Get Dictionary Keys ${output}[0] + IF "FIRST_NAME" in $field_names + VAR ${field_name}= FIRST_NAME + ELSE IF "first_name" in $field_names + VAR ${field_name}= first_name + ELSE + FAIL Unexpected field name in dictionary + END + Should Be Equal As Strings ${output[0].${field_name}} Franz Allan + Should Be Equal As Strings ${output[1].${field_name}} Jerry + Verify Execute SQL String - Row Count person table ${output}= Execute SQL String SELECT COUNT(*) FROM person Log ${output}