Example #1
0
 /**
  * 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));
 }
Example #2
0
 /**
  * @param Query $query
  * @return Statement
  */
 public function execQuery(Query $query)
 {
     return $this->execQueryString($query->getQuery(), $query->getParams());
 }
Example #3
0
 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);
 }
Example #4
0
 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);
 }
Example #5
0
 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());
 }