예제 #1
0
 public function testWhere()
 {
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'5'"));
     $select->from('test')->where('field = ?', 5);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field = '5')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "''"));
     $select->from('test')->where('field = ?');
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field = '')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'%?%'"));
     $select->from('test')->where('field LIKE ?', '%value?%');
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field LIKE '%?%')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(0));
     $select->from('test')->where("field LIKE '%value?%'", null, Select::TYPE_CONDITION);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field LIKE '%value?%')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'1', '2', '4', '8'"));
     $select->from('test')->where("id IN (?)", [1, 2, 4, 8]);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (id IN ('1', '2', '4', '8'))", $select->assemble());
 }
예제 #2
0
 public function testWhere()
 {
     $quote = new \Magento\Framework\DB\Platform\Quote();
     $renderer = new \Magento\Framework\DB\Select\SelectRenderer(['distinct' => ['renderer' => new \Magento\Framework\DB\Select\DistinctRenderer(), 'sort' => 100, 'part' => 'distinct'], 'columns' => ['renderer' => new \Magento\Framework\DB\Select\ColumnsRenderer($quote), 'sort' => 200, 'part' => 'columns'], 'union' => ['renderer' => new \Magento\Framework\DB\Select\UnionRenderer(), 'sort' => 300, 'part' => 'union'], 'from' => ['renderer' => new \Magento\Framework\DB\Select\FromRenderer($quote), 'sort' => 400, 'part' => 'from'], 'where' => ['renderer' => new \Magento\Framework\DB\Select\WhereRenderer(), 'sort' => 500, 'part' => 'where'], 'group' => ['renderer' => new \Magento\Framework\DB\Select\GroupRenderer($quote), 'sort' => 600, 'part' => 'group'], 'having' => ['renderer' => new \Magento\Framework\DB\Select\HavingRenderer(), 'sort' => 700, 'part' => 'having'], 'order' => ['renderer' => new \Magento\Framework\DB\Select\OrderRenderer($quote), 'sort' => 800, 'part' => 'order'], 'limit' => ['renderer' => new \Magento\Framework\DB\Select\LimitRenderer(), 'sort' => 900, 'part' => 'limitcount'], 'for_update' => ['renderer' => new \Magento\Framework\DB\Select\ForUpdateRenderer(), 'sort' => 1000, 'part' => 'forupdate']]);
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'5'"), $renderer);
     $select->from('test')->where('field = ?', 5);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field = '5')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "''"), $renderer);
     $select->from('test')->where('field = ?');
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field = '')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'%?%'"), $renderer);
     $select->from('test')->where('field LIKE ?', '%value?%');
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field LIKE '%?%')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(0), $renderer);
     $select->from('test')->where("field LIKE '%value?%'", null, Select::TYPE_CONDITION);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (field LIKE '%value?%')", $select->assemble());
     $select = new Select($this->_getConnectionMockWithMockedQuote(1, "'1', '2', '4', '8'"), $renderer);
     $select->from('test')->where("id IN (?)", [1, 2, 4, 8]);
     $this->assertEquals("SELECT `test`.* FROM `test` WHERE (id IN ('1', '2', '4', '8'))", $select->assemble());
 }
예제 #3
0
 /**
  * Add EXISTS clause
  *
  * @param  Select $select
  * @param  string           $joinCondition
  * @param   bool            $isExists
  * @return $this
  */
 public function exists($select, $joinCondition, $isExists = true)
 {
     if ($isExists) {
         $exists = 'EXISTS (%s)';
     } else {
         $exists = 'NOT EXISTS (%s)';
     }
     $select->reset(self::COLUMNS)->columns([new \Zend_Db_Expr('1')])->where($joinCondition);
     $exists = sprintf($exists, $select->assemble());
     $this->where($exists);
     return $this;
 }
예제 #4
0
 /**
  * Get insert from Select object query
  *
  * @param Select $select
  * @param string $table     insert into table
  * @param array $fields
  * @param int|false $mode
  * @return string
  */
 public function insertFromSelect(Select $select, $table, array $fields = array(), $mode = false)
 {
     $query = 'INSERT';
     if ($mode == self::INSERT_IGNORE) {
         $query .= ' IGNORE';
     }
     $query = sprintf('%s INTO %s', $query, $this->quoteIdentifier($table));
     if ($fields) {
         $columns = array_map(array($this, 'quoteIdentifier'), $fields);
         $query = sprintf('%s (%s)', $query, join(', ', $columns));
     }
     $query = sprintf('%s %s', $query, $select->assemble());
     if ($mode == self::INSERT_ON_DUPLICATE) {
         if (!$fields) {
             $describe = $this->describeTable($table);
             foreach ($describe as $column) {
                 if ($column['PRIMARY'] === false) {
                     $fields[] = $column['COLUMN_NAME'];
                 }
             }
         }
         $update = array();
         foreach ($fields as $field) {
             $update[] = sprintf('%1$s = VALUES(%1$s)', $this->quoteIdentifier($field));
         }
         if ($update) {
             $query = sprintf('%s ON DUPLICATE KEY UPDATE %s', $query, join(', ', $update));
         }
     }
     return $query;
 }