mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Merge pull request #6605 from cakephp/issue-6602
Fix incorrectly quoted table aliases in virtual fields.
This commit is contained in:
commit
d236cffb72
2 changed files with 39 additions and 0 deletions
|
@ -2869,12 +2869,19 @@ class DboSource extends DataSource {
|
|||
if (!empty($this->endQuote)) {
|
||||
$end = preg_quote($this->endQuote);
|
||||
}
|
||||
// Remove quotes and requote all the Model.field names.
|
||||
$conditions = str_replace(array($start, $end), '', $conditions);
|
||||
$conditions = preg_replace_callback(
|
||||
'/(?:[\'\"][^\'\"\\\]*(?:\\\.[^\'\"\\\]*)*[\'\"])|([a-z0-9_][a-z0-9\\-_]*\\.[a-z0-9_][a-z0-9_\\-]*)/i',
|
||||
array(&$this, '_quoteMatchedField'),
|
||||
$conditions
|
||||
);
|
||||
// Quote `table_name AS Alias`
|
||||
$conditions = preg_replace(
|
||||
'/(\s[a-z0-9\\-_.' . $start . $end . ']*' . $end . ')\s+AS\s+([a-z0-9\\-_]+)/i',
|
||||
'\1 AS ' . $this->startQuote . '\2' . $this->endQuote,
|
||||
$conditions
|
||||
);
|
||||
if ($conditions !== null) {
|
||||
return $conditions;
|
||||
}
|
||||
|
|
|
@ -7836,6 +7836,38 @@ class ModelReadTest extends BaseModelTest {
|
|||
$this->assertEquals(4, $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test virtualfields that contain subqueries get correctly
|
||||
* quoted allowing reserved words to be used.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testVirtualFieldSubqueryReservedWords() {
|
||||
$this->loadFixtures('User');
|
||||
$user = ClassRegistry::init('User');
|
||||
$user->cacheMethods = false;
|
||||
$ds = $user->getDataSource();
|
||||
|
||||
$sub = $ds->buildStatement(
|
||||
array(
|
||||
'fields' => array('Table.user'),
|
||||
'table' => $ds->fullTableName($user),
|
||||
'alias' => 'Table',
|
||||
'limit' => 1,
|
||||
'conditions' => array(
|
||||
"Table.id > 1"
|
||||
)
|
||||
),
|
||||
$user
|
||||
);
|
||||
$user->virtualFields = array(
|
||||
'sub_test' => $sub
|
||||
);
|
||||
|
||||
$result = $user->find('first');
|
||||
$this->assertNotEmpty($result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testVirtualFieldsOrder()
|
||||
*
|
||||
|
|
Loading…
Reference in a new issue