Update vendor
This commit is contained in:
parent
bf7b3fbfa8
commit
94df3bd8d8
@ -4,9 +4,9 @@
|
|||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"fguillot/simple-validator": "v1.0.0",
|
"fguillot/simple-validator": "v1.0.0",
|
||||||
"fguillot/json-rpc": "v1.0.1",
|
"fguillot/json-rpc": "v1.0.2",
|
||||||
"fguillot/picodb": "v1.0.1",
|
"fguillot/picodb": "v1.0.2",
|
||||||
"fguillot/picofeed": "v0.1.9"
|
"fguillot/picofeed": "v0.1.10"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"phpunit/phpunit": "4.8.3",
|
"phpunit/phpunit": "4.8.3",
|
||||||
|
2
vendor/autoload.php
vendored
2
vendor/autoload.php
vendored
@ -4,4 +4,4 @@
|
|||||||
|
|
||||||
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
require_once __DIR__ . '/composer' . '/autoload_real.php';
|
||||||
|
|
||||||
return ComposerAutoloaderInitc059b513a8543dde562d574abce226dd::getLoader();
|
return ComposerAutoloaderInit26454215d679bdaf4be648601e93de89::getLoader();
|
||||||
|
1
vendor/composer/autoload_classmap.php
vendored
1
vendor/composer/autoload_classmap.php
vendored
@ -12,6 +12,7 @@ return array(
|
|||||||
'JsonRPC\\ConnectionFailureException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Client.php',
|
'JsonRPC\\ConnectionFailureException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Client.php',
|
||||||
'JsonRPC\\InvalidJsonFormat' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
'JsonRPC\\InvalidJsonFormat' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
||||||
'JsonRPC\\InvalidJsonRpcFormat' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
'JsonRPC\\InvalidJsonRpcFormat' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
||||||
|
'JsonRPC\\ResponseException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/ResponseException.php',
|
||||||
'JsonRPC\\Server' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
'JsonRPC\\Server' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Server.php',
|
||||||
'JsonRPC\\ServerErrorException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Client.php',
|
'JsonRPC\\ServerErrorException' => $vendorDir . '/fguillot/json-rpc/src/JsonRPC/Client.php',
|
||||||
'PicoDb\\Condition' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Condition.php',
|
'PicoDb\\Condition' => $vendorDir . '/fguillot/picodb/lib/PicoDb/Condition.php',
|
||||||
|
10
vendor/composer/autoload_real.php
vendored
10
vendor/composer/autoload_real.php
vendored
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// autoload_real.php @generated by Composer
|
// autoload_real.php @generated by Composer
|
||||||
|
|
||||||
class ComposerAutoloaderInitc059b513a8543dde562d574abce226dd
|
class ComposerAutoloaderInit26454215d679bdaf4be648601e93de89
|
||||||
{
|
{
|
||||||
private static $loader;
|
private static $loader;
|
||||||
|
|
||||||
@ -19,9 +19,9 @@ class ComposerAutoloaderInitc059b513a8543dde562d574abce226dd
|
|||||||
return self::$loader;
|
return self::$loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
spl_autoload_register(array('ComposerAutoloaderInitc059b513a8543dde562d574abce226dd', 'loadClassLoader'), true, true);
|
spl_autoload_register(array('ComposerAutoloaderInit26454215d679bdaf4be648601e93de89', 'loadClassLoader'), true, true);
|
||||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||||
spl_autoload_unregister(array('ComposerAutoloaderInitc059b513a8543dde562d574abce226dd', 'loadClassLoader'));
|
spl_autoload_unregister(array('ComposerAutoloaderInit26454215d679bdaf4be648601e93de89', 'loadClassLoader'));
|
||||||
|
|
||||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||||
foreach ($map as $namespace => $path) {
|
foreach ($map as $namespace => $path) {
|
||||||
@ -42,14 +42,14 @@ class ComposerAutoloaderInitc059b513a8543dde562d574abce226dd
|
|||||||
|
|
||||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
$includeFiles = require __DIR__ . '/autoload_files.php';
|
||||||
foreach ($includeFiles as $file) {
|
foreach ($includeFiles as $file) {
|
||||||
composerRequirec059b513a8543dde562d574abce226dd($file);
|
composerRequire26454215d679bdaf4be648601e93de89($file);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $loader;
|
return $loader;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function composerRequirec059b513a8543dde562d574abce226dd($file)
|
function composerRequire26454215d679bdaf4be648601e93de89($file)
|
||||||
{
|
{
|
||||||
require $file;
|
require $file;
|
||||||
}
|
}
|
||||||
|
166
vendor/composer/installed.json
vendored
166
vendor/composer/installed.json
vendored
@ -1,81 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"name": "fguillot/json-rpc",
|
|
||||||
"version": "v1.0.1",
|
|
||||||
"version_normalized": "1.0.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/fguillot/JsonRPC.git",
|
|
||||||
"reference": "9a117e964c4c6ad026da7ae1ca155f7686e3deaf"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/fguillot/JsonRPC/zipball/9a117e964c4c6ad026da7ae1ca155f7686e3deaf",
|
|
||||||
"reference": "9a117e964c4c6ad026da7ae1ca155f7686e3deaf",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.4"
|
|
||||||
},
|
|
||||||
"time": "2015-08-07 22:31:21",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"JsonRPC": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Frédéric Guillot"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Simple Json-RPC client/server library that just works",
|
|
||||||
"homepage": "https://github.com/fguillot/JsonRPC"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "fguillot/picodb",
|
|
||||||
"version": "v1.0.1",
|
|
||||||
"version_normalized": "1.0.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/fguillot/picoDb.git",
|
|
||||||
"reference": "8a311523d114180e04a1e08ced6766f26d7ebbae"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/fguillot/picoDb/zipball/8a311523d114180e04a1e08ced6766f26d7ebbae",
|
|
||||||
"reference": "8a311523d114180e04a1e08ced6766f26d7ebbae",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"time": "2015-08-13 01:44:29",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"PicoDb": "lib/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Frédéric Guillot",
|
|
||||||
"homepage": "http://fredericguillot.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Minimalist database query builder",
|
|
||||||
"homepage": "https://github.com/fguillot/picoDb"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "fguillot/simple-validator",
|
"name": "fguillot/simple-validator",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
@ -116,17 +39,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fguillot/picofeed",
|
"name": "fguillot/picofeed",
|
||||||
"version": "v0.1.9",
|
"version": "v0.1.10",
|
||||||
"version_normalized": "0.1.9.0",
|
"version_normalized": "0.1.10.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/fguillot/picoFeed.git",
|
"url": "https://github.com/fguillot/picoFeed.git",
|
||||||
"reference": "b1dc17e00215c6ffb6ff2fbc6d193d6403c8bb71"
|
"reference": "a2cc36244278afbfb9578037b1700ca3cd5a87d7"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/b1dc17e00215c6ffb6ff2fbc6d193d6403c8bb71",
|
"url": "https://api.github.com/repos/fguillot/picoFeed/zipball/a2cc36244278afbfb9578037b1700ca3cd5a87d7",
|
||||||
"reference": "b1dc17e00215c6ffb6ff2fbc6d193d6403c8bb71",
|
"reference": "a2cc36244278afbfb9578037b1700ca3cd5a87d7",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -140,7 +63,7 @@
|
|||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-curl": "PicoFeed will use cURL if present"
|
"ext-curl": "PicoFeed will use cURL if present"
|
||||||
},
|
},
|
||||||
"time": "2015-08-27 23:26:39",
|
"time": "2015-09-12 11:05:28",
|
||||||
"bin": [
|
"bin": [
|
||||||
"picofeed"
|
"picofeed"
|
||||||
],
|
],
|
||||||
@ -162,5 +85,82 @@
|
|||||||
],
|
],
|
||||||
"description": "Modern library to handle RSS/Atom feeds",
|
"description": "Modern library to handle RSS/Atom feeds",
|
||||||
"homepage": "https://github.com/fguillot/picoFeed"
|
"homepage": "https://github.com/fguillot/picoFeed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fguillot/json-rpc",
|
||||||
|
"version": "v1.0.2",
|
||||||
|
"version_normalized": "1.0.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/fguillot/JsonRPC.git",
|
||||||
|
"reference": "265cf039c2823f684349de78c0c03a597992bea9"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/fguillot/JsonRPC/zipball/265cf039c2823f684349de78c0c03a597992bea9",
|
||||||
|
"reference": "265cf039c2823f684349de78c0c03a597992bea9",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.4"
|
||||||
|
},
|
||||||
|
"time": "2015-09-12 16:27:13",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"JsonRPC": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frédéric Guillot"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Simple Json-RPC client/server library that just works",
|
||||||
|
"homepage": "https://github.com/fguillot/JsonRPC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "fguillot/picodb",
|
||||||
|
"version": "v1.0.2",
|
||||||
|
"version_normalized": "1.0.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/fguillot/picoDb.git",
|
||||||
|
"reference": "61f492c125d9195ce869447e2b2450adeb3b01d6"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/fguillot/picoDb/zipball/61f492c125d9195ce869447e2b2450adeb3b01d6",
|
||||||
|
"reference": "61f492c125d9195ce869447e2b2450adeb3b01d6",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.3.0"
|
||||||
|
},
|
||||||
|
"time": "2015-08-27 23:33:16",
|
||||||
|
"type": "library",
|
||||||
|
"installation-source": "dist",
|
||||||
|
"autoload": {
|
||||||
|
"psr-0": {
|
||||||
|
"PicoDb": "lib/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Frédéric Guillot",
|
||||||
|
"homepage": "http://fredericguillot.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Minimalist database query builder",
|
||||||
|
"homepage": "https://github.com/fguillot/picoDb"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
2
vendor/fguillot/json-rpc/.gitignore
vendored
2
vendor/fguillot/json-rpc/.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
.DS_Store
|
|
||||||
vendor/
|
|
19
vendor/fguillot/json-rpc/.travis.yml
vendored
19
vendor/fguillot/json-rpc/.travis.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
language: php
|
|
||||||
|
|
||||||
php:
|
|
||||||
- 7.0
|
|
||||||
- 5.6
|
|
||||||
- 5.5
|
|
||||||
- 5.4
|
|
||||||
- 5.3
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- php: 7.0
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- composer dump-autoload
|
|
||||||
|
|
||||||
script:
|
|
||||||
- phpunit
|
|
364
vendor/fguillot/json-rpc/README.markdown
vendored
364
vendor/fguillot/json-rpc/README.markdown
vendored
@ -1,364 +0,0 @@
|
|||||||
JsonRPC PHP Client and Server
|
|
||||||
=============================
|
|
||||||
|
|
||||||
A simple Json-RPC client/server that just works.
|
|
||||||
|
|
||||||
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fguillot/JsonRPC/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/fguillot/JsonRPC/?branch=master)
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/fguillot/JsonRPC.svg?branch=master)](https://travis-ci.org/fguillot/JsonRPC)
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
- JSON-RPC 2.0 protocol only
|
|
||||||
- The server support batch requests and notifications
|
|
||||||
- Authentication and IP based client restrictions
|
|
||||||
- Minimalist: there is only 2 files
|
|
||||||
- Fully unit tested
|
|
||||||
- Requirements: PHP >= 5.3.4
|
|
||||||
- License: MIT
|
|
||||||
|
|
||||||
Author
|
|
||||||
------
|
|
||||||
|
|
||||||
Frédéric Guillot
|
|
||||||
|
|
||||||
Installation with Composer
|
|
||||||
--------------------------
|
|
||||||
|
|
||||||
```bash
|
|
||||||
composer require fguillot/json-rpc @stable
|
|
||||||
```
|
|
||||||
|
|
||||||
Examples
|
|
||||||
--------
|
|
||||||
|
|
||||||
### Server
|
|
||||||
|
|
||||||
Callback binding:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
|
|
||||||
// Procedures registration
|
|
||||||
|
|
||||||
$server->register('addition', function ($a, $b) {
|
|
||||||
return $a + $b;
|
|
||||||
});
|
|
||||||
|
|
||||||
$server->register('random', function ($start, $end) {
|
|
||||||
return mt_rand($start, $end);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Return the response to the client
|
|
||||||
echo $server->execute();
|
|
||||||
|
|
||||||
?>
|
|
||||||
```
|
|
||||||
|
|
||||||
Class/Method binding:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
class Api
|
|
||||||
{
|
|
||||||
public function doSomething($arg1, $arg2 = 3)
|
|
||||||
{
|
|
||||||
return $arg1 + $arg2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
|
|
||||||
// Bind the method Api::doSomething() to the procedure myProcedure
|
|
||||||
$server->bind('myProcedure', 'Api', 'doSomething');
|
|
||||||
|
|
||||||
// Use a class instance instead of the class name
|
|
||||||
$server->bind('mySecondProcedure', new Api, 'doSomething');
|
|
||||||
|
|
||||||
// The procedure and the method are the same
|
|
||||||
$server->bind('doSomething', 'Api');
|
|
||||||
|
|
||||||
// Attach the class, client will be able to call directly Api::doSomething()
|
|
||||||
$server->attach(new Api);
|
|
||||||
|
|
||||||
echo $server->execute();
|
|
||||||
|
|
||||||
?>
|
|
||||||
```
|
|
||||||
|
|
||||||
Before callback:
|
|
||||||
|
|
||||||
Before each procedure execution, a custom method can be called.
|
|
||||||
|
|
||||||
This method receive the following arguments: `$username, $password, $class, $method`.
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
use JsonRPC\AuthenticationFailure;
|
|
||||||
|
|
||||||
class Api
|
|
||||||
{
|
|
||||||
public function beforeProcedure($username, $password, $class, $method)
|
|
||||||
{
|
|
||||||
if ($login_condition_failed) {
|
|
||||||
throw new AuthenticationFailure('Wrong credentials!');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function addition($a, $b)
|
|
||||||
{
|
|
||||||
return $a + $b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
$server->authentication(['myuser' => 'mypassword']);
|
|
||||||
|
|
||||||
// Register the before callback
|
|
||||||
$server->before('beforeProcedure');
|
|
||||||
|
|
||||||
$server->attach(new Api);
|
|
||||||
|
|
||||||
echo $server->execute();
|
|
||||||
|
|
||||||
?>
|
|
||||||
```
|
|
||||||
|
|
||||||
You can use this method to implements a custom authentication system or anything else.
|
|
||||||
If you would like to reject the authentication, you can throw the exception `JsonRPC\AuthenticationFailure`.
|
|
||||||
|
|
||||||
### Client
|
|
||||||
|
|
||||||
Example with positional parameters:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
$result = $client->execute('addition', [3, 5]);
|
|
||||||
|
|
||||||
var_dump($result);
|
|
||||||
```
|
|
||||||
|
|
||||||
Example with named arguments:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
$result = $client->execute('random', ['end' => 10, 'start' => 1]);
|
|
||||||
|
|
||||||
var_dump($result);
|
|
||||||
```
|
|
||||||
|
|
||||||
Arguments are called in the right order.
|
|
||||||
|
|
||||||
Examples with shortcut methods:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
$result = $client->random(50, 100);
|
|
||||||
|
|
||||||
var_dump($result);
|
|
||||||
```
|
|
||||||
|
|
||||||
The example above use positional arguments for the request and this one use named arguments:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$result = $client->random(['end' => 10, 'start' => 1]);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Client batch requests
|
|
||||||
|
|
||||||
Call several procedures in a single HTTP request:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
|
|
||||||
$results = $client->batch()
|
|
||||||
->foo(['arg1' => 'bar'])
|
|
||||||
->random(1, 100)
|
|
||||||
->add(4, 3)
|
|
||||||
->execute('add', [2, 5])
|
|
||||||
->send();
|
|
||||||
|
|
||||||
print_r($results);
|
|
||||||
```
|
|
||||||
|
|
||||||
All results are stored at the same position of the call.
|
|
||||||
|
|
||||||
### Client exceptions
|
|
||||||
|
|
||||||
- `BadFunctionCallException`: Procedure not found on the server
|
|
||||||
- `InvalidArgumentException`: Wrong procedure arguments
|
|
||||||
- `JsonRPC\AccessDeniedException`: Access denied
|
|
||||||
- `JsonRPC\ConnectionFailureException`: Connection failure
|
|
||||||
- `JsonRPC\ServerErrorException`: Internal server error
|
|
||||||
- `RuntimeException`: Protocol error
|
|
||||||
|
|
||||||
### Enable client debugging
|
|
||||||
|
|
||||||
You can enable the debug to see the JSON request and response:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
$client->debug = true;
|
|
||||||
```
|
|
||||||
|
|
||||||
The debug output is sent to the PHP's system logger.
|
|
||||||
You can configure the log destination in your `php.ini`.
|
|
||||||
|
|
||||||
Output example:
|
|
||||||
|
|
||||||
```json
|
|
||||||
==> Request:
|
|
||||||
{
|
|
||||||
"jsonrpc": "2.0",
|
|
||||||
"method": "removeCategory",
|
|
||||||
"id": 486782327,
|
|
||||||
"params": [
|
|
||||||
1
|
|
||||||
]
|
|
||||||
}
|
|
||||||
==> Response:
|
|
||||||
{
|
|
||||||
"jsonrpc": "2.0",
|
|
||||||
"id": 486782327,
|
|
||||||
"result": true
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### IP based client restrictions
|
|
||||||
|
|
||||||
The server can allow only some IP adresses:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
|
|
||||||
// IP client restrictions
|
|
||||||
$server->allowHosts(['192.168.0.1', '127.0.0.1']);
|
|
||||||
|
|
||||||
// Procedures registration
|
|
||||||
|
|
||||||
[...]
|
|
||||||
|
|
||||||
// Return the response to the client
|
|
||||||
echo $server->execute();
|
|
||||||
```
|
|
||||||
|
|
||||||
If the client is blocked, you got a 403 Forbidden HTTP response.
|
|
||||||
|
|
||||||
### HTTP Basic Authentication
|
|
||||||
|
|
||||||
If you use HTTPS, you can allow client by using a username/password.
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
|
|
||||||
// List of users to allow
|
|
||||||
$server->authentication(['user1' => 'password1', 'user2' => 'password2']);
|
|
||||||
|
|
||||||
// Procedures registration
|
|
||||||
|
|
||||||
[...]
|
|
||||||
|
|
||||||
// Return the response to the client
|
|
||||||
echo $server->execute();
|
|
||||||
```
|
|
||||||
|
|
||||||
On the client, set credentials like that:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
$client = new Client('http://localhost/server.php');
|
|
||||||
$client->authentication('user1', 'password1');
|
|
||||||
```
|
|
||||||
|
|
||||||
If the authentication failed, the client throw a RuntimeException.
|
|
||||||
|
|
||||||
Using an alternative authentication header:
|
|
||||||
|
|
||||||
```php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
$server->setAuthenticationHeader('X-Authentication');
|
|
||||||
$server->authentication(['myusername' => 'mypassword']);
|
|
||||||
```
|
|
||||||
|
|
||||||
The example above will use the HTTP header `X-Authentication` instead of the standard `Authorization: Basic [BASE64_CREDENTIALS]`.
|
|
||||||
The username/password values need be encoded in base64: `base64_encode('username:password')`.
|
|
||||||
|
|
||||||
### Exceptions
|
|
||||||
|
|
||||||
If you want to send an error to the client you can throw an exception.
|
|
||||||
You should configure which exceptions should be relayed to the client first:
|
|
||||||
|
|
||||||
```php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
class MyException extends RuntimeException {};
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
|
|
||||||
// Exceptions that should be relayed to the client, if they occur
|
|
||||||
$server->attachException('MyException');
|
|
||||||
|
|
||||||
// Procedures registration
|
|
||||||
|
|
||||||
[...]
|
|
||||||
|
|
||||||
// Return the response to the client
|
|
||||||
echo $server->execute();
|
|
||||||
```
|
|
||||||
|
|
||||||
Then you can throw that exception inside your procedure:
|
|
||||||
|
|
||||||
```
|
|
||||||
throw new MyException("An error occured", 123);
|
|
||||||
```
|
|
||||||
|
|
||||||
To relay all exceptions regardless of type, leave out the exception class name:
|
|
||||||
|
|
||||||
```
|
|
||||||
$server->attachException();
|
|
||||||
```
|
|
18
vendor/fguillot/json-rpc/composer.json
vendored
18
vendor/fguillot/json-rpc/composer.json
vendored
@ -1,18 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "fguillot/json-rpc",
|
|
||||||
"description": "Simple Json-RPC client/server library that just works",
|
|
||||||
"homepage": "https://github.com/fguillot/JsonRPC",
|
|
||||||
"type": "library",
|
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Frédéric Guillot"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.4"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {"JsonRPC": "src/"}
|
|
||||||
}
|
|
||||||
}
|
|
7
vendor/fguillot/json-rpc/phpunit.xml
vendored
7
vendor/fguillot/json-rpc/phpunit.xml
vendored
@ -1,7 +0,0 @@
|
|||||||
<phpunit bootstrap="./vendor/autoload.php" stopOnError="true" stopOnFailure="true" colors="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="JsonRPC">
|
|
||||||
<directory>tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|
@ -262,7 +262,12 @@ class Client
|
|||||||
case -32601:
|
case -32601:
|
||||||
throw new BadFunctionCallException('Procedure not found: '. $error['message']);
|
throw new BadFunctionCallException('Procedure not found: '. $error['message']);
|
||||||
case -32602:
|
case -32602:
|
||||||
throw new InvalidArgumentException('Invalid arguments: '. $error['message']);
|
throw new ResponseException(
|
||||||
|
'Invalid arguments: '. $error['message'],
|
||||||
|
$error['code'],
|
||||||
|
null,
|
||||||
|
isset($error['data']) ? $error['data'] : null
|
||||||
|
);
|
||||||
default:
|
default:
|
||||||
throw new RuntimeException('Invalid request/response: '. $error['message'], $error['code']);
|
throw new RuntimeException('Invalid request/response: '. $error['message'], $error['code']);
|
||||||
}
|
}
|
||||||
|
61
vendor/fguillot/json-rpc/src/JsonRPC/ResponseException.php
vendored
Normal file
61
vendor/fguillot/json-rpc/src/JsonRPC/ResponseException.php
vendored
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace JsonRPC;
|
||||||
|
|
||||||
|
use Exception;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class ResponseException
|
||||||
|
*
|
||||||
|
* @package JsonRPC
|
||||||
|
*/
|
||||||
|
class ResponseException extends Exception
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* A value that contains additional information about the error.
|
||||||
|
*
|
||||||
|
* @access protected
|
||||||
|
* @link http://www.jsonrpc.org/specification#error_object
|
||||||
|
* @var mixed
|
||||||
|
*/
|
||||||
|
protected $data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param string $message [optional] The Exception message to throw.
|
||||||
|
* @param int $code [optional] The Exception code.
|
||||||
|
* @param Exception $previous [optional] The previous exception used for the exception chaining. Since 5.3.0
|
||||||
|
* @param mixed $data [optional] A value that contains additional information about the error.
|
||||||
|
*/
|
||||||
|
public function __construct($message = '', $code = 0, Exception $previous = null, $data = null)
|
||||||
|
{
|
||||||
|
parent::__construct($message, $code, $previous);
|
||||||
|
$this->setData($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attach additional information
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @param mixed $data [optional] A value that contains additional information about the error.
|
||||||
|
* @return \JsonRPC\ResponseException
|
||||||
|
*/
|
||||||
|
public function setData($data = null)
|
||||||
|
{
|
||||||
|
$this->data = $data;
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get additional information
|
||||||
|
*
|
||||||
|
* @access public
|
||||||
|
* @return mixed|null
|
||||||
|
*/
|
||||||
|
public function getData()
|
||||||
|
{
|
||||||
|
return $this->data;
|
||||||
|
}
|
||||||
|
}
|
10
vendor/fguillot/json-rpc/src/JsonRPC/Server.php
vendored
10
vendor/fguillot/json-rpc/src/JsonRPC/Server.php
vendored
@ -463,6 +463,16 @@ class Server
|
|||||||
catch (AccessDeniedException $e) {
|
catch (AccessDeniedException $e) {
|
||||||
$this->sendForbiddenResponse();
|
$this->sendForbiddenResponse();
|
||||||
}
|
}
|
||||||
|
catch (ResponseException $e) {
|
||||||
|
return $this->getResponse(array(
|
||||||
|
'error' => array(
|
||||||
|
'code' => $e->getCode(),
|
||||||
|
'message' => $e->getMessage(),
|
||||||
|
'data' => $e->getData(),
|
||||||
|
)),
|
||||||
|
$this->payload
|
||||||
|
);
|
||||||
|
}
|
||||||
catch (Exception $e) {
|
catch (Exception $e) {
|
||||||
|
|
||||||
foreach ($this->exceptions as $class) {
|
foreach ($this->exceptions as $class) {
|
||||||
|
157
vendor/fguillot/json-rpc/tests/ClientTest.php
vendored
157
vendor/fguillot/json-rpc/tests/ClientTest.php
vendored
@ -1,157 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Client;
|
|
||||||
|
|
||||||
class ClientTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
public function testParseReponse()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
-19,
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "result": -19, "id": 1}', true))
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
null,
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "id": 1}', true))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException BadFunctionCallException
|
|
||||||
*/
|
|
||||||
public function testBadProcedure()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function testInvalidArgs()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "error": {"code": -32602, "message": "Invalid params"}, "id": "1"}', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException RuntimeException
|
|
||||||
*/
|
|
||||||
public function testInvalidRequest()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException RuntimeException
|
|
||||||
*/
|
|
||||||
public function testParseError()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->parseResponse(json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException JsonRPC\ServerErrorException
|
|
||||||
*/
|
|
||||||
public function testServerError()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->handleHttpErrors(array('HTTP/1.0 301 Moved Permantenly', 'Connection: close', 'HTTP/1.1 500 Internal Server Error'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException JsonRPC\ConnectionFailureException
|
|
||||||
*/
|
|
||||||
public function testBadUrl()
|
|
||||||
{
|
|
||||||
$client = new Client('http://something_not_found/', 1);
|
|
||||||
$client->execute('plop');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException JsonRPC\ConnectionFailureException
|
|
||||||
*/
|
|
||||||
public function test404()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->handleHttpErrors(array('HTTP/1.1 404 Not Found'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException JsonRPC\AccessDeniedException
|
|
||||||
*/
|
|
||||||
public function testAccessForbiddenError()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->handleHttpErrors(array('HTTP/1.0 301 Moved Permantenly', 'Connection: close', 'HTTP/1.1 403 Forbidden'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException JsonRPC\AccessDeniedException
|
|
||||||
*/
|
|
||||||
public function testAccessNotAllowedError()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
$client->handleHttpErrors(array('HTTP/1.0 301 Moved Permantenly', 'Connection: close', 'HTTP/1.0 401 Unauthorized'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testPrepareRequest()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
|
|
||||||
$payload = $client->prepareRequest('myProcedure');
|
|
||||||
$this->assertNotEmpty($payload);
|
|
||||||
$this->assertArrayHasKey('jsonrpc', $payload);
|
|
||||||
$this->assertEquals('2.0', $payload['jsonrpc']);
|
|
||||||
$this->assertArrayHasKey('method', $payload);
|
|
||||||
$this->assertEquals('myProcedure', $payload['method']);
|
|
||||||
$this->assertArrayHasKey('id', $payload);
|
|
||||||
$this->assertArrayNotHasKey('params', $payload);
|
|
||||||
|
|
||||||
$payload = $client->prepareRequest('myProcedure', array('p1' => 3));
|
|
||||||
$this->assertNotEmpty($payload);
|
|
||||||
$this->assertArrayHasKey('jsonrpc', $payload);
|
|
||||||
$this->assertEquals('2.0', $payload['jsonrpc']);
|
|
||||||
$this->assertArrayHasKey('method', $payload);
|
|
||||||
$this->assertEquals('myProcedure', $payload['method']);
|
|
||||||
$this->assertArrayHasKey('id', $payload);
|
|
||||||
$this->assertArrayHasKey('params', $payload);
|
|
||||||
$this->assertEquals(array('p1' => 3), $payload['params']);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBatchRequest()
|
|
||||||
{
|
|
||||||
$client = new Client('http://localhost/');
|
|
||||||
|
|
||||||
$batch = $client->batch();
|
|
||||||
|
|
||||||
$this->assertInstanceOf('JsonRpc\Client', $batch);
|
|
||||||
$this->assertTrue($client->is_batch);
|
|
||||||
|
|
||||||
$batch->random(1, 30);
|
|
||||||
$batch->add(3, 5);
|
|
||||||
$batch->execute('foo', array('p1' => 42, 'p3' => 3));
|
|
||||||
|
|
||||||
$this->assertNotEmpty($client->batch);
|
|
||||||
$this->assertEquals(3, count($client->batch));
|
|
||||||
|
|
||||||
$this->assertEquals('random', $client->batch[0]['method']);
|
|
||||||
$this->assertEquals('add', $client->batch[1]['method']);
|
|
||||||
$this->assertEquals('foo', $client->batch[2]['method']);
|
|
||||||
|
|
||||||
$this->assertEquals(array(1, 30), $client->batch[0]['params']);
|
|
||||||
$this->assertEquals(array(3, 5), $client->batch[1]['params']);
|
|
||||||
$this->assertEquals(array('p1' => 42, 'p3' => 3), $client->batch[2]['params']);
|
|
||||||
|
|
||||||
$batch = $client->batch();
|
|
||||||
|
|
||||||
$this->assertInstanceOf('JsonRpc\Client', $batch);
|
|
||||||
$this->assertTrue($client->is_batch);
|
|
||||||
$this->assertEmpty($client->batch);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,140 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
class A
|
|
||||||
{
|
|
||||||
public function getAll($p1, $p2, $p3 = 4)
|
|
||||||
{
|
|
||||||
return $p1 + $p2 + $p3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class B
|
|
||||||
{
|
|
||||||
public function getAll($p1)
|
|
||||||
{
|
|
||||||
return $p1 + 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ServerProcedureTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @expectedException BadFunctionCallException
|
|
||||||
*/
|
|
||||||
public function testProcedureNotFound()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->executeProcedure('a');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException BadFunctionCallException
|
|
||||||
*/
|
|
||||||
public function testCallbackNotFound()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->register('b', function() {});
|
|
||||||
$server->executeProcedure('a');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException BadFunctionCallException
|
|
||||||
*/
|
|
||||||
public function testClassNotFound()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllTasks', 'c', 'getAll');
|
|
||||||
$server->executeProcedure('getAllTasks');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException BadFunctionCallException
|
|
||||||
*/
|
|
||||||
public function testMethodNotFound()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllTasks', 'A', 'getNothing');
|
|
||||||
$server->executeProcedure('getAllTasks');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsPositionalArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$this->assertFalse($server->isPositionalArguments(
|
|
||||||
array('a' => 'b', 'c' => 'd'),
|
|
||||||
array('a' => 'b', 'c' => 'd')
|
|
||||||
));
|
|
||||||
|
|
||||||
$server = new Server;
|
|
||||||
$this->assertTrue($server->isPositionalArguments(
|
|
||||||
array('a', 'b', 'c'),
|
|
||||||
array('a' => 'b', 'c' => 'd')
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBindNamedArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllA', 'A', 'getAll');
|
|
||||||
$server->bind('getAllB', 'B', 'getAll');
|
|
||||||
$server->bind('getAllC', new B, 'getAll');
|
|
||||||
$this->assertEquals(6, $server->executeProcedure('getAllA', array('p2' => 4, 'p1' => -2)));
|
|
||||||
$this->assertEquals(10, $server->executeProcedure('getAllA', array('p2' => 4, 'p3' => 8, 'p1' => -2)));
|
|
||||||
$this->assertEquals(6, $server->executeProcedure('getAllB', array('p1' => 4)));
|
|
||||||
$this->assertEquals(5, $server->executeProcedure('getAllC', array('p1' => 3)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testBindPositionalArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllA', 'A', 'getAll');
|
|
||||||
$server->bind('getAllB', 'B', 'getAll');
|
|
||||||
$this->assertEquals(6, $server->executeProcedure('getAllA', array(4, -2)));
|
|
||||||
$this->assertEquals(2, $server->executeProcedure('getAllA', array(4, 0, -2)));
|
|
||||||
$this->assertEquals(4, $server->executeProcedure('getAllB', array(2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRegisterNamedArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->register('getAllA', function($p1, $p2, $p3 = 4) {
|
|
||||||
return $p1 + $p2 + $p3;
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->assertEquals(6, $server->executeProcedure('getAllA', array('p2' => 4, 'p1' => -2)));
|
|
||||||
$this->assertEquals(10, $server->executeProcedure('getAllA', array('p2' => 4, 'p3' => 8, 'p1' => -2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRegisterPositionalArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->register('getAllA', function($p1, $p2, $p3 = 4) {
|
|
||||||
return $p1 + $p2 + $p3;
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->assertEquals(6, $server->executeProcedure('getAllA', array(4, -2)));
|
|
||||||
$this->assertEquals(2, $server->executeProcedure('getAllA', array(4, 0, -2)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function testTooManyArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllC', new B, 'getAll');
|
|
||||||
$server->executeProcedure('getAllC', array('p1' => 3, 'p2' => 5));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function testNotEnoughArguments()
|
|
||||||
{
|
|
||||||
$server = new Server;
|
|
||||||
$server->bind('getAllC', new B, 'getAll');
|
|
||||||
$server->executeProcedure('getAllC');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,231 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use JsonRPC\Server;
|
|
||||||
|
|
||||||
class C
|
|
||||||
{
|
|
||||||
public function doSomething()
|
|
||||||
{
|
|
||||||
return 'something';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class ServerProtocolTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
public function testPositionalParameters()
|
|
||||||
{
|
|
||||||
$subtract = function($minuend, $subtrahend) {
|
|
||||||
return $minuend - $subtrahend;
|
|
||||||
};
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}');
|
|
||||||
$server->register('subtract', $subtract);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "result": 19, "id": 1}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 1}');
|
|
||||||
$server->register('subtract', $subtract);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "result": -19, "id": 1}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testNamedParameters()
|
|
||||||
{
|
|
||||||
$subtract = function($minuend, $subtrahend) {
|
|
||||||
return $minuend - $subtrahend;
|
|
||||||
};
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}');
|
|
||||||
$server->register('subtract', $subtract);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "result": 19, "id": 3}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}');
|
|
||||||
$server->register('subtract', $subtract);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "result": 19, "id": 4}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testNotification()
|
|
||||||
{
|
|
||||||
$update = function($p1, $p2, $p3, $p4, $p5) {};
|
|
||||||
$foobar = function() {};
|
|
||||||
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}');
|
|
||||||
$server->register('update', $update);
|
|
||||||
$server->register('foobar', $foobar);
|
|
||||||
|
|
||||||
$this->assertEquals('', $server->execute());
|
|
||||||
|
|
||||||
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "foobar"}');
|
|
||||||
$server->register('update', $update);
|
|
||||||
$server->register('foobar', $foobar);
|
|
||||||
|
|
||||||
$this->assertEquals('', $server->execute());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testNoMethod()
|
|
||||||
{
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "foobar", "id": "1"}');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "1"}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testInvalidJson()
|
|
||||||
{
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": "foobar, "params": "bar", "baz]');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testInvalidRequest()
|
|
||||||
{
|
|
||||||
$server = new Server('{"jsonrpc": "2.0", "method": 1, "params": "bar"}');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchInvalidJson()
|
|
||||||
{
|
|
||||||
$server = new Server('[
|
|
||||||
{"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
|
|
||||||
{"jsonrpc": "2.0", "method"
|
|
||||||
]');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "error": {"code": -32700, "message": "Parse error"}, "id": null}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchEmptyArray()
|
|
||||||
{
|
|
||||||
$server = new Server('[]');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchNotEmptyButInvalid()
|
|
||||||
{
|
|
||||||
$server = new Server('[1]');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('[{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}]', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchInvalid()
|
|
||||||
{
|
|
||||||
$server = new Server('[1,2,3]');
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('[
|
|
||||||
{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
|
|
||||||
{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
|
|
||||||
{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}
|
|
||||||
]', true),
|
|
||||||
json_decode($server->execute(), true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchOk()
|
|
||||||
{
|
|
||||||
$server = new Server('[
|
|
||||||
{"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},
|
|
||||||
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]},
|
|
||||||
{"jsonrpc": "2.0", "method": "subtract", "params": [42,23], "id": "2"},
|
|
||||||
{"foo": "boo"},
|
|
||||||
{"jsonrpc": "2.0", "method": "foo.get", "params": {"name": "myself"}, "id": "5"},
|
|
||||||
{"jsonrpc": "2.0", "method": "get_data", "id": "9"},
|
|
||||||
{"jsonrpc": "2.0", "method": "doSomething", "id": 10},
|
|
||||||
{"jsonrpc": "2.0", "method": "doStuff", "id": 15}
|
|
||||||
]');
|
|
||||||
|
|
||||||
$server->register('sum', function($a, $b, $c) {
|
|
||||||
return $a + $b + $c;
|
|
||||||
});
|
|
||||||
|
|
||||||
$server->register('subtract', function($minuend, $subtrahend) {
|
|
||||||
return $minuend - $subtrahend;
|
|
||||||
});
|
|
||||||
|
|
||||||
$server->register('get_data', function() {
|
|
||||||
return array('hello', 5);
|
|
||||||
});
|
|
||||||
|
|
||||||
$server->attach(new C);
|
|
||||||
|
|
||||||
$server->bind('doStuff', 'C', 'doSomething');
|
|
||||||
|
|
||||||
$response = $server->execute();
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
json_decode('[
|
|
||||||
{"jsonrpc": "2.0", "result": 7, "id": "1"},
|
|
||||||
{"jsonrpc": "2.0", "result": 19, "id": "2"},
|
|
||||||
{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},
|
|
||||||
{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": "5"},
|
|
||||||
{"jsonrpc": "2.0", "result": ["hello", 5], "id": "9"},
|
|
||||||
{"jsonrpc": "2.0", "result": "something", "id": "10"},
|
|
||||||
{"jsonrpc": "2.0", "result": "something", "id": "15"}
|
|
||||||
]', true),
|
|
||||||
json_decode($response, true)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public function testBatchNotifications()
|
|
||||||
{
|
|
||||||
$server = new Server('[
|
|
||||||
{"jsonrpc": "2.0", "method": "notify_sum", "params": [1,2,4]},
|
|
||||||
{"jsonrpc": "2.0", "method": "notify_hello", "params": [7]}
|
|
||||||
]');
|
|
||||||
|
|
||||||
$server->register('notify_sum', function($a, $b, $c) {
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$server->register('notify_hello', function($id) {
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$this->assertEquals('', $server->execute());
|
|
||||||
}
|
|
||||||
}
|
|
43
vendor/fguillot/picodb/.gitignore
vendored
43
vendor/fguillot/picodb/.gitignore
vendored
@ -1,43 +0,0 @@
|
|||||||
# Compiled source #
|
|
||||||
###################
|
|
||||||
*.com
|
|
||||||
*.class
|
|
||||||
*.dll
|
|
||||||
*.exe
|
|
||||||
*.o
|
|
||||||
*.so
|
|
||||||
|
|
||||||
# Packages #
|
|
||||||
############
|
|
||||||
# it's better to unpack these files and commit the raw source
|
|
||||||
# git has its own built in compression methods
|
|
||||||
*.7z
|
|
||||||
*.dmg
|
|
||||||
*.gz
|
|
||||||
*.iso
|
|
||||||
*.jar
|
|
||||||
*.rar
|
|
||||||
*.tar
|
|
||||||
*.zip
|
|
||||||
|
|
||||||
# Logs and databases #
|
|
||||||
######################
|
|
||||||
*.log
|
|
||||||
*.sql
|
|
||||||
*.sqlite
|
|
||||||
|
|
||||||
# OS generated files #
|
|
||||||
######################
|
|
||||||
.DS_Store
|
|
||||||
.DS_Store?
|
|
||||||
ehthumbs.db
|
|
||||||
Icon?
|
|
||||||
Thumbs.db
|
|
||||||
*.swp
|
|
||||||
*~
|
|
||||||
*.lock
|
|
||||||
|
|
||||||
# App specific #
|
|
||||||
################
|
|
||||||
example.php
|
|
||||||
vendor
|
|
19
vendor/fguillot/picodb/.travis.yml
vendored
19
vendor/fguillot/picodb/.travis.yml
vendored
@ -1,19 +0,0 @@
|
|||||||
language: php
|
|
||||||
|
|
||||||
php:
|
|
||||||
- 7.0
|
|
||||||
- 5.6
|
|
||||||
- 5.5
|
|
||||||
- 5.4
|
|
||||||
- 5.3
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
fast_finish: true
|
|
||||||
allow_failures:
|
|
||||||
- php: 7.0
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
- composer dump-autoload
|
|
||||||
|
|
||||||
script:
|
|
||||||
- phpunit
|
|
562
vendor/fguillot/picodb/README.md
vendored
562
vendor/fguillot/picodb/README.md
vendored
@ -1,562 +0,0 @@
|
|||||||
PicoDb
|
|
||||||
======
|
|
||||||
|
|
||||||
PicoDb is a minimalist database query builder for PHP.
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/fguillot/picoDb.svg?branch=master)](https://travis-ci.org/fguillot/picoDb)
|
|
||||||
|
|
||||||
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/fguillot/picoDb/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/fguillot/picoDb/?branch=master)
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
- Easy to use, easy to hack, fast and very lightweight
|
|
||||||
- Supported drivers: Sqlite, Mysql, Postgresql
|
|
||||||
- Requires only PDO
|
|
||||||
- Use prepared statements
|
|
||||||
- Handle schema migrations
|
|
||||||
- Fully unit tested on PHP 5.3, 5.4, 5.5, 5.6 and 7.0
|
|
||||||
- License: MIT
|
|
||||||
|
|
||||||
Requirements
|
|
||||||
------------
|
|
||||||
|
|
||||||
- PHP >= 5.3
|
|
||||||
- PDO extension
|
|
||||||
- Sqlite or Mysql or Postgresql
|
|
||||||
|
|
||||||
Author
|
|
||||||
------
|
|
||||||
|
|
||||||
Frédéric Guillot
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
-------------
|
|
||||||
|
|
||||||
### Installation
|
|
||||||
|
|
||||||
```bash
|
|
||||||
composer require fguillot/picodb @stable
|
|
||||||
```
|
|
||||||
|
|
||||||
### Database connection
|
|
||||||
|
|
||||||
Sqlite:
|
|
||||||
|
|
||||||
```php
|
|
||||||
use PicoDb\Database;
|
|
||||||
|
|
||||||
// Sqlite driver
|
|
||||||
$db = new Database(['driver' => 'sqlite', 'filename' => ':memory:']);
|
|
||||||
```
|
|
||||||
|
|
||||||
The Sqlite driver enable foreign keys by default.
|
|
||||||
|
|
||||||
Mysql:
|
|
||||||
|
|
||||||
```php
|
|
||||||
// Optional attributes:
|
|
||||||
// "charset"
|
|
||||||
// "schema_table" (the default table name is "schema_version")
|
|
||||||
// "port"
|
|
||||||
|
|
||||||
$db = new Database([
|
|
||||||
'driver' => 'mysql',
|
|
||||||
'hostname' => 'localhost',
|
|
||||||
'username' => 'root',
|
|
||||||
'password' => '',
|
|
||||||
'database' => 'my_db_name',
|
|
||||||
]);
|
|
||||||
```
|
|
||||||
|
|
||||||
Postgres:
|
|
||||||
|
|
||||||
```php
|
|
||||||
// Optional attributes:
|
|
||||||
// "schema_table" (the default table name is "schema_version")
|
|
||||||
// "port"
|
|
||||||
|
|
||||||
$db = new Database([
|
|
||||||
'driver' => 'postgres',
|
|
||||||
'hostname' => 'localhost',
|
|
||||||
'username' => 'root',
|
|
||||||
'password' => '',
|
|
||||||
'database' => 'my_db_name',
|
|
||||||
]);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Execute any SQL query
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->execute('CREATE TABLE mytable (column1 TEXT)');
|
|
||||||
```
|
|
||||||
|
|
||||||
- Returns a `PDOStatement` if successful
|
|
||||||
- Returns `false` if there is a duplicate key error
|
|
||||||
- Throws a `SQLException` for other errors
|
|
||||||
|
|
||||||
### Insertion
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->save(['column1' => 'test']);
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->insert(['column1' => 'test']);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fetch last inserted id
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->getLastId();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Transactions
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->transaction(function ($db) {
|
|
||||||
$db->table('mytable')->save(['column1' => 'foo']);
|
|
||||||
$db->table('mytable')->save(['column1' => 'bar']);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
- Returns `true` if the callback returns null
|
|
||||||
- Returns the callback return value otherwise
|
|
||||||
- Throws an SQLException if something is wrong
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->startTransaction();
|
|
||||||
// Do something...
|
|
||||||
$db->closeTransaction();
|
|
||||||
|
|
||||||
// Rollback
|
|
||||||
$db->cancelTransaction();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fetch all data
|
|
||||||
|
|
||||||
```php
|
|
||||||
$records = $db->table('mytable')->findAll();
|
|
||||||
|
|
||||||
foreach ($records as $record) {
|
|
||||||
var_dump($record['column1']);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Updates
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->eq('id', 1)->save(['column1' => 'hey']);
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->eq('id', 1)->update(['column1' => 'hey']);
|
|
||||||
```
|
|
||||||
|
|
||||||
### Remove records
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->lt('column1', 10)->remove();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sorting
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->asc('column1')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->desc('column1')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->orderBy('column1', 'ASC')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
Multiple sorting:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->asc('column1')->desc('column2')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Limit and offset
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->limit(10)->offset(5)->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fetch only some columns
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->columns('column1', 'column2')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Fetch only one column
|
|
||||||
|
|
||||||
Many rows:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->findAllByColumn('column1');
|
|
||||||
```
|
|
||||||
|
|
||||||
One row:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->findOneColumn('column1');
|
|
||||||
```
|
|
||||||
|
|
||||||
### Custom select
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->select(1)->eq('id', 42)->findOne();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Distinct
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->distinct('columnA')->findOne();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Group by
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->groupBy('columnA')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Count
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->count();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sum
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->sum('columnB');
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sum column values during update
|
|
||||||
|
|
||||||
Add the value 42 to the existing value of the column "mycolumn":
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->sumColumn('mycolumn', 42)->update();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Exists
|
|
||||||
|
|
||||||
Returns true if a record exists otherwise false.
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')->eq('column1', 12)->exists();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Left joins
|
|
||||||
|
|
||||||
```php
|
|
||||||
// SELECT * FROM mytable LEFT JOIN my_other_table AS t1 ON t1.id=mytable.foreign_key
|
|
||||||
$db->table('mytable')->left('my_other_table', 't1', 'id', 'mytable', 'foreign_key')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
// SELECT * FROM mytable LEFT JOIN my_other_table ON my_other_table.id=mytable.foreign_key
|
|
||||||
$db->table('mytable')->join('my_other_table', 'id', 'foreign_key')->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Equals condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->eq('column1', 'hey')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### IN condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->in('column1', ['hey', 'bla'])
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Like condition
|
|
||||||
|
|
||||||
Case-sensitive (only Mysql and Postgres):
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->like('column1', '%Foo%')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
Not case-sensitive:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->ilike('column1', '%foo%')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lower than condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->lt('column1', 2)
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Lower than or equal condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->lte('column1', 2)
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Greater than condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->gt('column1', 3)
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Greater than or equal condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->gte('column1', 3)
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### IS NULL condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->isNull('column1')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### IS NOT NULL condition
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->notNull('column1')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Multiple conditions
|
|
||||||
|
|
||||||
Add conditions are joined by a `AND`.
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->like('column2', '%mytable')
|
|
||||||
->gte('column1', 3)
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
How to make a OR condition:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->table('mytable')
|
|
||||||
->beginOr()
|
|
||||||
->like('column2', '%mytable')
|
|
||||||
->gte('column1', 3)
|
|
||||||
->closeOr()
|
|
||||||
->eq('column5', 'titi')
|
|
||||||
->findAll();
|
|
||||||
```
|
|
||||||
|
|
||||||
### Debugging
|
|
||||||
|
|
||||||
Log generated queries:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->logQueries = true;
|
|
||||||
```
|
|
||||||
|
|
||||||
Mesure each query time:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->stopwatch = true;
|
|
||||||
```
|
|
||||||
|
|
||||||
Get the number of queries executed:
|
|
||||||
|
|
||||||
```php
|
|
||||||
echo $db->nbQueries;
|
|
||||||
```
|
|
||||||
|
|
||||||
Get log messages:
|
|
||||||
|
|
||||||
```php
|
|
||||||
print_r($db->getLogMessages());
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hashtable (key/value store)
|
|
||||||
|
|
||||||
How to use a table as a key/value store:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->execute(
|
|
||||||
'CREATE TABLE mytable (
|
|
||||||
column1 TEXT NOT NULL UNIQUE,
|
|
||||||
column2 TEXT default NULL
|
|
||||||
)'
|
|
||||||
);
|
|
||||||
|
|
||||||
$db->table('mytable')->insert(['column1' => 'option1', 'column2' => 'value1']);
|
|
||||||
```
|
|
||||||
|
|
||||||
Add/Replace some values:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->hashtable('mytable')
|
|
||||||
->columnKey('column1')
|
|
||||||
->columnValue('column2')
|
|
||||||
->put(['option1' => 'new value', 'option2' => 'value2']));
|
|
||||||
```
|
|
||||||
|
|
||||||
Get all values:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$result = $db->hashtable('mytable')->columnKey('column1')->columnValue('column2')->get();
|
|
||||||
print_r($result);
|
|
||||||
|
|
||||||
Array
|
|
||||||
(
|
|
||||||
[option2] => value2
|
|
||||||
[option1] => new value
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
```php
|
|
||||||
$result = $db->hashtable('mytable')->getAll('column1', 'column2');
|
|
||||||
```
|
|
||||||
|
|
||||||
Get a specific value:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$db->hashtable('mytable')
|
|
||||||
->columnKey('column1')
|
|
||||||
->columnValue('column2')
|
|
||||||
->put(['option3' => 'value3']);
|
|
||||||
|
|
||||||
$result = $db->hashtable('mytable')
|
|
||||||
->columnKey('column1')
|
|
||||||
->columnValue('column2')
|
|
||||||
->get('option1', 'option3');
|
|
||||||
|
|
||||||
print_r($result);
|
|
||||||
|
|
||||||
Array
|
|
||||||
(
|
|
||||||
[option1] => new value
|
|
||||||
[option3] => value3
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
### Schema migrations
|
|
||||||
|
|
||||||
#### Define a migration
|
|
||||||
|
|
||||||
- Migrations are defined in simple functions inside a namespace named "Schema".
|
|
||||||
- An instance of PDO is passed to first argument of the function.
|
|
||||||
- Function names has the version number at the end.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```php
|
|
||||||
namespace Schema;
|
|
||||||
|
|
||||||
function version_1($pdo)
|
|
||||||
{
|
|
||||||
$pdo->exec('
|
|
||||||
CREATE TABLE users (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
name TEXT UNIQUE,
|
|
||||||
email TEXT UNIQUE,
|
|
||||||
password TEXT
|
|
||||||
)
|
|
||||||
');
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function version_2($pdo)
|
|
||||||
{
|
|
||||||
$pdo->exec('
|
|
||||||
CREATE TABLE tags (
|
|
||||||
id INTEGER PRIMARY KEY,
|
|
||||||
name TEXT UNIQUE
|
|
||||||
)
|
|
||||||
');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Run schema update automatically
|
|
||||||
|
|
||||||
- The method `check()` execute all migrations until the version specified
|
|
||||||
- If an error occurs, the transaction is rollbacked
|
|
||||||
- Foreign keys checks are disabled if possible during the migration
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$last_schema_version = 5;
|
|
||||||
|
|
||||||
$db = new PicoDb\Database(array(
|
|
||||||
'driver' => 'sqlite',
|
|
||||||
'filename' => '/tmp/mydb.sqlite'
|
|
||||||
));
|
|
||||||
|
|
||||||
if ($db->schema()->check($last_schema_version)) {
|
|
||||||
|
|
||||||
// Do something...
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
|
|
||||||
die('Unable to migrate database schema.');
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
### Use a singleton to handle database instances
|
|
||||||
|
|
||||||
Setup a new instance:
|
|
||||||
|
|
||||||
```php
|
|
||||||
PicoDb\Database::setInstance('myinstance', function() {
|
|
||||||
|
|
||||||
$db = new PicoDb\Database(array(
|
|
||||||
'driver' => 'sqlite',
|
|
||||||
'filename' => DB_FILENAME
|
|
||||||
));
|
|
||||||
|
|
||||||
if ($db->schema()->check(DB_VERSION)) {
|
|
||||||
return $db;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
die('Unable to migrate database schema.');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
Get this instance anywhere in your code:
|
|
||||||
|
|
||||||
```php
|
|
||||||
PicoDb\Database::getInstance('myinstance')->table(...)
|
|
||||||
```
|
|
19
vendor/fguillot/picodb/composer.json
vendored
19
vendor/fguillot/picodb/composer.json
vendored
@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "fguillot/picodb",
|
|
||||||
"description": "Minimalist database query builder",
|
|
||||||
"homepage": "https://github.com/fguillot/picoDb",
|
|
||||||
"type": "library",
|
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Frédéric Guillot",
|
|
||||||
"homepage": "http://fredericguillot.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {"PicoDb": "lib/"}
|
|
||||||
}
|
|
||||||
}
|
|
15
vendor/fguillot/picodb/phpunit.xml
vendored
15
vendor/fguillot/picodb/phpunit.xml
vendored
@ -1,15 +0,0 @@
|
|||||||
<phpunit
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.5/phpunit.xsd"
|
|
||||||
colors="true"
|
|
||||||
stopOnError="true"
|
|
||||||
stopOnFailure="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="Sqlite Test Suite">
|
|
||||||
<file>tests/SqliteDriverTest.php</file>
|
|
||||||
<file>tests/SqliteDatabaseTest.php</file>
|
|
||||||
<file>tests/SqliteSchemaTest.php</file>
|
|
||||||
<file>tests/SqliteTableTest.php</file>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
</phpunit>
|
|
100
vendor/fguillot/picodb/tests/MysqlDatabaseTest.php
vendored
100
vendor/fguillot/picodb/tests/MysqlDatabaseTest.php
vendored
@ -1,100 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
|
|
||||||
class MysqlDatabaseTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
$this->db->logQueries = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentifer()
|
|
||||||
{
|
|
||||||
$this->assertEquals('`a`', $this->db->escapeIdentifier('a'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
|
|
||||||
$this->assertEquals('`c`.`a`', $this->db->escapeIdentifier('a', 'c'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentiferList()
|
|
||||||
{
|
|
||||||
$this->assertEquals(array('`c`.`a`', '`c`.`b`'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
|
|
||||||
$this->assertEquals(array('`a`', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatPreparedStatementWorks()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (id INT AUTO_INCREMENT NOT NULL, something TEXT, PRIMARY KEY (id)) ENGINE=InnoDB');
|
|
||||||
$this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$this->assertEquals(1, $this->db->getLastId());
|
|
||||||
$this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testBadSQLQuery()
|
|
||||||
{
|
|
||||||
$this->db->execute('INSERT INTO foobar');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
|
|
||||||
|
|
||||||
$this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
$this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsAValue()
|
|
||||||
{
|
|
||||||
$this->assertEquals('a', $this->db->transaction(function ($db) {
|
|
||||||
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
|
|
||||||
return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsTrue()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testThatTransactionThrowExceptionWhenRollbacked()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABL');
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsFalseWhithDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something CHAR(1) UNIQUE) ENGINE=InnoDB');
|
|
||||||
$r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
return $r1 && $r2;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
65
vendor/fguillot/picodb/tests/MysqlDriverTest.php
vendored
65
vendor/fguillot/picodb/tests/MysqlDriverTest.php
vendored
@ -1,65 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Driver\Mysql;
|
|
||||||
|
|
||||||
class MysqlDriverTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->driver = new Mysql(array('hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
|
|
||||||
$this->driver->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
|
|
||||||
$this->driver->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->driver->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException LogicException
|
|
||||||
*/
|
|
||||||
public function testMissingRequiredParameter()
|
|
||||||
{
|
|
||||||
new Mysql(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKeyError()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->driver->isDuplicateKeyError(1234));
|
|
||||||
$this->assertTrue($this->driver->isDuplicateKeyError(23000));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOperator()
|
|
||||||
{
|
|
||||||
$this->assertEquals('LIKE BINARY', $this->driver->getOperator('LIKE'));
|
|
||||||
$this->assertEquals('LIKE', $this->driver->getOperator('ILIKE'));
|
|
||||||
$this->assertEquals('', $this->driver->getOperator('FOO'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSchemaVersion()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(1);
|
|
||||||
$this->assertEquals(1, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(42);
|
|
||||||
$this->assertEquals(42, $this->driver->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLastInsertId()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getLastId());
|
|
||||||
|
|
||||||
$this->driver->getConnection()->exec('CREATE TABLE foobar (id INT AUTO_INCREMENT NOT NULL, something TEXT, PRIMARY KEY (id)) ENGINE=InnoDB');
|
|
||||||
$this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->driver->getLastId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscape()
|
|
||||||
{
|
|
||||||
$this->assertEquals('`foobar`', $this->driver->escape('foobar'));
|
|
||||||
}
|
|
||||||
}
|
|
34
vendor/fguillot/picodb/tests/MysqlSchemaTest.php
vendored
34
vendor/fguillot/picodb/tests/MysqlSchemaTest.php
vendored
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
require_once __DIR__.'/SchemaFixture.php';
|
|
||||||
|
|
||||||
class MysqlSchemaTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new PicoDb\Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMigrations()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->schema()->check(2));
|
|
||||||
$this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFailedMigrations()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
$this->assertFalse($this->db->schema()->check(3));
|
|
||||||
$this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
|
|
||||||
$logs = $this->db->getLogMessages();
|
|
||||||
$this->assertNotEmpty($logs);
|
|
||||||
$this->assertStringStartsWith('\Schema\version_3 => SQLSTATE[42000]: Syntax error or access violation', $logs[0]);
|
|
||||||
}
|
|
||||||
}
|
|
313
vendor/fguillot/picodb/tests/MysqlTableTest.php
vendored
313
vendor/fguillot/picodb/tests/MysqlTableTest.php
vendored
@ -1,313 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
use PicoDb\Table;
|
|
||||||
|
|
||||||
class MysqlTableTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'mysql', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('CREATE DATABASE IF NOT EXISTS `picodb`');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
$this->db->logQueries = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSelect()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT 1 FROM `test`', $this->db->table('test')->select(1)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testColumns()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT `a`, `b` FROM `test`', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDistinct()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT DISTINCT `a`, `b` FROM `test`', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGroupBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM `test` GROUP BY `a`', $this->db->table('test')->groupBy('a')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrderBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC', $this->db->table('test')->desc('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC, `b` ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` ASC, `b` ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` ORDER BY `a` DESC, `b` ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimit()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM `test` LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test`', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM `test` OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test`', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimitOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM `test` LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM `test` LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSubquery()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS `b` FROM `test`', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` = ? AND `b` = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 'foobar'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` != ?', $table->neq('a', 2)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test`', $table->in('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` NOT IN (?, ?)', $table->notin('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test`', $table->notin('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` LIKE BINARY ?', $table->like('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionILike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` LIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` > ?', $table->gt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` >= ?', $table->gte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` < ?', $table->lt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` <= ?', $table->lte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIsNull()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` IS NOT NULL', $table->notNull('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCustomCondition()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE a=c AND `b` = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(4), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrConditions()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM `test` WHERE `a` IS NOT NULL AND (`b` = ? OR `c` >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testInsertUpdate()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
|
|
||||||
|
|
||||||
$this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
|
|
||||||
|
|
||||||
$this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
|
|
||||||
|
|
||||||
$this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
|
|
||||||
|
|
||||||
$this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->exists());
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
|
|
||||||
|
|
||||||
$this->assertEquals(2, $this->db->table('foobar')->count());
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
|
|
||||||
$this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
|
|
||||||
|
|
||||||
$this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
|
|
||||||
$this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->count());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSumColumn()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b FLOAT, c FLOAT)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('b' => 4.5, 'c' => 6.3),
|
|
||||||
$this->db->table('foobar')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSum()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
|
|
||||||
$this->assertEquals(7, $this->db->table('foobar')->sum('a'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLeftJoin()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHashTable()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute(
|
|
||||||
'CREATE TABLE foobar (
|
|
||||||
column1 VARCHAR(20) NOT NULL UNIQUE,
|
|
||||||
column2 VARCHAR(20) default NULL
|
|
||||||
)'
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option1', 'column2' => 'value1')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option2', 'column2' => 'value2')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option3', 'column2' => 'value3')));
|
|
||||||
|
|
||||||
$values = array(
|
|
||||||
'option1' => 'hey',
|
|
||||||
'option4' => 'ho',
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->put($values));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->getAll('column1', 'column2')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
|
|
||||||
class PostgresDatabaseTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
$this->db->logQueries = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentifer()
|
|
||||||
{
|
|
||||||
$this->assertEquals('"a"', $this->db->escapeIdentifier('a'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
|
|
||||||
$this->assertEquals('"c"."a"', $this->db->escapeIdentifier('a', 'c'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentiferList()
|
|
||||||
{
|
|
||||||
$this->assertEquals(array('"c"."a"', '"c"."b"'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
|
|
||||||
$this->assertEquals(array('"a"', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatPreparedStatementWorks()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (id serial PRIMARY KEY, something TEXT)');
|
|
||||||
$this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$this->assertEquals(1, $this->db->getLastId());
|
|
||||||
$this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testBadSQLQuery()
|
|
||||||
{
|
|
||||||
$this->db->execute('INSERT INTO foobar');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
|
|
||||||
$this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
$this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsAValue()
|
|
||||||
{
|
|
||||||
$this->assertEquals('a', $this->db->transaction(function ($db) {
|
|
||||||
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
|
|
||||||
return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsTrue()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testThatTransactionThrowExceptionWhenRollbacked()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABL');
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsFalseWhithDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
return $r1 && $r2;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,70 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Driver\Postgres;
|
|
||||||
|
|
||||||
class PostgresDriverTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->driver = new Postgres(array('hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
|
|
||||||
$this->driver->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->driver->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function tearDown()
|
|
||||||
{
|
|
||||||
$this->driver->closeConnection();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException LogicException
|
|
||||||
*/
|
|
||||||
public function testMissingRequiredParameter()
|
|
||||||
{
|
|
||||||
new Postgres(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKeyError()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->driver->isDuplicateKeyError(1234));
|
|
||||||
$this->assertTrue($this->driver->isDuplicateKeyError(23505));
|
|
||||||
$this->assertTrue($this->driver->isDuplicateKeyError(23503));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOperator()
|
|
||||||
{
|
|
||||||
$this->assertEquals('LIKE', $this->driver->getOperator('LIKE'));
|
|
||||||
$this->assertEquals('ILIKE', $this->driver->getOperator('ILIKE'));
|
|
||||||
$this->assertEquals('', $this->driver->getOperator('FOO'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSchemaVersion()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(1);
|
|
||||||
$this->assertEquals(1, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(42);
|
|
||||||
$this->assertEquals(42, $this->driver->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLastInsertId()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getLastId());
|
|
||||||
|
|
||||||
$this->driver->getConnection()->exec('CREATE TABLE foobar (id serial PRIMARY KEY, something TEXT)');
|
|
||||||
$this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->driver->getLastId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscape()
|
|
||||||
{
|
|
||||||
$this->assertEquals('"foobar"', $this->driver->escape('foobar'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
require_once __DIR__.'/SchemaFixture.php';
|
|
||||||
|
|
||||||
class PostgresSchemaTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new PicoDb\Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMigrations()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->schema()->check(2));
|
|
||||||
$this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFailedMigrations()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
$this->assertFalse($this->db->schema()->check(3));
|
|
||||||
$this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
|
|
||||||
$logs = $this->db->getLogMessages();
|
|
||||||
$this->assertNotEmpty($logs);
|
|
||||||
$this->assertStringStartsWith('\Schema\version_3 => SQLSTATE[42601]: Syntax error', $logs[0]);
|
|
||||||
}
|
|
||||||
}
|
|
312
vendor/fguillot/picodb/tests/PostgresTableTest.php
vendored
312
vendor/fguillot/picodb/tests/PostgresTableTest.php
vendored
@ -1,312 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
use PicoDb\Table;
|
|
||||||
|
|
||||||
class PostgresTableTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'postgres', 'hostname' => 'localhost', 'username' => 'postgres', 'password' => 'postgres', 'database' => 'picodb'));
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test1');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS test2');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS foobar');
|
|
||||||
$this->db->getConnection()->exec('DROP TABLE IF EXISTS schema_version');
|
|
||||||
$this->db->logQueries = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSelect()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT 1 FROM "test"', $this->db->table('test')->select(1)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testColumns()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT "a", "b" FROM "test"', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDistinct()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT DISTINCT "a", "b" FROM "test"', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGroupBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" GROUP BY "a"', $this->db->table('test')->groupBy('a')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrderBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->desc('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimit()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimitOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSubquery()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS "b" FROM "test"', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" = ? AND "b" = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 'foobar'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" != ?', $table->neq('a', 2)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $table->in('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" NOT IN (?, ?)', $table->notin('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $table->notin('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->like('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionILike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" ILIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" > ?', $table->gt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" >= ?', $table->gte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" < ?', $table->lt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" <= ?', $table->lte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIsNull()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL', $table->notNull('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCustomCondition()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE a=c AND "b" = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(4), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrConditions()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL AND ("b" = ? OR "c" >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testInsertUpdate()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
|
|
||||||
|
|
||||||
$this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
|
|
||||||
|
|
||||||
$this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
|
|
||||||
|
|
||||||
$this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
|
|
||||||
|
|
||||||
$this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->exists());
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
|
|
||||||
|
|
||||||
$this->assertEquals(2, $this->db->table('foobar')->count());
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
|
|
||||||
$this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
|
|
||||||
|
|
||||||
$this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
|
|
||||||
$this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->count());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSumColumn()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b REAL, c REAL)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('b' => 4.5, 'c' => 6.3),
|
|
||||||
$this->db->table('foobar')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSum()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
|
|
||||||
$this->assertEquals(7, $this->db->table('foobar')->sum('a'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLeftJoin()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHashTable()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute(
|
|
||||||
'CREATE TABLE foobar (
|
|
||||||
column1 TEXT NOT NULL UNIQUE,
|
|
||||||
column2 TEXT default NULL
|
|
||||||
)'
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option1', 'column2' => 'value1')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option2', 'column2' => 'value2')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('column1' => 'option3', 'column2' => 'value3')));
|
|
||||||
|
|
||||||
$values = array(
|
|
||||||
'option1' => 'hey',
|
|
||||||
'option4' => 'ho',
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->put($values));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->columnKey('column1')->columnValue('column2')->get()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('foobar')->getAll('column1', 'column2')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
19
vendor/fguillot/picodb/tests/SchemaFixture.php
vendored
19
vendor/fguillot/picodb/tests/SchemaFixture.php
vendored
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Schema;
|
|
||||||
|
|
||||||
function version_1($pdo)
|
|
||||||
{
|
|
||||||
$pdo->exec('CREATE TABLE test1 (column1 TEXT)');
|
|
||||||
}
|
|
||||||
|
|
||||||
function version_2($pdo)
|
|
||||||
{
|
|
||||||
$pdo->exec('CREATE TABLE test2 (column2 TEXT)');
|
|
||||||
}
|
|
||||||
|
|
||||||
function version_3($pdo)
|
|
||||||
{
|
|
||||||
// Simulate an error
|
|
||||||
$pdo->exec('CREATE TABL');
|
|
||||||
}
|
|
119
vendor/fguillot/picodb/tests/SqliteDatabaseTest.php
vendored
119
vendor/fguillot/picodb/tests/SqliteDatabaseTest.php
vendored
@ -1,119 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
|
|
||||||
class SqliteDatabaseTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
|
|
||||||
$this->db->logQueries = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentifer()
|
|
||||||
{
|
|
||||||
$this->assertEquals('"a"', $this->db->escapeIdentifier('a'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b'));
|
|
||||||
$this->assertEquals('"c"."a"', $this->db->escapeIdentifier('a', 'c'));
|
|
||||||
$this->assertEquals('a.b', $this->db->escapeIdentifier('a.b', 'c'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test'));
|
|
||||||
$this->assertEquals('SELECT COUNT(*) FROM test', $this->db->escapeIdentifier('SELECT COUNT(*) FROM test', 'b'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscapeIdentiferList()
|
|
||||||
{
|
|
||||||
$this->assertEquals(array('"c"."a"', '"c"."b"'), $this->db->escapeIdentifierList(array('a', 'b'), 'c'));
|
|
||||||
$this->assertEquals(array('"a"', 'd.b'), $this->db->escapeIdentifierList(array('a', 'd.b')));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatPreparedStatementWorks()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (id INTEGER PRIMARY KEY, something TEXT)');
|
|
||||||
$this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$this->assertEquals(1, $this->db->getLastId());
|
|
||||||
$this->assertEquals('a', $this->db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testBadSQLQuery()
|
|
||||||
{
|
|
||||||
$this->db->execute('INSERT INTO foobar');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
|
|
||||||
$this->assertNotFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
$this->assertFalse($this->db->execute('INSERT INTO foobar (something) VALUES (?)', array('a')));
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->db->execute('SELECT COUNT(*) FROM foobar WHERE something=?', array('a'))->fetchColumn());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsAValue()
|
|
||||||
{
|
|
||||||
$this->assertEquals('a', $this->db->transaction(function ($db) {
|
|
||||||
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
|
|
||||||
return $db->execute('SELECT something FROM foobar WHERE something=?', array('a'))->fetchColumn();
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsTrue()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException PicoDb\SQLException
|
|
||||||
*/
|
|
||||||
public function testThatTransactionThrowExceptionWhenRollbacked()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABL');
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testThatTransactionReturnsFalseWhithDuplicateKey()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->transaction(function ($db) {
|
|
||||||
$db->getConnection()->exec('CREATE TABLE foobar (something TEXT UNIQUE)');
|
|
||||||
$r1 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
$r2 = $db->execute('INSERT INTO foobar (something) VALUES (?)', array('a'));
|
|
||||||
return $r1 && $r2;
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetInstance()
|
|
||||||
{
|
|
||||||
Database::setInstance('main', function () {
|
|
||||||
return new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
|
|
||||||
});
|
|
||||||
|
|
||||||
$instance1 = Database::getInstance('main');
|
|
||||||
$instance2 = Database::getInstance('main');
|
|
||||||
|
|
||||||
$this->assertInstanceOf('PicoDb\Database', $instance1);
|
|
||||||
$this->assertInstanceOf('PicoDb\Database', $instance2);
|
|
||||||
$this->assertTrue($instance1 === $instance2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException LogicException
|
|
||||||
*/
|
|
||||||
public function testGetMissingInstance()
|
|
||||||
{
|
|
||||||
Database::getInstance('notfound');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,62 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Driver\Sqlite;
|
|
||||||
|
|
||||||
class SqliteDriverTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $driver;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->driver = new Sqlite(array('filename' => ':memory:'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @expectedException LogicException
|
|
||||||
*/
|
|
||||||
public function testMissingRequiredParameter()
|
|
||||||
{
|
|
||||||
new Sqlite(array());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDuplicateKeyError()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->driver->isDuplicateKeyError(1234));
|
|
||||||
$this->assertTrue($this->driver->isDuplicateKeyError(23000));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOperator()
|
|
||||||
{
|
|
||||||
$this->assertEquals('LIKE', $this->driver->getOperator('LIKE'));
|
|
||||||
$this->assertEquals('LIKE', $this->driver->getOperator('ILIKE'));
|
|
||||||
$this->assertEquals('', $this->driver->getOperator('FOO'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSchemaVersion()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(1);
|
|
||||||
$this->assertEquals(1, $this->driver->getSchemaVersion());
|
|
||||||
|
|
||||||
$this->driver->setSchemaVersion(42);
|
|
||||||
$this->assertEquals(42, $this->driver->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLastInsertId()
|
|
||||||
{
|
|
||||||
$this->assertEquals(0, $this->driver->getLastId());
|
|
||||||
|
|
||||||
$this->driver->getConnection()->exec('CREATE TABLE foobar (id INTEGER PRIMARY KEY, something TEXT)');
|
|
||||||
$this->driver->getConnection()->exec('INSERT INTO foobar (something) VALUES (1)');
|
|
||||||
|
|
||||||
$this->assertEquals(1, $this->driver->getLastId());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testEscape()
|
|
||||||
{
|
|
||||||
$this->assertEquals('"foobar"', $this->driver->escape('foobar'));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,30 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
require_once __DIR__.'/SchemaFixture.php';
|
|
||||||
|
|
||||||
class SqliteSchemaTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new PicoDb\Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testMigrations()
|
|
||||||
{
|
|
||||||
$this->assertTrue($this->db->schema()->check(2));
|
|
||||||
$this->assertEquals(2, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testFailedMigrations()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->db->schema()->check(3));
|
|
||||||
$this->assertEquals(0, $this->db->getDriver()->getSchemaVersion());
|
|
||||||
|
|
||||||
$logs = $this->db->getLogMessages();
|
|
||||||
$this->assertNotEmpty($logs);
|
|
||||||
$this->assertEquals('\Schema\version_3 => SQLSTATE[HY000]: General error: 1 near "TABL": syntax error', $logs[0]);
|
|
||||||
}
|
|
||||||
}
|
|
327
vendor/fguillot/picodb/tests/SqliteTableTest.php
vendored
327
vendor/fguillot/picodb/tests/SqliteTableTest.php
vendored
@ -1,327 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
require_once 'vendor/autoload.php';
|
|
||||||
|
|
||||||
use PicoDb\Database;
|
|
||||||
use PicoDb\Table;
|
|
||||||
|
|
||||||
class SqliteTableTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
private $db;
|
|
||||||
|
|
||||||
public function setUp()
|
|
||||||
{
|
|
||||||
$this->db = new Database(array('driver' => 'sqlite', 'filename' => ':memory:'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSelect()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT 1 FROM "test"', $this->db->table('test')->select(1)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testColumns()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT "a", "b" FROM "test"', $this->db->table('test')->columns('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDistinct()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT DISTINCT "a", "b" FROM "test"', $this->db->table('test')->distinct('a', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGroupBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" GROUP BY "a"', $this->db->table('test')->groupBy('a')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrderBy()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->asc('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC', $this->db->table('test')->orderBy('a', Table::SORT_ASC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->desc('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->asc('a')->asc('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->desc('a')->desc('b')->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" ASC, "b" ASC', $this->db->table('test')->orderBy('a')->orderBy('b')->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" DESC', $this->db->table('test')->orderBy('a', Table::SORT_DESC)->orderBy('b', Table::SORT_DESC)->buildSelectQuery());
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" ORDER BY "a" DESC, "b" ASC', $this->db->table('test')->desc('a')->asc('b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimit()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 10', $this->db->table('test')->limit(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" OFFSET 0', $this->db->table('test')->offset(0)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" OFFSET 10', $this->db->table('test')->offset(10)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $this->db->table('test')->limit(null)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLimitOffset()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 2 OFFSET 0', $this->db->table('test')->offset(0)->limit(2)->buildSelectQuery());
|
|
||||||
$this->assertEquals('SELECT * FROM "test" LIMIT 5 OFFSET 10', $this->db->table('test')->offset(10)->limit(5)->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSubquery()
|
|
||||||
{
|
|
||||||
$this->assertEquals('SELECT (SELECT 1 FROM "foobar" WHERE 1=1) AS "b" FROM "test"', $this->db->table('test')->subquery('SELECT 1 FROM "foobar" WHERE 1=1', 'b')->buildSelectQuery());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" = ? AND "b" = ?', $table->eq('a', 2)->eq('b', 'foobar')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 'foobar'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" != ?', $table->neq('a', 2)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IN (?, ?)', $table->in('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $table->in('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionNotIn()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" NOT IN (?, ?)', $table->notin('a', array('b', 'c'))->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('b', 'c'), $table->condition->getValues());
|
|
||||||
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test"', $table->notin('a', array())->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->like('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionILike()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" LIKE ?', $table->ilike('a', '%foobar%')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array('%foobar%'), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" > ?', $table->gt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionGreaterThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" >= ?', $table->gte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThan()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" < ?', $table->lt('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionLowerThanOrEqual()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" <= ?', $table->lte('a', 5)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testConditionIsNull()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL', $table->notNull('a')->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCustomCondition()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE a=c AND "b" = ?', $table->addCondition('a=c')->eq('b', 4)->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(4), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOrConditions()
|
|
||||||
{
|
|
||||||
$table = $this->db->table('test');
|
|
||||||
|
|
||||||
$this->assertEquals('SELECT * FROM "test" WHERE "a" IS NOT NULL AND ("b" = ? OR "c" >= ?)', $table->notNull('a')->beginOr()->eq('b', 2)->gte('c', 5)->closeOr()->buildSelectQuery());
|
|
||||||
$this->assertEquals(array(2, 5), $table->condition->getValues());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testInsertUpdate()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
|
|
||||||
|
|
||||||
$this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $this->db->table('foobar')->findAll());
|
|
||||||
|
|
||||||
$this->assertEquals(array('b', 'c'), $this->db->table('foobar')->findAllByColumn('a'));
|
|
||||||
|
|
||||||
$this->assertEquals(array('a' => 'b'), $this->db->table('foobar')->findOne());
|
|
||||||
|
|
||||||
$this->assertEquals('b', $this->db->table('foobar')->findOneColumn('a'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->exists());
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->exists());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->exists());
|
|
||||||
|
|
||||||
$this->assertEquals(2, $this->db->table('foobar')->count());
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->eq('a', 'c')->count());
|
|
||||||
$this->assertEquals(0, $this->db->table('foobar')->eq('a', 'e')->count());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'c')->remove());
|
|
||||||
$this->assertFalse($this->db->table('foobar')->eq('a', 'e')->remove());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'b')->update(array('a' => 'test')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'lol')->update(array('a' => 'test')));
|
|
||||||
|
|
||||||
$this->assertNotEmpty($this->db->table('foobar')->eq('a', 'test')->findOne());
|
|
||||||
$this->assertNull($this->db->table('foobar')->eq('a', 'lol')->findOne());
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->eq('a', 'test')->save(array('a' => 'plop')));
|
|
||||||
$this->assertEquals(1, $this->db->table('foobar')->count());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSumColumn()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (b REAL, c REAL)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('b' => 2, 'c' => 3.3)));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('foobar')->sumColumn('b', 2.5)->sumColumn('c', 3)->update());
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('b' => 4.5, 'c' => 6.3),
|
|
||||||
$this->db->table('foobar')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCallback()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a TEXT)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'b')));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 'c')));
|
|
||||||
|
|
||||||
$func = function (array $records) {
|
|
||||||
return array('test');
|
|
||||||
};
|
|
||||||
|
|
||||||
$this->assertEquals(array('test'), $this->db->table('foobar')->callback($func)->findAll());
|
|
||||||
$this->assertEquals(array('plop'), $this->db->table('foobar')->callback(array($this, 'myCallback'))->findAll());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function myCallback(array $records)
|
|
||||||
{
|
|
||||||
$this->assertEquals(array(array('a' => 'b'), array('a' => 'c')), $records);
|
|
||||||
return array('plop');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testSum()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE foobar (a INTEGER)'));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('foobar')->insert(array('a' => 5)));
|
|
||||||
$this->assertEquals(7, $this->db->table('foobar')->sum('a'));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testLeftJoin()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test1 (a INTEGER NOT NULL, foreign_key INTEGER NOT NULL)'));
|
|
||||||
$this->assertNotFalse($this->db->execute('CREATE TABLE test2 (id INTEGER NOT NULL, b INTEGER NOT NULL)'));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('test2')->insert(array('id' => 42, 'b' => 2)));
|
|
||||||
$this->assertTrue($this->db->table('test1')->insert(array('a' => 18, 'foreign_key' => 42)));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->left('test1', 't1', 'foreign_key', 'test2', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test2')->columns('a', 'b')->eq('a', 18)->join('test1', 'foreign_key', 'id')->findOne()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('a' => 18, 'b' => 2),
|
|
||||||
$this->db->table('test1')->columns('a', 'b')->join('test2', 'id', 'foreign_key')->findOne()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testHashTable()
|
|
||||||
{
|
|
||||||
$this->assertNotFalse($this->db->execute(
|
|
||||||
'CREATE TABLE toto (
|
|
||||||
column1 TEXT NOT NULL UNIQUE,
|
|
||||||
column2 TEXT default NULL
|
|
||||||
)'
|
|
||||||
));
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option1', 'column2' => 'value1')));
|
|
||||||
$this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option2', 'column2' => 'value2')));
|
|
||||||
$this->assertTrue($this->db->table('toto')->insert(array('column1' => 'option3', 'column2' => 'value3')));
|
|
||||||
|
|
||||||
$values = array(
|
|
||||||
'option1' => 'hey',
|
|
||||||
'option4' => 'ho',
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertTrue($this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->put($values));
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->get('option2', 'option4')
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('toto')->columnKey('column1')->columnValue('column2')->get()
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->assertEquals(
|
|
||||||
array('option2' => 'value2', 'option3' => 'value3', 'option1' => 'hey', 'option4' => 'ho'),
|
|
||||||
$this->db->hashtable('toto')->getAll('column1', 'column2')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -79,7 +79,7 @@ class Attribute
|
|||||||
'cite' => array(),
|
'cite' => array(),
|
||||||
'time' => array('datetime'),
|
'time' => array('datetime'),
|
||||||
'abbr' => array('title'),
|
'abbr' => array('title'),
|
||||||
'iframe' => array('width', 'height', 'frameborder', 'src'),
|
'iframe' => array('width', 'height', 'frameborder', 'src', 'allowfullscreen'),
|
||||||
'q' => array('cite')
|
'q' => array('cite')
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -227,7 +227,6 @@ class Attribute
|
|||||||
* @var array
|
* @var array
|
||||||
*/
|
*/
|
||||||
private $filters = array(
|
private $filters = array(
|
||||||
'filterEmptyAttribute',
|
|
||||||
'filterAllowedAttribute',
|
'filterAllowedAttribute',
|
||||||
'filterIntegerAttribute',
|
'filterIntegerAttribute',
|
||||||
'rewriteAbsoluteUrl',
|
'rewriteAbsoluteUrl',
|
||||||
@ -280,20 +279,6 @@ class Attribute
|
|||||||
return $attributes;
|
return $attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return true if the value is not empty (remove empty attributes)
|
|
||||||
*
|
|
||||||
* @access public
|
|
||||||
* @param string $tag Tag name
|
|
||||||
* @param string $attribute Attribute name
|
|
||||||
* @param string $value Attribute value
|
|
||||||
* @return boolean
|
|
||||||
*/
|
|
||||||
public function filterEmptyAttribute($tag, $attribute, $value)
|
|
||||||
{
|
|
||||||
return $value !== '';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return true if the value is allowed (remove not allowed attributes)
|
* Return true if the value is allowed (remove not allowed attributes)
|
||||||
*
|
*
|
||||||
|
17
vendor/fguillot/picofeed/lib/PicoFeed/Rules/mercworks.net.php
vendored
Normal file
17
vendor/fguillot/picofeed/lib/PicoFeed/Rules/mercworks.net.php
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
return array(
|
||||||
|
'grabber' => array(
|
||||||
|
'%.*%' => array(
|
||||||
|
'body' => array('//div[@id="comic"]',
|
||||||
|
'//div[contains(@class,"entry-content")]',
|
||||||
|
),
|
||||||
|
'strip' => array(),
|
||||||
|
'test_url' => 'http://mercworks.net/comicland/healthy-choice/',
|
||||||
|
)
|
||||||
|
),
|
||||||
|
'filter' => array(
|
||||||
|
'%.*%' => array(
|
||||||
|
'%title="(.+)" */>%' => "/><br/>$1"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
@ -2,7 +2,8 @@
|
|||||||
return array(
|
return array(
|
||||||
'filter' => array(
|
'filter' => array(
|
||||||
'%.*%' => array(
|
'%.*%' => array(
|
||||||
'%alt="(.+)" */>%' => "/><br/>$1"
|
'%alt="(.+)" */>%' => "/><br/>$1",
|
||||||
|
'%\.png%' => "_rollover.png",
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
10
vendor/fguillot/picofeed/lib/PicoFeed/Rules/threepanelsoul.com.php
vendored
Normal file
10
vendor/fguillot/picofeed/lib/PicoFeed/Rules/threepanelsoul.com.php
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?php
|
||||||
|
return array(
|
||||||
|
'grabber' => array(
|
||||||
|
'%.*%' => array(
|
||||||
|
'body' => array('//img[@id="cc-comic"]'),
|
||||||
|
'strip' => array(),
|
||||||
|
'test_url' => 'http://www.threepanelsoul.com/comic/subjective-tastes',
|
||||||
|
)
|
||||||
|
),
|
||||||
|
);
|
Loading…
Reference in New Issue
Block a user