Пример #1
0
 /**
  * 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();
 }
Пример #2
0
 /**
  * Constructor.
  *
  * @param Zend_Db_Select $select The select query
  */
 public function __construct(Zend_Db_Select $select)
 {
     $this->_select = $select;
     $this->_cacheIdentifier = md5($select->assemble());
 }
Пример #3
0
 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 ";
 }
Пример #4
0
 /**
  * @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!');
 }
Пример #5
0
 /**
  * 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());
 }
Пример #6
0
 /**
  * @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);
     }
 }
Пример #7
0
 /**
  * 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);
 }
Пример #8
0
 /**
  * @return String
  */
 public function assemble()
 {
     return $this->_selector->assemble();
 }
Пример #9
0
 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 ";
 }
Пример #10
0
 /**
  * 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;
 }
Пример #11
0
 /**
  * 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();
 }