From 457164b233c9168df44ccf298a777121e1891861 Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 23 Feb 2025 13:55:17 +0100 Subject: [PATCH] Fixed broken upsert example --- .../data_writing/database_upsert/code.php | 8 +++--- .../database_upsert/composer.lock | 24 +++++++++--------- .../database_upsert/flow_php_example.zip | Bin 11223 -> 11631 bytes 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/examples/topics/data_writing/database_upsert/code.php b/examples/topics/data_writing/database_upsert/code.php index 392a87ccb..64a33c2f0 100644 --- a/examples/topics/data_writing/database_upsert/code.php +++ b/examples/topics/data_writing/database_upsert/code.php @@ -2,7 +2,9 @@ declare(strict_types=1); -use function Flow\ETL\Adapter\Doctrine\{from_dbal_query, postgresql_insert_options, to_dbal_table_insert}; +use function Flow\ETL\Adapter\Doctrine\{from_dbal_query, + sqlite_insert_options, + to_dbal_table_insert}; use function Flow\ETL\DSL\{data_frame, from_array, to_stream}; use Doctrine\DBAL\DriverManager; use Doctrine\DBAL\Schema\{Column, Table, UniqueConstraint}; @@ -61,7 +63,7 @@ 'driver' => 'pdo_sqlite', ]), 'orders', - postgresql_insert_options(conflict_columns: ['order_id']) + sqlite_insert_options(conflict_columns: ['order_id']) ) ) // second insert that normally would fail due to Integrity constraint violation @@ -72,7 +74,7 @@ 'driver' => 'pdo_sqlite', ]), 'orders', - postgresql_insert_options(conflict_columns: ['order_id']) + sqlite_insert_options(conflict_columns: ['order_id']) ) ) ->run(); diff --git a/examples/topics/data_writing/database_upsert/composer.lock b/examples/topics/data_writing/database_upsert/composer.lock index 9dfb378ed..a62c33b25 100644 --- a/examples/topics/data_writing/database_upsert/composer.lock +++ b/examples/topics/data_writing/database_upsert/composer.lock @@ -274,12 +274,12 @@ "source": { "type": "git", "url": "https://github.com/flow-php/doctrine-dbal-bulk.git", - "reference": "13fc13826199f5f076a8f2cca72db68368068558" + "reference": "3d8ef3d307a6c0e67b8d15b10c82307ab32704be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/flow-php/doctrine-dbal-bulk/zipball/13fc13826199f5f076a8f2cca72db68368068558", - "reference": "13fc13826199f5f076a8f2cca72db68368068558", + "url": "https://api.github.com/repos/flow-php/doctrine-dbal-bulk/zipball/3d8ef3d307a6c0e67b8d15b10c82307ab32704be", + "reference": "3d8ef3d307a6c0e67b8d15b10c82307ab32704be", "shasum": "" }, "require": { @@ -321,7 +321,7 @@ "type": "github" } ], - "time": "2025-01-30T16:34:14+00:00" + "time": "2025-02-21T22:33:43+00:00" }, { "name": "flow-php/etl", @@ -329,12 +329,12 @@ "source": { "type": "git", "url": "https://github.com/flow-php/etl.git", - "reference": "2aa95163d5f8a8c087f3812f47c5a2f3e1c35e78" + "reference": "646cec39f23cf2b3162ee470918368166755ee92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/flow-php/etl/zipball/2aa95163d5f8a8c087f3812f47c5a2f3e1c35e78", - "reference": "2aa95163d5f8a8c087f3812f47c5a2f3e1c35e78", + "url": "https://api.github.com/repos/flow-php/etl/zipball/646cec39f23cf2b3162ee470918368166755ee92", + "reference": "646cec39f23cf2b3162ee470918368166755ee92", "shasum": "" }, "require": { @@ -390,7 +390,7 @@ "type": "github" } ], - "time": "2025-02-01T16:34:51+00:00" + "time": "2025-02-20T08:29:50+00:00" }, { "name": "flow-php/etl-adapter-doctrine", @@ -398,12 +398,12 @@ "source": { "type": "git", "url": "https://github.com/flow-php/etl-adapter-doctrine.git", - "reference": "ceb1509e6875a9236139ec25ea3b1564b3af4c52" + "reference": "7f07741821799d29a40b720fdfbf9445bca53989" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/flow-php/etl-adapter-doctrine/zipball/ceb1509e6875a9236139ec25ea3b1564b3af4c52", - "reference": "ceb1509e6875a9236139ec25ea3b1564b3af4c52", + "url": "https://api.github.com/repos/flow-php/etl-adapter-doctrine/zipball/7f07741821799d29a40b720fdfbf9445bca53989", + "reference": "7f07741821799d29a40b720fdfbf9445bca53989", "shasum": "" }, "require": { @@ -452,7 +452,7 @@ "type": "github" } ], - "time": "2025-02-01T14:30:53+00:00" + "time": "2025-02-21T22:33:27+00:00" }, { "name": "flow-php/filesystem", diff --git a/examples/topics/data_writing/database_upsert/flow_php_example.zip b/examples/topics/data_writing/database_upsert/flow_php_example.zip index 9549e8924f585c2fe84363c775f511ba261451c2..1c7b167e3225bc40e3642d517e79ea3f742c8cbd 100644 GIT binary patch delta 10353 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 delta 9923 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