in empire-db/src/main/java/org/apache/empire/dbms/oracle/DBCommandOracle.java [160:223]
public synchronized void getSelect(DBSQLBuilder sql)
{
resetParamUsage();
if (select == null)
throw new ObjectNotValidException(this);
// limit rows
boolean usePreparedStatements = isPreparedStatementsEnabled();
if (limitRows>=0)
{ // add limitRows and skipRows wrapper
sql.append("SELECT * FROM (");
if (skipRows>0)
sql.append("SELECT row_.*, rownum rownum_ FROM (");
}
// Prepares statement
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
addFrom(sql);
// 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
addGrouping(sql);
// Order
if (orderBy != null)
{ // Having
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)
{ // 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));
}
}
completeParamUsage();
}