Package com.orchestranetworks.query
Interface QueryBuilder
public interface QueryBuilder
A builder for query objects, capable of creating queries which reference
tables from multiple datasets.
The same builder can be used to create multiple queries.
Examples
The following query involves a single dataset:
Query<Tuple> query = dataset.createQuery("SELECT * FROM customer");
The following query involves a join between two datasets,
where dataset0
is the default dataset and
dataset1
is named s1
:
QueryBuilder builder = dataset0.createQueryBuilder().addDataset("s1", dataset1);
Query<Tuple> query = builder
.build("SELECT t1.c_custkey, t2.o_orderkey " +
"FROM customer t1 " +
"INNER JOIN s1.orders t2 " +
" ON t1.c_custkey=t2.o_custkey.c_custkey ");
The default dataset dataset0
will have the default name _public
.
- Since:
- 6.0.0
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionaddDataset
(String aName, Adaptation aDataset) Adds the specified dataset using the provided name.Creates a query from the specified SQL string, whose result will returnTuple
objects.<T> Query<T>
Creates a query from the specified SQL string, whose result will return objects of the specified type.
-
Method Details
-
addDataset
Adds the specified dataset using the provided name. If this builder previously contained a dataset with the same name, the old value is replaced.- Parameters:
aName
- the name under which the dataset is registered.aDataset
- the dataset to be registered.- Returns:
- the same builder object, with the result of this method applied. to it.
- Throws:
IllegalArgumentException
- if there are problems with the dataset, and it cannot be used.
-
build
Creates a query from the specified SQL string, whose result will returnTuple
objects.Here is an example of a query returning
Tuple
s with several elements:Query<Tuple> query = queryBuilder.build("SELECT id, name, dob FROM customer"); try (QueryResult<Tuple> result = query.getResult()) { for (Tuple t : result) { Integer id = t.get(0, Integer.class); String name = t.get(1, String.class); Date dob = t.get(2, Date.class); ... } }
Here is an example of a query returning
Tuple
s with one element (seebuild(String, Class)
for an alternative withoutTuple
):Query<Tuple> query = queryBuilder.build("SELECT name FROM customer"); try (QueryResult<Tuple> result = query.getResult()) { for (Tuple t : result) { String name = t.get(0, String.class); ... } }
- Parameters:
aSql
- the SQL string that will be used to create the query object.- Returns:
- a structurally valid query object which can be executed.
- Throws:
QueryParseException
- if the query string is not valid; for example, it contains syntax errors, it references missing tables, missing columns, etc.
-
build
Creates a query from the specified SQL string, whose result will return objects of the specified type. See SQL documentation to have more information about the mapping between SQL and Java types.Here is an example of a query returning
String
s (seebuild(String)
for an alternative withTuple
):Query<String> query = queryBuilder.build("SELECT name FROM customer", String.class); try (QueryResult<String> result = query.getResult()) { for (String name : result) { ... } }
A typical example of the usage of this method is a COUNT query, which returns one (and only one)
Long
result:Query<Long> query = queryBuilder.build("SELECT COUNT(*) FROM customer", Long.class); try (QueryResult<Long> result = query.getResult()) { Long count = result.iterator().next(); ... }
- Parameters:
aSql
- the SQL string that will be used to create the query object.aClass
- the class representing the row type of the query result; eitherTuple
, or in the case of a 1-element row, the mapped Java type of this element.- Returns:
- a structurally valid query object which can be executed.
- Throws:
QueryParseException
- if the SQL query is not valid; for example, it contains syntax errors, it references missing tables, missing columns, etc.
-