/** * Test UPDATE query with a JOIN * @group update * @covers Query::getQuery */ function testUpdateQueryWithJoin() { $column_values = array('a.my_column1' => 'value1'); $q = new Query('my_table', 'ma'); $q->setAction(Query::ACTION_UPDATE)->setUpdateColumnValues($column_values)->join('other_table ob', 'ob.something = ma.my_column')->add('a.my_column3', array(1, 2, 3)); $query = $q->getQuery(); $actual = "{$query}"; $expected = "UPDATE `my_table` AS ma "; $expected .= "JOIN`other_table` AS ob ON (ob.something = ma.my_column)"; $expected .= "SET`a`.`my_column1`='value1'"; $expected .= "WHERE `a`.`my_column3` IN (1,2,3)"; $this->assertEquals(preg_replace('/\\s/', '', $expected), preg_replace('/\\s/', '', $actual)); }
/** * @param Query $query * @return Statement */ public function execQuery(Query $query) { return $this->execQueryString($query->getQuery(), $query->getParams()); }
public static function getInstanceByQuery(Query $query, &$entity_name = null) { if (empty($entity_name)) { $entity_name = 'Tmp' . randString(); } $query_string = '(' . $query->getQuery() . ')'; $query_chains = $query->getChains(); $replaced_aliases = array_flip($query->getReplacedAliases()); // generate fieldsMap $fieldsMap = array('TMP_ID' => array('data_type' => 'integer', 'primary' => true)); foreach ($query->getSelect() as $k => $v) { if (is_array($v)) { $fieldsMap[$k] = array('data_type' => $v['data_type']); } else { $fieldsMap[$k] = array('data_type' => $query_chains[$k]->getLastElement()->getValue()->getDataType()); } if (isset($replaced_aliases[$k])) { $fieldsMap[$k]['column_name'] = $replaced_aliases[$k]; } } // generate class content $eval = 'class ' . $entity_name . 'Table extends ' . __NAMESPACE__ . '\\DataManager {' . PHP_EOL; $eval .= 'public static function getMap() {' . PHP_EOL; $eval .= 'return ' . var_export($fieldsMap, true) . ';' . PHP_EOL; $eval .= '}'; $eval .= 'public static function getTableName() {' . PHP_EOL; $eval .= 'return ' . var_export($query_string, true) . ';' . PHP_EOL; $eval .= '}'; $eval .= 'public static function getFilePath() {' . PHP_EOL; $eval .= 'return null;' . PHP_EOL; $eval .= '}'; $eval .= '}'; eval($eval); return self::getInstance($entity_name); }
public static function getInstanceByQuery(Query $query, &$entity_name = null) { if (empty($entity_name)) { $entity_name = 'Tmp' . randString(); } $query_string = '(' . $query->getQuery() . ')'; $query_chains = $query->getChains(); $replaced_aliases = array_flip($query->getReplacedAliases()); // generate fieldsMap $fieldsMap = array('TMP_ID' => array('data_type' => 'integer', 'primary' => true)); foreach ($query->getSelect() as $k => $v) { if (is_array($v)) { $fieldsMap[$k] = array('data_type' => $v['data_type']); } else { $fieldsMap[$k] = array('data_type' => $query_chains[$k]->getLastElement()->getValue()->getDataType()); } if (isset($replaced_aliases[$k])) { $fieldsMap[$k]['column_name'] = $replaced_aliases[$k]; } } // generate class content $eval = 'class ' . $entity_name . 'Entity extends ' . __CLASS__ . ' {' . PHP_EOL; $eval .= 'protected function __construct(){}' . PHP_EOL; $eval .= 'public function initialize() { $this->className = __CLASS__; $this->filePath = __FILE__;' . PHP_EOL; $eval .= '$this->dbTableName = ' . var_export($query_string, true) . ';' . PHP_EOL; $eval .= '$this->fieldsMap = ' . var_export($fieldsMap, true) . ';' . PHP_EOL; $eval .= '}}'; eval($eval); return self::getInstance($entity_name); }
public function testNamedBinds() { $query = new Query($this->db); $query->setQuery('SELECT * FROM users WHERE id = :id OR name = :name', ['id' => 13, 'name' => 'Geoffrey']); $expected = "SELECT * FROM users WHERE id = 13 OR name = 'Geoffrey'"; $this->assertEquals($expected, $query->getQuery()); }