diff --git a/.travis.yml b/.travis.yml index fdb771b..22a816c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,13 +1,15 @@ language: php php: - - 7.0 - 7.1 - 7.2 - - hhvm -script: php tests/run-tests.php +env: + - DB_USER=root + +script: phpunit --configuration phpunit.xml before_script: - - mysql -u root < tests/fluentdb.sql + - composer install + - mysql -u $DB_USER < tests/_resources/fluentdb.sql notifications: slack: diff --git a/composer.json b/composer.json index f9173be..befd4e5 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ } }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.0", + "envms/fluent-test": "^1.0" } } diff --git a/composer.lock b/composer.lock index d76bd16..9776491 100644 --- a/composer.lock +++ b/composer.lock @@ -4,37 +4,37 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "ab5c81cd166f70099853d8db3d1ac07a", + "content-hash": "feec47f572171836348edb440554c5c3", "packages": [], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.0.5", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", - "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", "shasum": "" }, "require": { - "php": ">=5.3,<8.0-DEV" + "php": "^7.1" }, "require-dev": { "athletic/athletic": "~0.1.8", "ext-pdo": "*", "ext-phar": "*", - "phpunit/phpunit": "~4.0", - "squizlabs/php_codesniffer": "~2.0" + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.2.x-dev" } }, "autoload": { @@ -59,41 +59,87 @@ "constructor", "instantiate" ], - "time": "2015-06-14T21:17:01+00:00" + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "envms/fluent-test", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/envms/fluent-test.git", + "reference": "2db2a96ce65f64b7c6328040b7da5d2240782f23" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/envms/fluent-test/zipball/2db2a96ce65f64b7c6328040b7da5d2240782f23", + "reference": "2db2a96ce65f64b7c6328040b7da5d2240782f23", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Envms\\FluentTest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0", + "GPL-2.0+" + ], + "authors": [ + { + "name": "envms", + "homepage": "http://env.ms" + } + ], + "description": "A library for testing FluentPDO with mock data and classes", + "homepage": "https://github.com/envms/fluent-test", + "keywords": [ + "fluentpdo", + "library", + "test" + ], + "time": "2018-08-23T17:42:04+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.6.1", + "version": "1.8.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102" + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8e6e04167378abf1ddb4d3522d8755c5fd90d102", - "reference": "8e6e04167378abf1ddb4d3522d8755c5fd90d102", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", "shasum": "" }, "require": { - "php": ">=5.4.0" + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" }, "require-dev": { - "doctrine/collections": "1.*", - "phpunit/phpunit": "~4.1" + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" }, "type": "library", "autoload": { "psr-4": { "DeepCopy\\": "src/DeepCopy/" - } + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "Create deep copies (clones) of your objects", - "homepage": "https://github.com/myclabs/DeepCopy", "keywords": [ "clone", "copy", @@ -101,26 +147,26 @@ "object", "object graph" ], - "time": "2017-04-12T18:52:22+00:00" + "time": "2018-06-11T23:09:50+00:00" }, { "name": "phar-io/manifest", - "version": "1.0.1", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0" + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/2df402786ab5368a0169091f61a7c1e0eb6852d0", - "reference": "2df402786ab5368a0169091f61a7c1e0eb6852d0", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^1.0.1", + "phar-io/version": "^2.0", "php": "^5.6 || ^7.0" }, "type": "library", @@ -156,20 +202,20 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2017-03-05T18:14:27+00:00" + "time": "2018-07-08T19:23:20+00:00" }, { "name": "phar-io/version", - "version": "1.0.1", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df" + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/a70c0ced4be299a63d32fa96d9281d03e94041df", - "reference": "a70c0ced4be299a63d32fa96d9281d03e94041df", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", "shasum": "" }, "require": { @@ -203,7 +249,7 @@ } ], "description": "Library for handling version information and constraints", - "time": "2017-03-05T17:38:23+00:00" + "time": "2018-07-08T19:19:57+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -261,29 +307,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.1.1", + "version": "4.3.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2" + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/2d3d238c433cf69caeb4842e97a3223a116f94b2", - "reference": "2d3d238c433cf69caeb4842e97a3223a116f94b2", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", "shasum": "" }, "require": { "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/reflection-common": "^1.0.0", "phpdocumentor/type-resolver": "^0.4.0", "webmozart/assert": "^1.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^4.4" + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, "autoload": { "psr-4": { "phpDocumentor\\Reflection\\": [ @@ -302,7 +354,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-08-30T18:51:59+00:00" + "time": "2017-11-30T07:14:17+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -353,33 +405,33 @@ }, { "name": "phpspec/prophecy", - "version": "v1.7.2", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6" + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", - "reference": "c9b8c6088acd19d769d4cc0ffa60a9fe34344bd6", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", "sebastian/recursion-context": "^1.0|^2.0|^3.0" }, "require-dev": { "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8 || ^5.6.5" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.7.x-dev" + "dev-master": "1.8.x-dev" } }, "autoload": { @@ -412,45 +464,44 @@ "spy", "stub" ], - "time": "2017-09-04T11:05:03+00:00" + "time": "2018-08-05T17:53:17+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "5.2.2", + "version": "6.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b" + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/8ed1902a57849e117b5651fc1a5c48110946c06b", - "reference": "8ed1902a57849e117b5651fc1a5c48110946c06b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/865662550c384bc1db7e51d29aeda1c2c161d69a", + "reference": "865662550c384bc1db7e51d29aeda1c2c161d69a", "shasum": "" }, "require": { "ext-dom": "*", "ext-xmlwriter": "*", - "php": "^7.0", - "phpunit/php-file-iterator": "^1.4.2", + "php": "^7.1", + "phpunit/php-file-iterator": "^2.0", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^1.4.11 || ^2.0", + "phpunit/php-token-stream": "^3.0", "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^3.0", + "sebastian/environment": "^3.1", "sebastian/version": "^2.0.1", "theseer/tokenizer": "^1.1" }, "require-dev": { - "ext-xdebug": "^2.5", - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.0" }, "suggest": { - "ext-xdebug": "^2.5.5" + "ext-xdebug": "^2.6.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.2.x-dev" + "dev-master": "6.0-dev" } }, "autoload": { @@ -465,7 +516,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -476,29 +527,29 @@ "testing", "xunit" ], - "time": "2017-08-03T12:40:43+00:00" + "time": "2018-06-01T07:51:50+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "1.4.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", - "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cecbc684605bb0cc288828eb5d65d93d5c676d3c", + "reference": "cecbc684605bb0cc288828eb5d65d93d5c676d3c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -513,7 +564,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -523,7 +574,7 @@ "filesystem", "iterator" ], - "time": "2016-10-03T07:40:28+00:00" + "time": "2018-06-11T11:44:00+00:00" }, { "name": "phpunit/php-text-template", @@ -568,28 +619,28 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.9", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f" + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", - "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b8454ea6958c3dee38453d3bd571e023108c91f", + "reference": "8b8454ea6958c3dee38453d3bd571e023108c91f", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -604,7 +655,7 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", + "email": "sebastian@phpunit.de", "role": "lead" } ], @@ -613,33 +664,33 @@ "keywords": [ "timer" ], - "time": "2017-02-26T11:10:40+00:00" + "time": "2018-02-01T13:07:23+00:00" }, { "name": "phpunit/php-token-stream", - "version": "2.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0" + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/9a02332089ac48e704c70f6cefed30c224e3c0b0", - "reference": "9a02332089ac48e704c70f6cefed30c224e3c0b0", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/21ad88bbba7c3d93530d93994e0a33cd45f02ace", + "reference": "21ad88bbba7c3d93530d93994e0a33cd45f02ace", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2.4" + "phpunit/phpunit": "^7.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -662,40 +713,40 @@ "keywords": [ "tokenizer" ], - "time": "2017-08-20T05:47:52+00:00" + "time": "2018-02-01T13:16:43+00:00" }, { "name": "phpunit/phpunit", - "version": "6.4.3", + "version": "7.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "06b28548fd2b4a20c3cd6e247dc86331a7d4db13" + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/06b28548fd2b4a20c3cd6e247dc86331a7d4db13", - "reference": "06b28548fd2b4a20c3cd6e247dc86331a7d4db13", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/34705f81bddc3f505b9599a2ef96e2b4315ba9b8", + "reference": "34705f81bddc3f505b9599a2ef96e2b4315ba9b8", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", - "myclabs/deep-copy": "^1.6.1", - "phar-io/manifest": "^1.0.1", - "phar-io/version": "^1.0", - "php": "^7.0", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.1", "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^5.2.2", - "phpunit/php-file-iterator": "^1.4.2", + "phpunit/php-code-coverage": "^6.0.7", + "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^1.0.9", - "phpunit/phpunit-mock-objects": "^4.0.3", - "sebastian/comparator": "^2.0.2", - "sebastian/diff": "^2.0", + "phpunit/php-timer": "^2.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", "sebastian/environment": "^3.1", "sebastian/exporter": "^3.1", "sebastian/global-state": "^2.0", @@ -704,15 +755,15 @@ "sebastian/version": "^2.0.1" }, "conflict": { - "phpdocumentor/reflection-docblock": "3.0.2", - "phpunit/dbunit": "<3.0" + "phpunit/phpunit-mock-objects": "*" }, "require-dev": { "ext-pdo": "*" }, "suggest": { + "ext-soap": "*", "ext-xdebug": "*", - "phpunit/php-invoker": "^1.1" + "phpunit/php-invoker": "^2.0" }, "bin": [ "phpunit" @@ -720,7 +771,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "6.4.x-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -746,66 +797,7 @@ "testing", "xunit" ], - "time": "2017-10-16T13:18:59+00:00" - }, - { - "name": "phpunit/phpunit-mock-objects", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/2f789b59ab89669015ad984afa350c4ec577ade0", - "reference": "2f789b59ab89669015ad984afa350c4ec577ade0", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.0.5", - "php": "^7.0", - "phpunit/php-text-template": "^1.2.1", - "sebastian/exporter": "^3.0" - }, - "conflict": { - "phpunit/phpunit": "<6.0" - }, - "require-dev": { - "phpunit/phpunit": "^6.0" - }, - "suggest": { - "ext-soap": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sb@sebastian-bergmann.de", - "role": "lead" - } - ], - "description": "Mock Object library for PHPUnit", - "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", - "keywords": [ - "mock", - "xunit" - ], - "time": "2017-08-03T14:08:16+00:00" + "time": "2018-08-22T06:39:21+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -854,30 +846,30 @@ }, { "name": "sebastian/comparator", - "version": "2.0.2", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a" + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", - "reference": "ae068fede81d06e7bb9bb46a367210a3d3e1fe6a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/diff": "^2.0", - "sebastian/exporter": "^3.0" + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -908,38 +900,39 @@ } ], "description": "Provides the functionality to compare PHP values for equality", - "homepage": "http://www.github.com/sebastianbergmann/comparator", + "homepage": "https://github.com/sebastianbergmann/comparator", "keywords": [ "comparator", "compare", "equality" ], - "time": "2017-08-03T07:14:59+00:00" + "time": "2018-07-12T15:12:46+00:00" }, { "name": "sebastian/diff", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd" + "reference": "366541b989927187c4ca70490a35615d3fef2dce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", - "reference": "347c1d8b49c5c3ee30c7040ea6fc446790e6bddd", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/366541b989927187c4ca70490a35615d3fef2dce", + "reference": "366541b989927187c4ca70490a35615d3fef2dce", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.1" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpunit/phpunit": "^7.0", + "symfony/process": "^2 || ^3.3 || ^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -964,9 +957,12 @@ "description": "Diff implementation", "homepage": "https://github.com/sebastianbergmann/diff", "keywords": [ - "diff" + "diff", + "udiff", + "unidiff", + "unified diff" ], - "time": "2017-08-03T08:09:46+00:00" + "time": "2018-06-10T07:54:39+00:00" }, { "name": "sebastian/environment", @@ -1408,16 +1404,16 @@ }, { "name": "webmozart/assert", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f" + "reference": "0df1908962e7a3071564e857d86874dad1ef204a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f", - "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f", + "url": "https://api.github.com/repos/webmozart/assert/zipball/0df1908962e7a3071564e857d86874dad1ef204a", + "reference": "0df1908962e7a3071564e857d86874dad1ef204a", "shasum": "" }, "require": { @@ -1454,7 +1450,7 @@ "check", "validate" ], - "time": "2016-11-23T20:04:58+00:00" + "time": "2018-01-29T19:49:41+00:00" } ], "aliases": [], diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..337f467 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,7 @@ + + + + tests + + + \ No newline at end of file diff --git a/src/Queries/Base.php b/src/Queries/Base.php index 705f7fb..7481b72 100644 --- a/src/Queries/Base.php +++ b/src/Queries/Base.php @@ -372,11 +372,11 @@ private function formatValue($val) { /** * Select an item as object * - * @param boolean|object $object If set to true, items are returned as stdClass, otherwise a class - * name can be passed and a new instance of this class is return. - * Can be set to false to return items as an associative array. + * @param \object|boolean $object If set to true, items are returned as stdClass, otherwise a class + * name can be passed and a new instance of this class is returned. + * Can be set to false to return items as an associative array. * - * @return Base + * @return $this */ public function asObject($object = true) { $this->object = $object; diff --git a/src/Queries/Common.php b/src/Queries/Common.php index bbce030..0b2cc86 100644 --- a/src/Queries/Common.php +++ b/src/Queries/Common.php @@ -5,6 +5,17 @@ /** * CommonQuery add JOIN and WHERE clauses for (SELECT, UPDATE, DELETE) + * + * @method select(string $column) add one or more columns in SELECT to query + * @method leftJoin(string $statement) add LEFT JOIN to query + * ($statement can be 'table' name only or 'table:' means back reference) + * @method innerJoin(string $statement) add INNER JOIN to query + * ($statement can be 'table' name only or 'table:' means back reference) + * @method groupBy(string $column) add GROUP BY to query + * @method having(string $column) add HAVING query + * @method orderBy(string $column) add ORDER BY to query + * @method limit(int $limit) add LIMIT to query + * @method offset(int $offset) add OFFSET to query */ abstract class Common extends Base { @@ -50,7 +61,7 @@ public function isSmartJoinEnabled() { * @param string $condition possibly containing ? or :name (PDO syntax) * @param mixed $parameters array or a scalar value * - * @return Common + * @return $this */ public function where($condition, $parameters = array()) { if ($condition === null) { @@ -83,7 +94,7 @@ public function where($condition, $parameters = array()) { if (count($args) == 2 && !preg_match('/(\?|:\w+)/i', $condition)) { // condition is column only if (is_null($parameters)) { - return $this->addStatement('WHERE', "$condition is NULL"); + return $this->addStatement('WHERE', "$condition IS NULL"); } elseif ($args[1] === array()) { return $this->addStatement('WHERE', 'FALSE'); } elseif (is_array($args[1])) { @@ -112,7 +123,7 @@ public function where($condition, $parameters = array()) { * @param string $name * @param array $parameters - first is $statement followed by $parameters * - * @return $this|Select + * @return $this */ public function __call($name, $parameters = array()) { if (!in_array($name, $this->validMethods)) { @@ -154,7 +165,7 @@ protected function getClauseJoin() { * @param $statement * @param array $parameters * - * @return $this|Select + * @return $this */ private function addJoinStatements($clause, $statement, $parameters = array()) { if ($statement === null) { diff --git a/src/Queries/Select.php b/src/Queries/Select.php index 8c6d8f7..6c41995 100644 --- a/src/Queries/Select.php +++ b/src/Queries/Select.php @@ -97,6 +97,8 @@ public function fetchColumn($columnNumber = 0) { /** * Fetch first row or column * + * @todo rename either $s (which is a PDOStatement), or the Select::fetch() function + * * @param string $column column name or empty string for the whole row * * @return mixed string, array or false if there is no row @@ -126,6 +128,8 @@ public function fetch($column = '') { /** * Fetch pairs * + * @todo fix return value on query failure + * * @param $key * @param $value * @param $object diff --git a/tests/01-basic.phpt b/tests/01-basic.phpt deleted file mode 100644 index 651daca..0000000 --- a/tests/01-basic.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -Basic operations ---FILE-- -from('user')->where('id > ?', 0)->orderBy('name'); -$query = $query->where('name = ?', 'Marek'); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE id > ? - AND name = ? -ORDER BY name -Array -( - [0] => 0 - [1] => Marek -) -Array -( - [id] => 1 - [country_id] => 1 - [type] => admin - [name] => Marek -) diff --git a/tests/02-query-with-group-having.phpt b/tests/02-query-with-group-having.phpt deleted file mode 100644 index f79c44a..0000000 --- a/tests/02-query-with-group-having.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Query with select, group, having, order ---FILE-- -from('user') - ->select(null) - ->select('type, count(id) AS type_count') - ->where('id > ?', 1) - ->groupBy('type') - ->having('type_count > ?', 1) - ->orderBy('name'); - -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT type, count(id) AS type_count -FROM user -WHERE id > ? -GROUP BY type -HAVING type_count > ? -ORDER BY name diff --git a/tests/03-from-id.phpt b/tests/03-from-id.phpt deleted file mode 100644 index 9cf8a43..0000000 --- a/tests/03-from-id.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -from($table, $id) ---FILE-- -from('user', 2); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE user.id = ? -Array -( - [0] => 2 -) diff --git a/tests/04-where-array.phpt b/tests/04-where-array.phpt deleted file mode 100644 index 9cde146..0000000 --- a/tests/04-where-array.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -where(array(...)) ---FILE-- -from('user')->where(array( - 'id' => 2, - 'type' => 'author', -)); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE id = ? - AND type = ? -Array -( - [0] => 2 - [1] => author -) diff --git a/tests/05-where-column-value.phpt b/tests/05-where-column-value.phpt deleted file mode 100644 index 8082f0d..0000000 --- a/tests/05-where-column-value.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -where('column', 'value') ---FILE-- -from('user')->where('type', 'author'); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE type = ? -Array -( - [0] => author -) diff --git a/tests/06-where-column-null.phpt b/tests/06-where-column-null.phpt deleted file mode 100644 index d4b4fd4..0000000 --- a/tests/06-where-column-null.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -where('column', null) ---FILE-- -from('user')->where('type', null); - -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE type is NULL diff --git a/tests/07-where-column-array.phpt b/tests/07-where-column-array.phpt deleted file mode 100644 index 3f7a9fa..0000000 --- a/tests/07-where-column-array.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -where('column', array(..)) ---FILE-- -from('user')->where('id', array(1,2,3)); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE id IN (1, 2, 3) -Array -( -) diff --git a/tests/08-where-column-name.phpt b/tests/08-where-column-name.phpt deleted file mode 100644 index 9c9dc79..0000000 --- a/tests/08-where-column-name.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -where with named :params ---FILE-- -from('user') - ->where('type = :type', array(':type' => 'author')) - ->where('id > :id AND name <> :name', array(':id' => 1, ':name' => 'Marek')); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -foreach ($query as $row) { - echo "$row[name]\n"; -} -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE type = :type - AND id > :id - AND name <> :name -Array -( - [:type] => author - [:id] => 1 - [:name] => Marek -) -Robert diff --git a/tests/09-join-full.phpt b/tests/09-join-full.phpt deleted file mode 100644 index 9ed6ea7..0000000 --- a/tests/09-join-full.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -full join ---FILE-- -from('article') - ->select('user.name') - ->leftJoin('user ON user.id = article.user_id') - ->orderBy('article.title'); - -echo $query->getQuery() . "\n"; -foreach ($query as $row) { - echo "$row[name] - $row[title]\n"; -} -?> ---EXPECTF-- -SELECT article.*, user.name -FROM article - LEFT JOIN user ON user.id = article.user_id -ORDER BY article.title -Marek - article 1 -Robert - article 2 -Marek - article 3 diff --git a/tests/10-join-short.phpt b/tests/10-join-short.phpt deleted file mode 100644 index fa019a6..0000000 --- a/tests/10-join-short.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -short join - default join is left join ---FILE-- -from('article')->leftJoin('user'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->leftJoin('user author'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->leftJoin('user AS author'); -echo $query->getQuery() . "\n"; - -?> ---EXPECTF-- -SELECT article.* -FROM article - LEFT JOIN user ON user.id = article.user_id -SELECT article.* -FROM article - LEFT JOIN user AS author ON author.id = article.user_id -SELECT article.* -FROM article - LEFT JOIN user AS author ON author.id = article.user_id diff --git a/tests/11-join-short-backref.phpt b/tests/11-join-short-backref.phpt deleted file mode 100644 index 807e969..0000000 --- a/tests/11-join-short-backref.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -short join back reference ---FILE-- -from('user')->innerJoin('article:'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('user')->innerJoin('article: with_articles'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('user')->innerJoin('article: AS with_articles'); -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT user.* -FROM user - INNER JOIN article ON article.user_id = user.id -SELECT user.* -FROM user - INNER JOIN article AS with_articles ON with_articles.user_id = user.id -SELECT user.* -FROM user - INNER JOIN article AS with_articles ON with_articles.user_id = user.id diff --git a/tests/12-join-short-multi.phpt b/tests/12-join-short-multi.phpt deleted file mode 100644 index 888bd33..0000000 --- a/tests/12-join-short-multi.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -join same two tables ---FILE-- -from('comment')->leftJoin('article.user'); -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT comment.* -FROM comment - LEFT JOIN article ON article.id = comment.article_id - LEFT JOIN user ON user.id = article.user_id diff --git a/tests/13-join-short-multi-backref.phpt b/tests/13-join-short-multi-backref.phpt deleted file mode 100644 index 0dd2cd5..0000000 --- a/tests/13-join-short-multi-backref.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -multi short join ---FILE-- -from('article')->innerJoin('comment:user AS comment_user'); -echo $query->getQuery() . "\n"; -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT article.* -FROM article - INNER JOIN comment ON comment.article_id = article.id - INNER JOIN user AS comment_user ON comment_user.id = comment.user_id -Array -( - [id] => 1 - [user_id] => 1 - [published_at] => 2011-12-10 12:10:00 - [title] => article 1 - [content] => content 1 -) diff --git a/tests/14-join-short-two-same-tables.phpt b/tests/14-join-short-two-same-tables.phpt deleted file mode 100644 index b8b83c3..0000000 --- a/tests/14-join-short-two-same-tables.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -join two same tables ---FILE-- -from('article')->leftJoin('user')->leftJoin('user'); -echo $query->getQuery() . "\n"; - -?> ---EXPECTF-- -SELECT article.* -FROM article - LEFT JOIN user ON user.id = article.user_id diff --git a/tests/15-join-short-two-tables.phpt b/tests/15-join-short-two-tables.phpt deleted file mode 100644 index b7d8416..0000000 --- a/tests/15-join-short-two-tables.phpt +++ /dev/null @@ -1,32 +0,0 @@ ---TEST-- -join two tables via difference keys ---FILE-- -from('comment') - ->where('comment.id', 1) - ->leftJoin('user comment_author')->select('comment_author.name AS comment_name') - ->leftJoin('article.user AS article_author')->select('article_author.name AS author_name'); -echo $query->getQuery() . "\n"; -$result = $query->fetch(); -print_r($result); - -?> ---EXPECTF-- -SELECT comment.*, comment_author.name AS comment_name, article_author.name AS author_name -FROM comment - LEFT JOIN user AS comment_author ON comment_author.id = comment.user_id - LEFT JOIN article ON article.id = comment.article_id - LEFT JOIN user AS article_author ON article_author.id = article.user_id -WHERE comment.id = ? -Array -( - [id] => 1 - [article_id] => 1 - [user_id] => 2 - [content] => comment 1.1 - [comment_name] => Robert - [author_name] => Marek -) diff --git a/tests/16-fluent-utils.phpt b/tests/16-fluent-utils.phpt deleted file mode 100644 index 7e01919..0000000 --- a/tests/16-fluent-utils.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Basic operations ---FILE-- - ---EXPECTF-- -'ONE' -'ONE' -'ONE TWO' -'ONE TWO' -'ONE TWO THREE' -'ONE TWO THREE' diff --git a/tests/17-join-in-where.phpt b/tests/17-join-in-where.phpt deleted file mode 100644 index 62e07bc..0000000 --- a/tests/17-join-in-where.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -join in where ---FILE-- -from('article')->where('comment:content <> "" AND user.country.id = ?', 1); -echo $query->getQuery() . "\n"; - -?> ---EXPECTF-- -SELECT article.* -FROM article - LEFT JOIN comment ON comment.article_id = article.id - LEFT JOIN user ON user.id = article.user_id - LEFT JOIN country ON country.id = user.country_id -WHERE comment.content <> "" - AND country.id = ? diff --git a/tests/18-join-in-select.phpt b/tests/18-join-in-select.phpt deleted file mode 100644 index 14b19c2..0000000 --- a/tests/18-join-in-select.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -join in where ---FILE-- -from('article')->select('user.name as author'); -echo $query->getQuery() . "\n"; - -?> ---EXPECTF-- -SELECT article.*, user.name as author -FROM article - LEFT JOIN user ON user.id = article.user_id diff --git a/tests/19-join-in-order-by.phpt b/tests/19-join-in-order-by.phpt deleted file mode 100644 index e82347b..0000000 --- a/tests/19-join-in-order-by.phpt +++ /dev/null @@ -1,16 +0,0 @@ ---TEST-- -join in where ---FILE-- -from('article')->orderBy('user.name, article.title'); -echo $query->getQuery() . "\n"; - -?> ---EXPECTF-- -SELECT article.* -FROM article - LEFT JOIN user ON user.id = article.user_id -ORDER BY user.name, article.title diff --git a/tests/20-join-in-group-by.phpt b/tests/20-join-in-group-by.phpt deleted file mode 100644 index 47a18a7..0000000 --- a/tests/20-join-in-group-by.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -join in where ---FILE-- -from('article')->groupBy('user.type') - ->select(null)->select('user.type, count(article.id) as article_count'); -echo $query->getQuery() . "\n"; -$result = $query->fetchAll(); -print_r($result); -?> ---EXPECTF-- -SELECT user.type, count(article.id) as article_count -FROM article - LEFT JOIN user ON user.id = article.user_id -GROUP BY user.type -Array -( - [0] => Array - ( - [type] => admin - [article_count] => 2 - ) - - [1] => Array - ( - [type] => author - [article_count] => 1 - ) - -) diff --git a/tests/21-dont-create-duplicite-joins.phpt b/tests/21-dont-create-duplicite-joins.phpt deleted file mode 100644 index 8120992..0000000 --- a/tests/21-dont-create-duplicite-joins.phpt +++ /dev/null @@ -1,35 +0,0 @@ ---TEST-- -don't create second join if table or alias was joined ---FILE-- -from('article')->innerJoin('user AS author ON article.user_id = author.id') - ->select('author.name'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->innerJoin('user ON article.user_id = user.id') - ->select('user.name'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->innerJoin('user AS author ON article.user_id = author.id') - ->select('author.country.name'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->innerJoin('user ON article.user_id = user.id') - ->select('user.country.name'); -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT article.*, author.name -FROM article - INNER JOIN user AS author ON article.user_id = author.id -SELECT article.*, user.name -FROM article - INNER JOIN user ON article.user_id = user.id -SELECT article.*, country.name -FROM article - INNER JOIN user AS author ON article.user_id = author.id - LEFT JOIN country ON country.id = author.country_id -SELECT article.*, country.name -FROM article - INNER JOIN user ON article.user_id = user.id - LEFT JOIN country ON country.id = user.country_id diff --git a/tests/22-clause-with-ref-before-join.phpt b/tests/22-clause-with-ref-before-join.phpt deleted file mode 100644 index 44b27a1..0000000 --- a/tests/22-clause-with-ref-before-join.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -clause with referenced table before join ---FILE-- -from('article')->select('user.name')->innerJoin('user'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('article')->select('author.name')->innerJoin('user as author'); -echo $query->getQuery() . "\n"; -$query = $fluent->from('user')->select('article:title')->innerJoin('article:'); -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT article.*, user.name -FROM article - INNER JOIN user ON user.id = article.user_id -SELECT article.*, author.name -FROM article - INNER JOIN user AS author ON author.id = article.user_id -SELECT user.*, article.title -FROM user - INNER JOIN article ON article.user_id = user.id diff --git a/tests/23-aliases-for-clauses-groupby-orderby.phpt b/tests/23-aliases-for-clauses-groupby-orderby.phpt deleted file mode 100644 index efd8f77..0000000 --- a/tests/23-aliases-for-clauses-groupby-orderby.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -aliases for clauses: group -> groupBy, order -> orderBy ---FILE-- -from('article')->group('user_id')->order('id'); -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT article.* -FROM article -GROUP BY user_id -ORDER BY id diff --git a/tests/24-fetch.phpt b/tests/24-fetch.phpt deleted file mode 100644 index 7a44305..0000000 --- a/tests/24-fetch.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -fetch ---FILE-- -from('user', 1)->fetch('name') . "\n"; -print_r($fluent->from('user', 1)->fetch()); -if ($fluent->from('user', 3)->fetch() === false) echo "false\n"; -if ($fluent->from('user', 3)->fetch('name') === false) echo "false\n"; - -?> ---EXPECTF-- -Marek -Array -( - [id] => 1 - [country_id] => 1 - [type] => admin - [name] => Marek -) -false -false diff --git a/tests/25-fetch-pairs-fetch-all.phpt b/tests/25-fetch-pairs-fetch-all.phpt deleted file mode 100644 index 92d0d07..0000000 --- a/tests/25-fetch-pairs-fetch-all.phpt +++ /dev/null @@ -1,38 +0,0 @@ ---TEST-- -fetch pairs, fetch all ---FILE-- -from('user')->fetchPairs('id', 'name'); -print_r($result); -$result = $fluent->from('user')->fetchAll(); -print_r($result); - -?> ---EXPECTF-- -Array -( - [1] => Marek - [2] => Robert -) -Array -( - [0] => Array - ( - [id] => 1 - [country_id] => 1 - [type] => admin - [name] => Marek - ) - - [1] => Array - ( - [id] => 2 - [country_id] => 1 - [type] => author - [name] => Robert - ) - -) diff --git a/tests/26-debug.phpt b/tests/26-debug.phpt deleted file mode 100644 index aff8d82..0000000 --- a/tests/26-debug.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -debug callback ---FILE-- -debug = true; // log queries to STDERR - * $fluent->debug = $callback; // see below - */ - -$fluent->debug = function($BaseQuery) { - echo "query: " . $BaseQuery->getQuery(false) . "\n"; - echo "parameters: " . implode(', ', $BaseQuery->getParameters()) . "\n"; - echo "rowCount: " . $BaseQuery->getResult()->rowCount() . "\n"; - // time is impossible to test (each time is other) - // echo $FluentQuery->getTime() . "\n"; -}; - -$fluent->from('user')->where('id < ? AND name <> ?', 7, 'Peter')->execute(); -$fluent->debug = null; -?> ---EXPECTF-- -query: SELECT user.* FROM user WHERE id < ? AND name <> ? -parameters: 7, Peter -rowCount: 2 diff --git a/tests/27-fetch-all-with-params.phpt b/tests/27-fetch-all-with-params.phpt deleted file mode 100644 index b41884e..0000000 --- a/tests/27-fetch-all-with-params.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -fetch all with params ---FILE-- -from('user')->fetchAll('id', 'type, name'); -print_r($result); - -?> ---EXPECTF-- -Array -( - [1] => Array - ( - [id] => 1 - [type] => admin - [name] => Marek - ) - - [2] => Array - ( - [id] => 2 - [type] => author - [name] => Robert - ) - -) diff --git a/tests/28-from-other-db.phpt b/tests/28-from-other-db.phpt deleted file mode 100644 index 745b687..0000000 --- a/tests/28-from-other-db.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -FROM table from other database ---FILE-- -from('db2.user')->order('db2.user.name')->getQuery(); -echo "$query\n"; - -?> ---EXPECTF-- -SELECT db2.user.* -FROM db2.user -ORDER BY db2.user.name diff --git a/tests/29-join-table-from-other-db.phpt b/tests/29-join-table-from-other-db.phpt deleted file mode 100644 index 50d7787..0000000 --- a/tests/29-join-table-from-other-db.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -FROM table from other database ---FILE-- -from('user') - ->innerJoin('db2.types ON db2.types.id = user.type') - ->select('db2.types.*') - ->getQuery(); -echo "$query\n"; - -?> ---EXPECTF-- -SELECT user.*, db2.types.* -FROM user - INNER JOIN db2.types ON db2.types.id = user.type diff --git a/tests/30-join-table-with-using.phpt b/tests/30-join-table-with-using.phpt deleted file mode 100644 index 4f3e62d..0000000 --- a/tests/30-join-table-with-using.phpt +++ /dev/null @@ -1,41 +0,0 @@ ---TEST-- -join using USING ---FILE-- -from('article') - ->innerJoin('user USING (user_id)') - ->select('user.*') - ->getQuery(); -echo "$query\n"; - -$query = $fluent2->from('article') - ->innerJoin('user u USING (user_id)') - ->select('u.*') - ->getQuery(); -echo "$query\n"; - -$query = $fluent2->from('article') - ->innerJoin('user AS u USING (user_id)') - ->select('u.*') - ->getQuery(); -echo "$query\n"; - -unset($fluent_structure2); -unset($fluent2); - -?> ---EXPECTF-- -SELECT article.*, user.* -FROM article - INNER JOIN user USING (user_id) -SELECT article.*, u.* -FROM article - INNER JOIN user u USING (user_id) -SELECT article.*, u.* -FROM article - INNER JOIN user AS u USING (user_id) diff --git a/tests/31-from-with-alias.phpt b/tests/31-from-with-alias.phpt deleted file mode 100644 index b83ad10..0000000 --- a/tests/31-from-with-alias.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -FROM with alias ---FILE-- -from('user author')->getQuery(); -echo "$query\n"; -$query = $fluent->from('user AS author')->getQuery(); -echo "$query\n"; -$query = $fluent->from('user AS author', 1)->getQuery(); -echo "$query\n"; -$query = $fluent->from('user AS author')->select('country.name')->getQuery(); -echo "$query\n"; - -?> ---EXPECTF-- -SELECT author.* -FROM user author -SELECT author.* -FROM user AS author -SELECT author.* -FROM user AS author -WHERE author.id = ? -SELECT author.*, country.name -FROM user AS author - LEFT JOIN country ON country.id = user AS author.country_id diff --git a/tests/32-insert.phpt b/tests/32-insert.phpt deleted file mode 100644 index 2d8bfec..0000000 --- a/tests/32-insert.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -insert into ---FILE-- -insertInto('article', - array( - 'user_id' => 1, - 'title' => 'new title', - 'content' => 'new content' - )); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -$lastInsert = $query->execute(); - -$pdo->query('DELETE FROM article WHERE id > 3')->execute(); -?> ---EXPECTF-- -INSERT INTO article (user_id, title, content) -VALUES (?, ?, ?) -Array -( - [0] => 1 - [1] => new title - [2] => new content -) diff --git a/tests/33-insert-update.phpt b/tests/33-insert-update.phpt deleted file mode 100644 index 39a99da..0000000 --- a/tests/33-insert-update.phpt +++ /dev/null @@ -1,54 +0,0 @@ ---TEST-- -INSERT with ON DUPLICATE KEY UPDATE ---FILE-- -insertInto('article', array('id' => 1)) - ->onDuplicateKeyUpdate(array( - 'title' => 'article 1b', - 'content' => new Envms\FluentPDO\Literal('abs(-1)') // let's update with a literal and a parameter value - )); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -echo 'last_inserted_id = ' . $query->execute() . "\n"; -$q = $fluent->from('article', 1)->fetch(); -print_r($q); -$query = $fluent->insertInto('article', array('id' => 1)) - ->onDuplicateKeyUpdate(array( - 'title' => 'article 1', - 'content' => 'content 1', - ))->execute(); -echo "last_inserted_id = $query\n"; -$q = $fluent->from('article', 1)->fetch(); -print_r($q); -?> ---EXPECTF-- -INSERT INTO article (id) -VALUES (?) -ON DUPLICATE KEY UPDATE title = ?, content = abs(-1) -Array -( - [0] => 1 - [1] => article 1b -) -last_inserted_id = 1 -Array -( - [id] => 1 - [user_id] => 1 - [published_at] => 2011-12-10 12:10:00 - [title] => article 1b - [content] => 1 -) -last_inserted_id = 1 -Array -( - [id] => 1 - [user_id] => 1 - [published_at] => 2011-12-10 12:10:00 - [title] => article 1 - [content] => content 1 -) diff --git a/tests/34-insert-ignore.phpt b/tests/34-insert-ignore.phpt deleted file mode 100644 index 4c8d06d..0000000 --- a/tests/34-insert-ignore.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -insert ignore ---FILE-- -insertInto('article', - array( - 'user_id' => 1, - 'title' => 'new title', - 'content' => 'new content', - ))->ignore(); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -?> ---EXPECTF-- -INSERT IGNORE INTO article (user_id, title, content) -VALUES (?, ?, ?) -Array -( - [0] => 1 - [1] => new title - [2] => new content -) diff --git a/tests/35-insert-with-literal.phpt b/tests/35-insert-with-literal.phpt deleted file mode 100644 index 6fcf28d..0000000 --- a/tests/35-insert-with-literal.phpt +++ /dev/null @@ -1,28 +0,0 @@ ---TEST-- -insert with literal ---FILE-- -insertInto('article', - array( - 'user_id' => 1, - 'updated_at' => new Envms\FluentPDO\Literal('NOW()'), - 'title' => 'new title', - 'content' => 'new content', - )); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); - -?> ---EXPECTF-- -INSERT INTO article (user_id, updated_at, title, content) -VALUES (?, NOW(), ?, ?) -Array -( - [0] => 1 - [1] => new title - [2] => new content -) diff --git a/tests/36-disable-smart-join.phpt b/tests/36-disable-smart-join.phpt deleted file mode 100644 index c26cac4..0000000 --- a/tests/36-disable-smart-join.phpt +++ /dev/null @@ -1,49 +0,0 @@ ---TEST-- -Disable and enable smart join feature ---FILE-- -from('comment') - ->select('user.name') - ->orderBy('article.published_at') - ->getQuery(); -echo "-- Plain:\n$query\n\n"; - -$query = $fluent->from('comment') - ->select('user.name') - ->disableSmartJoin() - ->orderBy('article.published_at') - ->getQuery(); -echo "-- Disable:\n$query\n\n"; - -$query = $fluent->from('comment') - ->disableSmartJoin() - ->select('user.name') - ->enableSmartJoin() - ->orderBy('article.published_at') - ->getQuery(); -echo "-- Disable and enable:\n$query\n\n"; - -?> ---EXPECTF-- --- Plain: -SELECT comment.*, user.name -FROM comment - LEFT JOIN user ON user.id = comment.user_id - LEFT JOIN article ON article.id = comment.article_id -ORDER BY article.published_at - --- Disable: -SELECT comment.*, user.name -FROM comment -ORDER BY article.published_at - --- Disable and enable: -SELECT comment.*, user.name -FROM comment - LEFT JOIN user ON user.id = comment.user_id - LEFT JOIN article ON article.id = comment.article_id -ORDER BY article.published_at - diff --git a/tests/37-fetch-column.phpt b/tests/37-fetch-column.phpt deleted file mode 100644 index f5f6bb0..0000000 --- a/tests/37-fetch-column.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -fetch column ---FILE-- -from('user', 1)->fetchColumn() . "\n"; -echo $fluent->from('user', 1)->fetchColumn(3) . "\n"; -if ($fluent->from('user', 3)->fetchColumn() === false) echo "false\n"; -if ($fluent->from('user', 3)->fetchColumn(3) === false) echo "false\n"; - -?> ---EXPECTF-- -1 -Marek -false -false diff --git a/tests/38-pdo-fetch-obj.phpt b/tests/38-pdo-fetch-obj.phpt deleted file mode 100644 index 5917d2b..0000000 --- a/tests/38-pdo-fetch-obj.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -PDO::FETCH_OBJ option. ---FILE-- -from('user')->where('id > ?', 0)->orderBy('name'); -$query = $query->where('name = ?', 'Marek'); -$fluent->getPdo()->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); - -print_r($query->getParameters()); -print_r($query->fetch()); - -// Set back for other tests. -$fluent->getPdo()->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_BOTH); -?> ---EXPECTF-- -Array -( - [0] => 0 - [1] => Marek -) -stdClass Object -( - [id] => 1 - [country_id] => 1 - [type] => admin - [name] => Marek -) diff --git a/tests/39-update-basic.phpt b/tests/39-update-basic.phpt deleted file mode 100644 index 0f594d5..0000000 --- a/tests/39-update-basic.phpt +++ /dev/null @@ -1,39 +0,0 @@ ---TEST-- -Basic update ---FILE-- -update('country')->set('name', 'aikavolS')->where('id', 1); -$query->execute(); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; - -$query = $fluent->from('country')->where('id', 1); -print_r($query->fetch()); - -$fluent->update('country')->set('name', 'Slovakia')->where('id', 1)->execute(); - -$query = $fluent->from('country')->where('id', 1); -print_r($query->fetch()); -?> ---EXPECTF-- -UPDATE country -SET name = ? -WHERE id = ? -Array -( - [0] => aikavolS - [1] => 1 -) -Array -( - [id] => 1 - [name] => aikavolS -) -Array -( - [id] => 1 - [name] => Slovakia -) diff --git a/tests/40-update-literal.phpt b/tests/40-update-literal.phpt deleted file mode 100644 index 04c9ea9..0000000 --- a/tests/40-update-literal.phpt +++ /dev/null @@ -1,19 +0,0 @@ ---TEST-- -Basic update ---FILE-- -update('article')->set('published_at', new Envms\FluentPDO\Literal('NOW()'))->where('user_id', 1); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -UPDATE article -SET published_at = NOW() -WHERE user_id = ? -Array -( - [0] => 1 -) diff --git a/tests/41-update-from-array.phpt b/tests/41-update-from-array.phpt deleted file mode 100644 index d82a901..0000000 --- a/tests/41-update-from-array.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Basic update ---FILE-- -update('user')->set(array('name' => 'keraM', '`type`' => 'author'))->where('id', 1); -$query->execute(); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; - -$query = $fluent->update('user')->set(array('name' => 'Marek', '`type`' => 'admin'))->where('id', 1); -$query->execute(); -?> ---EXPECTF-- -UPDATE user -SET name = ?, `type` = ? -WHERE id = ? -Array -( - [0] => keraM - [1] => author - [2] => 1 -) diff --git a/tests/42-update-left-join.phpt b/tests/42-update-left-join.phpt deleted file mode 100644 index 83577e6..0000000 --- a/tests/42-update-left-join.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Basic update ---FILE-- -update('user') - ->outerJoin('country ON country.id = user.country_id') - ->set(array('name' => 'keraM', '`type`' => 'author')) - ->where('id', 1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -UPDATE user - OUTER JOIN country ON country.id = user.country_id -SET name = ?, `type` = ? -WHERE id = ? -Array -( - [0] => keraM - [1] => author - [2] => 1 -) diff --git a/tests/43-update-smart-join.phpt b/tests/43-update-smart-join.phpt deleted file mode 100644 index 7babcc0..0000000 --- a/tests/43-update-smart-join.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Update with smart join ---FILE-- -update('user') - ->set(array('type' => 'author')) - ->where('country.id', 1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -UPDATE user - LEFT JOIN country ON country.id = user.country_id -SET type = ? -WHERE country.id = ? -Array -( - [0] => author - [1] => 1 -) diff --git a/tests/44-update-order-limit.phpt b/tests/44-update-order-limit.phpt deleted file mode 100644 index da97823..0000000 --- a/tests/44-update-order-limit.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Update with ORDER BY and LIMIT ---FILE-- -update('user') - ->set(array('type' => 'author')) - ->where('id', 2) - ->orderBy('name') - ->limit(1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -UPDATE user -SET type = ? -WHERE id = ? -ORDER BY name -LIMIT 1 -Array -( - [0] => author - [1] => 2 -) diff --git a/tests/45-delete-basic.phpt b/tests/45-delete-basic.phpt deleted file mode 100644 index ea34058..0000000 --- a/tests/45-delete-basic.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Basic delete ---FILE-- -deleteFrom('user') - ->where('id', 1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -DELETE -FROM user -WHERE id = ? -Array -( - [0] => 1 -) diff --git a/tests/46-delete-ignore.phpt b/tests/46-delete-ignore.phpt deleted file mode 100644 index b6b4645..0000000 --- a/tests/46-delete-ignore.phpt +++ /dev/null @@ -1,22 +0,0 @@ ---TEST-- -Basic delete ---FILE-- -deleteFrom('user') - ->ignore() - ->where('id', 1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -DELETE IGNORE -FROM user -WHERE id = ? -Array -( - [0] => 1 -) diff --git a/tests/47-delete-order-limit.phpt b/tests/47-delete-order-limit.phpt deleted file mode 100644 index 26cc210..0000000 --- a/tests/47-delete-order-limit.phpt +++ /dev/null @@ -1,25 +0,0 @@ ---TEST-- -Delete with ORDER BY and LIMIT ---FILE-- -deleteFrom('user') - ->where('id', 2) - ->orderBy('name') - ->limit(1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -DELETE -FROM user -WHERE id = ? -ORDER BY name -LIMIT 1 -Array -( - [0] => 2 -) diff --git a/tests/48-delete-expanded.phpt b/tests/48-delete-expanded.phpt deleted file mode 100644 index 348b1ed..0000000 --- a/tests/48-delete-expanded.phpt +++ /dev/null @@ -1,26 +0,0 @@ ---TEST-- -Expanded delete ---FILE-- -delete('t1, t2') - ->from('t1') - ->innerJoin('t2 ON t1.id = t2.id') - ->innerJoin('t3 ON t2.id = t3.id') - ->where('t1.id', 1); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; -?> ---EXPECTF-- -DELETE t1, t2 -FROM t1 - INNER JOIN t2 ON t1.id = t2.id - INNER JOIN t3 ON t2.id = t3.id -WHERE t1.id = ? -Array -( - [0] => 1 -) diff --git a/tests/50-update-shortcut.phpt b/tests/50-update-shortcut.phpt deleted file mode 100644 index f11de5c..0000000 --- a/tests/50-update-shortcut.phpt +++ /dev/null @@ -1,21 +0,0 @@ ---TEST-- -Shortcuts for update ---FILE-- -update('user', array('type' => 'admin'), 1); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; - -?> ---EXPECTF-- -UPDATE user -SET type = ? -WHERE id = ? -Array -( - [0] => admin - [1] => 1 -) diff --git a/tests/51-delete-shortcut.phpt b/tests/51-delete-shortcut.phpt deleted file mode 100644 index 9e5eee0..0000000 --- a/tests/51-delete-shortcut.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Shortcuts for delete ---FILE-- -deleteFrom('user', 1); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; - -?> ---EXPECTF-- -DELETE -FROM user -WHERE id = ? -Array -( - [0] => 1 -) diff --git a/tests/52-add-from-after-delete.phpt b/tests/52-add-from-after-delete.phpt deleted file mode 100644 index a6467f0..0000000 --- a/tests/52-add-from-after-delete.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -add FROM after DELETE if doesn't set ---FILE-- -delete('user', 1)->from('user'); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()) . "\n"; - -?> ---EXPECTF-- -DELETE user -FROM user -WHERE id = ? -Array -( - [0] => 1 -) diff --git a/tests/53-callable-fluentstructure.phpt b/tests/53-callable-fluentstructure.phpt deleted file mode 100644 index 1b96cf7..0000000 --- a/tests/53-callable-fluentstructure.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -callable arguments for Envms\FluentPDO\Structure ---FILE-- -getForeignKey('user') . "\n"; -echo $structure->getPrimaryKey('user') . "\n"; -$structure = new Envms\FluentPDO\Structure('%s_id', null); -echo $structure->getForeignKey('user') . "\n"; -echo $structure->getPrimaryKey('user') . "\n"; - -$prefix = 'prefix_'; -$structure = new Envms\FluentPDO\Structure(function($table) use($prefix) { - $table = substr($table, 0, strlen($prefix)) == $prefix ? substr($table, strlen($prefix)) : $table; - return $table.'_id'; -}, null); -echo $structure->getForeignKey($prefix.'user') . "\n"; -echo $structure->getPrimaryKey($prefix.'user') . "\n"; -?> ---EXPECTF-- -user_id -id -user_id -user_id -user_id -user_id diff --git a/tests/53-from-id-asobject.phpt b/tests/53-from-id-asobject.phpt deleted file mode 100644 index bf594f5..0000000 --- a/tests/53-from-id-asobject.phpt +++ /dev/null @@ -1,23 +0,0 @@ ---TEST-- -from($table, $id) as stdClass ---FILE-- -from('user', 2)->asObject(); - -echo $query->getQuery() . "\n"; -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE user.id = ? -stdClass Object -( - [id] => 2 - [country_id] => 1 - [type] => author - [name] => Robert -) diff --git a/tests/54-from-id-asobject-user.phpt b/tests/54-from-id-asobject-user.phpt deleted file mode 100644 index e259146..0000000 --- a/tests/54-from-id-asobject-user.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -from($table, $id) as User class ---FILE-- -from('user', 2)->asObject('User'); - -echo $query->getQuery() . "\n"; -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE user.id = ? -User Object -( - [id] => 2 - [country_id] => 1 - [type] => author - [name] => Robert -) diff --git a/tests/55-update-zero.phpt b/tests/55-update-zero.phpt deleted file mode 100644 index 0c2b1cb..0000000 --- a/tests/55-update-zero.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -Update with zero value. ---FILE-- -update('article')->set('content', '')->where('id', 1)->execute(); -$user = $fluent->from('article')->where('id', 1)->fetch(); - -echo 'ID: ' . $user['id'] . ' - content: ' . $user['content'] . "\n"; -$fluent->update('article')->set('content', 'content 1')->where('id', 1)->execute(); -$user = $fluent->from('article')->where('id', 1)->fetch(); -echo 'ID: ' . $user['id'] . ' - content: ' . $user['content'] . "\n"; -?> ---EXPECTF-- -ID: 1 - content: -ID: 1 - content: content 1 diff --git a/tests/56-where-reset.phpt b/tests/56-where-reset.phpt deleted file mode 100644 index 9d82d7e..0000000 --- a/tests/56-where-reset.phpt +++ /dev/null @@ -1,29 +0,0 @@ ---TEST-- -WHERE reset ---FILE-- -from('user')->where('id > ?', 0)->orderBy('name'); -$query = $query->where(null)->where('name = ?', 'Marek'); -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE name = ? -ORDER BY name -Array -( - [0] => Marek -) -Array -( - [id] => 1 - [country_id] => 1 - [type] => admin - [name] => Marek -) diff --git a/tests/57-select-array-param.phpt b/tests/57-select-array-param.phpt deleted file mode 100644 index aeaad55..0000000 --- a/tests/57-select-array-param.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -Accept array of columns in select (no aliases) ---FILE-- -from('user') - ->select(null) - ->select(array('id', 'name')) - ->where('id < ?', 2); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT id, name -FROM user -WHERE id < ? -Array -( - [0] => 2 -) -Array -( - [id] => 1 - [name] => Marek -) diff --git a/tests/58-groupby-array-param.phpt b/tests/58-groupby-array-param.phpt deleted file mode 100644 index 4ce6c7b..0000000 --- a/tests/58-groupby-array-param.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Query with select, group, having, order ---FILE-- -from('user') - ->select(null) - ->select('count(*) AS total_count') - ->groupBy(array('id', 'name')); - -echo $query->getQuery() . "\n"; -print_r($query->fetch()); -?> ---EXPECTF-- -SELECT count(*) AS total_count -FROM user -GROUP BY id,name -Array -( - [total_count] => 1 -) diff --git a/tests/59-countable.phpt b/tests/59-countable.phpt deleted file mode 100644 index 8704fe6..0000000 --- a/tests/59-countable.phpt +++ /dev/null @@ -1,31 +0,0 @@ ---TEST-- -Countable interface (doesn't break prev query) ---FILE-- -from('article') - ->select(NULL) - ->select('title') - ->where('id > 1'); - -echo count($articles) . "\n"; -print_r($articles->fetchAll()); -?> ---EXPECTF-- -2 -Array -( - [0] => Array - ( - [title] => article 2 - ) - - [1] => Array - ( - [title] => article 3 - ) - -) diff --git a/tests/60-where-not-array.phpt b/tests/60-where-not-array.phpt deleted file mode 100644 index bd40a49..0000000 --- a/tests/60-where-not-array.phpt +++ /dev/null @@ -1,15 +0,0 @@ ---TEST-- -where('NOT col', array) ---FILE-- -from('article')->where('NOT id', array(1,2)); - -echo $query->getQuery() . "\n"; -?> ---EXPECTF-- -SELECT article.* -FROM article -WHERE NOT id IN (1, 2) diff --git a/tests/61-where-column-name-escaped.phpt b/tests/61-where-column-name-escaped.phpt deleted file mode 100755 index 89c5a8c..0000000 --- a/tests/61-where-column-name-escaped.phpt +++ /dev/null @@ -1,30 +0,0 @@ ---TEST-- -where with quoted column names ---FILE-- -from('user') - ->where('`type` = :type', array(':type' => 'author')) - ->where('`id` > :id AND `name` <> :name', array(':id' => 1, ':name' => 'Marek')); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -foreach ($query as $row) { - echo "$row[name]\n"; -} -?> ---EXPECTF-- -SELECT user.* -FROM user -WHERE `type` = :type - AND `id` > :id - AND `name` <> :name -Array -( - [:type] => author - [:id] => 1 - [:name] => Marek -) -Robert diff --git a/tests/62-insert-delayed.phpt b/tests/62-insert-delayed.phpt deleted file mode 100644 index ed8583a..0000000 --- a/tests/62-insert-delayed.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -insert delayed ---FILE-- -insertInto('article', - array( - 'user_id' => 1, - 'title' => 'new title', - 'content' => 'new content', - ))->delayed(); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); - -?> ---EXPECTF-- -INSERT DELAYED INTO article (user_id, title, content) -VALUES (?, ?, ?) -Array -( - [0] => 1 - [1] => new title - [2] => new content -) diff --git a/tests/63-update-where.phpt b/tests/63-update-where.phpt deleted file mode 100644 index 886cd24..0000000 --- a/tests/63-update-where.phpt +++ /dev/null @@ -1,46 +0,0 @@ ---TEST-- -update where ---FILE-- -update('users') - ->set("`users`.`active`", 1) - ->where("`country`.`name`", 'Slovakia') - ->where("`users`.`name`", 'Marek'); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); -$query = $fluent->update('users') - ->set("[users].[active]", 1) - ->where("[country].[name]", 'Slovakia') - ->where("[users].[name]", 'Marek'); - -echo $query->getQuery() . "\n"; -print_r($query->getParameters()); - -?> ---EXPECTF-- -UPDATE users - LEFT JOIN country ON country.id = users.country_id -SET `users`.`active` = ? -WHERE `country`.`name` = ? - AND `users`.`name` = ? -Array -( - [0] => 1 - [1] => Slovakia - [2] => Marek -) -UPDATE users - LEFT JOIN country ON country.id = users.country_id -SET [users].[active] = ? -WHERE [country].[name] = ? - AND [users].[name] = ? -Array -( - [0] => 1 - [1] => Slovakia - [2] => Marek -) diff --git a/tests/Queries/CommonTest.php b/tests/Queries/CommonTest.php new file mode 100644 index 0000000..8a515ba --- /dev/null +++ b/tests/Queries/CommonTest.php @@ -0,0 +1,297 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testFullJoin() + { + $query = $this->fluent->from('article') + ->select('user.name') + ->leftJoin('user ON user.id = article.user_id') + ->orderBy('article.title'); + + $returnValue = ''; + foreach ($query as $row) { + $returnValue .= "$row[name] - $row[title] "; + } + + self::assertEquals('SELECT article.*, user.name FROM article LEFT JOIN user ON user.id = article.user_id ORDER BY article.title', + $query->getQuery(false)); + self::assertEquals('Marek - article 1 Robert - article 2 Marek - article 3 ', $returnValue); + } + + public function testShortJoin() + { + + $query = $this->fluent->from('article')->leftJoin('user'); + $query2 = $this->fluent->from('article')->leftJoin('user author'); + $query3 = $this->fluent->from('article')->leftJoin('user AS author'); + + self::assertEquals('SELECT article.* FROM article LEFT JOIN user ON user.id = article.user_id', $query->getQuery(false)); + self::assertEquals('SELECT article.* FROM article LEFT JOIN user AS author ON author.id = article.user_id', $query2->getQuery(false)); + self::assertEquals('SELECT article.* FROM article LEFT JOIN user AS author ON author.id = article.user_id', $query3->getQuery(false)); + } + + public function testJoinShortBackRef() + { + $query = $this->fluent->from('user')->innerJoin('article:'); + $query2 = $this->fluent->from('user')->innerJoin('article: with_articles'); + $query3 = $this->fluent->from('user')->innerJoin('article: AS with_articles'); + + self::assertEquals('SELECT user.* FROM user INNER JOIN article ON article.user_id = user.id', $query->getQuery(false)); + self::assertEquals('SELECT user.* FROM user INNER JOIN article AS with_articles ON with_articles.user_id = user.id', + $query2->getQuery(false)); + self::assertEquals('SELECT user.* FROM user INNER JOIN article AS with_articles ON with_articles.user_id = user.id', + $query3->getQuery(false)); + } + + public function testJoinShortMulti() + { + $query = $this->fluent->from('comment') + ->leftJoin('article.user'); + + self::assertEquals('SELECT comment.* FROM comment LEFT JOIN article ON article.id = comment.article_id LEFT JOIN user ON user.id = article.user_id', + $query->getQuery(false)); + } + + public function testJoinMultiBackRef() + { + $query = $this->fluent->from('article') + ->innerJoin('comment:user AS comment_user'); + + self::assertEquals('SELECT article.* FROM article INNER JOIN comment ON comment.article_id = article.id INNER JOIN user AS comment_user ON comment_user.id = comment.user_id', + $query->getQuery(false)); + self::assertEquals(['id' => 1, 'user_id' => 1, 'published_at' => '2011-12-10 12:10:00', 'title' => 'article 1', 'content' => 'content 1'], + $query->fetch()); + } + + public function testJoinShortTwoSameTable() + { + $query = $this->fluent->from('article') + ->leftJoin('user') + ->leftJoin('user'); + + self::assertEquals('SELECT article.* FROM article LEFT JOIN user ON user.id = article.user_id', $query->getQuery(false)); + } + + public function testJoinShortTwoTables() + { + $query = $this->fluent->from('comment') + ->where('comment.id', 2) + ->leftJoin('user comment_author')->select('comment_author.name AS comment_name') + ->leftJoin('article.user AS article_author')->select('article_author.name AS author_name'); + + self::assertEquals('SELECT comment.*, comment_author.name AS comment_name, article_author.name AS author_name FROM comment LEFT JOIN user AS comment_author ON comment_author.id = comment.user_id LEFT JOIN article ON article.id = comment.article_id LEFT JOIN user AS article_author ON article_author.id = article.user_id WHERE comment.id = ?', + $query->getQuery(false)); + self::assertEquals([ + 'id' => '2', + 'article_id' => '1', + 'user_id' => '2', + 'content' => 'comment 1.2', + 'comment_name' => 'Robert', + 'author_name' => 'Marek' + ], $query->fetch()); + } + + public function testJoinInWhere() + { + $query = $this->fluent->from('article')->where('comment:content <> "" AND user.country.id = ?', 1); + + self::assertEquals('SELECT article.* FROM article LEFT JOIN comment ON comment.article_id = article.id LEFT JOIN user ON user.id = article.user_id LEFT JOIN country ON country.id = user.country_id WHERE comment.content <> "" AND country.id = ?', + $query->getQuery(false)); + } + + public function testJoinInSelect() + { + $query = $this->fluent->from('article')->select('user.name AS author'); + + self::assertEquals('SELECT article.*, user.name AS author FROM article LEFT JOIN user ON user.id = article.user_id', $query->getQuery(false)); + } + + public function testJoinInOrderBy() + { + $query = $this->fluent->from('article')->orderBy('user.name, article.title'); + + self::assertEquals('SELECT article.* FROM article LEFT JOIN user ON user.id = article.user_id ORDER BY user.name, article.title', + $query->getQuery(false)); + } + + public function testJoinInGroupBy() + { + $query = $this->fluent->from('article')->groupBy('user.type') + ->select(null)->select('user.type, count(article.id) AS article_count'); + + self::assertEquals('SELECT user.type, count(article.id) AS article_count FROM article LEFT JOIN user ON user.id = article.user_id GROUP BY user.type', + $query->getQuery(false)); + self::assertEquals(['0' => ['type' => 'admin', 'article_count' => '2'], '1' => ['type' => 'author', 'article_count' => '1']], + $query->fetchAll()); + } + + public function testDontCreateDuplicateJoins() + { + $query = $this->fluent->from('article') + ->innerJoin('user AS author ON article.user_id = author.id') + ->select('author.name'); + + $query2 = $this->fluent->from('article') + ->innerJoin('user ON article.user_id = user.id') + ->select('user.name'); + + $query3 = $this->fluent->from('article') + ->innerJoin('user AS author ON article.user_id = author.id') + ->select('author.country.name'); + + $query4 = $this->fluent->from('article') + ->innerJoin('user ON article.user_id = user.id') + ->select('user.country.name'); + + self::assertEquals('SELECT article.*, author.name FROM article INNER JOIN user AS author ON article.user_id = author.id', + $query->getQuery(false)); + self::assertEquals('SELECT article.*, user.name FROM article INNER JOIN user ON article.user_id = user.id', $query2->getQuery(false)); + self::assertEquals('SELECT article.*, country.name FROM article INNER JOIN user AS author ON article.user_id = author.id LEFT JOIN country ON country.id = author.country_id', + $query3->getQuery(false)); + self::assertEquals('SELECT article.*, country.name FROM article INNER JOIN user ON article.user_id = user.id LEFT JOIN country ON country.id = user.country_id', + $query4->getQuery(false)); + } + + public function testClauseWithRefBeforeJoin() + { + $query = $this->fluent->from('article')->select('user.name')->innerJoin('user'); + $query2 = $this->fluent->from('article')->select('author.name')->innerJoin('user AS author'); + $query3 = $this->fluent->from('user')->select('article:title')->innerJoin('article:'); + + self::assertEquals('SELECT article.*, user.name FROM article INNER JOIN user ON user.id = article.user_id', $query->getQuery(false)); + self::assertEquals('SELECT article.*, author.name FROM article INNER JOIN user AS author ON author.id = article.user_id', + $query2->getQuery(false)); + self::assertEquals('SELECT user.*, article.title FROM user INNER JOIN article ON article.user_id = user.id', $query3->getQuery(false)); + } + + public function testFromOtherDB() + { + $queryPrint = $this->fluent->from('db2.user')->order('db2.user.name')->getQuery(false); + + self::assertEquals('SELECT db2.user.* FROM db2.user ORDER BY db2.user.name', $queryPrint); + } + + public function testJoinTableWithUsing() + { + $query = $this->fluent->from('article') + ->innerJoin('user USING (user_id)') + ->select('user.*') + ->getQuery(false); + + $query2 = $this->fluent->from('article') + ->innerJoin('user u USING (user_id)') + ->select('u.*') + ->getQuery(false); + + $query3 = $this->fluent->from('article') + ->innerJoin('user AS u USING (user_id)') + ->select('u.*') + ->getQuery(false); + + self::assertEquals('SELECT article.*, user.* FROM article INNER JOIN user USING (user_id)', $query); + self::assertEquals('SELECT article.*, u.* FROM article INNER JOIN user u USING (user_id)', $query2); + self::assertEquals('SELECT article.*, u.* FROM article INNER JOIN user AS u USING (user_id)', $query3); + } + + public function testDisableSmartJoin() + { + $query = $this->fluent->from('comment') + ->select('user.name') + ->orderBy('article.published_at') + ->getQuery(false); + $printQuery = "-- Plain: $query"; + + $query2 = $this->fluent->from('comment') + ->select('user.name') + ->disableSmartJoin() + ->orderBy('article.published_at') + ->getQuery(false); + + $printQuery2 = "-- Disable: $query2"; + + $query3 = $this->fluent->from('comment') + ->disableSmartJoin() + ->select('user.name') + ->enableSmartJoin() + ->orderBy('article.published_at') + ->getQuery(false); + $printQuery3 = "-- Disable and enable: $query3"; + + self::assertEquals('-- Plain: SELECT comment.*, user.name FROM comment LEFT JOIN user ON user.id = comment.user_id LEFT JOIN article ON article.id = comment.article_id ORDER BY article.published_at', + $printQuery); + self::assertEquals('-- Disable: SELECT comment.*, user.name FROM comment ORDER BY article.published_at', $printQuery2); + self::assertEquals('-- Disable and enable: SELECT comment.*, user.name FROM comment LEFT JOIN user ON user.id = comment.user_id LEFT JOIN article ON article.id = comment.article_id ORDER BY article.published_at', + $printQuery3); + } + + public function testPDOFetchObj() + { + $query = $this->fluent->from('user')->where('id > ?', 0)->orderBy('name'); + $query = $query->where('name = ?', 'Marek'); + $this->fluent->getPdo()->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); + + $expectObj = new stdClass(); + $expectObj->id = 1; + $expectObj->country_id = 1; + $expectObj->type = 'admin'; + $expectObj->name = 'Marek'; + + self::assertEquals(['0' => '0', '1' => 'Marek'], $query->getParameters()); + self::assertEquals($expectObj, $query->fetch()); + } + + public function testFromIdAsObject() + { + $query = $this->fluent->from('user', 2)->asObject(); + + $expectObj = new stdClass(); + $expectObj->id = 2; + $expectObj->country_id = 1; + $expectObj->type = 'author'; + $expectObj->name = 'Robert'; + + self::assertEquals('SELECT user.* FROM user WHERE user.id = ?', $query->getQuery(false)); + self::assertEquals($expectObj, $query->fetch()); + } + + public function testFromIdAsObjectUser() + { + $expectedUser = new User(); + $expectedUser->id = 2; + $expectedUser->country_id = 1; + $expectedUser->type = 'author'; + $expectedUser->name = 'Robert'; + + $query = $this->fluent->from('user', 2)->asObject(User::class); + $user = $query->fetch(); + + self::assertEquals('SELECT user.* FROM user WHERE user.id = ?', $query->getQuery(false)); + self::assertEquals($expectedUser, $user); + } + +} diff --git a/tests/Queries/DeleteTest.php b/tests/Queries/DeleteTest.php new file mode 100644 index 0000000..a474e5f --- /dev/null +++ b/tests/Queries/DeleteTest.php @@ -0,0 +1,86 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testDelete() + { + $query = $this->fluent->deleteFrom('user') + ->where('id', 1); + + self::assertEquals('DELETE FROM user WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } + + public function testDeleteIgnore() + { + $query = $this->fluent->deleteFrom('user') + ->ignore() + ->where('id', 1); + + self::assertEquals('DELETE IGNORE FROM user WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } + + public function testDeleteOrderLimit() + { + $query = $this->fluent->deleteFrom('user') + ->where('id', 2) + ->orderBy('name') + ->limit(1); + + self::assertEquals('DELETE FROM user WHERE id = ? ORDER BY name LIMIT 1', $query->getQuery(false)); + self::assertEquals(['0' => '2'], $query->getParameters()); + } + + public function testDeleteExpanded() + { + $query = $this->fluent->delete('t1, t2') + ->from('t1') + ->innerJoin('t2 ON t1.id = t2.id') + ->innerJoin('t3 ON t2.id = t3.id') + ->where('t1.id', 1); + + self::assertEquals('DELETE t1, t2 FROM t1 INNER JOIN t2 ON t1.id = t2.id INNER JOIN t3 ON t2.id = t3.id WHERE t1.id = ?', + $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } + + public function testDeleteShortcut() + { + $query = $this->fluent->deleteFrom('user', 1); + + self::assertEquals('DELETE FROM user WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } + + public function testAddFromAfterDelete() + { + $query = $this->fluent->delete('user', 1)->from('user'); + + self::assertEquals('DELETE user FROM user WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } +} \ No newline at end of file diff --git a/tests/Queries/InsertTest.php b/tests/Queries/InsertTest.php new file mode 100644 index 0000000..2ce84cb --- /dev/null +++ b/tests/Queries/InsertTest.php @@ -0,0 +1,94 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testInsertStatement() + { + $query = $this->fluent->insertInto('article', [ + 'user_id' => 1, + 'title' => 'new title', + 'content' => 'new content' + ]); + + self::assertEquals('INSERT INTO article (user_id, title, content) VALUES (?, ?, ?)', $query->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'new title', '2' => 'new content'], $query->getParameters()); + } + + public function testInsertUpdate() + { + $query = $this->fluent->insertInto('article', ['id' => 1]) + ->onDuplicateKeyUpdate([ + 'title' => 'article 1b', + 'content' => new Envms\FluentPDO\Literal('abs(-1)') // let's update with a literal and a parameter value + ]); + + $q = $this->fluent->from('article', 1); + + $query2 = $this->fluent->insertInto('article', ['id' => 1]) + ->onDuplicateKeyUpdate([ + 'title' => 'article 1', + 'content' => 'content 1', + ]); + + $q2 = $this->fluent->from('article', 1); + + self::assertEquals('INSERT INTO article (id) VALUES (?) ON DUPLICATE KEY UPDATE title = ?, content = abs(-1)', $query->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'article 1b'], $query->getParameters()); + self::assertEquals('last_inserted_id = 1', 'last_inserted_id = ' . $query->execute()); + self::assertEquals(['id' => '1', 'user_id' => '1', 'published_at' => '2011-12-10 12:10:00', 'title' => 'article 1b', 'content' => '1'], + $q->fetch()); + self::assertEquals('last_inserted_id = 1', 'last_inserted_id = ' . $query2->execute()); + self::assertEquals(['id' => '1', 'user_id' => '1', 'published_at' => '2011-12-10 12:10:00', 'title' => 'article 1', 'content' => 'content 1'], + $q2->fetch()); + } + + public function testInsertWithLiteral() + { + $query = $this->fluent->insertInto('article', + [ + 'user_id' => 1, + 'updated_at' => new Envms\FluentPDO\Literal('NOW()'), + 'title' => 'new title', + 'content' => 'new content', + ]); + + self::assertEquals('INSERT INTO article (user_id, updated_at, title, content) VALUES (?, NOW(), ?, ?)', $query->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'new title', '2' => 'new content'], $query->getParameters()); + } + + public function testInsertIgnore() + { + $query = $this->fluent->insertInto('article', + [ + 'user_id' => 1, + 'title' => 'new title', + 'content' => 'new content', + ])->ignore(); + + self::assertEquals('INSERT IGNORE INTO article (user_id, title, content) VALUES (?, ?, ?)', $query->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'new title', '2' => 'new content'], $query->getParameters()); + } +} \ No newline at end of file diff --git a/tests/Queries/SelectTest.php b/tests/Queries/SelectTest.php new file mode 100644 index 0000000..c742c45 --- /dev/null +++ b/tests/Queries/SelectTest.php @@ -0,0 +1,261 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testBasicQuery() + { + $query = $this->fluent + ->from('user') + ->where('id > ?', 0) + ->orderBy('name'); + + $query = $query->where('name = ?', 'Marek'); + + self::assertEquals('SELECT user.* FROM user WHERE id > ? AND name = ? ORDER BY name', $query->getQuery(false)); + self::assertEquals(['id' => '1', 'country_id' => '1', 'type' => 'admin', 'name' => 'Marek'], $query->fetch()); + self::assertEquals([0 => 0, 1 => 'Marek'], $query->getParameters()); + } + + public function testReturnQueryWithHaving() + { + + $query = $this->fluent + ->from('user') + ->select(null) + ->select('type, count(id) AS type_count') + ->where('id > ?', 1) + ->groupBy('type') + ->having('type_count > ?', 1) + ->orderBy('name'); + + self::assertEquals("SELECT type, count(id) AS type_count FROM user WHERE id > ? GROUP BY type HAVING type_count > ? ORDER BY name", + $query->getQuery(false)); + } + + public function testReturnParameterWithId() + { + $query = $this->fluent + ->from('user', 2); + + self::assertEquals([0 => 2], $query->getParameters()); + self::assertEquals('SELECT user.* FROM user WHERE user.id = ?', $query->getQuery(false)); + } + + public function testFromWithAlias() + { + $query = $this->fluent->from('user author')->getQuery(false); + $query2 = $this->fluent->from('user AS author')->getQuery(false); + $query3 = $this->fluent->from('user AS author', 1)->getQuery(false); + $query4 = $this->fluent->from('user AS author')->select('country.name')->getQuery(false); + + self::assertEquals('SELECT author.* FROM user author', $query); + self::assertEquals('SELECT author.* FROM user AS author', $query2); + self::assertEquals('SELECT author.* FROM user AS author WHERE author.id = ?', $query3); + self::assertEquals('SELECT author.*, country.name FROM user AS author LEFT JOIN country ON country.id = user AS author.country_id', $query4); + } + + public function testWhereArrayParameter() + { + $query = $this->fluent + ->from('user') + ->where([ + 'id' => 2, + 'type' => 'author' + ]); + + self::assertEquals([0 => 2, 1 => 'author'], $query->getParameters()); + self::assertEquals('SELECT user.* FROM user WHERE id = ? AND type = ?', $query->getQuery(false)); + } + + public function testWhereColumnValue() + { + $query = $this->fluent->from('user') + ->where('type', 'author'); + + self::assertEquals([0 => 'author'], $query->getParameters()); + self::assertEquals('SELECT user.* FROM user WHERE type = ?', $query->getQuery(false)); + } + + public function testWhereColumnNull() + { + $query = $this->fluent + ->from('user') + ->where('type', null); + + self::assertEquals('SELECT user.* FROM user WHERE type IS NULL', $query->getQuery(false)); + } + + public function testWhereColumnArray() + { + $query = $this->fluent + ->from('user') + ->where('id', [1, 2, 3]); + + self::assertEquals('SELECT user.* FROM user WHERE id IN (1, 2, 3)', $query->getQuery(false)); + self::assertEquals([], $query->getParameters()); + } + + public function testWhereColumnName() + { + $query = $this->fluent->from('user') + ->where('type = :type', [':type' => 'author']) + ->where('id > :id AND name <> :name', [':id' => 1, ':name' => 'Marek']); + + $returnValue = ''; + foreach ($query as $row) { + $returnValue = $row['name']; + } + + self::assertEquals('SELECT user.* FROM user WHERE type = :type AND id > :id AND name <> :name', $query->getQuery(false)); + self::assertEquals([':type' => 'author', ':id' => 1, ':name' => 'Marek'], $query->getParameters()); + self::assertEquals('Robert', $returnValue); + } + + public function testWhereReset() + { + $query = $this->fluent->from('user')->where('id > ?', 0)->orderBy('name'); + $query = $query->where(null)->where('name = ?', 'Marek'); + + self::assertEquals('SELECT user.* FROM user WHERE name = ? ORDER BY name', $query->getQuery(false)); + self::assertEquals(['0' => 'Marek'], $query->getParameters()); + self::assertEquals(['id' => '1', 'country_id' => '1', 'type' => 'admin', 'name' => 'Marek'], $query->fetch()); + } + + public function testSelectArrayParam() + { + $query = $this->fluent + ->from('user') + ->select(null) + ->select(['id', 'name']) + ->where('id < ?', 2); + + self::assertEquals('SELECT id, name FROM user WHERE id < ?', $query->getQuery(false)); + self::assertEquals(['0' => '2'], $query->getParameters()); + self::assertEquals(['id' => '1', 'name' => 'Marek'], $query->fetch()); + } + + public function testGroupByArrayParam() + { + $query = $this->fluent + ->from('user') + ->select(null) + ->select('count(*) AS total_count') + ->groupBy(['id', 'name']); + + self::assertEquals('SELECT count(*) AS total_count FROM user GROUP BY id,name', $query->getQuery(false)); + self::assertEquals(['total_count' => '1'], $query->fetch()); + } + + public function testCountable() + { + $articles = $this->fluent + ->from('article') + ->select(null) + ->select('title') + ->where('id > 1'); + + $count = count($articles); + + self::assertEquals(2, $count); + self::assertEquals(['0' => ['title' => 'article 2'], '1' => ['title' => 'article 3']], $articles->fetchAll()); + } + + public function testWhereNotArray() + { + $query = $this->fluent->from('article')->where('NOT id', [1, 2]); + + self::assertEquals('SELECT article.* FROM article WHERE NOT id IN (1, 2)', $query->getQuery(false)); + } + + public function testWhereColNameEscaped() + { + $query = $this->fluent->from('user') + ->where('`type` = :type', [':type' => 'author']) + ->where('`id` > :id AND `name` <> :name', [':id' => 1, ':name' => 'Marek']); + + $rowDisplay = ''; + foreach ($query as $row) { + $rowDisplay = $row['name']; + } + + self::assertEquals('SELECT user.* FROM user WHERE `type` = :type AND `id` > :id AND `name` <> :name', $query->getQuery(false)); + self::assertEquals([':type' => 'author', ':id' => '1', ':name' => 'Marek'], $query->getParameters()); + self::assertEquals('Robert', $rowDisplay); + } + + public function testAliasesForClausesGroupbyOrderBy() + { + $query = $this->fluent->from('article')->group('user_id')->order('id'); + + self::assertEquals('SELECT article.* FROM article GROUP BY user_id ORDER BY id', $query->getQuery(false)); + } + + public function testFetch() + { + $queryPrint = $this->fluent->from('user', 1)->fetch('name'); + $queryPrint2 = $this->fluent->from('user', 1)->fetch(); + $statement = $this->fluent->from('user', 3)->fetch(); + $statement2 = $this->fluent->from('user', 3)->fetch('name'); + + self::assertEquals('Marek', $queryPrint); + self::assertEquals(['id' => '1', 'country_id' => '1', 'type' => 'admin', 'name' => 'Marek'], $queryPrint2); + self::assertEquals(false, $statement); + self::assertEquals(false, $statement2); + } + + public function testFetchPairsFetchAll() + { + $result = $this->fluent->from('user')->fetchPairs('id', 'name'); + $result2 = $this->fluent->from('user')->fetchAll(); + + self::assertEquals(['1' => 'Marek', '2' => 'Robert'], $result); + self::assertEquals([ + '0' => ['id' => '1', 'country_id' => '1', 'type' => 'admin', 'name' => 'Marek'], + '1' => ['id' => '2', 'country_id' => '1', 'type' => 'author', 'name' => 'Robert'] + ], $result2); + } + + public function testFetchAllWithParams() + { + $result = $this->fluent->from('user')->fetchAll('id', 'type, name'); + + self::assertEquals(['1' => ['id' => '1', 'type' => 'admin', 'name' => 'Marek'], '2' => ['id' => '2', 'type' => 'author', 'name' => 'Robert']], + $result); + } + + public function testFetchColumn() + { + $printColumn = $this->fluent->from('user', 1)->fetchColumn(); + $printColumn2 = $this->fluent->from('user', 1)->fetchColumn(3); + $statement = $this->fluent->from('user', 3)->fetchColumn(); + $statement2 = $this->fluent->from('user', 3)->fetchColumn(3); + + self::assertEquals(1, $printColumn); + self::assertEquals('Marek', $printColumn2); + self::assertEquals(false, $statement); + self::assertEquals(false, $statement2); + } +} \ No newline at end of file diff --git a/tests/Queries/UpdateTest.php b/tests/Queries/UpdateTest.php new file mode 100644 index 0000000..f6b439e --- /dev/null +++ b/tests/Queries/UpdateTest.php @@ -0,0 +1,140 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testUpdate() + { + $query = $this->fluent->update('country')->set('name', 'aikavolS')->where('id', 1); + $query->execute(); + + $query2 = $this->fluent->from('country')->where('id', 1); + + self::assertEquals('UPDATE country SET name = ? WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => 'aikavolS', '1' => '1'], $query->getParameters()); + self::assertEquals(['id' => '1', 'name' => 'aikavolS'], $query2->fetch()); + + $this->fluent->update('country')->set('name', 'Slovakia')->where('id', 1)->execute(); + $query3 = $this->fluent->from('country')->where('id', 1); + + self::assertEquals(['id' => '1', 'name' => 'Slovakia'], $query3->fetch()); + } + + public function testUpdateLiteral() + { + $query = $this->fluent->update('article')->set('published_at', new Envms\FluentPDO\Literal('NOW()'))->where('user_id', 1); + + self::assertEquals('UPDATE article SET published_at = NOW() WHERE user_id = ?', $query->getQuery(false)); + self::assertEquals(['0' => '1'], $query->getParameters()); + } + + public function testUpdateFromArray() + { + $query = $this->fluent->update('user')->set(['name' => 'keraM', '`type`' => 'author'])->where('id', 1); + + self::assertEquals('UPDATE user SET name = ?, `type` = ? WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => 'keraM', '1' => 'author', '2' => '1'], $query->getParameters()); + } + + public function testUpdateLeftJoin() + { + $query = $this->fluent->update('user') + ->outerJoin('country ON country.id = user.country_id') + ->set(['name' => 'keraM', '`type`' => 'author']) + ->where('id', 1); + + self::assertEquals('UPDATE user OUTER JOIN country ON country.id = user.country_id SET name = ?, `type` = ? WHERE id = ?', + $query->getQuery(false)); + self::assertEquals(['0' => 'keraM', '1' => 'author', '2' => '1'], $query->getParameters()); + } + + public function testUpdateSmartJoin() + { + $query = $this->fluent->update('user') + ->set(['type' => 'author']) + ->where('country.id', 1); + + self::assertEquals('UPDATE user LEFT JOIN country ON country.id = user.country_id SET type = ? WHERE country.id = ?', + $query->getQuery(false)); + self::assertEquals(['0' => 'author', '1' => '1'], $query->getParameters()); + } + + public function testUpdateOrderLimit() + { + $query = $this->fluent->update('user') + ->set(['type' => 'author']) + ->where('id', 2) + ->orderBy('name') + ->limit(1); + + self::assertEquals('UPDATE user SET type = ? WHERE id = ? ORDER BY name LIMIT 1', $query->getQuery(false)); + self::assertEquals(['0' => 'author', '1' => '2'], $query->getParameters()); + } + + public function testUpdateShortCut() + { + $query = $this->fluent->update('user', ['type' => 'admin'], 1); + + self::assertEquals('UPDATE user SET type = ? WHERE id = ?', $query->getQuery(false)); + self::assertEquals(['0' => 'admin', '1' => '1'], $query->getParameters()); + } + + public function testUpdateZero() + { + $this->fluent->update('article')->set('content', '')->where('id', 1)->execute(); + $user = $this->fluent->from('article')->where('id', 1)->fetch(); + + $printQuery = 'ID: ' . $user['id'] . ' - content: ' . $user['content']; + + $this->fluent->update('article')->set('content', 'content 1')->where('id', 1)->execute(); + + $user2 = $this->fluent->from('article')->where('id', 1)->fetch(); + + $printQuery2 = 'ID: ' . $user2['id'] . ' - content: ' . $user2['content']; + + self::assertEquals('ID: 1 - content: ', $printQuery); + self::assertEquals('ID: 1 - content: content 1', $printQuery2); + } + + public function testUpdateWhere() + { + $query = $this->fluent->update('users') + ->set("`users`.`active`", 1) + ->where("`country`.`name`", 'Slovakia') + ->where("`users`.`name`", 'Marek'); + + $query2 = $this->fluent->update('users') + ->set("[users].[active]", 1) + ->where("[country].[name]", 'Slovakia') + ->where("[users].[name]", 'Marek'); + + self::assertEquals('UPDATE users LEFT JOIN country ON country.id = users.country_id SET `users`.`active` = ? WHERE `country`.`name` = ? AND `users`.`name` = ?', + $query->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'Slovakia', '2' => 'Marek'], $query->getParameters()); + self::assertEquals('UPDATE users LEFT JOIN country ON country.id = users.country_id SET [users].[active] = ? WHERE [country].[name] = ? AND [users].[name] = ?', + $query2->getQuery(false)); + self::assertEquals(['0' => '1', '1' => 'Slovakia', '2' => 'Marek'], $query2->getParameters()); + } +} \ No newline at end of file diff --git a/tests/StructureTest.php b/tests/StructureTest.php new file mode 100644 index 0000000..c02dbf2 --- /dev/null +++ b/tests/StructureTest.php @@ -0,0 +1,50 @@ +getPrimaryKey('user')); + self::assertEquals('user_id', $structure->getForeignKey('user')); + } + + public function testCustomKey() + { + $structure = new Structure('whatAnId', '%s_\xid'); + + self::assertEquals('whatAnId', $structure->getPrimaryKey('user')); + self::assertEquals('user_\xid', $structure->getForeignKey('user')); + } + + public function testMethodKey() + { + $structure = new Structure('id', ['StructureTest', 'suffix']); + + self::assertEquals('id', $structure->getPrimaryKey('user')); + self::assertEquals('user_id', $structure->getForeignKey('user')); + } + + /** + * @param $table + * + * @return string + */ + public static function suffix($table) + { + return $table . '_id'; + } + +} diff --git a/tests/UtilitiesTest.php b/tests/UtilitiesTest.php new file mode 100644 index 0000000..b5bd7d7 --- /dev/null +++ b/tests/UtilitiesTest.php @@ -0,0 +1,87 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_BOTH); + + $this->fluent = new Query($pdo); + } + + public function testFluentUtil() + { + + $value = Utilities::toUpperWords('one'); + $value2 = Utilities::toUpperWords(' one '); + $value3 = Utilities::toUpperWords('oneTwo'); + $value4 = Utilities::toUpperWords('OneTwo'); + $value5 = Utilities::toUpperWords('oneTwoThree'); + $value6 = Utilities::toUpperWords(' oneTwoThree '); + + self::assertEquals('ONE', $value); + self::assertEquals('ONE', $value2); + self::assertEquals('ONE TWO', $value3); + self::assertEquals('ONE TWO', $value4); + self::assertEquals('ONE TWO THREE', $value5); + self::assertEquals('ONE TWO THREE', $value6); + } + + public function testFormatQuery() + { + $query = $this->fluent + ->from('user') + ->where('id > ?', 0) + ->orderBy('name'); + + $formattedQuery = Utilities::formatQuery($query); + + self::assertEquals("SELECT user.*\nFROM user\nWHERE id > ?\nORDER BY name", $formattedQuery); + } + + public function testConvertToNativeType() + { + $query = $this->fluent + ->from('user') + ->select(null) + ->select(['id']) + ->where('name', 'Marek') + ->execute(); + + $returnRow = $query->fetch(); + $forceInt = Utilities::convertToNativeTypes($query, $returnRow); + + self::assertEquals(['id' => '1'], $returnRow); + self::assertEquals(['id' => 1], $forceInt); + } + + public function testisCountable() + { + $selectQuery = $this->fluent + ->from('user') + ->select(null) + ->select(['id']) + ->where('name', 'Marek'); + + $deleteQuery = $this->fluent + ->deleteFrom('user') + ->where('id', 1); + + self::assertEquals(true, Utilities::isCountable($selectQuery)); + self::assertEquals(false, Utilities::isCountable($deleteQuery)); + } +} \ No newline at end of file diff --git a/tests/fluentdb.sql b/tests/_resources/fluentdb.sql similarity index 83% rename from tests/fluentdb.sql rename to tests/_resources/fluentdb.sql index ac55a49..024e3e6 100644 --- a/tests/fluentdb.sql +++ b/tests/_resources/fluentdb.sql @@ -1,4 +1,4 @@ -CREATE DATABASE fluentdb; +CREATE DATABASE IF NOT EXISTS fluentdb; USE fluentdb; SET NAMES utf8; @@ -19,9 +19,9 @@ CREATE TABLE `article` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `article` (`id`, `user_id`, `published_at`, `title`, `content`) VALUES -(1, 1, '2011-12-10 12:10:00', 'article 1', 'content 1'), -(2, 2, '2011-12-20 16:20:00', 'article 2', 'content 2'), -(3, 1, '2012-01-04 22:00:00', 'article 3', 'content 3'); +(1, 1, '2011-12-10 12:10:00', 'article 1', 'content 1'), +(2, 2, '2011-12-20 16:20:00', 'article 2', 'content 2'), +(3, 1, '2012-01-04 22:00:00', 'article 3', 'content 3'); DROP TABLE IF EXISTS `comment`; CREATE TABLE `comment` ( @@ -37,9 +37,9 @@ CREATE TABLE `comment` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `comment` (`id`, `article_id`, `user_id`, `content`) VALUES -(1, 1, 2, 'comment 1.1'), -(2, 1, 1, 'comment 1.2'), -(3, 2, 1, 'comment 2.1'); +(1, 1, 1, 'comment 1.1'), +(2, 1, 2, 'comment 1.2'), +(3, 2, 1, 'comment 2.1'); DROP TABLE IF EXISTS `country`; CREATE TABLE `country` ( @@ -49,7 +49,7 @@ CREATE TABLE `country` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `country` (`id`, `name`) VALUES -(1, 'Slovakia'); +(1, 'Slovakia'); DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( @@ -63,7 +63,7 @@ CREATE TABLE `user` ( ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `user` (`id`, `country_id`, `type`, `name`) VALUES -(1, 1, 'admin', 'Marek'), -(2, 1, 'author', 'Robert'); +(1, 1, 'admin', 'Marek'), +(2, 1, 'author', 'Robert'); --- 2012-01-04 22:00:18 \ No newline at end of file +-- 2018-08-24 14:38:17 diff --git a/tests/_resources/init.php b/tests/_resources/init.php new file mode 100644 index 0000000..ab94d3e --- /dev/null +++ b/tests/_resources/init.php @@ -0,0 +1,12 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); +$pdo->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); diff --git a/tests/connect.inc.php b/tests/connect.inc.php deleted file mode 100644 index 42bd3e2..0000000 --- a/tests/connect.inc.php +++ /dev/null @@ -1,23 +0,0 @@ -setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); -$pdo->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); -$fluent = new Query($pdo); -//$fluent->debug = true; diff --git a/tests/run-tests.php b/tests/run-tests.php deleted file mode 100644 index ab733e2..0000000 --- a/tests/run-tests.php +++ /dev/null @@ -1,28 +0,0 @@ -