mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-06 10:11:38 +09:00
Merge branch 'security/rve-2025-1'
This commit is contained in:
commit
5f5cd81f1b
3 changed files with 44 additions and 1 deletions
|
|
@ -619,7 +619,7 @@ class Query extends VariableBase
|
|||
|
||||
// Get the name of the column or expression to order by.
|
||||
$column_name = '';
|
||||
list($column_name, $is_expression) = $orderby->getValue($this->_args);
|
||||
list($column_name, $is_expression, $is_default_value) = $orderby->getValue($this->_args);
|
||||
if (!$column_name)
|
||||
{
|
||||
continue;
|
||||
|
|
@ -628,6 +628,10 @@ class Query extends VariableBase
|
|||
{
|
||||
$column_name = self::quoteName($column_name);
|
||||
}
|
||||
elseif (!$is_default_value)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Get the ordering (ASC or DESC).
|
||||
if (preg_match('/^(ASC|DESC)$/i', $orderby->order_var ?: '', $matches))
|
||||
|
|
|
|||
14
tests/_data/dbquery/sortIndexTest.xml
Normal file
14
tests/_data/dbquery/sortIndexTest.xml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<query id="sortIndexTest" action="select">
|
||||
<tables>
|
||||
<table name="documents" />
|
||||
</tables>
|
||||
<columns>
|
||||
<column name="*" />
|
||||
</columns>
|
||||
<conditions>
|
||||
<condition operation="equal" column="status" default="PUBLIC" />
|
||||
</conditions>
|
||||
<navigation>
|
||||
<index var="sort_index" default="RAND()" order="order_type" order-default="DESC" />
|
||||
</navigation>
|
||||
</query>
|
||||
|
|
@ -598,4 +598,29 @@ class DBQueryParserTest extends \Codeception\Test\Unit
|
|||
$this->assertEquals('SELECT `module_srl` FROM `rx_documents` AS `documents` ORDER BY `list_order` DESC LIMIT 40, 20', $sql);
|
||||
$this->assertTrue($query->requires_pagination);
|
||||
}
|
||||
|
||||
public function testSortIndex()
|
||||
{
|
||||
$query = Rhymix\Framework\Parsers\DBQueryParser::loadXML(\RX_BASEDIR . 'tests/_data/dbquery/sortIndexTest.xml');
|
||||
|
||||
$sql = $query->getQueryString('rx_', array());
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `status` = ? ORDER BY RAND() DESC', $sql);
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'sort_index' => 'list_order',
|
||||
'order_type' => 'asc',
|
||||
));
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `status` = ? ORDER BY `list_order` ASC', $sql);
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'sort_index' => 'voted_count + blamed_count',
|
||||
'order_type' => 'desc',
|
||||
));
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `status` = ?', $sql);
|
||||
|
||||
$sql = $query->getQueryString('rx_', array(
|
||||
'sort_index' => 'RAND()',
|
||||
));
|
||||
$this->assertEquals('SELECT * FROM `rx_documents` AS `documents` WHERE `status` = ?', $sql);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue