Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/substrait/simple_extension_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@ def build_type_variation(d: dict) -> se.TypeVariation:
def build_simple_extensions(d: dict) -> se.SimpleExtensions:
return se.SimpleExtensions(
urn=d["urn"],
description=d.get("description"),
metadata=d.get("metadata"),
dependencies=d.get("dependencies"),
types=[build_type_model(t) for t in d["types"]] if "types" in d else None,
Expand Down
12 changes: 12 additions & 0 deletions tests/extension_registry/test_registry_lookup.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,3 +225,15 @@ def test_quantile_binds_return_type_to_distribution(registry):
match = registry.lookup_function(_ARITHMETIC, "quantile", signature)
assert match is not None
assert match[1] == list_(fp64(nullable=False), nullable=True)


def test_decimal_avg_returns_nullable_decimal(registry):
# Since spec v0.105.0 ``avg`` over a decimal returns ``DECIMAL?<38,S>``: the
# average of an empty group is null even when the input is required.
match = registry.lookup_function(
"extension:io.substrait:functions_arithmetic_decimal",
"avg",
[decimal(2, 10, nullable=False)],
)
assert match is not None
assert match[1] == decimal(2, 38, nullable=True)
15 changes: 15 additions & 0 deletions tests/test_simple_extension_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,18 @@ def test_metadata_defaults_to_none_when_absent():
extensions = build_simple_extensions({"urn": "extension:test:no-metadata"})

assert extensions.metadata is None


def test_file_level_description_is_exposed():
"""Extension files can carry a top-level description (spec v0.105.0)."""
extensions = build_simple_extensions(
{"urn": "extension:test:described", "description": "Test functions.\n"}
)

assert extensions.description == "Test functions.\n"


def test_file_level_description_defaults_to_none_when_absent():
extensions = build_simple_extensions({"urn": "extension:test:undescribed"})

assert extensions.description is None
Loading