Skip to content

Commit

Permalink
#191: Renamed parameter to parameters to match JSON input in use…
Browse files Browse the repository at this point in the history
…r guide
  • Loading branch information
ckunki committed Oct 9, 2024
1 parent e608398 commit 4dd2177
Show file tree
Hide file tree
Showing 7 changed files with 82 additions and 77 deletions.
1 change: 1 addition & 0 deletions doc/changes/changes_0.1.0.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ Code name:
* #184: Updated micromamba to the latest version 2.0.0
* #176: Updated usage of `exasol-bucketfs` to new API
* #185: Removed directory and script for building SLC AAF
* #191: Renamed `parameter` to `parameters` to match JSON input in user guide

### Documentation

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ query_handler_runner = require("query_handler_runner")
---
-- This is the main function of the Query Loop.
--
-- @param json_str input parameters as JSON string
-- @param exa the database context (`exa`) of the Lua script
-- @param json_str input parameters as JSON string
-- @param exa the database context (`exa`) of the Lua script
--
function query_handler_runner_main(json_str, exa)
return query_handler_runner.run(json_str, exa)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@

class JsonUDFQueryHandler(UDFQueryHandler):

def __init__(self, parameter: str,
def __init__(self, parameters: str,
query_handler_context: ScopeQueryHandlerContext,
wrapped_json_query_handler_class: Type[JSONQueryHandler]):
super().__init__(parameter, query_handler_context)
json_parameter = json.loads(parameter)
super().__init__(parameters, query_handler_context)
json_parameter = json.loads(parameters)
self._wrapped_json_query_handler = wrapped_json_query_handler_class(
parameter=json_parameter,
parameters=json_parameter,
query_handler_context=query_handler_context)

def start(self) -> Union[Continue, Finish[str]]:
Expand All @@ -46,8 +46,8 @@ class JsonUDFQueryHandlerFactory(UDFQueryHandlerFactory, ABC):
def __init__(self, wrapped_json_query_handler_class: Type[JSONQueryHandler]):
self._wrapped_json_query_handler_class = wrapped_json_query_handler_class

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return JsonUDFQueryHandler(
parameter=parameter,
parameters=parameters,
query_handler_context=query_handler_context,
wrapped_json_query_handler_class=self._wrapped_json_query_handler_class)
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@ class UDFQueryHandlerFactory(ABC):
"""
An abstract class for factories which are injected by name to the QueryHandlerRunnerUDF
which then will create the instance from the name.
Parameters is of type ``str``. If you want to pass multiple parameters to
a query handler then these need to be encoded into a string, e.g. with
``json.dumps()``.
"""

@abstractmethod
def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
"""Creates a UDFQueryHandler"""
40 changes: 20 additions & 20 deletions tests/test_package/test_query_handlers/query_handler_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@

class QueryHandlerTestWithOneIteration(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
if not isinstance(parameter, str):
raise AssertionError(f"Expected parameter={parameter} to be a string.")
if parameter != TEST_INPUT:
raise AssertionError(f"Expected parameter={parameter} to be '{TEST_INPUT}'.")
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
if not isinstance(parameters, str):
raise AssertionError(f"Expected parameters={parameters} to be a string.")
if parameters != TEST_INPUT:
raise AssertionError(f"Expected parameters={parameters} to be '{TEST_INPUT}'.")

def start(self) -> Union[Continue, Finish[ResultType]]:
return Finish(result=FINAL_RESULT)
Expand All @@ -43,14 +43,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class QueryHandlerTestWithOneIterationFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithOneIteration(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithOneIteration(parameters, query_handler_context)


class QueryHandlerTestWithTwoIteration(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)

def start(self) -> Union[Continue, Finish[str]]:
return_query = 'SELECT 1 AS "a", 2 AS "b" FROM DUAL'
Expand Down Expand Up @@ -80,13 +80,13 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class QueryHandlerTestWithTwoIterationFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithTwoIteration(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithTwoIteration(parameters, query_handler_context)


class QueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(UDFQueryHandler):
def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self.child = None

def start(self) -> Union[Continue, Finish[str]]:
Expand All @@ -99,14 +99,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class QueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContextFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(parameters, query_handler_context)


class QueryHandlerWithOneIterationWithNotReleasedTemporaryObject(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self.proxy = None
self.child = None

Expand All @@ -121,5 +121,5 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class QueryHandlerWithOneIterationWithNotReleasedTemporaryObjectFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerWithOneIterationWithNotReleasedTemporaryObject(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerWithOneIterationWithNotReleasedTemporaryObject(parameters, query_handler_context)
58 changes: 29 additions & 29 deletions tests/unit_tests/udf_framework/mock_query_handlers.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@

class MockQueryHandlerWithOneIteration(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
if not isinstance(parameter, str):
raise AssertionError(f"Expected parameter={parameter} to be a string.")
if parameter != TEST_INPUT:
raise AssertionError(f"Expected parameter={parameter} to be '{TEST_INPUT}'.")
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
if not isinstance(parameters, str):
raise AssertionError(f"Expected parameters={parameters} to be a string.")
if parameters != TEST_INPUT:
raise AssertionError(f"Expected parameters={parameters} to be '{TEST_INPUT}'.")

def start(self) -> Union[Continue, Finish[str]]:
return Finish(result=FINAL_RESULT)
Expand All @@ -43,16 +43,16 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class MockQueryHandlerWithOneIterationFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIteration(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIteration(parameters, query_handler_context)


class MockQueryHandlerWithTwoIterations(UDFQueryHandler):
def __init__(self,
parameter: str,
parameters: str,
query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
self._parameter = parameter
super().__init__(parameters, query_handler_context)
self._parameters = parameters

def start(self) -> Union[Continue, Finish[str]]:
return_query = "SELECT a, table1.b, c FROM table1, table2 " \
Expand Down Expand Up @@ -84,14 +84,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class MockQueryHandlerWithTwoIterationsFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithTwoIterations(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithTwoIterations(parameters, query_handler_context)


class QueryHandlerTestWithOneIterationAndTempTable(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)

def start(self) -> Union[Continue, Finish[str]]:
self._query_handler_context.get_temporary_table_name()
Expand All @@ -103,14 +103,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class QueryHandlerTestWithOneIterationAndTempTableFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithOneIterationAndTempTable(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return QueryHandlerTestWithOneIterationAndTempTable(parameters, query_handler_context)


class MockQueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self.child = None

def start(self) -> Union[Continue, Finish[str]]:
Expand All @@ -123,14 +123,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class MockQueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContextFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIterationWithNotReleasedChildQueryHandlerContext(parameters, query_handler_context)


class MockQueryHandlerWithOneIterationWithNotReleasedTemporaryObject(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self.proxy = None
self.child = None

Expand All @@ -145,14 +145,14 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class MockQueryHandlerWithOneIterationWithNotReleasedTemporaryObjectFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIterationWithNotReleasedTemporaryObject(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerWithOneIterationWithNotReleasedTemporaryObject(parameters, query_handler_context)


class MockQueryHandlerUsingConnection(UDFQueryHandler):

def __init__(self, parameter: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: str, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)

def start(self) -> Union[Continue, Finish[str]]:
connection = self._query_handler_context.get_connection(TEST_CONNECTION)
Expand All @@ -165,5 +165,5 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini

class MockQueryHandlerUsingConnectionFactory(UDFQueryHandlerFactory):

def create(self, parameter: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerUsingConnection(parameter, query_handler_context)
def create(self, parameters: str, query_handler_context: ScopeQueryHandlerContext) -> UDFQueryHandler:
return MockQueryHandlerUsingConnection(parameters, query_handler_context)
38 changes: 19 additions & 19 deletions tests/unit_tests/udf_framework/test_json_udf_query_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@

class ConstructorTestJSONQueryHandler(JSONQueryHandler):

def __init__(self, parameter: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
def __init__(self, parameters: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)

def start(self) -> Union[Continue, Finish[JSONType]]:
raise AssertionError("Should not be called")
Expand All @@ -30,12 +30,12 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini


def test_constructor_valid_json(top_level_query_handler_context):
parameter = {
parameters = {
"test_key": "test_value"
}
json_str_parameter = json.dumps(parameter)
json_str_parameter = json.dumps(parameters)
query_handler = JsonUDFQueryHandler(
parameter=json_str_parameter,
parameters=json_str_parameter,
query_handler_context=top_level_query_handler_context,
wrapped_json_query_handler_class=ConstructorTestJSONQueryHandler
)
Expand All @@ -44,32 +44,32 @@ def test_constructor_valid_json(top_level_query_handler_context):
def test_constructor_invalid_json(top_level_query_handler_context):
with pytest.raises(JSONDecodeError):
query_handler = JsonUDFQueryHandler(
parameter="'abc'='ced'",
parameters="'abc'='ced'",
query_handler_context=top_level_query_handler_context,
wrapped_json_query_handler_class=ConstructorTestJSONQueryHandler
)


class StartReturnParameterTestJSONQueryHandler(JSONQueryHandler):

def __init__(self, parameter: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
self._parameter = parameter
def __init__(self, parameters: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self._parameters = parameters

def start(self) -> Union[Continue, Finish[JSONType]]:
return Finish[JSONType](self._parameter)
return Finish[JSONType](self._parameters)

def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Finish[JSONType]]:
raise AssertionError("Should not be called")


def test_start_return_parameter(top_level_query_handler_context):
parameter = {
parameters = {
"test_key": "test_value"
}
json_str_parameter = json.dumps(parameter)
json_str_parameter = json.dumps(parameters)
query_handler = JsonUDFQueryHandler(
parameter=json_str_parameter,
parameters=json_str_parameter,
query_handler_context=top_level_query_handler_context,
wrapped_json_query_handler_class=StartReturnParameterTestJSONQueryHandler
)
Expand All @@ -79,9 +79,9 @@ def test_start_return_parameter(top_level_query_handler_context):

class HandleQueryResultCheckQueryResultTestJSONQueryHandler(JSONQueryHandler):

def __init__(self, parameter: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameter, query_handler_context)
self._parameter = parameter
def __init__(self, parameters: JSONType, query_handler_context: ScopeQueryHandlerContext):
super().__init__(parameters, query_handler_context)
self._parameters = parameters

def start(self) -> Union[Continue, Finish[JSONType]]:
raise AssertionError("Should not be called")
Expand All @@ -92,12 +92,12 @@ def handle_query_result(self, query_result: QueryResult) -> Union[Continue, Fini


def test_handle_query_result_check_query_result(top_level_query_handler_context):
parameter = {
parameters = {
"test_key": "test_value"
}
json_str_parameter = json.dumps(parameter)
json_str_parameter = json.dumps(parameters)
query_handler = JsonUDFQueryHandler(
parameter=json_str_parameter,
parameters=json_str_parameter,
query_handler_context=top_level_query_handler_context,
wrapped_json_query_handler_class=HandleQueryResultCheckQueryResultTestJSONQueryHandler
)
Expand Down

0 comments on commit 4dd2177

Please sign in to comment.