1
0
mirror of https://github.com/dg/dibi.git synced 2025-02-23 18:33:45 +01:00
php-dibi/tests/dibi/Connection.fetch.phpt

321 lines
9.5 KiB
Plaintext
Raw Normal View History

2015-01-12 05:33:41 +01:00
<?php
/**
* @dataProvider ../databases.ini
*/
use Tester\Assert;
use Dibi\Row;
2015-01-12 05:33:41 +01:00
require __DIR__ . '/bootstrap.php';
$conn = new Dibi\Connection($config);
2015-01-12 05:33:41 +01:00
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
// fetch a single value
$res = $conn->query('SELECT [title] FROM [products] ORDER BY [product_id]');
2015-01-12 05:33:41 +01:00
Assert::same('Chair', $res->fetchSingle());
// fetch complete result set
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
2015-10-06 01:39:01 +02:00
Assert::equal([
new Row(['product_id' => num(1), 'title' => 'Chair']),
new Row(['product_id' => num(2), 'title' => 'Table']),
new Row(['product_id' => num(3), 'title' => 'Computer']),
2015-10-06 01:39:01 +02:00
], $res->fetchAll());
2015-01-12 05:33:41 +01:00
// fetch complete result set like pairs key => value
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
Assert::same(
2015-10-06 01:39:01 +02:00
[1 => 'Chair', 'Table', 'Computer'],
2015-01-12 05:33:41 +01:00
$res->fetchPairs('product_id', 'title')
);
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
Assert::same(
2015-10-06 01:39:01 +02:00
[1 => 'Chair', 'Table', 'Computer'],
2015-01-12 05:33:41 +01:00
$res->fetchPairs()
);
// fetch row by row
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
2015-10-06 01:39:01 +02:00
Assert::equal([
new Row(['product_id' => num(1), 'title' => 'Chair']),
new Row(['product_id' => num(2), 'title' => 'Table']),
new Row(['product_id' => num(3), 'title' => 'Computer']),
2015-10-06 01:39:01 +02:00
], iterator_to_array($res));
2015-01-12 05:33:41 +01:00
// fetch complete result set like association array
$res = $conn->query('SELECT * FROM [products] ORDER BY product_id');
2015-10-06 01:39:01 +02:00
Assert::equal([
'Chair' => new Row(['product_id' => num(1), 'title' => 'Chair']),
'Table' => new Row(['product_id' => num(2), 'title' => 'Table']),
'Computer' => new Row(['product_id' => num(3), 'title' => 'Computer']),
2015-10-06 01:39:01 +02:00
], $res->fetchAssoc('title'));
2015-01-12 05:33:41 +01:00
// more complex association array
function query($conn) {
return $conn->query(in_array($conn->getConfig('system'), ['odbc', 'sqlsrv']) ? '
2015-01-12 05:33:41 +01:00
SELECT products.title, customers.name, orders.amount
FROM ([products]
INNER JOIN [orders] ON [products.product_id] = [orders.product_id])
INNER JOIN [customers] ON [orders.customer_id] = [customers.customer_id]
ORDER BY orders.order_id
' : '
SELECT products.title AS title, customers.name AS name, orders.amount AS amount
FROM [products]
INNER JOIN [orders] USING ([product_id])
INNER JOIN [customers] USING ([customer_id])
ORDER BY orders.order_id
');
}
2015-10-06 01:39:01 +02:00
Assert::equal([
'Arnold Rimmer' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
'Dave Lister' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
'Kristine Kochanski' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
], query($conn)->fetchAssoc('name,title'));
Assert::equal([
'Arnold Rimmer' => [
[
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
2015-10-06 01:39:01 +02:00
],
[
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
],
'Dave Lister' => [
[
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
],
'Kristine Kochanski' => [
[
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
],
], query($conn)->fetchAssoc('name,#,title'));
Assert::equal([
'Arnold Rimmer' => [
'title' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
],
'Dave Lister' => [
'title' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
],
'Kristine Kochanski' => [
'title' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
],
], query($conn)->fetchAssoc('name,=,title'));
2015-01-12 05:33:41 +01:00
2015-10-06 01:39:01 +02:00
Assert::equal([
'Arnold Rimmer' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
]),
'Dave Lister' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
]),
'Kristine Kochanski' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
]),
], query($conn)->fetchAssoc('name,@,title'));
Assert::equal([
new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
new Row([
2015-10-06 01:39:01 +02:00
'title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
new Row([
2015-10-06 01:39:01 +02:00
'title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
new Row([
2015-10-06 01:39:01 +02:00
'title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
], query($conn)->fetchAssoc('@,='));
Assert::equal([
'Arnold Rimmer' => [
'title' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
],
'Dave Lister' => [
'title' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
],
'Kristine Kochanski' => [
'title' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
],
], query($conn)->fetchAssoc('name,=,title,@'));
2015-01-12 05:33:41 +01:00
// old syntax
2015-10-06 01:39:01 +02:00
Assert::equal([
'Arnold Rimmer' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
'Dave Lister' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
'Kristine Kochanski' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
], query($conn)->fetchAssoc('name|title'));
Assert::equal([
'Arnold Rimmer' => [
[
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
2015-10-06 01:39:01 +02:00
],
[
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
],
'Dave Lister' => [
[
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
],
'Kristine Kochanski' => [
[
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
],
], query($conn)->fetchAssoc('name[]title'));
Assert::equal([
'Arnold Rimmer' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
]),
'Dave Lister' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
]),
'Kristine Kochanski' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
]),
], query($conn)->fetchAssoc('name->title'));
2015-01-12 05:33:41 +01:00
2015-10-06 01:39:01 +02:00
Assert::equal([
'Arnold Rimmer' => new Row([
2015-10-06 01:39:01 +02:00
'title' => ['Chair' => 'Arnold Rimmer', 'Computer' => 'Arnold Rimmer'],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
]),
'Dave Lister' => new Row([
2015-10-06 01:39:01 +02:00
'title' => ['Table' => 'Dave Lister'],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
]),
'Kristine Kochanski' => new Row([
2015-10-06 01:39:01 +02:00
'title' => ['Computer' => 'Kristine Kochanski'],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
]),
], query($conn)->fetchAssoc('name->title=name'));
2015-01-12 05:33:41 +01:00
2015-10-06 01:39:01 +02:00
Assert::equal([
new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
], query($conn)->fetchAssoc('[]'));
2015-01-12 05:33:41 +01:00
2015-10-06 01:39:01 +02:00
Assert::equal([
'Arnold Rimmer' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Chair' => new Row(['title' => 'Chair', 'name' => 'Arnold Rimmer', 'amount' => num(7.0)]),
'Computer' => new Row(['title' => 'Computer', 'name' => 'Arnold Rimmer', 'amount' => num(2.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Arnold Rimmer',
'amount' => num(7.0),
2015-10-06 01:39:01 +02:00
]),
'Dave Lister' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Table' => new Row(['title' => 'Table', 'name' => 'Dave Lister', 'amount' => num(3.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Dave Lister',
'amount' => num(3.0),
2015-10-06 01:39:01 +02:00
]),
'Kristine Kochanski' => new Row([
2015-10-06 01:39:01 +02:00
'title' => [
'Computer' => new Row(['title' => 'Computer', 'name' => 'Kristine Kochanski', 'amount' => num(5.0)]),
2015-10-06 01:39:01 +02:00
],
2015-01-12 05:33:41 +01:00
'name' => 'Kristine Kochanski',
'amount' => num(5.0),
2015-10-06 01:39:01 +02:00
]),
], query($conn)->fetchAssoc('name->title->'));