(Propel) * @author Hans Lellelid (Propel) * @author Jon S. Stevens (Torque) * @author Brett McLaughlin (Torque) * @author Bill Schneider (Torque) * @author Daniel Rall (Torque) * @version $Revision: 2026 $ * @package propel.runtime.adapter */ class DBOracle extends DBAdapter { /** * This method is called after a connection was created to run necessary * post-initialization queries or code. * Removes the charset query and adds the date queries * * @param PDO A PDO connection instance. * @see parent::initConnection() */ public function initConnection(PDO $con, array $settings) { $con->exec("ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD'"); $con->exec("ALTER SESSION SET NLS_TIMESTAMP_FORMAT='YYYY-MM-DD HH24:MI:SS'"); if (isset($settings['queries']) && is_array($settings['queries'])) { foreach ($settings['queries'] as $queries) { foreach ((array)$queries as $query) { $con->exec($query); } } } } /** * This method is used to ignore case. * * @param string $in The string to transform to upper case. * @return string The upper case string. */ public function toUpperCase($in) { return "UPPER(" . $in . ")"; } /** * This method is used to ignore case. * * @param string $in The string whose case to ignore. * @return string The string in a case that can be ignored. */ public function ignoreCase($in) { return "UPPER(" . $in . ")"; } /** * Returns SQL which concatenates the second string to the first. * * @param string String to concatenate. * @param string String to append. * @return string */ public function concatString($s1, $s2) { return "CONCAT($s1, $s2)"; } /** * Returns SQL which extracts a substring. * * @param string String to extract from. * @param int Offset to start from. * @param int Number of characters to extract. * @return string */ public function subString($s, $pos, $len) { return "SUBSTR($s, $pos, $len)"; } /** * Returns SQL which calculates the length (in chars) of a string. * * @param string String to calculate length of. * @return string */ public function strLength($s) { return "LENGTH($s)"; } /** * @see DBAdapter::applyLimit() */ public function applyLimit(&$sql, $offset, $limit, $criteria = null) { if (BasePeer::needsSelectAliases($criteria)) { $crit = clone $criteria; $selectSql = $this->createSelectSqlPart($crit, $params, true); $sql = $selectSql . substr($sql, strpos($sql, 'FROM') - 1); } $sql = 'SELECT B.* FROM (' . 'SELECT A.*, rownum AS PROPEL_ROWNUM FROM (' . $sql . ') A ' . ') B WHERE '; if ( $offset > 0 ) { $sql .= ' B.PROPEL_ROWNUM > ' . $offset; if ( $limit > 0 ) { $sql .= ' AND B.PROPEL_ROWNUM <= ' . ( $offset + $limit ); } } else { $sql .= ' B.PROPEL_ROWNUM <= ' . $limit; } } protected function getIdMethod() { return DBAdapter::ID_METHOD_SEQUENCE; } public function getId(PDO $con, $name = null) { if ($name === null) { throw new PropelException("Unable to fetch next sequence ID without sequence name."); } $stmt = $con->query("SELECT " . $name . ".nextval FROM dual"); $row = $stmt->fetch(PDO::FETCH_NUM); return $row[0]; } public function random($seed=NULL) { return 'dbms_random.value'; } /** * Ensures uniqueness of select column names by turning them all into aliases * This is necessary for queries on more than one table when the tables share a column name * @see http://propel.phpdb.org/trac/ticket/795 * * @param Criteria $criteria * * @return Criteria The input, with Select columns replaced by aliases */ public function turnSelectColumnsToAliases(Criteria $criteria) { $selectColumns = $criteria->getSelectColumns(); // clearSelectColumns also clears the aliases, so get them too $asColumns = $criteria->getAsColumns(); $criteria->clearSelectColumns(); $columnAliases = $asColumns; // add the select columns back foreach ($selectColumns as $id => $clause) { // Generate a unique alias $baseAlias = "ORA_COL_ALIAS_".$id; $alias = $baseAlias; // If it already exists, add a unique suffix $i = 0; while (isset($columnAliases[$alias])) { $i++; $alias = $baseAlias . '_' . $i; } // Add it as an alias $criteria->addAsColumn($alias, $clause); $columnAliases[$alias] = $clause; } // Add the aliases back, don't modify them foreach ($asColumns as $name => $clause) { $criteria->addAsColumn($name, $clause); } return $criteria; } }