/** * Returns the SQL for a select statement * * @param \Opis\Database\SQL\SelectStatement $select * * @return string */ public function select(SelectStatement $select) { $limit = $select->getLimit(); $offset = $select->getOffset(); if ($limit === null && $offset === null) { return parent::select($select); } $order = trim($this->handleOrderings($select->getOrderClauses())); if (empty($order)) { $order = 'ORDER BY (SELECT 0)'; } $sql = $select->isDistinct() ? 'SELECT DISTINCT ' : 'SELECT '; $sql .= $this->handleColumns($select->getColumns()); $sql .= ', ROW_NUMBER() OVER (' . $order . ') AS opis_rownum'; $sql .= ' FROM '; $sql .= $this->handleTables($select->getTables()); $sql .= $this->handleJoins($select->getJoinClauses()); $sql .= $this->handleWheres($select->getWhereConditions()); $sql .= $this->handleGroupings($select->getGroupClauses()); $sql .= $this->handleHavings($select->getHavingConditions()); if ($offset === null) { $offset = 0; } $limit += $offset; $offset++; return 'SELECT * FROM (' . $sql . ') AS m1 WHERE opis_rownum BETWEEN ' . $offset . ' AND ' . $limit; }
/** * Compiles a SELECT query. * * @access public * @param \Opis\Database\SQL\SelectStatament $select Query object. * @return array */ public function select(SelectStatement $select) { $limit = $select->getLimit(); $offset = $select->getOffset(); if ($limit === null && $offset === null) { return parent::select($select); } $sql = $select->isDistinct() ? 'SELECT DISTINCT ' : 'SELECT '; $sql .= $this->handleColumns($select->getColumns()); $sql .= ' FROM '; $sql .= $this->handleTables($select->getTables()); $sql .= $this->handleJoins($select->getJoinClauses()); $sql .= $this->handleWheres($select->getWhereConditions()); $sql .= $this->handleGroupings($select->getGroupClauses()); $sql .= $this->handleOrderings($select->getOrderClauses()); $sql .= $this->handleHavings($select->getHavingConditions()); if ($offset === null) { return 'SELECT * FROM (' . $sql . ') M1 WHERE ROWNUM <= ' . $limit; } $limit += $offset; $offset++; return 'SELECT * FROM (SELECT M1.*, ROWNUM AS OPIS_ROWNUM FROM (' . $sql . ') M1 WHERE ROWNUM <= ' . $limit . ') WHERE OPIS_ROWNUM >= ' . $offset; }
/** * @param string $column * @param bool $distinct (optional) * * @return int|float */ public function max($column, $distinct = false) { parent::max($column, $distinct); return $this->connection->column((string) $this, $this->compiler->getParams()); }
/** * @return $this */ public function distinct() { $this->query->distinct(); return $this; }
/** * Compiles a SELECT query. * * @access public * @param \Opis\Database\SQL\SelectStatement $select Select object. * @return array */ public function select(SelectStatement $select) { $sql = $select->isDistinct() ? 'SELECT DISTINCT ' : 'SELECT '; $sql .= $this->handleColumns($select->getColumns()); $sql .= $this->handleInto($select->getIntoTable(), $select->getIntoDatabase()); $sql .= ' FROM '; $sql .= $this->handleTables($select->getTables()); $sql .= $this->handleJoins($select->getJoinClauses()); $sql .= $this->handleWheres($select->getWhereConditions()); $sql .= $this->handleGroupings($select->getGroupClauses()); $sql .= $this->handleOrderings($select->getOrderClauses()); $sql .= $this->handleHavings($select->getHavingConditions()); $sql .= $this->handleOffset($select->getOffset(), $select->getLimit()); $sql .= $this->handleLimit($select->getLimit(), $select->getOffset()); return $sql; }
/** * @param array $columns (optional) * * @return $this */ public function select($columns = array()) { $this->sql = null; return parent::select($columns); }