Data-layer-aware Ash introspection used before semantic mapping serialization.
AshR2RML never owns persistence. This module asks Ash and, when present, the active relational data layer for table/schema/column/join facts. Optional adapters are resolved dynamically so AshPostgres is not a mandatory runtime dependency merely to use the semantic core.
Summary
Functions
@spec column(module(), atom()) :: {:ok, String.t()} | {:error, AshR2RML.Refusal.t()}
@spec identities(module() | Spark.Dsl.t(), Spark.Dsl.t() | nil) :: [[atom()]]
@spec logical_table( module(), keyword() ) :: {:ok, AshR2RML.Mapping.LogicalTable.t()} | {:error, AshR2RML.Refusal.t()}
@spec relationship(module(), atom()) :: {:ok, map()} | {:error, AshR2RML.Refusal.t()}