Add support second, minute, week, year on DATE_ADD and DATE_SUB
This commit is contained in:
parent
ed86ee2567
commit
f277eef6ea
@ -51,7 +51,11 @@ class DateAddFunction extends FunctionNode
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
|
||||
case 'minute':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddMinutesExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'hour':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddHourExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
@ -62,16 +66,25 @@ class DateAddFunction extends FunctionNode
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
|
||||
case 'week':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddWeeksExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'month':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddMonthExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'year':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddYearsExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
|
||||
default:
|
||||
throw QueryException::semanticalError(
|
||||
'DATE_ADD() only supports units of type second, hour, day and month.'
|
||||
'DATE_ADD() only supports units of type second, minute, hour, day, week, month and year.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,16 @@ class DateSubFunction extends DateAddFunction
|
||||
public function getSql(SqlWalker $sqlWalker)
|
||||
{
|
||||
switch (strtolower($this->unit->value)) {
|
||||
case 'second':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubSecondsExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'minute':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMinutesExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'hour':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubHourExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
@ -50,16 +60,25 @@ class DateSubFunction extends DateAddFunction
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
|
||||
case 'week':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubWeeksExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'month':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMonthExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
case 'year':
|
||||
return $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubYearsExpression(
|
||||
$this->firstDateExpression->dispatch($sqlWalker),
|
||||
$this->intervalExpression->dispatch($sqlWalker)
|
||||
);
|
||||
|
||||
default:
|
||||
throw QueryException::semanticalError(
|
||||
'DATE_SUB() only supports units of type hour, day and month.'
|
||||
'DATE_SUB() only supports units of type second, minute, hour, day, week, month and year.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
@ -301,6 +301,24 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-2938
|
||||
*/
|
||||
public function testDateAddTime(): void
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'minute') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_ADD(CURRENT_TIMESTAMP(), 10, 'hour') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
|
||||
public function testDateAddSecond()
|
||||
{
|
||||
$dql = "SELECT CURRENT_TIMESTAMP() now, DATE_ADD(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m";
|
||||
@ -334,6 +352,24 @@ class QueryDqlFunctionTest extends OrmFunctionalTestCase
|
||||
$this->assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-2938
|
||||
*/
|
||||
public function testDateSubTime(): void
|
||||
{
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'second') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'minute') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
|
||||
$arg = $this->_em->createQuery("SELECT DATE_SUB(CURRENT_TIMESTAMP(), 10, 'hour') AS add FROM Doctrine\Tests\Models\Company\CompanyManager m")
|
||||
->getArrayResult();
|
||||
self::assertTrue(strtotime($arg[0]['add']) > 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-1213
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user