Qwiratry
A Raku architecture for declarative queries and flexible data walking, suitable for trees, tables, relational structures, logic-programming environments, and anything reasonably structured and traversable.
Overview
Qwiratry provides a general-purpose query execution pipeline that separates what to query from how to walk the data. This design enables the same query to work across different data models without forcing a single semantic interpretation.
The framework is built around five core architectural groups:
- Query Group: Declarative, immutable query specifications (what to find)
- Walker Group: Traversal strategies and execution plans (how to walk)
- Strategy Group: Element-level behavior and reusable processing logic
- Transformer Group: Declarative data transformations using molds
- Per-Traversal Group: Mutable state management (
Context) and incremental result streaming (QueryIterator)
Key Features
- Separation of Concerns: Queries describe intent; Walkers interpret and execute; QueryIterators yield results
- Reusability: Walkers can produce multiple iterators; queries can be reused and optimized
- Composability: Supports composite walker handovers for multi-domain queries
- Declarative Transformations: XSLT-like mold system for structured data manipulation
- Flexible Execution: Supports backtracking, multi-phase execution, and optimization planning
- Domain Flexibility: Works with trees (ASTs, XML, JSON), tables, logic programming, and hybrid systems
Installation
zef install Qwiratry
Or install from source:
git clone <repository-url>
cd raku-Qwiratry
zef install .
Either way, you'll need to set RAKUDO_RAKUAST=1 to run it
Quick Start
#!/usr/bin/env raku
use lib 'lib';
use Qwiratry::Mold::Slang;
use Qwiratry;
my %data-structure = type => 'element', value => 42;
# Declare a transformer with molds.
transformer MyTransform {
# Match and transform specific elements
mold when { .<type> eq 'element' } do {
%( |$_, transformed => True )
}
# Pass through by default
mold do {
$_
}
}
# Apply the transformer to the tree
say MyTransform(%data-structure);
Architecture
Qwiratry's architecture enables:
- Multiple traversal strategies for the same query
- Query optimization before execution
- Streaming results via lazy iterators
- Composite execution across multiple domains
- Pluggable strategies for element processing
Documentation
Requirements
- Raku 6.e or later
Slangify moduleImplementation::Loader v0.0.7 or later- Set
RAKUDO_RAKUAST=1 in your environment
License
Licensed under the same terms as Raku itself.
Author
Tim Nelson (wayland at wayland dot id dot au)