public class SqlQuery extends Object
SqlQuery
allows us to build a select
statement and generate it in database-specific SQL syntax.
Notable differences in database syntax are:
select * from "emp"
. Access prefers brackets,
for example select * from [emp]
. mySQL allows single- and
double-quotes for string literals, and therefore does not allow
identifiers to be quoted, for example select 'foo', "bar" from
emp
. select from emp as e
vs. select * from emp
e
. select empno + 1 from emp
. select * from (emp)
select * from
(select * from emp) as e
.NOTE: Instances of this class are NOT thread safe so the user must make sure this is accessed by only one thread at a time.
Modifier and Type | Class and Description |
---|---|
static class |
SqlQuery.CodeSet
Collection of alternative code for alternative dialects.
|
Constructor and Description |
---|
SqlQuery(Dialect dialect)
Creates a SqlQuery using a given dialect and inheriting the formatting
preferences from
MondrianProperties.GenerateFormattedSql
property. |
SqlQuery(Dialect dialect,
boolean formatted)
Base constructor used by all other constructors to create an empty
instance.
|
Modifier and Type | Method and Description |
---|---|
boolean |
addFrom(MondrianDef.RelationOrJoin relation,
String alias,
boolean failIfExists)
Adds a relation to a query, adding appropriate join conditions, unless
it is already present.
|
void |
addFrom(SqlQuery sqlQuery,
String alias,
boolean failIfExists) |
boolean |
addFromQuery(String query,
String alias,
boolean failIfExists)
Adds a subquery to the FROM clause of this Query with a given alias.
|
void |
addGroupBy(String expression) |
void |
addGroupBy(String expression,
String alias) |
void |
addGroupingFunction(String columnExpr) |
void |
addGroupingSet(List<String> groupingColumnsExpr) |
void |
addHaving(String expression) |
void |
addOrderBy(String expr,
boolean ascending,
boolean prepend,
boolean nullable)
Adds an item to the ORDER BY clause.
|
void |
addOrderBy(String expr,
String alias,
boolean ascending,
boolean prepend,
boolean nullable,
boolean collateNullsLast)
Adds an item to the ORDER BY clause.
|
String |
addSelect(String expression,
SqlStatement.Type type)
Adds an expression to the select clause, automatically creating a
column alias.
|
String |
addSelect(String expression,
SqlStatement.Type type,
String alias)
Adds an expression to the select clause, with a specified type and
column alias.
|
String |
addSelectGroupBy(String expression,
SqlStatement.Type type)
Adds an expression to the SELECT and GROUP BY clauses.
|
void |
addWhere(RolapStar.Condition joinCondition) |
void |
addWhere(String expression) |
void |
addWhere(String exprLeft,
String exprMid,
String exprRight) |
SqlQuery |
cloneEmpty()
Creates an empty
SqlQuery with the same environment as this
one. |
String |
getAlias(String expression) |
int |
getCurrentSelectListSize() |
Dialect |
getDialect() |
boolean |
isSupported() |
static SqlQuery |
newQuery(DataSource dataSource,
String err) |
String |
nextColumnAlias() |
void |
registerRootRelation(MondrianDef.RelationOrJoin root) |
void |
setAllowHints(boolean t)
Chooses whether table optimization hints may be used
(assuming the dialect supports it).
|
void |
setDistinct(boolean distinct) |
void |
setSupported(boolean supported) |
void |
toBuffer(StringBuilder buf,
String prefix)
Writes this SqlQuery to a StringBuilder with each clause on a separate
line, and with the specified indentation prefix.
|
Pair<String,List<SqlStatement.Type>> |
toSqlAndTypes() |
String |
toString() |
public SqlQuery(Dialect dialect, boolean formatted)
dialect
- Dialectformatted
- Whether to generate SQL formatted on multiple linespublic SqlQuery(Dialect dialect)
MondrianProperties.GenerateFormattedSql
property.dialect
- Dialectpublic SqlQuery cloneEmpty()
SqlQuery
with the same environment as this
one. (As per the Gang of Four 'prototype' pattern.)public void setDistinct(boolean distinct)
public void setAllowHints(boolean t)
t
- True to allow hints to be used, false otherwisepublic boolean addFromQuery(String query, String alias, boolean failIfExists)
failIfExists
, throws an exception or does not add the query
and returns false.query
- Subqueryalias
- (if not null, must not be zero length).failIfExists
- if true, throws exception if alias already existspublic boolean addFrom(MondrianDef.RelationOrJoin relation, String alias, boolean failIfExists)
Returns whether the relation was added to the query.
relation
- Relation to addalias
- Alias of relation. If null, uses relation's alias.failIfExists
- Whether to fail if relation is already presentpublic String addSelect(String expression, SqlStatement.Type type)
public String addSelectGroupBy(String expression, SqlStatement.Type type)
expression
- Expressionpublic int getCurrentSelectListSize()
public String nextColumnAlias()
public String addSelect(String expression, SqlStatement.Type type, String alias)
expression
- Expressiontype
- Java type to be used to hold cursor columnalias
- Column alias (or null for no alias)public void addWhere(RolapStar.Condition joinCondition)
public void addWhere(String expression)
public void addGroupBy(String expression)
public void addHaving(String expression)
public void addOrderBy(String expr, boolean ascending, boolean prepend, boolean nullable)
expr
- the expr to order byascending
- sort directionprepend
- whether to prepend to the current list of itemsnullable
- whether the expression might be nullpublic void addOrderBy(String expr, String alias, boolean ascending, boolean prepend, boolean nullable, boolean collateNullsLast)
expr
- the expr to order byalias
- the alias of the column, as returned by addSelectascending
- sort directionprepend
- whether to prepend to the current list of itemsnullable
- whether the expression might be nullcollateNullsLast
- whether null values should appear first or last.public void toBuffer(StringBuilder buf, String prefix)
buf
- String builderprefix
- Prefix for each linepublic Dialect getDialect()
public static SqlQuery newQuery(DataSource dataSource, String err)
public void addGroupingFunction(String columnExpr)
public Pair<String,List<SqlStatement.Type>> toSqlAndTypes()
public void registerRootRelation(MondrianDef.RelationOrJoin root)
public boolean isSupported()
public void setSupported(boolean supported)
Copyright © 2020 Hitachi Vantara. All rights reserved.