diff --git a/README.md b/README.md index 009acbb..34fb409 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ https://dev.mysql.com/doc/refman/8.0/en/insert-optimization.html ## Installation -**Requires Laravel version > 8** +**Requires Laravel 6 or above** ```bash composer require ellgreen/laravel-loadfile diff --git a/composer.json b/composer.json index ca36f96..b48adc9 100644 --- a/composer.json +++ b/composer.json @@ -22,11 +22,11 @@ }, "require": { "php": "^7.4", - "illuminate/database": "^8.28" + "illuminate/database": "^6.0|^7.0|^8.0" }, "require-dev": { "phpunit/phpunit": "^9", - "orchestra/testbench": "^6.17", + "orchestra/testbench": "^4.0|^5.0|^6.0", "squizlabs/php_codesniffer": "^3.6", "vimeo/psalm": "^4.7" }, @@ -35,15 +35,16 @@ "test-unit-coverage": "php ./vendor/bin/phpunit tests/Unit --coverage-html .coverage/unit", "check": [ "@docker-up", - "@docker-test", + "@docker-laravel-test", "@docker-cs", "@docker-static-analysis" ], "docker-up": "docker compose up -d database", "docker-test": "docker compose run --rm app php ./vendor/bin/phpunit", + "docker-laravel-test": "docker compose run --rm app php tests/laravel/laravel-version-test.php", "docker-test-coverage": "docker compose run --rm app php ./vendor/bin/phpunit --coverage-html .coverage/all", - "docker-static-analysis": "docker compose run --rm app php ./vendor/bin/psalm", - "docker-cs": "docker compose run --rm app php ./vendor/bin/phpcs --standard=PSR12 src/" + "docker-cs": "docker compose run --rm app php ./vendor/bin/phpcs --standard=PSR12 src/", + "docker-static-analysis": "docker compose run --rm app php ./vendor/bin/psalm" }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index 8a3ec20..fb36071 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8e0a488916b48d7a37fe1653390feaee", + "content-hash": "e2bc5906f2fa7ac3c71928d67a8b2132", "packages": [ { "name": "brick/math", diff --git a/docker-compose.yml b/docker-compose.yml index 2726b7a..5254e5d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,7 @@ services: build: ./tests/docker volumes: - .:/app + - $HOME/.composer/cache:/root/.composer/cache working_dir: /app database: diff --git a/src/Grammar.php b/src/Grammar.php index e31fce0..eead572 100644 --- a/src/Grammar.php +++ b/src/Grammar.php @@ -23,10 +23,10 @@ public function compileLoadFile(Builder $query): CompiledQuery throw CompilationException::noFileOrTableSupplied(); } - $querySegments->push( + $querySegments->push([ 'load data' . ($query->isLocal() ? ' local' : ''), 'infile ' . $this->quoteString($file), - ); + ]); if ($query->isReplace()) { $querySegments->push('replace'); @@ -65,10 +65,13 @@ public function compileLoadFile(Builder $query): CompiledQuery $querySegments->push($this->compileSetColumns($set)); /** @psalm-suppress MissingClosureParamType|InvalidArgument */ $values = collect($set)->filter(fn($value) => ! $this->isExpression($value))->values(); - $bindings->push(...$values->toArray()); + $bindings->push($values->toArray()); } - return new CompiledQuery($querySegments->filter()->implode(' '), $bindings->toArray()); + return new CompiledQuery( + $querySegments->flatten()->filter()->implode(' '), + $bindings->flatten()->toArray() + ); } private function compileFields( diff --git a/tests/docker/Dockerfile b/tests/docker/Dockerfile index 5509c50..07df06f 100644 --- a/tests/docker/Dockerfile +++ b/tests/docker/Dockerfile @@ -1,5 +1,10 @@ FROM php:7.4-cli +RUN apt-get update && apt-get install -y rsync git zip unzip + RUN docker-php-ext-install pdo pdo_mysql && \ pecl install pcov && \ docker-php-ext-enable pdo_mysql pcov + +RUN curl -s https://getcomposer.org/installer | \ + php -- --install-dir=/usr/local/bin --filename=composer diff --git a/tests/laravel/laravel-version-test.php b/tests/laravel/laravel-version-test.php new file mode 100644 index 0000000..ad8c81e --- /dev/null +++ b/tests/laravel/laravel-version-test.php @@ -0,0 +1,35 @@ +.0'); +}, explode('|', $composerConfig['require']['illuminate/database'])); + +foreach ($laravelVersions as $laravelVersion) { + echo "Testing for Laravel {$laravelVersion}\n"; + + passthru( + 'rsync --delete -a --exclude=vendor/ --exclude=.*/ /app ' . + dirname(TEST_PATH) + ); + + chdir(TEST_PATH); + + $composerConfig['require']['illuminate/database'] = "^{$laravelVersion}.0"; + $testBench = intval($laravelVersion) - 2; + $composerConfig['require-dev']['orchestra/testbench'] = "^{$testBench}.0"; + + file_put_contents(TEST_PATH . 'composer.json', json_encode($composerConfig, JSON_PRETTY_PRINT)); + + exec('composer update -q'); + passthru('php ./vendor/bin/phpunit --colors=always', $resultCode); + + if ($resultCode !== 0) { + echo "\n\nTests failed for Laravel {$laravelVersion}\n"; + exit(1); + } +} diff --git a/tests/migrations/2021_04_01_000000_create_people_table.php b/tests/migrations/2021_04_01_000000_create_people_table.php index de100a8..a68d049 100644 --- a/tests/migrations/2021_04_01_000000_create_people_table.php +++ b/tests/migrations/2021_04_01_000000_create_people_table.php @@ -5,12 +5,14 @@ use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; -return new class extends Migration +class CreatePeopleTable extends Migration { public function up(): void { + Schema::dropIfExists('people'); + Schema::create('people', function (Blueprint $table) { - $table->id(); + $table->increments('id'); $table->string('name'); $table->date('dob'); $table->string('greeting'); @@ -22,4 +24,4 @@ public function down(): void { Schema::drop('people'); } -}; +}