public synchronized void getSelect()

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();
    }