2015-02-19 10:23:50 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
2015-11-04 14:36:38 +01:00
|
|
|
* @dataProvider? ../databases.ini sqlsrv
|
2015-02-19 10:23:50 +01:00
|
|
|
*/
|
|
|
|
|
2017-06-09 22:20:47 +02:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
2015-02-19 10:23:50 +01:00
|
|
|
use Tester\Assert;
|
|
|
|
|
|
|
|
require __DIR__ . '/bootstrap.php';
|
|
|
|
|
2015-06-19 03:11:36 +02:00
|
|
|
$tests = function ($conn) {
|
2016-01-26 09:39:34 +01:00
|
|
|
$resource = $conn->getDriver()->getResource();
|
|
|
|
$version = is_resource($resource)
|
|
|
|
? sqlsrv_server_info($resource)['SQLServerVersion']
|
|
|
|
: $resource->getAttribute(PDO::ATTR_SERVER_VERSION);
|
2015-02-19 10:23:50 +01:00
|
|
|
|
|
|
|
// MsSQL2012+
|
2015-06-19 03:11:36 +02:00
|
|
|
if (version_compare($version, '11.0') >= 0) {
|
2015-02-19 10:23:50 +01:00
|
|
|
// Limit and offset
|
|
|
|
Assert::same(
|
|
|
|
'SELECT 1 OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY',
|
|
|
|
$conn->translate('SELECT 1 %ofs %lmt', 10, 10)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Limit only
|
|
|
|
Assert::same(
|
|
|
|
'SELECT 1 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY',
|
|
|
|
$conn->translate('SELECT 1 %lmt', 10)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Offset only
|
|
|
|
Assert::same(
|
|
|
|
'SELECT 1 OFFSET 10 ROWS',
|
|
|
|
$conn->translate('SELECT 1 %ofs', 10)
|
|
|
|
);
|
|
|
|
|
|
|
|
// Offset invalid
|
2016-01-26 09:39:34 +01:00
|
|
|
Assert::error(
|
|
|
|
function () use ($conn) {
|
|
|
|
$conn->translate('SELECT 1 %ofs', -10);
|
|
|
|
},
|
2017-06-09 12:21:23 +02:00
|
|
|
Dibi\NotSupportedException::class,
|
2016-01-26 09:39:34 +01:00
|
|
|
'Negative offset or limit.'
|
2015-02-19 10:23:50 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
// Limit invalid
|
2016-01-26 09:39:34 +01:00
|
|
|
Assert::error(
|
|
|
|
function () use ($conn) {
|
|
|
|
$conn->translate('SELECT 1 %lmt', -10);
|
|
|
|
},
|
2017-06-09 12:21:23 +02:00
|
|
|
Dibi\NotSupportedException::class,
|
2016-01-26 09:39:34 +01:00
|
|
|
'Negative offset or limit.'
|
2015-02-19 10:23:50 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
// Limit invalid, offset valid
|
2016-01-26 09:39:34 +01:00
|
|
|
Assert::error(
|
|
|
|
function () use ($conn) {
|
|
|
|
$conn->translate('SELECT 1 %ofs %lmt', 10, -10);
|
|
|
|
},
|
2017-06-09 12:21:23 +02:00
|
|
|
Dibi\NotSupportedException::class,
|
2016-01-26 09:39:34 +01:00
|
|
|
'Negative offset or limit.'
|
2015-02-19 10:23:50 +01:00
|
|
|
);
|
|
|
|
|
|
|
|
// Limit valid, offset invalid
|
2016-01-26 09:39:34 +01:00
|
|
|
Assert::error(
|
|
|
|
function () use ($conn) {
|
|
|
|
$conn->translate('SELECT 1 %ofs %lmt', -10, 10);
|
|
|
|
},
|
2017-06-09 12:21:23 +02:00
|
|
|
Dibi\NotSupportedException::class,
|
2016-01-26 09:39:34 +01:00
|
|
|
'Negative offset or limit.'
|
2015-02-19 10:23:50 +01:00
|
|
|
);
|
|
|
|
} else {
|
|
|
|
Assert::same(
|
2016-01-26 09:39:34 +01:00
|
|
|
'SELECT TOP (1) * FROM (SELECT 1) t',
|
2015-02-19 10:23:50 +01:00
|
|
|
$conn->translate('SELECT 1 %lmt', 1)
|
|
|
|
);
|
|
|
|
|
|
|
|
Assert::same(
|
|
|
|
'SELECT 1',
|
|
|
|
$conn->translate('SELECT 1 %lmt', -10)
|
|
|
|
);
|
|
|
|
|
|
|
|
Assert::exception(
|
|
|
|
$conn->translate('SELECT 1 %ofs %lmt', 10, 10),
|
2017-06-09 12:21:23 +02:00
|
|
|
Dibi\NotSupportedException::class
|
2015-02-19 10:23:50 +01:00
|
|
|
);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-10-08 02:13:22 +02:00
|
|
|
$conn = new Dibi\Connection($config);
|
2015-02-19 10:23:50 +01:00
|
|
|
$tests($conn);
|