mirror of
https://github.com/dg/dibi.git
synced 2025-08-31 09:41:43 +02:00
Compare commits
25 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
fc6ef0b121 | ||
|
96188d2edc | ||
|
f392728e0c | ||
|
c14dd863b6 | ||
|
7812e74602 | ||
|
f457504037 | ||
|
50324fd815 | ||
|
8f8fd040ff | ||
|
120f0946e0 | ||
|
fef3eccc61 | ||
|
411862d5d8 | ||
|
84f3a5ddef | ||
|
47ef875c73 | ||
|
63c644a860 | ||
|
1c3ef5f5cf | ||
|
9100f94b8f | ||
|
e339eff00f | ||
|
48adcec6dc | ||
|
389026d697 | ||
|
8f0d0fb115 | ||
|
965570c067 | ||
|
4ae4f49c21 | ||
|
5b9ffe14ba | ||
|
2d9358e4f7 | ||
|
e3748420f5 |
@@ -2,7 +2,7 @@
|
|||||||
"name": "dibi/dibi",
|
"name": "dibi/dibi",
|
||||||
"description": "Dibi is Database Abstraction Library for PHP",
|
"description": "Dibi is Database Abstraction Library for PHP",
|
||||||
"keywords": ["database", "dbal", "mysql", "postgresql", "sqlite", "mssql", "oracle", "access", "pdo", "odbc"],
|
"keywords": ["database", "dbal", "mysql", "postgresql", "sqlite", "mssql", "oracle", "access", "pdo", "odbc"],
|
||||||
"homepage": "http://dibiphp.com",
|
"homepage": "https://dibiphp.com",
|
||||||
"license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
|
"license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
|
||||||
"authors": [
|
"authors": [
|
||||||
{
|
{
|
||||||
|
@@ -5,7 +5,7 @@ The issue tracker is the preferred channel for bug reports, features requests
|
|||||||
and submitting pull requests, but please respect the following restrictions:
|
and submitting pull requests, but please respect the following restrictions:
|
||||||
|
|
||||||
* Please **do not** use the issue tracker for personal support requests (use
|
* Please **do not** use the issue tracker for personal support requests (use
|
||||||
[dibi forum](http://forum.dibiphp.com) or [Stack Overflow](http://stackoverflow.com)).
|
[dibi forum](https://forum.dibiphp.com) or [Stack Overflow](http://stackoverflow.com)).
|
||||||
|
|
||||||
* Please **do not** derail or troll issues. Keep the discussion on topic and
|
* Please **do not** derail or troll issues. Keep the discussion on topic and
|
||||||
respect the opinions of others.
|
respect the opinions of others.
|
||||||
|
@@ -30,11 +30,6 @@ class DibiMySqlReflector extends DibiObject implements IDibiReflector
|
|||||||
*/
|
*/
|
||||||
public function getTables()
|
public function getTables()
|
||||||
{
|
{
|
||||||
/*$this->query("
|
|
||||||
SELECT TABLE_NAME as name, TABLE_TYPE = 'VIEW' as view
|
|
||||||
FROM INFORMATION_SCHEMA.TABLES
|
|
||||||
WHERE TABLE_SCHEMA = DATABASE()
|
|
||||||
");*/
|
|
||||||
$res = $this->driver->query('SHOW FULL TABLES');
|
$res = $this->driver->query('SHOW FULL TABLES');
|
||||||
$tables = array();
|
$tables = array();
|
||||||
while ($row = $res->fetch(FALSE)) {
|
while ($row = $res->fetch(FALSE)) {
|
||||||
@@ -54,12 +49,6 @@ class DibiMySqlReflector extends DibiObject implements IDibiReflector
|
|||||||
*/
|
*/
|
||||||
public function getColumns($table)
|
public function getColumns($table)
|
||||||
{
|
{
|
||||||
/*$table = $this->escape($table, dibi::TEXT);
|
|
||||||
$this->query("
|
|
||||||
SELECT *
|
|
||||||
FROM INFORMATION_SCHEMA.COLUMNS
|
|
||||||
WHERE TABLE_NAME = $table AND TABLE_SCHEMA = DATABASE()
|
|
||||||
");*/
|
|
||||||
$res = $this->driver->query("SHOW FULL COLUMNS FROM {$this->driver->escape($table, dibi::IDENTIFIER)}");
|
$res = $this->driver->query("SHOW FULL COLUMNS FROM {$this->driver->escape($table, dibi::IDENTIFIER)}");
|
||||||
$columns = array();
|
$columns = array();
|
||||||
while ($row = $res->fetch(TRUE)) {
|
while ($row = $res->fetch(TRUE)) {
|
||||||
@@ -87,13 +76,6 @@ class DibiMySqlReflector extends DibiObject implements IDibiReflector
|
|||||||
*/
|
*/
|
||||||
public function getIndexes($table)
|
public function getIndexes($table)
|
||||||
{
|
{
|
||||||
/*$table = $this->escape($table, dibi::TEXT);
|
|
||||||
$this->query("
|
|
||||||
SELECT *
|
|
||||||
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
|
|
||||||
WHERE TABLE_NAME = $table AND TABLE_SCHEMA = DATABASE()
|
|
||||||
AND REFERENCED_COLUMN_NAME IS NULL
|
|
||||||
");*/
|
|
||||||
$res = $this->driver->query("SHOW INDEX FROM {$this->driver->escape($table, dibi::IDENTIFIER)}");
|
$res = $this->driver->query("SHOW INDEX FROM {$this->driver->escape($table, dibi::IDENTIFIER)}");
|
||||||
$indexes = array();
|
$indexes = array();
|
||||||
while ($row = $res->fetch(TRUE)) {
|
while ($row = $res->fetch(TRUE)) {
|
||||||
|
@@ -66,7 +66,7 @@ class DibiPdoDriver extends DibiObject implements IDibiDriver, IDibiResultDriver
|
|||||||
|
|
||||||
if ($config['resource'] instanceof PDO) {
|
if ($config['resource'] instanceof PDO) {
|
||||||
$this->connection = $config['resource'];
|
$this->connection = $config['resource'];
|
||||||
|
unset($config['resource'], $config['pdo']);
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
$this->connection = new PDO($config['dsn'], $config['username'], $config['password'], $config['options']);
|
$this->connection = new PDO($config['dsn'], $config['username'], $config['password'], $config['options']);
|
||||||
|
@@ -51,12 +51,6 @@ class DibiSqliteReflector extends DibiObject implements IDibiReflector
|
|||||||
*/
|
*/
|
||||||
public function getColumns($table)
|
public function getColumns($table)
|
||||||
{
|
{
|
||||||
$meta = $this->driver->query("
|
|
||||||
SELECT sql FROM sqlite_master WHERE type = 'table' AND name = {$this->driver->escape($table, dibi::TEXT)}
|
|
||||||
UNION ALL
|
|
||||||
SELECT sql FROM sqlite_temp_master WHERE type = 'table' AND name = {$this->driver->escape($table, dibi::TEXT)}
|
|
||||||
")->fetch(TRUE);
|
|
||||||
|
|
||||||
$res = $this->driver->query("PRAGMA table_info({$this->driver->escape($table, dibi::IDENTIFIER)})");
|
$res = $this->driver->query("PRAGMA table_info({$this->driver->escape($table, dibi::IDENTIFIER)})");
|
||||||
$columns = array();
|
$columns = array();
|
||||||
while ($row = $res->fetch(TRUE)) {
|
while ($row = $res->fetch(TRUE)) {
|
||||||
|
14
dibi/drivers/DibiSqlsrvDriver.php
Normal file
14
dibi/drivers/DibiSqlsrvDriver.php
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of the "dibi" - smart database abstraction layer.
|
||||||
|
* Copyright (c) 2005 David Grudl (https://davidgrudl.com)
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
require_once dirname(__FILE__) . '/DibiMsSql2005Driver.php';
|
||||||
|
|
||||||
|
|
||||||
|
class DibiSqlsrvDriver extends DibiMsSql2005Driver
|
||||||
|
{
|
||||||
|
}
|
@@ -38,8 +38,8 @@ class dibi
|
|||||||
FIELD_TIME = self::TIME;
|
FIELD_TIME = self::TIME;
|
||||||
|
|
||||||
/** version */
|
/** version */
|
||||||
const VERSION = '2.3.2',
|
const VERSION = '2.3.5',
|
||||||
REVISION = 'released on 2015-04-18';
|
REVISION = 'released on 2015-12-16';
|
||||||
|
|
||||||
/** sorting order */
|
/** sorting order */
|
||||||
const ASC = 'ASC',
|
const ASC = 'ASC',
|
||||||
@@ -368,18 +368,6 @@ class dibi
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Replacement for majority of dibi::methods() in future.
|
|
||||||
*/
|
|
||||||
public static function __callStatic($name, $args)
|
|
||||||
{
|
|
||||||
//if ($name = 'select', 'update', ...') {
|
|
||||||
// return self::command()->$name($args);
|
|
||||||
//}
|
|
||||||
return call_user_func_array(array(self::getConnection(), $name), $args);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/********************* fluent SQL builders ****************d*g**/
|
/********************* fluent SQL builders ****************d*g**/
|
||||||
|
|
||||||
|
|
||||||
|
@@ -75,19 +75,26 @@ class DibiConnection extends DibiObject
|
|||||||
$config['driver'] = dibi::$defaultDriver;
|
$config['driver'] = dibi::$defaultDriver;
|
||||||
}
|
}
|
||||||
|
|
||||||
$class = preg_replace(array('#\W#', '#sql#'), array('_', 'Sql'), ucfirst(strtolower($config['driver'])));
|
if ($config['driver'] instanceof IDibiDriver) {
|
||||||
$class = "Dibi{$class}Driver";
|
$this->driver = $config['driver'];
|
||||||
if (!class_exists($class)) {
|
$config['driver'] = get_class($this->driver);
|
||||||
include_once dirname(__FILE__) . "/../drivers/$class.php";
|
} elseif (PHP_VERSION_ID >= 50307 && is_subclass_of($config['driver'], 'IDibiDriver')) {
|
||||||
|
$this->driver = new $config['driver'];
|
||||||
|
} else {
|
||||||
|
$class = preg_replace(array('#\W#', '#sql#'), array('_', 'Sql'), ucfirst(strtolower($config['driver'])));
|
||||||
|
$class = "Dibi{$class}Driver";
|
||||||
|
if (!class_exists($class)) {
|
||||||
|
include_once dirname(__FILE__) . "/../drivers/$class.php";
|
||||||
|
|
||||||
if (!class_exists($class, FALSE)) {
|
if (!class_exists($class, FALSE)) {
|
||||||
throw new DibiException("Unable to create instance of dibi driver '$class'.");
|
throw new DibiException("Unable to create instance of dibi driver '$class'.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$this->driver = new $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
$config['name'] = $name;
|
$config['name'] = $name;
|
||||||
$this->config = $config;
|
$this->config = $config;
|
||||||
$this->driver = new $class;
|
|
||||||
$this->translator = new DibiTranslator($this);
|
$this->translator = new DibiTranslator($this);
|
||||||
|
|
||||||
// profiler
|
// profiler
|
||||||
|
@@ -390,7 +390,7 @@ class DibiResultInfo extends DibiObject
|
|||||||
$this->columns = array();
|
$this->columns = array();
|
||||||
$reflector = $this->driver instanceof IDibiReflector ? $this->driver : NULL;
|
$reflector = $this->driver instanceof IDibiReflector ? $this->driver : NULL;
|
||||||
foreach ($this->driver->getResultColumns() as $info) {
|
foreach ($this->driver->getResultColumns() as $info) {
|
||||||
$this->columns[] = $this->names[$info['name']] = new DibiColumnInfo($reflector, $info);
|
$this->columns[] = $this->names[strtolower($info['name'])] = new DibiColumnInfo($reflector, $info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -566,7 +566,7 @@ class DibiColumnInfo extends DibiObject
|
|||||||
'^_' => dibi::TEXT, // PostgreSQL arrays
|
'^_' => dibi::TEXT, // PostgreSQL arrays
|
||||||
'BYTEA|BLOB|BIN' => dibi::BINARY,
|
'BYTEA|BLOB|BIN' => dibi::BINARY,
|
||||||
'TEXT|CHAR|POINT|INTERVAL' => dibi::TEXT,
|
'TEXT|CHAR|POINT|INTERVAL' => dibi::TEXT,
|
||||||
'YEAR|BYTE|COUNTER|SERIAL|INT|LONG|SHORT' => dibi::INTEGER,
|
'YEAR|BYTE|COUNTER|SERIAL|INT|LONG|SHORT|^TINY$' => dibi::INTEGER,
|
||||||
'CURRENCY|REAL|MONEY|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER' => dibi::FLOAT,
|
'CURRENCY|REAL|MONEY|FLOAT|DOUBLE|DECIMAL|NUMERIC|NUMBER' => dibi::FLOAT,
|
||||||
'^TIME$' => dibi::TIME,
|
'^TIME$' => dibi::TIME,
|
||||||
'TIME' => dibi::DATETIME, // DATETIME, TIMESTAMP
|
'TIME' => dibi::DATETIME, // DATETIME, TIMESTAMP
|
||||||
|
@@ -9,19 +9,22 @@
|
|||||||
/**
|
/**
|
||||||
* dibi SQL builder via fluent interfaces. EXPERIMENTAL!
|
* dibi SQL builder via fluent interfaces. EXPERIMENTAL!
|
||||||
*
|
*
|
||||||
* @package dibi
|
* @method DibiFluent select(...$field)
|
||||||
*
|
|
||||||
* @method DibiFluent select($field)
|
|
||||||
* @method DibiFluent distinct()
|
* @method DibiFluent distinct()
|
||||||
* @method DibiFluent from($table)
|
* @method DibiFluent from($table)
|
||||||
* @method DibiFluent where($cond)
|
* @method DibiFluent where(...$cond)
|
||||||
* @method DibiFluent groupBy($field)
|
* @method DibiFluent groupBy(...$field)
|
||||||
* @method DibiFluent having($cond)
|
* @method DibiFluent having(...$cond)
|
||||||
* @method DibiFluent orderBy($field)
|
* @method DibiFluent orderBy(...$field)
|
||||||
* @method DibiFluent limit(int $limit)
|
* @method DibiFluent limit(int $limit)
|
||||||
* @method DibiFluent offset(int $offset)
|
* @method DibiFluent offset(int $offset)
|
||||||
* @method DibiFluent leftJoin($table)
|
* @method DibiFluent join(...$table)
|
||||||
* @method DibiFluent on($cond)
|
* @method DibiFluent leftJoin(...$table)
|
||||||
|
* @method DibiFluent innerJoin(...$table)
|
||||||
|
* @method DibiFluent rightJoin(...$table)
|
||||||
|
* @method DibiFluent outerJoin(...$table)
|
||||||
|
* @method DibiFluent on(...$cond)
|
||||||
|
* @method DibiFluent using(...$cond)
|
||||||
*/
|
*/
|
||||||
class DibiFluent extends DibiObject implements IDataSource
|
class DibiFluent extends DibiObject implements IDataSource
|
||||||
{
|
{
|
||||||
@@ -175,7 +178,10 @@ class DibiFluent extends DibiObject implements IDataSource
|
|||||||
} elseif (is_string($arg) && preg_match('#^[a-z:_][a-z0-9_.:]*\z#i', $arg)) { // identifier
|
} elseif (is_string($arg) && preg_match('#^[a-z:_][a-z0-9_.:]*\z#i', $arg)) { // identifier
|
||||||
$args = array('%n', $arg);
|
$args = array('%n', $arg);
|
||||||
|
|
||||||
} elseif (is_array($arg) || ($arg instanceof Traversable && !$arg instanceof self)) { // any array
|
} elseif ($arg instanceof self) {
|
||||||
|
$args = array('%SQL', $arg);
|
||||||
|
|
||||||
|
} elseif (is_array($arg) || $arg instanceof Traversable) { // any array
|
||||||
if (isset(self::$modifiers[$clause])) {
|
if (isset(self::$modifiers[$clause])) {
|
||||||
$args = array(self::$modifiers[$clause], $arg);
|
$args = array(self::$modifiers[$clause], $arg);
|
||||||
|
|
||||||
@@ -315,7 +321,7 @@ class DibiFluent extends DibiObject implements IDataSource
|
|||||||
*/
|
*/
|
||||||
public function fetch()
|
public function fetch()
|
||||||
{
|
{
|
||||||
if ($this->command === 'SELECT') {
|
if ($this->command === 'SELECT' && !$this->clauses['LIMIT'] && !$this->clauses['OFFSET']) {
|
||||||
return $this->query($this->_export(NULL, array('%lmt', 1)))->fetch();
|
return $this->query($this->_export(NULL, array('%lmt', 1)))->fetch();
|
||||||
} else {
|
} else {
|
||||||
return $this->query($this->_export())->fetch();
|
return $this->query($this->_export())->fetch();
|
||||||
@@ -329,7 +335,7 @@ class DibiFluent extends DibiObject implements IDataSource
|
|||||||
*/
|
*/
|
||||||
public function fetchSingle()
|
public function fetchSingle()
|
||||||
{
|
{
|
||||||
if ($this->command === 'SELECT') {
|
if ($this->command === 'SELECT' && !$this->clauses['LIMIT'] && !$this->clauses['OFFSET']) {
|
||||||
return $this->query($this->_export(NULL, array('%lmt', 1)))->fetchSingle();
|
return $this->query($this->_export(NULL, array('%lmt', 1)))->fetchSingle();
|
||||||
} else {
|
} else {
|
||||||
return $this->query($this->_export())->fetchSingle();
|
return $this->query($this->_export())->fetchSingle();
|
||||||
@@ -401,7 +407,7 @@ class DibiFluent extends DibiObject implements IDataSource
|
|||||||
public function count()
|
public function count()
|
||||||
{
|
{
|
||||||
return (int) $this->query(array(
|
return (int) $this->query(array(
|
||||||
'SELECT COUNT(*) FROM (%ex', $this->_export(), ') AS [data]',
|
'SELECT COUNT(*) FROM (%ex', $this->_export(), ') [data]',
|
||||||
))->fetchSingle();
|
))->fetchSingle();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -253,7 +253,7 @@ class DibiResult extends DibiObject implements IDataSource
|
|||||||
* - associative descriptor: col1|col2->col3=col4
|
* - associative descriptor: col1|col2->col3=col4
|
||||||
* builds a tree: $tree[$val1][$val2]->col3[$val3] = val4
|
* builds a tree: $tree[$val1][$val2]->col3[$val3] = val4
|
||||||
* @param string associative descriptor
|
* @param string associative descriptor
|
||||||
* @return DibiRow
|
* @return array
|
||||||
* @throws InvalidArgumentException
|
* @throws InvalidArgumentException
|
||||||
*/
|
*/
|
||||||
final public function fetchAssoc($assoc)
|
final public function fetchAssoc($assoc)
|
||||||
@@ -488,13 +488,23 @@ class DibiResult extends DibiObject implements IDataSource
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$value = $row[$key];
|
$value = $row[$key];
|
||||||
if ($value === FALSE || $type === dibi::TEXT) {
|
if ($type === dibi::TEXT) {
|
||||||
|
|
||||||
} elseif ($type === dibi::INTEGER) {
|
} elseif ($type === dibi::INTEGER) {
|
||||||
$row[$key] = is_float($tmp = $value * 1) ? $value : $tmp;
|
$row[$key] = is_float($tmp = $value * 1) ? $value : $tmp;
|
||||||
|
|
||||||
} elseif ($type === dibi::FLOAT) {
|
} elseif ($type === dibi::FLOAT) {
|
||||||
$row[$key] = str_replace(',', '.', ltrim((string) ($tmp = (float) $value), '0')) === ltrim(rtrim(rtrim($value, '0'), '.'), '0') ? $tmp : $value;
|
$value = ltrim($value, '0');
|
||||||
|
$p = strpos($value, '.');
|
||||||
|
if ($p !== FALSE) {
|
||||||
|
$value = rtrim(rtrim($value, '0'), '.');
|
||||||
|
}
|
||||||
|
if ($value === '' || $value[0] === '.') {
|
||||||
|
$value = '0' . $value;
|
||||||
|
}
|
||||||
|
$row[$key] = $value === str_replace(',', '.', (string) ($float = (float) $value))
|
||||||
|
? $float
|
||||||
|
: $value;
|
||||||
|
|
||||||
} elseif ($type === dibi::BOOL) {
|
} elseif ($type === dibi::BOOL) {
|
||||||
$row[$key] = ((bool) $value) && $value !== 'f' && $value !== 'F';
|
$row[$key] = ((bool) $value) && $value !== 'f' && $value !== 'F';
|
||||||
|
@@ -215,7 +215,7 @@ final class DibiTranslator extends DibiObject
|
|||||||
$v = $this->formatValue($v, FALSE);
|
$v = $this->formatValue($v, FALSE);
|
||||||
$vx[] = $k . ($v === 'NULL' ? 'IS ' : '= ') . $v;
|
$vx[] = $k . ($v === 'NULL' ? 'IS ' : '= ') . $v;
|
||||||
|
|
||||||
} elseif ($pair[1] === 'ex') { // TODO: this will be removed
|
} elseif ($pair[1] === 'ex') {
|
||||||
$vx[] = $k . $this->formatValue($v, 'ex');
|
$vx[] = $k . $this->formatValue($v, 'ex');
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
@@ -598,7 +598,7 @@ final class DibiTranslator extends DibiObject
|
|||||||
return $matches[9] == '' ? $this->formatValue($m, FALSE) : $m . $matches[9]; // value or identifier
|
return $matches[9] == '' ? $this->formatValue($m, FALSE) : $m . $matches[9]; // value or identifier
|
||||||
}
|
}
|
||||||
|
|
||||||
die('this should be never executed');
|
throw new Exception('this should be never executed');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
[Dibi](http://dibiphp.com) - smart database layer for PHP [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9XXL5ZJHAYQUN)
|
[Dibi](https://dibiphp.com) - smart database layer for PHP [](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9XXL5ZJHAYQUN)
|
||||||
=========================================================
|
=========================================================
|
||||||
|
|
||||||
[](https://packagist.org/packages/dibi/dibi)
|
[](https://packagist.org/packages/dibi/dibi)
|
||||||
@@ -13,7 +13,7 @@ The best way to install Dibi is to use a [Composer](https://getcomposer.org/down
|
|||||||
|
|
||||||
php composer.phar require dibi/dibi
|
php composer.phar require dibi/dibi
|
||||||
|
|
||||||
Or you can download the latest package from http://dibiphp.com. In this
|
Or you can download the latest package from https://dibiphp.com. In this
|
||||||
package is also `Dibi.minified`, shrinked single-file version of whole Dibi,
|
package is also `Dibi.minified`, shrinked single-file version of whole Dibi,
|
||||||
useful when you don't want to modify the library, but just use it.
|
useful when you don't want to modify the library, but just use it.
|
||||||
|
|
||||||
@@ -24,7 +24,7 @@ Examples
|
|||||||
--------
|
--------
|
||||||
|
|
||||||
Refer to the `examples` directory for examples. Dibi documentation is
|
Refer to the `examples` directory for examples. Dibi documentation is
|
||||||
available on the [homepage](http://dibiphp.com).
|
available on the [homepage](https://dibiphp.com).
|
||||||
|
|
||||||
Connect to database:
|
Connect to database:
|
||||||
|
|
||||||
|
@@ -1,3 +1,18 @@
|
|||||||
|
[sqlite] ; default
|
||||||
|
driver = sqlite3
|
||||||
|
database = :memory:
|
||||||
|
system = sqlite
|
||||||
|
|
||||||
|
[sqlite 2]
|
||||||
|
driver = sqlite
|
||||||
|
database = :memory:
|
||||||
|
system = sqlite
|
||||||
|
|
||||||
|
[sqlite pdo]
|
||||||
|
driver = pdo
|
||||||
|
dsn = "sqlite::memory:"
|
||||||
|
system = sqlite
|
||||||
|
|
||||||
[mysql]
|
[mysql]
|
||||||
driver = mysql
|
driver = mysql
|
||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
@@ -6,7 +21,7 @@ password =
|
|||||||
charset = utf8
|
charset = utf8
|
||||||
system = mysql
|
system = mysql
|
||||||
|
|
||||||
[mysqli]
|
[mysql improved]
|
||||||
driver = mysqli
|
driver = mysqli
|
||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
username = root
|
username = root
|
||||||
@@ -14,26 +29,37 @@ password =
|
|||||||
charset = utf8
|
charset = utf8
|
||||||
system = mysql
|
system = mysql
|
||||||
|
|
||||||
[sqlite2]
|
[mysql pdo]
|
||||||
driver = sqlite
|
driver = pdo
|
||||||
database = :memory:
|
dsn = "mysql:host=127.0.0.1"
|
||||||
system = sqlite
|
username = root
|
||||||
|
password =
|
||||||
|
system = mysql
|
||||||
|
|
||||||
[sqlite3] ; default
|
[postgre]
|
||||||
driver = sqlite3
|
|
||||||
database = :memory:
|
|
||||||
system = sqlite
|
|
||||||
|
|
||||||
[pgsql]
|
|
||||||
driver = postgre
|
driver = postgre
|
||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
username = postgres
|
username = postgres
|
||||||
password =
|
password =
|
||||||
system = pgsql
|
system = postgre
|
||||||
|
|
||||||
|
[postgre pdo]
|
||||||
|
driver = pdo
|
||||||
|
dsn = "pgsql:host=127.0.0.1;dbname=dibi_test"
|
||||||
|
username = postgres
|
||||||
|
password =
|
||||||
|
system = postgre
|
||||||
|
|
||||||
[odbc]
|
[odbc]
|
||||||
driver = odbc
|
driver = odbc
|
||||||
dsn = "Driver={Microsoft Access Driver (*.mdb)}Dbq=data/odbc_tmp.mdb"
|
dsn = "Driver={Microsoft Access Driver (*.mdb)};Dbq=data/odbc.mdb"
|
||||||
|
system = odbc
|
||||||
|
|
||||||
|
[odbc pdo]
|
||||||
|
driver = pdo
|
||||||
|
dsn = "odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=data/odbc.mdb"
|
||||||
|
username =
|
||||||
|
password =
|
||||||
system = odbc
|
system = odbc
|
||||||
|
|
||||||
[mssql]
|
[mssql]
|
||||||
@@ -41,14 +67,21 @@ driver = mssql
|
|||||||
host = 127.0.0.1
|
host = 127.0.0.1
|
||||||
username = dibi
|
username = dibi
|
||||||
password =
|
password =
|
||||||
system = mssql
|
system = sqlsrv
|
||||||
|
|
||||||
[mssql2005]
|
[sqlsrv]
|
||||||
driver = mssql2005
|
driver = mssql2005
|
||||||
host = (local)
|
host = (local)
|
||||||
username = dibi
|
username = dibi
|
||||||
password =
|
password =
|
||||||
system = mssql
|
system = sqlsrv
|
||||||
|
|
||||||
|
[sqlsrv pdo]
|
||||||
|
driver = pdo
|
||||||
|
dsn = "sqlsrv:Server=127.0.0.1"
|
||||||
|
username = dibi
|
||||||
|
password =
|
||||||
|
system = sqlsrv
|
||||||
|
|
||||||
[oracle]
|
[oracle]
|
||||||
driver = oracle
|
driver = oracle
|
||||||
@@ -56,21 +89,16 @@ username = dibi
|
|||||||
password =
|
password =
|
||||||
system = oracle
|
system = oracle
|
||||||
|
|
||||||
[sqlite-pdo]
|
[oracle pdo]
|
||||||
driver = pdo
|
driver = pdo
|
||||||
dsn = "sqlite::memory:"
|
dsn = "oci:dbname=dibi"
|
||||||
system = sqlite
|
username = dibi
|
||||||
|
|
||||||
[mysql-pdo]
|
|
||||||
driver = pdo
|
|
||||||
dsn = "mysql:host=127.0.0.1"
|
|
||||||
username = root
|
|
||||||
password =
|
password =
|
||||||
system = mysql
|
system = oracle
|
||||||
|
|
||||||
[pgsql-pdo]
|
[firebird]
|
||||||
driver = pdo
|
driver = firebird
|
||||||
dsn = "pgsql:host=127.0.0.1;dbname=dibi_test"
|
database = database.fdb
|
||||||
username = postgres
|
username = dibi
|
||||||
password =
|
password =
|
||||||
system = pgsql
|
system = firebird
|
||||||
|
@@ -12,16 +12,6 @@ $conn = new DibiConnection($config);
|
|||||||
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
||||||
|
|
||||||
|
|
||||||
function num($n)
|
|
||||||
{
|
|
||||||
global $config;
|
|
||||||
if (substr(@$config['dsn'], 0, 5) === 'odbc:' || $config['driver'] === 'sqlite') {
|
|
||||||
$n = is_float($n) ? "$n.0" : (string) $n;
|
|
||||||
}
|
|
||||||
return $n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// fetch a single value
|
// fetch a single value
|
||||||
$res = $conn->query('SELECT [title] FROM [products]');
|
$res = $conn->query('SELECT [title] FROM [products]');
|
||||||
Assert::same('Chair', $res->fetchSingle());
|
Assert::same('Chair', $res->fetchSingle());
|
||||||
|
@@ -11,16 +11,46 @@ $conn = new DibiConnection($config);
|
|||||||
$conn->getSubstitutes()->blog = 'wp_';
|
$conn->getSubstitutes()->blog = 'wp_';
|
||||||
|
|
||||||
Assert::same(
|
Assert::same(
|
||||||
reformat('UPDATE wp_items SET [text]=\'Hello World\''),
|
reformat('UPDATE wp_items SET [val]=1'),
|
||||||
$conn->translate("UPDATE :blog:items SET [text]='Hello World'")
|
$conn->translate('UPDATE :blog:items SET [val]=1')
|
||||||
);
|
);
|
||||||
|
|
||||||
Assert::same(
|
Assert::same(
|
||||||
reformat('UPDATE \'wp_\' SET [text]=\'Hello World\''),
|
reformat('UPDATE [wp_items] SET [val]=1'),
|
||||||
$conn->translate("UPDATE :blog: SET [text]='Hello World'")
|
$conn->translate('UPDATE [:blog:items] SET [val]=1')
|
||||||
);
|
);
|
||||||
|
|
||||||
Assert::same(
|
Assert::same(
|
||||||
reformat('UPDATE \':blg:\' SET [text]=\'Hello World\''),
|
reformat("UPDATE 'wp_' SET [val]=1"),
|
||||||
$conn->translate("UPDATE :blg: SET [text]='Hello World'")
|
$conn->translate('UPDATE :blog: SET [val]=1')
|
||||||
|
);
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat("UPDATE ':blg:' SET [val]=1"),
|
||||||
|
$conn->translate('UPDATE :blg: SET [val]=1')
|
||||||
|
);
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat("UPDATE table SET [text]=':blog:a'"),
|
||||||
|
$conn->translate("UPDATE table SET [text]=':blog:a'")
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// create new substitution :: (empty) ==> my_
|
||||||
|
$conn->getSubstitutes()->{''} = 'my_';
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat('UPDATE my_table SET [val]=1'),
|
||||||
|
$conn->translate('UPDATE ::table SET [val]=1')
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// create substitutions using fallback callback
|
||||||
|
$conn->getSubstitutes()->setCallback(function ($expr) {
|
||||||
|
return '_' . $expr . '_';
|
||||||
|
});
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat('UPDATE _account_user SET [val]=1'),
|
||||||
|
$conn->translate('UPDATE :account:user SET [val]=1')
|
||||||
);
|
);
|
||||||
|
98
tests/dibi/DibiFluent.fetch.limit.phpt
Normal file
98
tests/dibi/DibiFluent.fetch.limit.phpt
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider? ../databases.ini mysql
|
||||||
|
*/
|
||||||
|
|
||||||
|
use Tester\Assert;
|
||||||
|
|
||||||
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
|
$conn = new DibiConnection($config);
|
||||||
|
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
||||||
|
|
||||||
|
|
||||||
|
// fetch & limit
|
||||||
|
$fluent = $conn->select('*')
|
||||||
|
->from('customers')
|
||||||
|
->limit(1)
|
||||||
|
->offset(3)
|
||||||
|
->orderBy('customer_id');
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$fluent->fetch();
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
$fluent->fetchSingle();
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1 OFFSET 3'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$fluent->limit(0);
|
||||||
|
$fluent->fetch();
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
$fluent->fetchSingle();
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 0 OFFSET 3'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$fluent->removeClause('limit');
|
||||||
|
try {
|
||||||
|
$fluent->fetch();
|
||||||
|
} catch (DibiException $e) {
|
||||||
|
}
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
try {
|
||||||
|
$fluent->fetchSingle();
|
||||||
|
} catch (DibiException $e) {
|
||||||
|
}
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 3'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id] OFFSET 3'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$fluent->removeClause('offset');
|
||||||
|
$fluent->fetch();
|
||||||
|
Assert::same(
|
||||||
|
reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
$fluent->fetchSingle();
|
||||||
|
Assert::same(
|
||||||
|
reformat(' SELECT * FROM [customers] ORDER BY [customer_id] LIMIT 1'),
|
||||||
|
dibi::$sql
|
||||||
|
);
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [customers] ORDER BY [customer_id]'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
@@ -12,16 +12,6 @@ $conn = new DibiConnection($config);
|
|||||||
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
||||||
|
|
||||||
|
|
||||||
function num($n)
|
|
||||||
{
|
|
||||||
global $config;
|
|
||||||
if (substr(@$config['dsn'], 0, 5) === 'odbc:' || $config['driver'] === 'sqlite') {
|
|
||||||
$n = is_float($n) ? "$n.0" : (string) $n;
|
|
||||||
}
|
|
||||||
return $n;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// fetch a single value
|
// fetch a single value
|
||||||
$res = $conn->select('title')->from('products')->orderBy('product_id');
|
$res = $conn->select('title')->from('products')->orderBy('product_id');
|
||||||
Assert::equal('Chair', $res->fetchSingle());
|
Assert::equal('Chair', $res->fetchSingle());
|
||||||
|
@@ -1,5 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @dataProvider ../databases.ini
|
||||||
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
@@ -76,16 +80,6 @@ Assert::same(
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
try {
|
|
||||||
$fluent = $conn->select('*')->from('table')->fetch();
|
|
||||||
} catch (Exception $e) {
|
|
||||||
}
|
|
||||||
Assert::same(
|
|
||||||
reformat(' SELECT * FROM [table] LIMIT 1'),
|
|
||||||
dibi::$sql
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
$fluent = $conn->select('*')
|
$fluent = $conn->select('*')
|
||||||
->select(
|
->select(
|
||||||
$conn->select('count(*)')
|
$conn->select('count(*)')
|
||||||
@@ -137,3 +131,12 @@ Assert::same(
|
|||||||
reformat('SELECT * FROM [me] AS [t] WHERE col > 10 AND ([x] = \'a\') AND (b) AND (c)'),
|
reformat('SELECT * FROM [me] AS [t] WHERE col > 10 AND ([x] = \'a\') AND (b) AND (c)'),
|
||||||
(string) $fluent
|
(string) $fluent
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
$fluent = $conn->select('*')->from('abc')
|
||||||
|
->where('x IN (%SQL)', $conn->select('id')->from('xyz'));
|
||||||
|
|
||||||
|
Assert::same(
|
||||||
|
reformat('SELECT * FROM [abc] WHERE x IN ((SELECT [id] FROM [xyz]))'),
|
||||||
|
(string) $fluent
|
||||||
|
);
|
||||||
|
@@ -1,22 +1,18 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider ../databases.ini
|
* @dataProvider ../databases.ini !=odbc
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
if ($config['system'] === 'odbc') {
|
|
||||||
Tester\Environment::skip('Not supported.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$conn = new DibiConnection($config);
|
$conn = new DibiConnection($config);
|
||||||
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
||||||
|
|
||||||
$info = $conn->query('
|
$info = $conn->query('
|
||||||
SELECT products.product_id, orders.order_id, customers.name, products.product_id + 1 AS xxx
|
SELECT products.product_id, orders.order_id, customers.name, products.product_id + 1 AS [xXx]
|
||||||
FROM products
|
FROM products
|
||||||
INNER JOIN orders USING (product_id)
|
INNER JOIN orders USING (product_id)
|
||||||
INNER JOIN customers USING (customer_id)
|
INNER JOIN customers USING (customer_id)
|
||||||
@@ -24,14 +20,14 @@ $info = $conn->query('
|
|||||||
|
|
||||||
|
|
||||||
Assert::same(
|
Assert::same(
|
||||||
array('product_id', 'order_id', 'name', 'xxx'),
|
array('product_id', 'order_id', 'name', 'xXx'),
|
||||||
$info->getColumnNames()
|
$info->getColumnNames()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if ($config['driver'] !== 'sqlite3' && $config['driver'] !== 'pdo') {
|
if ($config['driver'] !== 'sqlite3' && $config['driver'] !== 'pdo') {
|
||||||
Assert::same(
|
Assert::same(
|
||||||
array('products.product_id', 'orders.order_id', 'customers.name', 'xxx'),
|
array('products.product_id', 'orders.order_id', 'customers.name', 'xXx'),
|
||||||
$info->getColumnNames(TRUE)
|
$info->getColumnNames(TRUE)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -49,9 +45,12 @@ if ($config['system'] !== 'sqlite') {
|
|||||||
}
|
}
|
||||||
Assert::null($columns[0]->nullable);
|
Assert::null($columns[0]->nullable);
|
||||||
|
|
||||||
Assert::same('xxx', $columns[3]->name);
|
Assert::same('xXx', $columns[3]->name);
|
||||||
Assert::null($columns[3]->tableName);
|
Assert::null($columns[3]->tableName);
|
||||||
if ($config['system'] !== 'sqlite') {
|
if ($config['system'] !== 'sqlite') {
|
||||||
Assert::same('i', $columns[0]->type);
|
Assert::same('i', $columns[0]->type);
|
||||||
}
|
}
|
||||||
Assert::null($columns[3]->nullable);
|
Assert::null($columns[3]->nullable);
|
||||||
|
|
||||||
|
Assert::same('xXx', $info->getColumn('xxx')->getName());
|
||||||
|
Assert::same('xXx', $info->getColumn('xXx')->getName());
|
||||||
|
130
tests/dibi/DibiResult.normalize.phpt
Normal file
130
tests/dibi/DibiResult.normalize.phpt
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Tester\Assert;
|
||||||
|
|
||||||
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
|
|
||||||
|
class MockResult extends DibiResult
|
||||||
|
{
|
||||||
|
function __construct()
|
||||||
|
{}
|
||||||
|
|
||||||
|
function test($row)
|
||||||
|
{
|
||||||
|
$normalize = new ReflectionMethod('DibiResult', 'normalize');
|
||||||
|
$normalize->setAccessible(TRUE);
|
||||||
|
$normalize->invokeArgs($this, array(& $row));
|
||||||
|
return $row;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
test(function () {
|
||||||
|
$result = new MockResult;
|
||||||
|
$result->setType('col', dibi::BOOL);
|
||||||
|
|
||||||
|
Assert::same(array('col' => NULL), $result->test(array('col' => NULL)));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => TRUE)));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => FALSE)));
|
||||||
|
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => 't')));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => 'f')));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => 'T')));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => 'F')));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => 0.0)));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => 1)));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => 1.0)));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test(function () {
|
||||||
|
$result = new MockResult;
|
||||||
|
$result->setType('col', dibi::TEXT); // means TEXT or UNKNOWN
|
||||||
|
|
||||||
|
Assert::same(array('col' => NULL), $result->test(array('col' => NULL)));
|
||||||
|
Assert::same(array('col' => TRUE), $result->test(array('col' => TRUE)));
|
||||||
|
Assert::same(array('col' => FALSE), $result->test(array('col' => FALSE)));
|
||||||
|
|
||||||
|
Assert::same(array('col' => ''), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => '0'), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => '1'), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => 0), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => 1), $result->test(array('col' => 1)));
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
test(function () {
|
||||||
|
$result = new MockResult;
|
||||||
|
$result->setType('col', dibi::FLOAT);
|
||||||
|
|
||||||
|
Assert::same(array('col' => NULL), $result->test(array('col' => NULL)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => TRUE)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => FALSE)));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.000')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.0')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.1')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '001.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '001.100')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '10')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '11')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '0010')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '0011')));
|
||||||
|
Assert::same(array('col' => '0.00000000000000000001'), $result->test(array('col' => '0.00000000000000000001')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '012345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890.000')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890.1'), $result->test(array('col' => '012345678901234567890.100')));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0.0)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1.0)));
|
||||||
|
|
||||||
|
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.0')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.1')));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => '0.000')));
|
||||||
|
Assert::same(array('col' => 0.1), $result->test(array('col' => '0.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.0')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.1')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '1.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '1.100')));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => '001.000')));
|
||||||
|
Assert::same(array('col' => 1.1), $result->test(array('col' => '001.100')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '10')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '11')));
|
||||||
|
Assert::same(array('col' => 10.0), $result->test(array('col' => '0010')));
|
||||||
|
Assert::same(array('col' => 11.0), $result->test(array('col' => '0011')));
|
||||||
|
Assert::same(array('col' => '0.00000000000000000001'), $result->test(array('col' => '0.00000000000000000001')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '012345678901234567890')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890'), $result->test(array('col' => '12345678901234567890.000')));
|
||||||
|
Assert::same(array('col' => '12345678901234567890.1'), $result->test(array('col' => '012345678901234567890.100')));
|
||||||
|
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0)));
|
||||||
|
Assert::same(array('col' => 0.0), $result->test(array('col' => 0.0)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1)));
|
||||||
|
Assert::same(array('col' => 1.0), $result->test(array('col' => 1.0)));
|
||||||
|
setlocale(LC_NUMERIC, 'C');
|
||||||
|
});
|
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider ../databases.ini mysqli
|
* @dataProvider ../databases.ini
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
@@ -35,8 +35,8 @@ Assert::false(isset($row['missing']));
|
|||||||
|
|
||||||
|
|
||||||
// to array
|
// to array
|
||||||
Assert::same(array('product_id' => 1, 'title' => 'Chair'), iterator_to_array($row));
|
Assert::same(array('product_id' => num(1), 'title' => 'Chair'), iterator_to_array($row));
|
||||||
Assert::same(array('product_id' => 1, 'title' => 'Chair'), $row->toArray());
|
Assert::same(array('product_id' => num(1), 'title' => 'Chair'), $row->toArray());
|
||||||
|
|
||||||
// counting
|
// counting
|
||||||
Assert::same(2, count($row));
|
Assert::same(2, count($row));
|
||||||
|
@@ -160,7 +160,7 @@ if ($config['system'] === 'odbc') {
|
|||||||
Assert::same(
|
Assert::same(
|
||||||
reformat(array(
|
reformat(array(
|
||||||
'mysql' => 'SELECT * FROM `products` LIMIT 18446744073709551615 OFFSET 50',
|
'mysql' => 'SELECT * FROM `products` LIMIT 18446744073709551615 OFFSET 50',
|
||||||
'pgsql' => 'SELECT * FROM "products" OFFSET 50',
|
'postgre' => 'SELECT * FROM "products" OFFSET 50',
|
||||||
'SELECT * FROM [products] LIMIT -1 OFFSET 50',
|
'SELECT * FROM [products] LIMIT -1 OFFSET 50',
|
||||||
)),
|
)),
|
||||||
$conn->translate('SELECT * FROM [products] %ofs', 50)
|
$conn->translate('SELECT * FROM [products] %ofs', 50)
|
||||||
@@ -199,7 +199,7 @@ $args = array(
|
|||||||
"a\n%_\\'\"",
|
"a\n%_\\'\"",
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($config['system'] === 'pgsql') {
|
if ($config['system'] === 'postgre') {
|
||||||
$conn->query('SET escape_string_warning = off'); // do not log warnings
|
$conn->query('SET escape_string_warning = off'); // do not log warnings
|
||||||
|
|
||||||
$conn->query('SET standard_conforming_strings = off');
|
$conn->query('SET standard_conforming_strings = off');
|
||||||
@@ -302,7 +302,7 @@ WHERE (`test`.`a` LIKE '1995-03-01'
|
|||||||
OR `str_null`=NULL
|
OR `str_null`=NULL
|
||||||
OR `str_not_null`='hello'
|
OR `str_not_null`='hello'
|
||||||
LIMIT 10",
|
LIMIT 10",
|
||||||
'pgsql' => 'SELECT *
|
'postgre' => 'SELECT *
|
||||||
FROM "db"."table"
|
FROM "db"."table"
|
||||||
WHERE ("test"."a" LIKE \'1995-03-01\'
|
WHERE ("test"."a" LIKE \'1995-03-01\'
|
||||||
OR "b1" IN ( 1, 2, 3 )
|
OR "b1" IN ( 1, 2, 3 )
|
||||||
|
@@ -1,17 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider ../databases.ini
|
* @dataProvider? ../databases.ini sqlsrv
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
if ($config['system'] !== 'mssql' || $config['driver'] !== 'pdo') {
|
|
||||||
Tester\Environment::skip("Not supported system '$config[system]'.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$tests = function ($conn) {
|
$tests = function ($conn) {
|
||||||
$version = $conn->getDriver()->getResource()->getAttribute(PDO::ATTR_SERVER_VERSION);
|
$version = $conn->getDriver()->getResource()->getAttribute(PDO::ATTR_SERVER_VERSION);
|
||||||
|
|
||||||
|
@@ -1,17 +1,13 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider ../databases.ini
|
* @dataProvider? ../databases.ini postgre
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
if ($config['system'] !== 'pgsql') {
|
|
||||||
Tester\Environment::skip("Not supported system '$config[system]'.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$tests = function ($conn) {
|
$tests = function ($conn) {
|
||||||
Assert::false($conn->query("SELECT 'AAxBB' LIKE %~like~", 'A_B')->fetchSingle());
|
Assert::false($conn->query("SELECT 'AAxBB' LIKE %~like~", 'A_B')->fetchSingle());
|
||||||
|
@@ -19,7 +19,7 @@ try {
|
|||||||
$config = Tester\Environment::loadData();
|
$config = Tester\Environment::loadData();
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$config = parse_ini_file(__DIR__ . '/../databases.ini', TRUE);
|
$config = parse_ini_file(__DIR__ . '/../databases.ini', TRUE);
|
||||||
$config = $config['sqlite3'];
|
$config = reset($config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -61,11 +61,21 @@ function reformat($s)
|
|||||||
}
|
}
|
||||||
if ($config['system'] === 'mysql') {
|
if ($config['system'] === 'mysql') {
|
||||||
return strtr($s, '[]', '``');
|
return strtr($s, '[]', '``');
|
||||||
} elseif ($config['system'] === 'pgsql') {
|
} elseif ($config['system'] === 'postgre') {
|
||||||
return strtr($s, '[]', '""');
|
return strtr($s, '[]', '""');
|
||||||
} elseif ($config['system'] === 'odbc' || $config['system'] === 'sqlite') {
|
} elseif (in_array($config['system'], array('odbc', 'sqlite', 'sqlsrv'))) {
|
||||||
return $s;
|
return $s;
|
||||||
} else {
|
} else {
|
||||||
trigger_error("Unsupported driver $config[system]", E_USER_WARNING);
|
trigger_error("Unsupported driver $config[system]", E_USER_WARNING);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function num($n)
|
||||||
|
{
|
||||||
|
global $config;
|
||||||
|
if (substr(@$config['dsn'], 0, 5) === 'odbc:' || $config['driver'] === 'sqlite') {
|
||||||
|
$n = is_float($n) ? "$n.0" : (string) $n;
|
||||||
|
}
|
||||||
|
return $n;
|
||||||
|
}
|
||||||
|
@@ -6,22 +6,22 @@ USE dibi_test;
|
|||||||
|
|
||||||
DROP TABLE IF EXISTS `products`;
|
DROP TABLE IF EXISTS `products`;
|
||||||
CREATE TABLE `products` (
|
CREATE TABLE `products` (
|
||||||
`product_id` int(11) NOT NULL AUTO_INCREMENT,
|
`product_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`title` varchar(100) DEFAULT NULL,
|
`title` varchar(100) NOT NULL,
|
||||||
PRIMARY KEY (`product_id`),
|
PRIMARY KEY (`product_id`),
|
||||||
KEY `title` (`title`)
|
KEY `title` (`title`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
INSERT INTO `products` (`product_id`, `title`) VALUES
|
INSERT INTO `products` (`product_id`, `title`) VALUES
|
||||||
(1, 'Chair'),
|
(1, 'Chair'),
|
||||||
(3, 'Computer'),
|
(3, 'Computer'),
|
||||||
(2, 'Table');
|
(2, 'Table');
|
||||||
|
|
||||||
DROP TABLE IF EXISTS `customers`;
|
DROP TABLE IF EXISTS `customers`;
|
||||||
CREATE TABLE `customers` (
|
CREATE TABLE `customers` (
|
||||||
`customer_id` int(11) NOT NULL AUTO_INCREMENT,
|
`customer_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`name` varchar(100) DEFAULT NULL,
|
`name` varchar(100) NOT NULL,
|
||||||
PRIMARY KEY (`customer_id`)
|
PRIMARY KEY (`customer_id`)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
INSERT INTO `customers` (`customer_id`, `name`) VALUES
|
INSERT INTO `customers` (`customer_id`, `name`) VALUES
|
||||||
@@ -34,15 +34,15 @@ INSERT INTO `customers` (`customer_id`, `name`) VALUES
|
|||||||
|
|
||||||
DROP TABLE IF EXISTS `orders`;
|
DROP TABLE IF EXISTS `orders`;
|
||||||
CREATE TABLE `orders` (
|
CREATE TABLE `orders` (
|
||||||
`order_id` int(11) NOT NULL AUTO_INCREMENT,
|
`order_id` int(11) NOT NULL AUTO_INCREMENT,
|
||||||
`customer_id` int(11) NOT NULL,
|
`customer_id` int(11) NOT NULL,
|
||||||
`product_id` int(11) NOT NULL,
|
`product_id` int(11) NOT NULL,
|
||||||
`amount` float NOT NULL,
|
`amount` float NOT NULL,
|
||||||
PRIMARY KEY (`order_id`),
|
PRIMARY KEY (`order_id`),
|
||||||
KEY `customer_id` (`customer_id`),
|
KEY `customer_id` (`customer_id`),
|
||||||
KEY `product_id` (`product_id`),
|
KEY `product_id` (`product_id`),
|
||||||
CONSTRAINT `orders_ibfk_4` FOREIGN KEY (`product_id`) REFERENCES `products` (`product_id`) ON UPDATE CASCADE,
|
CONSTRAINT `orders_ibfk_4` FOREIGN KEY (`product_id`) REFERENCES `products` (`product_id`) ON UPDATE CASCADE,
|
||||||
CONSTRAINT `orders_ibfk_3` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`) ON UPDATE CASCADE
|
CONSTRAINT `orders_ibfk_3` FOREIGN KEY (`customer_id`) REFERENCES `customers` (`customer_id`) ON UPDATE CASCADE
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
||||||
|
|
||||||
INSERT INTO `orders` (`order_id`, `customer_id`, `product_id`, `amount`) VALUES
|
INSERT INTO `orders` (`order_id`, `customer_id`, `product_id`, `amount`) VALUES
|
||||||
|
@@ -1,15 +1,15 @@
|
|||||||
CREATE TABLE products (
|
CREATE TABLE products (
|
||||||
product_id COUNTER,
|
product_id COUNTER,
|
||||||
title TEXT(50)
|
title TEXT(50)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO products (product_id, title) VALUES (1, 'Chair');
|
INSERT INTO products (product_id, title) VALUES (1, 'Chair');
|
||||||
INSERT INTO products (product_id, title) VALUES (2, 'Table');
|
INSERT INTO products (product_id, title) VALUES (2, 'Table');
|
||||||
INSERT INTO products (product_id, title) VALUES (3, 'Computer');
|
INSERT INTO products (product_id, title) VALUES (3, 'Computer');
|
||||||
|
|
||||||
CREATE TABLE [customers] (
|
CREATE TABLE [customers] (
|
||||||
[customer_id] COUNTER,
|
[customer_id] COUNTER,
|
||||||
[name] TEXT(50)
|
[name] TEXT(50)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO `customers` (`customer_id`, `name`) VALUES (1, 'Dave Lister');
|
INSERT INTO `customers` (`customer_id`, `name`) VALUES (1, 'Dave Lister');
|
||||||
@@ -20,10 +20,10 @@ INSERT INTO `customers` (`customer_id`, `name`) VALUES (5, 'Kryten');
|
|||||||
INSERT INTO `customers` (`customer_id`, `name`) VALUES (6, 'Kristine Kochanski');
|
INSERT INTO `customers` (`customer_id`, `name`) VALUES (6, 'Kristine Kochanski');
|
||||||
|
|
||||||
CREATE TABLE [orders] (
|
CREATE TABLE [orders] (
|
||||||
[order_id] INTEGER,
|
[order_id] COUNTER,
|
||||||
[customer_id] INTEGER,
|
[customer_id] INTEGER,
|
||||||
[product_id] INTEGER,
|
[product_id] INTEGER,
|
||||||
[amount] FLOAT
|
[amount] FLOAT
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO `orders` (`order_id`, `customer_id`, `product_id`, `amount`) VALUES (1, 2, 1, 7);
|
INSERT INTO `orders` (`order_id`, `customer_id`, `product_id`, `amount`) VALUES (1, 2, 1, 7);
|
||||||
|
@@ -4,21 +4,21 @@ CREATE SCHEMA public;
|
|||||||
|
|
||||||
CREATE TABLE products (
|
CREATE TABLE products (
|
||||||
product_id serial NOT NULL,
|
product_id serial NOT NULL,
|
||||||
title varchar(100) DEFAULT NULL,
|
title varchar(100) NOT NULL,
|
||||||
PRIMARY KEY (product_id)
|
PRIMARY KEY (product_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO products (product_id, title) VALUES
|
INSERT INTO products (product_id, title) VALUES
|
||||||
(1, 'Chair'),
|
(1, 'Chair'),
|
||||||
(2, 'Table'),
|
(2, 'Table'),
|
||||||
(3, 'Computer');
|
(3, 'Computer');
|
||||||
SELECT setval('products_product_id_seq', 3, TRUE);
|
SELECT setval('products_product_id_seq', 3, TRUE);
|
||||||
|
|
||||||
CREATE INDEX title ON products USING btree (title);
|
CREATE INDEX title ON products USING btree (title);
|
||||||
|
|
||||||
CREATE TABLE customers (
|
CREATE TABLE customers (
|
||||||
customer_id serial NOT NULL,
|
customer_id serial NOT NULL,
|
||||||
name varchar(100) DEFAULT NULL,
|
name varchar(100) NOT NULL,
|
||||||
PRIMARY KEY (customer_id)
|
PRIMARY KEY (customer_id)
|
||||||
);
|
);
|
||||||
|
|
@@ -1,34 +1,36 @@
|
|||||||
CREATE TABLE [products] (
|
CREATE TABLE [products] (
|
||||||
[product_id] INTEGER NOT NULL PRIMARY KEY,
|
[product_id] INTEGER NOT NULL PRIMARY KEY,
|
||||||
[title] VARCHAR(100) NULL
|
[title] VARCHAR(100) NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX "title" ON "products" ("title");
|
CREATE INDEX "title" ON "products" ("title");
|
||||||
|
|
||||||
INSERT INTO "products" ("product_id", "title") VALUES (1, 'Chair');
|
INSERT INTO "products" ("product_id", "title") VALUES (1, 'Chair');
|
||||||
INSERT INTO "products" ("product_id", "title") VALUES (2, 'Table');
|
INSERT INTO "products" ("product_id", "title") VALUES (2, 'Table');
|
||||||
INSERT INTO "products" ("product_id", "title") VALUES (3, 'Computer');
|
INSERT INTO "products" ("product_id", "title") VALUES (3, 'Computer');
|
||||||
|
|
||||||
CREATE TABLE [customers] (
|
CREATE TABLE [customers] (
|
||||||
[customer_id] INTEGER PRIMARY KEY NOT NULL,
|
[customer_id] INTEGER PRIMARY KEY NOT NULL,
|
||||||
[name] VARCHAR(100) NULL
|
[name] VARCHAR(100) NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (1, 'Dave Lister');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (1, 'Dave Lister');
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (2, 'Arnold Rimmer');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (2, 'Arnold Rimmer');
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (3, 'The Cat');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (3, 'The Cat');
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (4, 'Holly');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (4, 'Holly');
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (5, 'Kryten');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (5, 'Kryten');
|
||||||
INSERT INTO "customers" ("customer_id", "name") VALUES (6, 'Kristine Kochanski');
|
INSERT INTO "customers" ("customer_id", "name") VALUES (6, 'Kristine Kochanski');
|
||||||
|
|
||||||
CREATE TABLE [orders] (
|
CREATE TABLE [orders] (
|
||||||
[order_id] INTEGER NOT NULL PRIMARY KEY,
|
[order_id] INTEGER NOT NULL PRIMARY KEY,
|
||||||
[customer_id] INTEGER NOT NULL,
|
[customer_id] INTEGER NOT NULL,
|
||||||
[product_id] INTEGER NOT NULL,
|
[product_id] INTEGER NOT NULL,
|
||||||
[amount] FLOAT NOT NULL
|
[amount] FLOAT NOT NULL,
|
||||||
|
CONSTRAINT orders_product FOREIGN KEY (product_id) REFERENCES products (product_id),
|
||||||
|
CONSTRAINT orders_customer FOREIGN KEY (customer_id) REFERENCES customers (customer_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (1, 2, 1, '7.0');
|
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (1, 2, 1, '7.0');
|
||||||
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (2, 2, 3, '2.0');
|
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (2, 2, 3, '2.0');
|
||||||
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (3, 1, 2, '3.0');
|
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (3, 1, 2, '3.0');
|
||||||
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (4, 6, 3, '5.0');
|
INSERT INTO "orders" ("order_id", "customer_id", "product_id", "amount") VALUES (4, 6, 3, '5.0');
|
||||||
|
46
tests/dibi/data/sqlsrv.sql
Normal file
46
tests/dibi/data/sqlsrv.sql
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
IF OBJECT_ID('orders', 'U') IS NOT NULL DROP TABLE orders;
|
||||||
|
IF OBJECT_ID('products', 'U') IS NOT NULL DROP TABLE products;
|
||||||
|
IF OBJECT_ID('customers', 'U') IS NOT NULL DROP TABLE customers;
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE products (
|
||||||
|
product_id int NOT NULL IDENTITY(11,1),
|
||||||
|
title varchar(50) NOT NULL,
|
||||||
|
PRIMARY KEY(product_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
SET IDENTITY_INSERT products ON;
|
||||||
|
INSERT INTO products (product_id, title) VALUES (1, 'Chair');
|
||||||
|
INSERT INTO products (product_id, title) VALUES (2, 'Table');
|
||||||
|
INSERT INTO products (product_id, title) VALUES (3, 'Computer');
|
||||||
|
SET IDENTITY_INSERT products OFF;
|
||||||
|
|
||||||
|
CREATE TABLE customers (
|
||||||
|
customer_id int NOT NULL IDENTITY(11,1),
|
||||||
|
name varchar(50) NOT NULL,
|
||||||
|
PRIMARY KEY(customer_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
SET IDENTITY_INSERT customers ON;
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (1, 'Dave Lister');
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (2, 'Arnold Rimmer');
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (3, 'The Cat');
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (4, 'Holly');
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (5, 'Kryten');
|
||||||
|
INSERT INTO customers (customer_id, name) VALUES (6, 'Kristine Kochanski');
|
||||||
|
SET IDENTITY_INSERT customers OFF;
|
||||||
|
|
||||||
|
CREATE TABLE orders (
|
||||||
|
order_id int NOT NULL IDENTITY(11,1),
|
||||||
|
customer_id int NOT NULL,
|
||||||
|
product_id int NOT NULL,
|
||||||
|
amount float NOT NULL,
|
||||||
|
PRIMARY KEY(order_id)
|
||||||
|
);
|
||||||
|
|
||||||
|
SET IDENTITY_INSERT orders ON;
|
||||||
|
INSERT INTO orders (order_id, customer_id, product_id, amount) VALUES (1, 2, 1, 7);
|
||||||
|
INSERT INTO orders (order_id, customer_id, product_id, amount) VALUES (2, 2, 3, 2);
|
||||||
|
INSERT INTO orders (order_id, customer_id, product_id, amount) VALUES (3, 1, 2, 3);
|
||||||
|
INSERT INTO orders (order_id, customer_id, product_id, amount) VALUES (4, 6, 3, 5);
|
||||||
|
SET IDENTITY_INSERT orders OFF;
|
@@ -1,22 +1,21 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @dataProvider ../databases.ini
|
* @dataProvider ../databases.ini !=odbc
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Tester\Assert;
|
use Tester\Assert;
|
||||||
|
|
||||||
require __DIR__ . '/bootstrap.php';
|
require __DIR__ . '/bootstrap.php';
|
||||||
|
|
||||||
if ($config['system'] === 'odbc' || $config['driver'] === 'pdo') {
|
|
||||||
Tester\Environment::skip('Not supported.');
|
|
||||||
}
|
|
||||||
|
|
||||||
$conn = new DibiConnection($config);
|
$conn = new DibiConnection($config);
|
||||||
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
$conn->loadFile(__DIR__ . "/data/$config[system].sql");
|
||||||
|
|
||||||
|
try {
|
||||||
$meta = $conn->getDatabaseInfo();
|
$meta = $conn->getDatabaseInfo();
|
||||||
|
} catch (DibiNotSupportedException $e) {
|
||||||
|
Tester\Environment::skip($e->getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
Assert::same(3, count($meta->getTables()));
|
Assert::same(3, count($meta->getTables()));
|
||||||
|
|
||||||
@@ -50,7 +49,7 @@ Assert::same('products', $column->table->name);
|
|||||||
Assert::same('s', $column->type);
|
Assert::same('s', $column->type);
|
||||||
Assert::type('string', $column->nativeType);
|
Assert::type('string', $column->nativeType);
|
||||||
Assert::same(100, $column->size);
|
Assert::same(100, $column->size);
|
||||||
Assert::true($column->nullable);
|
Assert::false($column->nullable);
|
||||||
Assert::false($column->autoIncrement);
|
Assert::false($column->autoIncrement);
|
||||||
//Assert::null($column->default);
|
//Assert::null($column->default);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user