Package mondrian.rolap.sql
Class SqlQuery
java.lang.Object
mondrian.rolap.sql.SqlQuery
SqlQuery
allows us to build a select
statement and generate it in database-specific SQL syntax.
Notable differences in database syntax are:
- Identifier quoting
- Oracle (and all JDBC-compliant drivers) uses double-quotes,
for example
select * from "emp"
. Access prefers brackets, for exampleselect * from [emp]
. mySQL allows single- and double-quotes for string literals, and therefore does not allow identifiers to be quoted, for exampleselect 'foo', "bar" from emp
. - AS in from clause
- Oracle doesn't like AS in the from * clause, for example
select from emp as e
vs.select * from emp e
. - Column aliases
- Some databases require that every column in the select list
has a valid alias. If the expression is an expression containing
non-alphanumeric characters, an explicit alias is needed. For example,
Oracle will barfs at
select empno + 1 from emp
. - Parentheses around table names
- Oracle doesn't like
select * from (emp)
- Queries in FROM clause
- PostgreSQL and hsqldb don't allow, for example,
select * from (select * from emp) as e
. - Uniqueness of index names
- In PostgreSQL and Oracle, index names must be unique within the database; in Access and hsqldb, they must merely be unique within their table
- Datatypes
- In Oracle, BIT is CHAR(1), TIMESTAMP is DATE. In PostgreSQL, DOUBLE is DOUBLE PRECISION, BIT is BOOL.
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.
- Author:
- jhyde
-
Nested Class Summary
Modifier and TypeClassDescriptionstatic class
Collection of alternative code for alternative dialects. -
Constructor Summary
ConstructorDescriptionCreates a SqlQuery using a given dialect and inheriting the formatting preferences fromMondrianProperties.GenerateFormattedSql
property.Base constructor used by all other constructors to create an empty instance. -
Method Summary
Modifier and TypeMethodDescriptionboolean
addFrom
(MondrianDef.RelationOrJoin relation, String alias, boolean failIfExists) Adds a relation to a query, adding appropriate join conditions, unless it is already present.void
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
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.addSelect
(String expression, SqlStatement.Type type) Adds an expression to the select clause, automatically creating a column alias.addSelect
(String expression, SqlStatement.Type type, String alias) Adds an expression to the select clause, with a specified type and column alias.addSelectGroupBy
(String expression, SqlStatement.Type type) Adds an expression to the SELECT and GROUP BY clauses.void
void
void
addWhere
(RolapStar.Condition joinCondition) Creates an emptySqlQuery
with the same environment as this one.int
boolean
static SqlQuery
newQuery
(DataSource dataSource, String err) void
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.toString()
-
Constructor Details
-
SqlQuery
Base constructor used by all other constructors to create an empty instance.- Parameters:
dialect
- Dialectformatted
- Whether to generate SQL formatted on multiple lines
-
SqlQuery
Creates a SqlQuery using a given dialect and inheriting the formatting preferences fromMondrianProperties.GenerateFormattedSql
property.- Parameters:
dialect
- Dialect
-
-
Method Details
-
cloneEmpty
Creates an emptySqlQuery
with the same environment as this one. (As per the Gang of Four 'prototype' pattern.) -
setDistinct
public void setDistinct(boolean distinct) -
setAllowHints
public void setAllowHints(boolean t) Chooses whether table optimization hints may be used (assuming the dialect supports it).- Parameters:
t
- True to allow hints to be used, false otherwise
-
addFromQuery
Adds a subquery to the FROM clause of this Query with a given alias. If the query already exists it either, depending onfailIfExists
, throws an exception or does not add the query and returns false.- Parameters:
query
- Subqueryalias
- (if not null, must not be zero length).failIfExists
- if true, throws exception if alias already exists- Returns:
- true if query *was* added
-
addFrom
-
addFrom
Adds a relation to a query, adding appropriate join conditions, unless it is already present.Returns whether the relation was added to the query.
- Parameters:
relation
- Relation to addalias
- Alias of relation. If null, uses relation's alias.failIfExists
- Whether to fail if relation is already present- Returns:
- true, if relation *was* added to query
-
addSelect
Adds an expression to the select clause, automatically creating a column alias. -
addSelectGroupBy
Adds an expression to the SELECT and GROUP BY clauses. Uses the alias in the GROUP BY clause, if the dialect requires it.- Parameters:
expression
- Expression- Returns:
- Alias of expression
-
getCurrentSelectListSize
public int getCurrentSelectListSize() -
nextColumnAlias
-
addSelect
Adds an expression to the select clause, with a specified type and column alias.- Parameters:
expression
- Expressiontype
- Java type to be used to hold cursor columnalias
- Column alias (or null for no alias)- Returns:
- Column alias
-
getAlias
-
addWhere
-
addWhere
-
addWhere
-
addGroupBy
-
addGroupBy
-
addHaving
-
addOrderBy
Adds an item to the ORDER BY clause.- Parameters:
expr
- the expr to order byascending
- sort directionprepend
- whether to prepend to the current list of itemsnullable
- whether the expression might be null
-
addOrderBy
public void addOrderBy(String expr, String alias, boolean ascending, boolean prepend, boolean nullable, boolean collateNullsLast) Adds an item to the ORDER BY clause.- Parameters:
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.
-
toString
-
toBuffer
Writes this SqlQuery to a StringBuilder with each clause on a separate line, and with the specified indentation prefix.- Parameters:
buf
- String builderprefix
- Prefix for each line
-
getDialect
-
newQuery
-
addGroupingSet
-
addGroupingFunction
-
toSqlAndTypes
-
registerRootRelation
-
isSupported
public boolean isSupported() -
setSupported
public void setSupported(boolean supported)
-