Description
The syntax tree a query parses into.
Nodes live in one flat vector with every reference an index, the same shape the RDF and N3 term models use. An expression tree, a pattern tree, and a projection list are all recursive in different ways, and one flat vector removes all three recursions at once.
The tree records what was written rather than what it means. "?x" and "$x" are the same variable and are stored the same way, but a FILTER containing "1 + 2" keeps the addition rather than folding it: this is a syntax tree, and a query that is written back should be the query that was read.
Add_Child
procedure Add_Child (Into : in out Builder; Parent, Item : Node_Reference)
Attach a child to a node, in order.
Parameters
- Into
- Parent
- Item
Add_Node
function Add_Node
(Into : in out Builder;
Variant : Node_Kind;
Text : String := "";
Detail : String := "") return Node_Reference
Add a node and return a reference to it.
Parameters
- Into
- Variant
- Text
- Detail
Return value
Add_Prefix
procedure Add_Prefix (Into : in out Builder; Name, Namespace : String)
Record a prefix declaration.
Parameters
- Into
- Name
- Namespace
Base
function Base (Value : Query) return String
Return the base IRI declared by the prologue, or an empty string.
Parameters
- Value
Query to inspect
Return value
The base IRI
Builder
type Builder is limited private;
Assembles a query. The parser is the only intended user; it is here rather than in a child of this package so that reading a tree and building one stay separate concerns with separate APIs.
Child
function Child
(Into : Builder;
Node : Node_Reference;
Index : Positive) return Node_Reference
Parameters
- Into
- Node
- Index
Return value
Child
function Child
(Value : Query;
Node : Node_Reference;
Index : Positive) return Node_Reference
Return one child of a node.
Parameters
- Value
Query holding the node
- Node
The node
- Index
One-based child position
Return value
The child
Child_Count
function Child_Count
(Into : Builder; Node : Node_Reference) return Natural
Parameters
- Into
- Node
Return value
Child_Count
function Child_Count
(Value : Query; Node : Node_Reference) return Natural
Return how many children a node has.
Parameters
- Value
Query holding the node
- Node
The node
Return value
Child count
Dataset
function Dataset (Value : Query) return Node_Reference
Parameters
- Value
Return value
Describe_Targets
function Describe_Targets (Value : Query) return Node_Reference
Parameters
- Value
Return value
Detail
function Detail (Value : Query; Node : Node_Reference) return String
Return a node's secondary text: a prefixed name's prefix, a literal's language tag, or a BIND target.
Parameters
- Value
Query holding the node
- Node
The node
Return value
The text, empty where the kind carries none
Duplicates
function Duplicates (Value : Query) return Duplicates_Kind
Return the SELECT duplicate mode.
Parameters
- Value
Query to inspect
Return value
The duplicate mode
Duplicates_Kind
type Duplicates_Kind is (All_Solutions, Distinct_Solutions,
Reduced_Solutions);
Duplicate handling on a SELECT.
Enumeration literals
- All_Solutions
- Distinct_Solutions
- Reduced_Solutions
Form
function Form (Value : Query) return Query_Form
Return the query's form.
Parameters
- Value
Query to inspect
Return value
The query form
Group_By
function Group_By (Value : Query) return Node_Reference
Parameters
- Value
Return value
Having
function Having (Value : Query) return Node_Reference
Parameters
- Value
Return value
Kind
function Kind (Into : Builder; Node : Node_Reference) return Node_Kind
Read one node of the tree still being built. The parser asks questions of nodes it has just made, and producing a whole Query to answer one would copy the tree each time it was asked.
Parameters
- Into
- Node
Return value
Kind
function Kind (Value : Query; Node : Node_Reference) return Node_Kind
Return a node's kind.
Parameters
- Value
Query holding the node
- Node
The node
Return value
The node's kind
Limit
function Limit (Value : Query) return Integer
Return the LIMIT or OFFSET, or -1 when absent.
Parameters
- Value
Query to inspect
Return value
The bound, or -1
No_Node
No_Node : constant Node_Reference := 0;
No node.
Node_Kind
type Node_Kind is
IRI_Node, Prefixed_Node, Blank_Node, Literal_Node, Variable_Node,
A_Node,
Triple_Node,
Group_Node,
,
…,
Projection_Node);
What a node in the tree is.
Enumeration literals
- IRI_Node
Terms
- Prefixed_Node
- Blank_Node
- Literal_Node
- Variable_Node
- A_Node
- Triple_Node
Patterns one subject-predicate-object
- Group_Node
{ ... }
- Optional_Node
OPTIONAL { ... }
- Union_Node
{ ... } UNION { ... }
- Minus_Node
MINUS { ... }
- Graph_Node
GRAPH term { ... }
- Service_Node
SERVICE term { ... }
- Filter_Node
FILTER expression
- Bind_Node
BIND (expression AS ?v)
- Values_Node
VALUES ...
- Subquery_Node
{ SELECT ... }
- Triple_Term_Node
<<( s p o )>>
- Reified_Node
<< s p o ~r >>
- Dataset_Node
FROM, FROM NAMED
- Exists_Node
EXISTS, NOT EXISTS
- Collection_Node
( a b c ) in a pattern
- Property_List_Node
[ p o ] in a pattern
- Or_Node
Expressions
- And_Node
- Compare_Node
=, !=, <, >, <=, >=
- Arithmetic_Node
+, -, *, /
- Unary_Node
!, unary + and -
- Call_Node
a function or built-in call
- In_Node
IN and NOT IN
- Order_Term_Node
Clauses one ORDER BY key
- Projection_Node
one selected item
Node_Reference
type Node_Reference is new Natural;
Reference to one node, or zero for none.
Offset
function Offset (Value : Query) return Integer
Parameters
- Value
Return value
Order_By
function Order_By (Value : Query) return Node_Reference
Parameters
- Value
Return value
Prefix_Count
function Prefix_Count (Value : Query) return Natural
Return the number of prefix declarations.
Parameters
- Value
Query to inspect
Return value
Declaration count
Prefix_Name
function Prefix_Name (Value : Query; Index : Positive) return String
Return one prefix name, without its colon.
Parameters
- Value
Query to inspect
- Index
One-based declaration position
Return value
The prefix name
Prefix_Namespace
function Prefix_Namespace
(Value : Query; Index : Positive) return String
Return one prefix's namespace.
Parameters
- Value
Query to inspect
- Index
One-based declaration position
Return value
The namespace IRI
Projection
function Projection (Value : Query) return Node_Reference
Return the projection, GROUP BY, ORDER BY, or CONSTRUCT template roots. Each is a list node whose children are the individual items.
Parameters
- Value
Query to inspect
Return value
The list root, or No_Node
Query
type Query (<>) is private;
A parsed query.
Query_Form
type Query_Form is
(Select_Query, Ask_Query, Construct_Query, Describe_Query);
What kind of query this is.
Enumeration literals
- Select_Query
SELECT
- Ask_Query
ASK
- Construct_Query
CONSTRUCT
- Describe_Query
DESCRIBE
Selects_All
function Selects_All (Value : Query) return Boolean
Report whether a SELECT projects every variable, written "*".
Parameters
- Value
Query to inspect
Return value
True for SELECT *
Set_Base
procedure Set_Base (Into : in out Builder; Value : String)
Record the parts of the query that are not nodes.
Parameters
- Into
- Value
Set_Dataset
procedure Set_Dataset (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Describe
procedure Set_Describe (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Duplicates
procedure Set_Duplicates (Into : in out Builder; Value : Duplicates_Kind)
Parameters
- Into
- Value
Set_Group_By
procedure Set_Group_By (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Having
procedure Set_Having (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Limit
procedure Set_Limit (Into : in out Builder; Value : Integer)
Parameters
- Into
- Value
Set_Offset
procedure Set_Offset (Into : in out Builder; Value : Integer)
Parameters
- Into
- Value
Set_Order_By
procedure Set_Order_By (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Projection
procedure Set_Projection (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Selects_All
procedure Set_Selects_All (Into : in out Builder; Value : Boolean)
Parameters
- Into
- Value
Set_Template
procedure Set_Template (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Set_Version
procedure Set_Version (Into : in out Builder; Value : String)
Parameters
- Into
- Value
Set_Where
procedure Set_Where (Into : in out Builder; Value : Node_Reference)
Parameters
- Into
- Value
Start
procedure Start (Into : in out Builder; Value : Query_Form)
Begin a query of the given form.
Parameters
- Into
- Value
Template
function Template (Value : Query) return Node_Reference
Parameters
- Value
Return value
Text
function Text (Into : Builder; Node : Node_Reference) return String
Parameters
- Into
- Node
Return value
Text
function Text (Value : Query; Node : Node_Reference) return String
Return a node's primary text: an IRI, a variable name, a literal's lexical form, an operator, or a function name.
Parameters
- Value
Query holding the node
- Node
The node
Return value
The text, empty where the kind carries none
To_Query
function To_Query (Into : in out Builder) return Query
Finish, producing the query. The nodes move into it rather than being copied, which is why the builder is left empty rather than reusable.
Parameters
- Into
Return value
Version
function Version (Value : Query) return String
Return the VERSION declaration, or an empty string.
Parameters
- Value
Query to inspect
Return value
The declared version
Where_Clause
function Where_Clause (Into : Builder) return Node_Reference
Return the WHERE clause recorded so far, or No_Node.
Parameters
- Into
Return value
Where_Clause
function Where_Clause (Value : Query) return Node_Reference
Return the root of the WHERE clause, or No_Node for a query with none, which only DESCRIBE may be.
Parameters
- Value
Query to inspect
Return value
The pattern root