in mrs_plugin/lib/db_objects.py [0:0]
def walk(fields, parent_id=None, level=1, add_data_type=False, current_object=None):
result = ""
filtered_fields = list(
filter(
lambda f: f.get("reduceToValueOfFieldId", {}).get(
"reduce_to_value_of_field_id"
),
fields,
)
)
reduce_to_field_ids = [
f.get("reduceToValueOfFieldId", {}).get("reduce_to_value_of_field_id", "")
for f in filtered_fields
]
indent = " " * level * 4
for field in fields:
if field.get("parent_reference_id") != parent_id:
continue
if not field.get("object_reference") and (
field["enabled"] or field["id"] in reduce_to_field_ids
):
attributes = []
inout = f'@{"IN" if field["db_column"].get("in") else ""}{"OUT" if field["db_column"].get("out") else ""}'
inout != "@" and attributes.append(inout)
field.get("db_column", {}).get("is_primary", False) and attributes.append("@KEY")
field.get("no_check") and attributes.append("@NOCHECK")
field.get("no_update") and attributes.append("@NOUPDATE")
field.get("allow_sorting") and attributes.append("@SORTABLE")
not field.get("allow_filtering") and attributes.append("@NOFILTERING")
add_data_type and field["db_column"] and field["db_column"][
"datatype"
] and attributes.append(f'@DATATYPE("{field["db_column"]["datatype"]}")')
if field["id"] == current_object.get("row_ownership_field_id", None):
attributes.append("@ROWOWNERSHIP")
result += f"{indent}{field['name']}: {field['db_column']['name']}"
if attributes:
result = f"{result} {' '.join(attributes)}"
result = f"{result},\n"
elif (
field.get("object_reference")
and field["object_reference"].get("unnest")
or field["enabled"]
):
ref_table = f'{field["object_reference"]["reference_mapping"]["referenced_schema"]}.{field["object_reference"]["reference_mapping"]["referenced_table"]}'
attributes = []
options = field["object_reference"].get("options", {})
if options is None:
options = {}
if options.get("dataMappingViewInsert", False):
attributes.append("@INSERT")
if options.get("dataMappingViewUpdate", False):
attributes.append("@UPDATE")
if options.get("dataMappingViewDelete", False):
attributes.append("@DELETE")
if options.get("dataMappingViewNoCheck", False):
attributes.append("@NOCHECK")
if field["object_reference"]["unnest"] or field["object_reference"].get(
"reduce_to_value_of_field_id"
):
attributes.append("@UNNEST")
children = core.cut_last_comma(
walk(
fields=fields,
parent_id=field["represents_reference_id"],
level=level + 1,
add_data_type=add_data_type,
current_object=field["object_reference"],
)
)
result = f'{result}{indent}{field["name"]}: {ref_table}'
if attributes:
result = f'{result} {" ".join(attributes)}'
if children:
result = f"{result} {{\n{children}\n{indent}}},\n"
return result