Merge branch '4.2' into 4.3

This commit is contained in:
Robbie Averill 2019-05-30 09:35:17 +12:00
commit 188698dcee
3 changed files with 35 additions and 6 deletions

View File

@ -30,7 +30,7 @@ class HeaderField extends DatalessField
* @param string $title
* @param int $headingLevel
*/
public function __construct($name, $title, $headingLevel = 2)
public function __construct($name, $title = null, $headingLevel = 2)
{
$this->setHeadingLevel($headingLevel);
parent::__construct($name, $title);

View File

@ -354,7 +354,6 @@ class DataQuery
{
if ($orderby = $query->getOrderBy()) {
$newOrderby = array();
$i = 0;
foreach ($orderby as $k => $dir) {
$newOrderby[$k] = $dir;
@ -372,7 +371,6 @@ class DataQuery
if (isset($originalSelect[$col])) {
$query->selectField($originalSelect[$col], $col);
}
continue;
}
@ -402,10 +400,15 @@ class DataQuery
if (!in_array($qualCol, $query->getSelect())) {
unset($newOrderby[$k]);
$newOrderby["\"_SortColumn$i\""] = $dir;
$query->selectField($qualCol, "_SortColumn$i");
// Find the first free "_SortColumnX" slot
// and assign it to $key
$i = 0;
while (isset($orderby[$key = "\"_SortColumn$i\""])) {
++$i;
}
$i++;
$newOrderby[$key] = $dir;
$query->selectField($qualCol, "_SortColumn$i");
}
}
}

View File

@ -296,6 +296,32 @@ class DataQueryTest extends SapphireTest
static::resetDBSchema(true);
}
public function testSurrogateFieldSort()
{
$query = new DataQuery(DataQueryTest\ObjectE::class);
$query->sort(
sprintf(
'(case when "Title" = %s then 1 else 0 end)',
DB::get_conn()->quoteString('Second')
),
'DESC',
true
);
$query->sort('SortOrder', 'ASC', false);
$query->sort(
sprintf(
'(case when "Title" = %s then 0 else 1 end)',
DB::get_conn()->quoteString('Fourth')
),
'DESC',
false
);
$this->assertEquals(
$query->execute()->column('Title'),
$query->column('Title')
);
}
public function testComparisonClauseDateStartsWith()
{
DB::query("INSERT INTO \"DataQueryTest_F\" (\"MyDate\") VALUES ('1988-03-04 06:30')");