Describe and Validate
Demonstrates DeQL’s introspection capabilities: inspecting individual definitions with DESCRIBE, checking system consistency with VALIDATE DEREG, and exporting the full system with EXPORT DEREG.
Define a Small System
Section titled “Define a Small System”CREATE AGGREGATE Ticket;
CREATE COMMAND OpenTicket ( ticket_id STRING, reporter_id STRING, summary STRING, priority STRING);
CREATE COMMAND CloseTicket ( ticket_id STRING, resolver_id STRING, resolution STRING);
CREATE EVENT TicketOpened ( reporter_id STRING, summary STRING, priority STRING);
CREATE EVENT TicketClosed ( resolver_id STRING, resolution STRING);
CREATE DECISION OpenTicketFOR TicketON COMMAND OpenTicketEMIT AS SELECT EVENT TicketOpened ( reporter_id := :reporter_id, summary := :summary, priority := :priority );
CREATE DECISION CloseTicketFOR TicketON COMMAND CloseTicketSTATE AS SELECT LAST(event_type) AS current_status FROM DeReg."Ticket$Events" WHERE stream_id = :ticket_idEMIT AS SELECT EVENT TicketClosed ( resolver_id := :resolver_id, resolution := :resolution ) WHERE current_status = 'TicketOpened';
CREATE PROJECTION OpenTickets ASSELECT stream_id AS ticket_id, LAST(data.reporter_id) AS reporter, LAST(data.summary) AS summary, LAST(data.priority) AS priorityFROM DeReg."Ticket$Events"WHERE event_type = 'TicketOpened' AND stream_id NOT IN ( SELECT stream_id FROM DeReg."Ticket$Events" WHERE event_type = 'TicketClosed' )GROUP BY stream_id;DESCRIBE — Inspect Definitions
Section titled “DESCRIBE — Inspect Definitions”Inspect the aggregate:
DESCRIBE AGGREGATE Ticket;
Aggregate: Ticket Events: TicketClosed, TicketOpened Decisions: CloseTicket, OpenTicketInspect a command:
DESCRIBE COMMAND OpenTicket;
Command: OpenTicket Fields: ticket_id STRING reporter_id STRING summary STRING priority STRINGInspect a decision — shows the full STATE AS, EMIT AS, and guard:
DESCRIBE DECISION CloseTicket;
Decision: CloseTicket Aggregate: Ticket Command: CloseTicket State: SELECT LAST(event_type) AS current_status FROM DeReg."Ticket$Events" WHERE stream_id = :ticket_id Emit: SELECT EVENT TicketClosed ( resolver_id := :resolver_id resolution := :resolution ) Guard: current_status = 'TicketOpened'Inspect a projection:
DESCRIBE PROJECTION OpenTickets;
Projection: OpenTickets Query: SELECT stream_id AS ticket_id, LAST(data.reporter_id) AS reporter, LAST(data.summary) AS summary, LAST(data.priority) AS priority FROM DeReg."Ticket$Events" WHERE event_type = 'TicketOpened' AND stream_id NOT IN ( SELECT stream_id FROM DeReg."Ticket$Events" WHERE event_type = 'TicketClosed' ) GROUP BY stream_idVALIDATE DEREG — Check Consistency
Section titled “VALIDATE DEREG — Check Consistency”Verifies that all cross-references are consistent — every command has a decision, every event is referenced, every aggregate is used:
VALIDATE DEREG;
DeReg validation passed — all cross-references are consistent.EXPORT DEREG — Dump Full System
Section titled “EXPORT DEREG — Dump Full System”Produces a complete, portable snapshot of every registered concept:
EXPORT DEREG;
-- AggregatesCREATE AGGREGATE Ticket;
-- CommandsCREATE COMMAND CloseTicket ( ticket_id STRING, resolver_id STRING, resolution STRING);
CREATE COMMAND OpenTicket ( ticket_id STRING, reporter_id STRING, summary STRING, priority STRING);
-- EventsCREATE EVENT TicketClosed ( resolver_id STRING, resolution STRING);
CREATE EVENT TicketOpened ( reporter_id STRING, summary STRING, priority STRING);
-- DecisionsCREATE DECISION CloseTicketFOR TicketON COMMAND CloseTicketSTATE AS SELECT LAST(event_type) AS current_status FROM DeReg."Ticket$Events" WHERE stream_id = :ticket_idEMIT AS SELECT EVENT TicketClosed ( resolver_id := :resolver_id, resolution := :resolution ) WHERE current_status = 'TicketOpened';
CREATE DECISION OpenTicketFOR TicketON COMMAND OpenTicketEMIT AS SELECT EVENT TicketOpened ( reporter_id := :reporter_id, summary := :summary, priority := :priority );
-- ProjectionsCREATE PROJECTION OpenTickets ASSELECT stream_id AS ticket_id, LAST(data.reporter_id) AS reporter, LAST(data.summary) AS summary, LAST(data.priority) AS priorityFROM DeReg."Ticket$Events"WHERE event_type = 'TicketOpened' AND stream_id NOT IN ( SELECT stream_id FROM DeReg."Ticket$Events" WHERE event_type = 'TicketClosed' )GROUP BY stream_id;What This Demonstrates
Section titled “What This Demonstrates”- DESCRIBE for inspecting any registered concept — aggregates, commands, decisions, projections
- VALIDATE DEREG for consistency checking across the entire system
- EXPORT DEREG for producing a portable, complete system snapshot
- Introspection without execution — understand the system before running anything