xotl.ql.interfaces
– The core interfaces¶
Interfaces that describe the major types used in the Query Language API, and some internal interfaces as well.
Notice that we only aim for documentation of the types and not implementation.
We also explicitly divide the type of the objects from the type of object constructors. Given that types in Python are callable the type of object constructors can be provided via the __init__ method.
-
interface
xotl.ql.interfaces.
QueryObject
¶ The required API-level interface for query objects.
Query objects provide access to the QST for the query.
-
qst
¶ The Query Syntax Tree
-
locals
¶ A MappingView for the locals in the query scope. See
get_name()
-
globals
¶ A MappingView for the globals in the query scope. See
get_name()
-
get_name
(name, only_globals=False)¶ Give the value for the name.
Queries are defined in a scope where they could access any name (e.g. variables). The translator may need to access the value of such names.
Get name will prefer locals over globals unless only_globals is True.
-
-
interface
xotl.ql.interfaces.
QueryObjectType
¶ A QueryObject factory.
-
frame_type
¶ Either a
FrameType
object or the fully qualified name of such an object. This object is used
-
__call__
(qst, frame)¶ Return an instance of a
QueryObject
.Parameters: - qst – The Query Syntax Tree. It will become the attribute
QueryObject.qst
. - frame – An instance of a
Frame
object. This should be used to provide the values of the attributesQueryObject.locals
andQueryObject.globals
and also to implement the methodQueryObject.get_name()
.
Different implementations of the QueryObject may required or support additional keyword arguments. For instance, the type of a
PartionableQueryObject
may allow for a partition argument.- qst – The Query Syntax Tree. It will become the attribute
-
-
interface
xotl.ql.interfaces.
Frame
¶ A object that represents a Python stack frame.
This is an unavoidable requirement consequence of the query expression being a generator object that may access names which are not known to the translator.
The attributes f_locals and f_globals are required to be mappings (usually immutable) or mapping views that give access to the values of locals and globals of a stack frame.
-
f_locals
¶ A mapping of the locals of this frame. Though not required this could be a mapping view provided it has the mapping interface.
-
f_globals
¶ A mapping of the globals of this frame. Though not required this could be a mapping view provided it has the mapping interface.
-
-
interface
xotl.ql.interfaces.
FrameType
¶ A Frame factory.
-
interface
xotl.ql.interfaces.
QueryTranslator
¶ A query translator.
Note
Since Python classes are callable, you may implement a translator/execution plan in a single class:
>>> class ExecutionPlan(object): ... def __init__(self, query, **kwargs): ... pass ... ... def __call__(self, **options): ... pass ... ... def __iter__(self): ... return self()
However this may hurt some extensions. For instance, below we describe a couple of possible extensions for translators and plans which are not easily implemented in a single unit of code.
-
__call__
(query)¶ Return an execution plan for the given query.
Parameters: query – The query to be translated. Translators must allow this object to be either a query expression or a query object that complies with the interface QueryObject
.Translators are allowed to provide other keyword-only arguments. Translators’ authors are encouraged to properly document those arguments.
Returns: The query execution plan. Return type: QueryExecutionPlan
-
-
interface
xotl.ql.interfaces.
QueryExecutionPlan
¶ Required API-level interface for a query execution plan.
-
query
¶ The original query object this plan was built from. Even if the translator was given a query expression directly, like in most of our examples, this must be a query object.
-
__call__
()¶ Execution plans are callable.
Return an iterator. The returned iterator must produce the objects retrieved from the query. Though the plan itself is reusable and can be called several times, the iterator obtained from this method will be exhausted.
Translators are required to properly document the optional keyword arguments. Positional arguments are not allowed. All arguments must be optional.
-
__iter__
()¶ Execution plans are iterable.
This is exactly the same as calling the plan without any arguments:
plan()
.
-
-
interface
xotl.ql.interfaces.
QueryTranslatorExplainExtension
¶ Extends:
xotl.ql.interfaces.QueryTranslator
This interface documents optional-methods for query translators that are deemed required to provide interactive access to the translator.
-
explain
(query)¶ Prints information about how the query might be translated/executed.
The signature should allow the same arguments as the __call__ method of translators.
-
-
interface
xotl.ql.interfaces.
QueryExecutionPlanExplainExtension
¶ Extends:
xotl.ql.interfaces.QueryExecutionPlan
-
explain
()¶ Prints information about this plan of execution.
The details of the information are specific to the kind of plan.
-