in empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java [160:232]
public synchronized void getSelect(DBSQLBuilder sql, int flags)
{
// Prepare
resetParamUsage();
// limit rows
boolean usePreparedStatements = isPreparedStatementsEnabled();
if (limitRows>=0 && not(flags, SF_SKIP_LIMIT))
{ // add limitRows and skipRows wrapper
sql.append("SELECT * FROM (");
if (skipRows>0)
sql.append("SELECT row_.*, rownum rownum_ FROM (");
}
// Prepares statement
if (not(flags, SF_SKIP_SELECT))
{ // check select
if (select == null)
throw new ObjectNotValidException(this);
// Select
sql.append("SELECT ");
if (StringUtils.isNotEmpty(optimizerHint))
{ // Append an optimizer hint to the select statement e.g. SELECT /*+ RULE */
sql.append("/*+ ").append(optimizerHint).append(" */ ");
}
if (selectDistinct)
sql.append("DISTINCT ");
// Add Select Expressions
addListExpr(sql, select, CTX_ALL, ", ");
}
// Join
if (not(flags, SF_SKIP_FROM))
addFrom(sql);
// Where
if (not(flags, SF_SKIP_WHERE))
addWhere(sql);
// Connect By
if (connectBy != null)
{ // Add 'Connect By Prior' Expression
sql.append("\r\nCONNECT BY PRIOR ");
connectBy.addSQL(sql, CTX_DEFAULT | CTX_NOPARENTHESIS);
// Start With
if (startWith != null)
{ // Add 'Start With' Expression
sql.append("\r\nSTART WITH ");
startWith.addSQL(sql, CTX_DEFAULT);
}
}
// Grouping
if (not(flags, SF_SKIP_GROUP))
addGrouping(sql);
// Order
if (notEmpty(orderBy) && not(flags, SF_SKIP_ORDER))
{ // add ORDER BY
if (connectBy != null)
sql.append("\r\nORDER SIBLINGS BY ");
else
sql.append("\r\nORDER BY ");
// Add List of Order By Expressions
addListExpr(sql, orderBy, CTX_DEFAULT, ", ");
}
// limit rows end
if (limitRows>=0 && not(flags, SF_SKIP_LIMIT))
{ // add limitRows and skipRows constraints
sql.append(") row_ WHERE rownum<=");
sql.append(usePreparedStatements ? "?" : String.valueOf(skipRows+limitRows));
if (skipRows>0)
{ // add skip rows
sql.append(") WHERE rownum_>");
sql.append(usePreparedStatements ? "?" : String.valueOf(skipRows));
}
}
// done
completeParamUsage();
}