/** * Performs a validation on the select query before passing back to the parent class. * Ensures that only columns from the primary Zend_Db_Table are returned in the result. * * @return string|null This object as a SELECT string (or null if a string cannot be produced) */ public function assemble() { $fields = $this->getPart(Zend_Db_Table_Select::COLUMNS); $primary = $this->_info[Zend_Db_Table_Abstract::NAME]; $schema = $this->_info[Zend_Db_Table_Abstract::SCHEMA]; if (count($this->_parts[self::UNION]) == 0) { // If no fields are specified we assume all fields from primary table if (!count($fields)) { $this->from($primary, self::SQL_WILDCARD, $schema); $fields = $this->getPart(Zend_Db_Table_Select::COLUMNS); } $from = $this->getPart(Zend_Db_Table_Select::FROM); if ($this->_integrityCheck !== false) { foreach ($fields as $columnEntry) { list($table, $column) = $columnEntry; // Check each column to ensure it only references the primary table if ($column) { if (!isset($from[$table]) || $from[$table]['tableName'] != $primary) { require_once PHP_LIBRARY_PATH . 'Zend/Db/Table/Select/Exception.php'; throw new Zend_Db_Table_Select_Exception('Select query cannot join with another table'); } } } } } return parent::assemble(); }
/** * Constructor. * * @param Zend_Db_Select $select The select query */ public function __construct(Zend_Db_Select $select) { $this->_select = $select; $this->_cacheIdentifier = md5($select->assemble()); }
private function setup2(Zend_Db_Select $select, $columes = null) { $conn = $select->getAdapter(); $this->setConnection($conn); $extFields = array(); if ($columes == null) { $sql = $select->assemble(); $db = $this->conn; $columes = $this->_getColumns($sql, $db); } foreach ($columes as $field) { $extFields[]['field'] = $field; } $this->_setFields($extFields); $this->strTable = " ( {$sql} ) AS tableName "; }
/** * @group ZF-6989 */ public function testCacheIdentifierIsHashOfAssembledSelect() { $dbAdapter = $this->getMockForAbstractClass('Zend_Db_Adapter_Abstract', array(''), '', false); $select = new Zend_Db_Select($dbAdapter); $select->from('ZF_6989'); $paginatorAdapter = new Zend_Paginator_Adapter_DbSelect($select); $this->assertSame(md5($select->assemble()), $paginatorAdapter->getCacheIdentifier(), 'Cache identifier incorrect!'); }
/** * appends sql to given select statement * * @param Zend_Db_Select $_select * @param Tinebase_Backend_Sql_Abstract $_backend */ public function appendFilterSql($_select, $_backend) { if (empty($this->_value)) { $_select->where('1=1/* empty query */'); return; } $db = Tinebase_Core::getDb(); switch ($this->_operator) { case 'contains': $queries = explode(' ', $this->_value); foreach ($queries as $query) { $whereParts = array(); foreach ($this->_options['fields'] as $qField) { $whereParts[] = $db->quoteIdentifier($_backend->getTableName() . '.' . $qField) . ' ' . Tinebase_Backend_Sql_Command::getLike($db) . ' ?'; } $whereClause = ''; if (!empty($whereParts)) { $whereClause = implode(' OR ', $whereParts); } if (!empty($whereClause)) { $_select->where($db->quoteInto($whereClause, '%' . trim($query) . '%')); } } break; case 'in': foreach ($this->_options['fields'] as $qField) { $whereParts[] = $db->quoteInto($db->quoteIdentifier($_backend->getTableName() . '.' . $qField) . ' IN (?)', (array) $this->_value); } if (!empty($whereParts)) { $whereClause = implode(' OR ', $whereParts); } if (!empty($whereClause)) { $_select->where($whereClause); } break; default: throw new Tinebase_Exception_InvalidArgument('Operator not defined: ' . $this->_operator); } Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' SQL filter: ' . $_select->assemble()); }
/** * @param \Zend_Db_Select $select * @param array $params * @return \Generator * @throws Exception */ public function fetchEach(\Zend_Db_Select $select, $params = []) { $sql = $select->assemble(); $statement = $this->getReadAdapter()->query($sql, $params); while ($record = $statement->fetch()) { (yield $record); } }
/** * Removes a all cache entries matching given constraint. * * @param Zend_Db_Select $select Select statement to use as subselect * The statement MUST return a list of document ids * @return void */ public function removeAllEntriesWhereSubSelect($select) { $where = 'document_id IN (' . $select->assemble() . ')'; $this->_table->delete($where); }
/** * @return String */ public function assemble() { return $this->_selector->assemble(); }
private function setup2(Zend_Db_Select $select, $columes = null) { $conn = $select->getAdapter(); $this->setConnection($conn); if ($conn instanceof Zend_Db_Adapter_Pdo_Mysql) { $this->_drivertype = 'mysql'; } $extFields = array(); if ($columes == null) { $sql = $select->assemble(); $db = $this->conn; if ($db instanceof Zend_Db_Adapter_Sqlsrv) { $columes = $this->_getSqlsrvColumns($sql, $db); } elseif ($db instanceof Zend_Db_Adapter_Pdo_Mysql) { $columes = $this->_getMysqlColumns($sql, $db); } } foreach ($columes as $field) { $extFields[]['field'] = $field; } $this->_setFields($extFields); $this->strTable = " ( {$sql} ) AS tableName "; }
/** * Add a subselect as constraint * * @param Zend_Db_Select $select A select object used as subselect in query. * The subquery must return a list of document ids. * * @return Opus_DocumentFinder Fluent interface. */ public function setSubSelectNotExists($select) { $this->select->where(' NOT d.id IN (' . $select->assemble() . ')'); return $this; }
/** * Performs a validation on the select query before passing back to the parent class. * Ensures that only columns from the primary Kwf_Db_Table are returned in the result. * * @return string|null This object as a SELECT string (or null if a string cannot be produced) */ public function assemble() { $fields = $this->getPart(Kwf_Db_Table_Select::COLUMNS); $primary = $this->_table->getTableName(); $schema = $this->_table->getSchemaName(); if (count($this->_parts[self::UNION]) == 0) { // If no fields are specified we assume all fields from primary table if (!count($fields)) { $this->from($primary, self::SQL_WILDCARD, $schema); $fields = $this->getPart(Kwf_Db_Table_Select::COLUMNS); } $from = $this->getPart(Kwf_Db_Table_Select::FROM); if ($this->_integrityCheck !== false) { foreach ($fields as $columnEntry) { list($table, $column) = $columnEntry; // Check each column to ensure it only references the primary table if ($column) { if (!isset($from[$table]) || $from[$table]['tableName'] != $primary) { throw new Kwf_Exception('Select query cannot join with another table'); } } } } } return parent::assemble(); }