Class QueryBuilder
- java.lang.Object
-
- org.openprovenance.prov.template.compiler.sql.QueryBuilder
-
public class QueryBuilder extends Object
Provides a fluent API for programmatically constructing and executing SQL queries.
-
-
Field Summary
Fields Modifier and Type Field Description protected PrettyPrinterprettyPrinter
-
Constructor Summary
Constructors Constructor Description QueryBuilder()QueryBuilder(ByteArrayOutputStream o)Constructs a query builder from an existing SQL query.QueryBuilder(PrettyPrinter pp)
-
Method Summary
Modifier and Type Method Description QueryBuilderalias(String alias)Appends aliasstatic StringallOf(String... predicates)Creates an "and" conditional group.QueryBuilderand(String... predicates)Creates an "and" conditional.QueryBuilderandThen(Supplier<Void> supplier)static StringanyOf(String... predicates)Creates an "or" conditional group.QueryBuilderargs(List<?> values)Appends arguments to a function callQueryBuilderbodyEnd(String key)Appends body endQueryBuilderbodyStart(String key)Appends body startQueryBuildercomment(String comment)Appends commentstatic Function<PrettyPrinter,org.openprovenance.prov.template.compiler.sql.QueryBuilder.FunctionQueryBuilder>createFunction(String fun)Creates a "create function" statement.QueryBuildercte(Map<String,Function<PrettyPrinter,?>> values)Appends commont table expression CTEQueryBuilderdefaultValues()Appends DEFAULT VALUESstatic QueryBuilderdeleteFrom(String table)Creates a "delete from" query.QueryBuilderend()static StringequalTo(QueryBuilder queryBuilder)Creates an "equal to" conditional.QueryBuilderexecute(Connection connection)Executes a query.QueryBuilderexecute(Connection connection, Map<String,?> arguments)Executes a query.ResultSetexecuteQuery(PreparedStatement statement, Map<String,?> arguments)Executes a query.intexecuteUpdate(PreparedStatement statement, Map<String,?> arguments)Executes a query.static Stringexists(QueryBuilder queryBuilder)Creates an "exists" conditional.voidflush()QueryBuilderforUpdate()Appends a "for update" clause to a query.QueryBuilderfrom(String... tables)Appends a "from" clause to a query.QueryBuilderfrom(Function<PrettyPrinter,QueryBuilder> queryBuilderFun, String alias)Appends a "from" clause to a query.static Function<PrettyPrinter,QueryBuilder>functionCall(String function, List<?> values, String alias)List<Object>getGeneratedKeys()Returns the keys that were generated by the query.Collection<String>getParameters()Returns the parameters parsed by the query builder.PrettyPrintergetPrettyPrinter()Map<String,Object>getResult()Returns the result of executing a query that is expected to return at most a single row.List<Map<String,Object>>getResults()Returns the results of executing a query.StringgetSQL()Returns the generated SQL.intgetUpdateCount()Returns the number of rows that were affected by the query.static Stringin(QueryBuilder queryBuilder)Creates an "in" conditional.QueryBuilderinsertInto(String table)Creates an "insert into" query.QueryBuilderjoin(String table)Appends a "join" clause to a query.QueryBuilderjoin(Function<PrettyPrinter,QueryBuilder> queryBuilderFun, String alias)Appends a "join" clause to a query.QueryBuilderleftJoin(String table)Appends a "left join" clause to a query.QueryBuilderlimit(int count)Appends a "limit" clause to a query.<T extends QueryBuilder>
Tnext(Function<PrettyPrinter,T> qb)static StringnotEqualTo(QueryBuilder queryBuilder)Creates a "not equal to" conditional.static StringnotExists(QueryBuilder queryBuilder)Creates a "not exists" conditional.static StringnotIn(QueryBuilder queryBuilder)Creates a "not in" conditional.QueryBuilderon(String... predicates)Appends an "on" clause to a query.QueryBuilderor(String... predicates)Creates an "or" conditional.QueryBuilderorderBy(String... columns)Appends an "order by" clause to a query.QueryBuilderparams(Map<String,?> params)Appends column params to an "create function" statement.PreparedStatementprepare(Connection connection)Prepares a query for execution.QueryBuilderreturning(boolean brackets, Collection<String> outputs)QueryBuilderreturning(Collection<String> outputs)Appends outputsQueryBuilderreturns(String relation, Map<String,?> params)Appends return clause to an "create function" statement.QueryBuilderrightJoin(String table)Appends a "right join" clause to a query.static Function<PrettyPrinter,QueryBuilder>select(Object... columns)Creates a "select" query.QueryBuilderselectExp(String... columns)QueryBuilderset(Map<String,?> values)Appends column values to an "update" query.StringtoString()Returns the query as a string.QueryBuilderunion(Function<PrettyPrinter,QueryBuilder> queryBuilderFun)Appends a "union" clause to a query.static QueryBuilderupdate(String table)Creates an "update" query.QueryBuildervalues(Map<String,?> values)Appends column values to an "insert into" query.QueryBuilderwhere(String... predicates)Appends a "where" clause to a query.
-
-
-
Field Detail
-
prettyPrinter
protected PrettyPrinter prettyPrinter
-
-
Constructor Detail
-
QueryBuilder
public QueryBuilder(ByteArrayOutputStream o)
Constructs a query builder from an existing SQL query.- Parameters:
o- The existing SQL query.
-
QueryBuilder
public QueryBuilder()
-
QueryBuilder
public QueryBuilder(PrettyPrinter pp)
-
-
Method Detail
-
getPrettyPrinter
public PrettyPrinter getPrettyPrinter()
-
select
public static Function<PrettyPrinter,QueryBuilder> select(Object... columns)
Creates a "select" query.- Parameters:
columns- The column names.- Returns:
- The new
QueryBuilderinstance.
-
functionCall
public static Function<PrettyPrinter,QueryBuilder> functionCall(String function, List<?> values, String alias)
-
selectExp
public QueryBuilder selectExp(String... columns)
-
from
public QueryBuilder from(String... tables)
Appends a "from" clause to a query.- Parameters:
tables- The table names.- Returns:
- The
QueryBuilderinstance.
-
from
public QueryBuilder from(Function<PrettyPrinter,QueryBuilder> queryBuilderFun, String alias)
Appends a "from" clause to a query.- Parameters:
queryBuilderFun- a builder for a subqueryalias- the alias for the subquery- Returns:
- the
QueryBuilderinstance. public QueryBuilder from(QueryBuilder queryBuilder, String alias) { if (queryBuilder == null || alias == null) { throw new IllegalArgumentException(); } sqlBuilder.append(" FROM ("); sqlBuilder.append(queryBuilder.getSQL()); sqlBuilder.append(") AS "); sqlBuilder.append(alias); sqlBuilder.append(" "); parameters.addAll(queryBuilder.parameters); return this; }
-
join
public QueryBuilder join(String table)
Appends a "join" clause to a query.- Parameters:
table- The table name.- Returns:
- The
QueryBuilderinstance.
-
join
public QueryBuilder join(Function<PrettyPrinter,QueryBuilder> queryBuilderFun, String alias)
Appends a "join" clause to a query.- Parameters:
queryBuilderFun- A "select" subquery.alias- The subquery's alias.- Returns:
- The
QueryBuilderinstance.
-
leftJoin
public QueryBuilder leftJoin(String table)
Appends a "left join" clause to a query.- Parameters:
table- The table name.- Returns:
- The
QueryBuilderinstance.
-
rightJoin
public QueryBuilder rightJoin(String table)
Appends a "right join" clause to a query.- Parameters:
table- The table name.- Returns:
- The
QueryBuilderinstance.
-
on
public QueryBuilder on(String... predicates)
Appends an "on" clause to a query.- Parameters:
predicates- The clause predicates.- Returns:
- The
QueryBuilderinstance.
-
where
public QueryBuilder where(String... predicates)
Appends a "where" clause to a query.- Parameters:
predicates- The clause predicates.- Returns:
- The
QueryBuilderinstance.
-
and
public QueryBuilder and(String... predicates)
Creates an "and" conditional.- Parameters:
predicates- The conditional's predicates.- Returns:
- The conditional text.
-
or
public QueryBuilder or(String... predicates)
Creates an "or" conditional.- Parameters:
predicates- The conditional's predicates.- Returns:
- The conditional text.
-
allOf
public static String allOf(String... predicates)
Creates an "and" conditional group.- Parameters:
predicates- The group's predicates.- Returns:
- The conditional text.
-
anyOf
public static String anyOf(String... predicates)
Creates an "or" conditional group.- Parameters:
predicates- The group's predicates.- Returns:
- The conditional text.
-
equalTo
public static String equalTo(QueryBuilder queryBuilder)
Creates an "equal to" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
notEqualTo
public static String notEqualTo(QueryBuilder queryBuilder)
Creates a "not equal to" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
in
public static String in(QueryBuilder queryBuilder)
Creates an "in" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
notIn
public static String notIn(QueryBuilder queryBuilder)
Creates a "not in" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
exists
public static String exists(QueryBuilder queryBuilder)
Creates an "exists" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
notExists
public static String notExists(QueryBuilder queryBuilder)
Creates a "not exists" conditional.- Parameters:
queryBuilder- The conditional's subquery.- Returns:
- The conditional text.
-
orderBy
public QueryBuilder orderBy(String... columns)
Appends an "order by" clause to a query.- Parameters:
columns- The column names.- Returns:
- The
QueryBuilderinstance.
-
returning
public QueryBuilder returning(Collection<String> outputs)
Appends outputs- Parameters:
outputs- The column names.- Returns:
- The
QueryBuilderinstance.
-
returning
public QueryBuilder returning(boolean brackets, Collection<String> outputs)
-
alias
public QueryBuilder alias(String alias)
Appends alias- Parameters:
alias- the alias for the subquery- Returns:
- The
QueryBuilderinstance.
-
comment
public QueryBuilder comment(String comment)
Appends comment- Parameters:
comment- the comment- Returns:
- The
QueryBuilderinstance.
-
defaultValues
public QueryBuilder defaultValues()
Appends DEFAULT VALUES- Returns:
- The
QueryBuilderinstance.
-
limit
public QueryBuilder limit(int count)
Appends a "limit" clause to a query.- Parameters:
count- The limit count.- Returns:
- The
QueryBuilderinstance.
-
forUpdate
public QueryBuilder forUpdate()
Appends a "for update" clause to a query.- Returns:
- The
QueryBuilderinstance.
-
union
public QueryBuilder union(Function<PrettyPrinter,QueryBuilder> queryBuilderFun)
Appends a "union" clause to a query.- Parameters:
queryBuilderFun- The query builder to append.- Returns:
- The
QueryBuilderinstance.
-
insertInto
public QueryBuilder insertInto(String table)
Creates an "insert into" query.- Parameters:
table- The table name.- Returns:
- The new
QueryBuilderinstance.
-
values
public QueryBuilder values(Map<String,?> values)
Appends column values to an "insert into" query.- Parameters:
values- The values to insert.- Returns:
- The
QueryBuilderinstance.
-
args
public QueryBuilder args(List<?> values)
Appends arguments to a function call- Parameters:
values- The values to insert.- Returns:
- The
QueryBuilderinstance.
-
cte
public QueryBuilder cte(Map<String,Function<PrettyPrinter,?>> values)
Appends commont table expression CTE- Parameters:
values- The values to insert.- Returns:
- The
QueryBuilderinstance.
-
update
public static QueryBuilder update(String table)
Creates an "update" query.- Parameters:
table- The table name.- Returns:
- The new
QueryBuilderinstance.
-
set
public QueryBuilder set(Map<String,?> values)
Appends column values to an "update" query.- Parameters:
values- The values to update.- Returns:
- The
QueryBuilderinstance.
-
bodyEnd
public QueryBuilder bodyEnd(String key)
Appends body end- Parameters:
key- The params of the function.- Returns:
- The
QueryBuilderinstance.
-
bodyStart
public QueryBuilder bodyStart(String key)
Appends body start- Parameters:
key- The params of the function.- Returns:
- The
QueryBuilderinstance.
-
next
public <T extends QueryBuilder> T next(Function<PrettyPrinter,T> qb)
-
andThen
public QueryBuilder andThen(Supplier<Void> supplier)
-
returns
public QueryBuilder returns(String relation, Map<String,?> params)
Appends return clause to an "create function" statement.- Parameters:
relation- the relation nameparams- The params of the function.- Returns:
- The
QueryBuilderinstance.
-
params
public QueryBuilder params(Map<String,?> params)
Appends column params to an "create function" statement.- Parameters:
params- The params of the function.- Returns:
- The
QueryBuilderinstance.
-
end
public QueryBuilder end()
-
flush
public void flush()
-
createFunction
public static Function<PrettyPrinter,org.openprovenance.prov.template.compiler.sql.QueryBuilder.FunctionQueryBuilder> createFunction(String fun)
Creates a "create function" statement.- Parameters:
fun- The function name.- Returns:
- The new
QueryBuilderinstance.
-
deleteFrom
public static QueryBuilder deleteFrom(String table)
Creates a "delete from" query.- Parameters:
table- The table name.- Returns:
- The new
QueryBuilderinstance.
-
execute
public QueryBuilder execute(Connection connection) throws SQLException
Executes a query.- Parameters:
connection- The connection on which the query will be executed.- Returns:
- The
QueryBuilderinstance. - Throws:
SQLException- If an error occurs while executing the query.
-
execute
public QueryBuilder execute(Connection connection, Map<String,?> arguments) throws SQLException
Executes a query.- Parameters:
connection- The connection on which the query will be executed.arguments- The query arguments.- Returns:
- The
QueryBuilderinstance. - Throws:
SQLException- If an error occurs while executing the query.
-
getResult
public Map<String,Object> getResult()
Returns the result of executing a query that is expected to return at most a single row.- Returns:
- The query result, or
nullif the query either did not produce a result set or did not return any rows.
-
getResults
public List<Map<String,Object>> getResults()
Returns the results of executing a query.- Returns:
- The query results, or
nullif the query did not produce a result set.
-
getUpdateCount
public int getUpdateCount()
Returns the number of rows that were affected by the query.- Returns:
- The number of rows that were affected by the query, or -1 if the query did not produce an update count.
-
getGeneratedKeys
public List<Object> getGeneratedKeys()
Returns the keys that were generated by the query.- Returns:
- The keys that were generated by the query, or
nullif the query did not produce any generated keys.
-
prepare
public PreparedStatement prepare(Connection connection) throws SQLException
Prepares a query for execution.- Parameters:
connection- The connection on which the query will be executed.- Returns:
- A prepared statement that can be used to execute the query.
- Throws:
SQLException- If an error occurs while preparing the query.
-
executeQuery
public ResultSet executeQuery(PreparedStatement statement, Map<String,?> arguments) throws SQLException
Executes a query.- Parameters:
statement- The statement that will be used to execute the query.arguments- The query arguments.- Returns:
- The query results.
- Throws:
SQLException- If an error occurs while executing the query.
-
executeUpdate
public int executeUpdate(PreparedStatement statement, Map<String,?> arguments) throws SQLException
Executes a query.- Parameters:
statement- The statement that will be used to execute the query.arguments- The query arguments.- Returns:
- The number of rows that were affected by the query.
- Throws:
SQLException- If an error occurs while executing the query.
-
getParameters
public Collection<String> getParameters()
Returns the parameters parsed by the query builder.- Returns:
- The parameters parsed by the query builder.
-
getSQL
public String getSQL()
Returns the generated SQL.- Returns:
- The generated SQL.
-
-