📄 dbo_source.test.php
字号:
eval("class DboTest extends $class { var \$simulated = array();/** * execute method * * @param \$sql * @access protected * @return void */ function _execute(\$sql) { \$this->simulated[] = \$sql; return null; }/** * getLastQuery method * * @access public * @return void */ function getLastQuery() { return \$this->simulated[count(\$this->simulated) - 1]; } }"); } $this->testDb =& new DboTest($this->__config); Configure::write('debug', 1); $this->debug = Configure::read('debug'); $this->Model =& new TestModel(); }/** * endTest method * * @access public * @return void */ function endTest() { unset($this->Model); Configure::write('debug', $this->debug); unset($this->debug); }/** * testFieldDoubleEscaping method * * @access public * @return void */ function testFieldDoubleEscaping() { $config = array_merge($this->__config, array('driver' => 'test')); $test =& ConnectionManager::create('quoteTest', $config); $this->Model =& new Article2(array('name' => 'Article', 'ds' => 'quoteTest')); $this->Model->setDataSource('quoteTest'); $this->assertEqual($this->Model->escapeField(), '`Article`.`id`'); $result = $test->fields($this->Model, null, $this->Model->escapeField()); $this->assertEqual($result, array('`Article`.`id`')); $result = $test->read($this->Model, array( 'fields' => $this->Model->escapeField(), 'conditions' => null, 'recursive' => -1 )); $this->assertEqual(trim($test->simulated[0]), 'SELECT `Article`.`id` FROM `' . $this->testDb->fullTableName('article', false) . '` AS `Article` WHERE 1 = 1'); $test->startQuote = '['; $test->endQuote = ']'; $this->assertEqual($this->Model->escapeField(), '[Article].[id]'); $result = $test->fields($this->Model, null, $this->Model->escapeField()); $this->assertEqual($result, array('[Article].[id]')); $result = $test->read($this->Model, array( 'fields' => $this->Model->escapeField(), 'conditions' => null, 'recursive' => -1 )); $this->assertEqual(trim($test->simulated[1]), 'SELECT [Article].[id] FROM [' . $this->testDb->fullTableName('article', false) . '] AS [Article] WHERE 1 = 1'); }/** * testGenerateAssociationQuerySelfJoin method * * @access public * @return void */ function testGenerateAssociationQuerySelfJoin() { $this->startTime = microtime(true); $this->Model =& new Article2(); $this->_buildRelatedModels($this->Model); $this->_buildRelatedModels($this->Model->Category2); $this->Model->Category2->ChildCat =& new Category2(); $this->Model->Category2->ParentCat =& new Category2(); $queryData = array(); foreach ($this->Model->Category2->__associations as $type) { foreach ($this->Model->Category2->{$type} as $assoc => $assocData) { $linkModel =& $this->Model->Category2->{$assoc}; $external = isset($assocData['external']); if ($this->Model->Category2->alias == $linkModel->alias && $type != 'hasAndBelongsToMany' && $type != 'hasMany') { $result = $this->testDb->generateAssociationQuery($this->Model->Category2, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null); $this->assertTrue($result); } else { if ($this->Model->Category2->useDbConfig == $linkModel->useDbConfig) { $result = $this->testDb->generateAssociationQuery($this->Model->Category2, $linkModel, $type, $assoc, $assocData, $queryData, $external, $null); $this->assertTrue($result); } } } } $query = $this->testDb->generateAssociationQuery($this->Model->Category2, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+(.+)FROM(.+)`Category2`\.`group_id`\s+=\s+`Group`\.`id`\)\s+LEFT JOIN(.+)WHERE\s+1 = 1\s*$/', $query); $this->Model =& new TestModel4(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'belongsTo', 'model' => 'TestModel4Parent'); $queryData = array(); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $_queryData = $queryData; $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $expected = array( 'fields' => array( '`TestModel4`.`id`', '`TestModel4`.`name`', '`TestModel4`.`created`', '`TestModel4`.`updated`', '`TestModel4Parent`.`id`', '`TestModel4Parent`.`name`', '`TestModel4Parent`.`created`', '`TestModel4Parent`.`updated`' ), 'joins' => array( array( 'table' => '`test_model4`', 'alias' => 'TestModel4Parent', 'type' => 'LEFT', 'conditions' => '`TestModel4`.`parent_id` = `TestModel4Parent`.`id`' ) ), 'limit' => array(), 'offset' => array(), 'conditions' => array(), 'order' => array(), 'group' => null ); $this->assertEqual($queryData, $expected); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel4`\.`id`, `TestModel4`\.`name`, `TestModel4`\.`created`, `TestModel4`\.`updated`, `TestModel4Parent`\.`id`, `TestModel4Parent`\.`name`, `TestModel4Parent`\.`created`, `TestModel4Parent`\.`updated`\s+/', $result); $this->assertPattern('/FROM\s+`test_model4` AS `TestModel4`\s+LEFT JOIN\s+`test_model4` AS `TestModel4Parent`/', $result); $this->assertPattern('/\s+ON\s+\(`TestModel4`.`parent_id` = `TestModel4Parent`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+1 = 1\s+$/', $result); $params['assocData']['type'] = 'INNER'; $this->Model->belongsTo['TestModel4Parent']['type'] = 'INNER'; $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $_queryData, $params['external'], $resultSet); $this->assertTrue($result); $this->assertEqual($_queryData['joins'][0]['type'], 'INNER'); }/** * testGenerateInnerJoinAssociationQuery method * * @access public * @return void */ function testGenerateInnerJoinAssociationQuery() { $this->Model =& new TestModel9(); $test =& ConnectionManager::create('test2', $this->__config); $this->Model->setDataSource('test2'); $this->Model->TestModel8 =& new TestModel8(); $this->Model->TestModel8->setDataSource('test2'); $this->testDb->read($this->Model, array('recursive' => 1)); $result = $this->testDb->getLastQuery(); $this->assertPattern('/`TestModel9` LEFT JOIN `' . $this->testDb->fullTableName('test_model8', false) . '`/', $result); $this->Model->belongsTo['TestModel8']['type'] = 'INNER'; $this->testDb->read($this->Model, array('recursive' => 1)); $result = $this->testDb->getLastQuery(); $this->assertPattern('/`TestModel9` INNER JOIN `' . $this->testDb->fullTableName('test_model8', false) . '`/', $result); }/** * testGenerateAssociationQuerySelfJoinWithConditionsInHasOneBinding method * * @access public * @return void */ function testGenerateAssociationQuerySelfJoinWithConditionsInHasOneBinding() { $this->Model =& new TestModel8(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'hasOne', 'model' => 'TestModel9'); $queryData = array(); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $_queryData = $queryData; $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel8`\.`id`, `TestModel8`\.`test_model9_id`, `TestModel8`\.`name`, `TestModel8`\.`created`, `TestModel8`\.`updated`, `TestModel9`\.`id`, `TestModel9`\.`test_model8_id`, `TestModel9`\.`name`, `TestModel9`\.`created`, `TestModel9`\.`updated`\s+/', $result); $this->assertPattern('/FROM\s+`test_model8` AS `TestModel8`\s+LEFT JOIN\s+`test_model9` AS `TestModel9`/', $result); $this->assertPattern('/\s+ON\s+\(`TestModel9`\.`name` != \'mariano\'\s+AND\s+`TestModel9`.`test_model8_id` = `TestModel8`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+(?:\()?1\s+=\s+1(?:\))?\s*$/', $result); }/** * testGenerateAssociationQuerySelfJoinWithConditionsInBelongsToBinding method * * @access public * @return void */ function testGenerateAssociationQuerySelfJoinWithConditionsInBelongsToBinding() { $this->Model =& new TestModel9(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'belongsTo', 'model' => 'TestModel8'); $queryData = array(); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel9`\.`id`, `TestModel9`\.`test_model8_id`, `TestModel9`\.`name`, `TestModel9`\.`created`, `TestModel9`\.`updated`, `TestModel8`\.`id`, `TestModel8`\.`test_model9_id`, `TestModel8`\.`name`, `TestModel8`\.`created`, `TestModel8`\.`updated`\s+/', $result); $this->assertPattern('/FROM\s+`test_model9` AS `TestModel9`\s+LEFT JOIN\s+`test_model8` AS `TestModel8`/', $result); $this->assertPattern('/\s+ON\s+\(`TestModel8`\.`name` != \'larry\'\s+AND\s+`TestModel9`.`test_model8_id` = `TestModel8`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+(?:\()?1\s+=\s+1(?:\))?\s*$/', $result); }/** * testGenerateAssociationQuerySelfJoinWithConditions method * * @access public * @return void */ function testGenerateAssociationQuerySelfJoinWithConditions() { $this->Model =& new TestModel4(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'belongsTo', 'model' => 'TestModel4Parent'); $queryData = array('conditions' => array('TestModel4Parent.name !=' => 'mariano')); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel4`\.`id`, `TestModel4`\.`name`, `TestModel4`\.`created`, `TestModel4`\.`updated`, `TestModel4Parent`\.`id`, `TestModel4Parent`\.`name`, `TestModel4Parent`\.`created`, `TestModel4Parent`\.`updated`\s+/', $result); $this->assertPattern('/FROM\s+`test_model4` AS `TestModel4`\s+LEFT JOIN\s+`test_model4` AS `TestModel4Parent`/', $result); $this->assertPattern('/\s+ON\s+\(`TestModel4`.`parent_id` = `TestModel4Parent`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+(?:\()?`TestModel4Parent`.`name`\s+!=\s+\'mariano\'(?:\))?\s*$/', $result); $this->Featured2 =& new Featured2(); $this->Featured2->schema(); $this->Featured2->bindModel(array( 'belongsTo' => array( 'ArticleFeatured2' => array( 'conditions' => 'ArticleFeatured2.published = \'Y\'', 'fields' => 'id, title, user_id, published' ) ) )); $this->_buildRelatedModels($this->Featured2); $binding = array('type' => 'belongsTo', 'model' => 'ArticleFeatured2'); $queryData = array('conditions' => array()); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Featured2, $queryData, $binding); $result = $this->testDb->generateAssociationQuery($this->Featured2, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->generateAssociationQuery($this->Featured2, $null, null, null, null, $queryData, false, $null); $this->assertPattern( '/^SELECT\s+`Featured2`\.`id`, `Featured2`\.`article_id`, `Featured2`\.`category_id`, `Featured2`\.`name`,\s+'. '`ArticleFeatured2`\.`id`, `ArticleFeatured2`\.`title`, `ArticleFeatured2`\.`user_id`, `ArticleFeatured2`\.`published`\s+' . 'FROM\s+`featured2` AS `Featured2`\s+LEFT JOIN\s+`article_featured` AS `ArticleFeatured2`' . '\s+ON\s+\(`ArticleFeatured2`.`published` = \'Y\'\s+AND\s+`Featured2`\.`article_featured2_id` = `ArticleFeatured2`\.`id`\)' . '\s+WHERE\s+1\s+=\s+1\s*$/', $result ); }/** * testGenerateAssociationQueryHasOne method * * @access public * @return void */ function testGenerateAssociationQueryHasOne() { $this->Model =& new TestModel4(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'hasOne', 'model' => 'TestModel5'); $queryData = array(); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->buildJoinStatement($queryData['joins'][0]); $expected = ' LEFT JOIN `test_model5` AS `TestModel5` ON (`TestModel5`.`test_model4_id` = `TestModel4`.`id`)'; $this->assertEqual(trim($result), trim($expected)); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel4`\.`id`, `TestModel4`\.`name`, `TestModel4`\.`created`, `TestModel4`\.`updated`, `TestModel5`\.`id`, `TestModel5`\.`test_model4_id`, `TestModel5`\.`name`, `TestModel5`\.`created`, `TestModel5`\.`updated`\s+/', $result); $this->assertPattern('/\s+FROM\s+`test_model4` AS `TestModel4`\s+LEFT JOIN\s+/', $result); $this->assertPattern('/`test_model5` AS `TestModel5`\s+ON\s+\(`TestModel5`.`test_model4_id` = `TestModel4`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+(?:\()?\s*1 = 1\s*(?:\))?\s*$/', $result); }/** * testGenerateAssociationQueryHasOneWithConditions method * * @access public * @return void */ function testGenerateAssociationQueryHasOneWithConditions() { $this->Model =& new TestModel4(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type' => 'hasOne', 'model' => 'TestModel5'); $queryData = array('conditions' => array('TestModel5.name !=' => 'mariano')); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding); $result = $this->testDb->generateAssociationQuery($this->Model, $params['linkModel'], $params['type'], $params['assoc'], $params['assocData'], $queryData, $params['external'], $resultSet); $this->assertTrue($result); $result = $this->testDb->generateAssociationQuery($this->Model, $null, null, null, null, $queryData, false, $null); $this->assertPattern('/^SELECT\s+`TestModel4`\.`id`, `TestModel4`\.`name`, `TestModel4`\.`created`, `TestModel4`\.`updated`, `TestModel5`\.`id`, `TestModel5`\.`test_model4_id`, `TestModel5`\.`name`, `TestModel5`\.`created`, `TestModel5`\.`updated`\s+/', $result); $this->assertPattern('/\s+FROM\s+`test_model4` AS `TestModel4`\s+LEFT JOIN\s+`test_model5` AS `TestModel5`/', $result); $this->assertPattern('/\s+ON\s+\(`TestModel5`.`test_model4_id`\s+=\s+`TestModel4`.`id`\)\s+WHERE/', $result); $this->assertPattern('/\s+WHERE\s+(?:\()?\s*`TestModel5`.`name`\s+!=\s+\'mariano\'\s*(?:\))?\s*$/', $result); }/** * testGenerateAssociationQueryBelongsTo method * * @access public * @return void */ function testGenerateAssociationQueryBelongsTo() { $this->Model =& new TestModel5(); $this->Model->schema(); $this->_buildRelatedModels($this->Model); $binding = array('type'=>'belongsTo', 'model'=>'TestModel4'); $queryData = array(); $resultSet = null; $null = null; $params = &$this->_prepareAssociationQuery($this->Model, $queryData, $binding);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -