Skip to content

Commit dac37a9

Browse files
authored
Pass parameter types when executing query (#5)
* Update dependencies * Update tools dependencies * Pass parameter types when executing a query * Pass types only for booleans parameters to Dbal execute query
1 parent ebe3165 commit dac37a9

File tree

7 files changed

+412
-296
lines changed

7 files changed

+412
-296
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"keywords": ["doctrine", "dbal", "bulk", "insert", "upsert"],
77
"require": {
88
"php": "^7.4 | ^8.0",
9-
"doctrine/dbal": "^2.12 | 3.0"
9+
"doctrine/dbal": "^2.12 | ^3.0"
1010
},
1111
"autoload": {
1212
"psr-4": {

composer.lock

Lines changed: 78 additions & 39 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Flow/Doctrine/Bulk/BulkData.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public function __construct(array $rows)
4545
}
4646

4747
$this->columns = new Columns(...$keys);
48-
$this->rows = \array_map( /** @phpstan-ignore-line */
48+
$this->rows = \array_map(
4949
fn (int $index, array $row) => \array_combine(
5050
$this->columns->suffix("_{$index}")->all(),
5151
$row,

src/Flow/Doctrine/Bulk/BulkInsert.php

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,37 @@ public static function create(Connection $connection) : self
2626

2727
public function insert(string $table, BulkData $bulkData) : void
2828
{
29-
$this->connection->prepare(
29+
$this->connection->executeQuery(
3030
$this->queryFactory->insert($this->connection->getDatabasePlatform(), $table, $bulkData),
31-
)->execute(
32-
$bulkData->toSqlParameters()
31+
$bulkData->toSqlParameters(),
32+
\array_map(
33+
fn ($value) : string => \gettype($value),
34+
\array_filter($bulkData->toSqlParameters(), fn ($value) : bool => \is_bool($value))
35+
)
3336
);
3437
}
3538

3639
public function insertOrSkipOnConflict(string $table, BulkData $bulkData) : void
3740
{
38-
$this->connection->prepare(
41+
$this->connection->executeQuery(
3942
$this->queryFactory->insertOrSkipOnConflict($this->connection->getDatabasePlatform(), $table, $bulkData),
40-
)->execute(
41-
$bulkData->toSqlParameters()
43+
$bulkData->toSqlParameters(),
44+
\array_map(
45+
fn ($value) : string => \gettype($value),
46+
\array_filter($bulkData->toSqlParameters(), fn ($value) : bool => \is_bool($value))
47+
)
4248
);
4349
}
4450

4551
public function insertOrUpdateOnConstraintConflict(string $table, string $constraint, BulkData $bulkData) : void
4652
{
47-
$this->connection->prepare(
53+
$this->connection->executeQuery(
4854
$this->queryFactory->insertOrUpdateOnConstraintConflict($this->connection->getDatabasePlatform(), $table, $constraint, $bulkData),
49-
)->execute(
50-
$bulkData->toSqlParameters()
55+
$bulkData->toSqlParameters(),
56+
\array_map(
57+
fn ($value) : string => \gettype($value),
58+
\array_filter($bulkData->toSqlParameters(), fn ($value) : bool => \is_bool($value))
59+
)
5160
);
5261
}
5362
}

tests/Flow/Doctrine/Bulk/Tests/Context/DatabaseContext.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function connection() : Connection
3333

3434
public function createTestTable(string $tableName) : void
3535
{
36-
$this->connection->executeQuery("CREATE TABLE {$tableName} (id INT NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, PRIMARY KEY(id))");
36+
$this->connection->executeQuery("CREATE TABLE {$tableName} (id INT NOT NULL, name VARCHAR(255) NOT NULL, description VARCHAR(255) NOT NULL, active BOOLEAN NOT NULL, PRIMARY KEY(id))");
3737

3838
$this->createdTables[] = $tableName;
3939
}

tests/Flow/Doctrine/Bulk/Tests/Integration/PostgreSqlBulkInsertTest.php

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public function test_inserts_multiple_rows_at_once() : void
1818
$bulkInsert->insert(
1919
$table,
2020
new BulkData([
21-
['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
22-
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
23-
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
21+
['id' => 1, 'name' => 'Name One', 'description' => 'Description One', 'active' => false],
22+
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two', 'active' => true],
23+
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three', 'active' => false],
2424
])
2525
);
2626

@@ -35,29 +35,29 @@ public function test_inserts_new_rows_and_skip_already_existed() : void
3535
$bulkInsert->insert(
3636
$table,
3737
new BulkData([
38-
['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
39-
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
40-
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
38+
['id' => 1, 'name' => 'Name One', 'description' => 'Description One', 'active' => true],
39+
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two', 'active' => true],
40+
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three', 'active' => true],
4141
])
4242
);
4343

4444
$bulkInsert->insertOrSkipOnConflict(
4545
$table,
4646
new BulkData([
47-
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two'],
48-
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three'],
49-
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three'],
47+
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two', 'active' => false],
48+
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three', 'active' => false],
49+
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Four', 'active' => false],
5050
])
5151
);
5252

5353
$this->assertEquals(4, $this->pgsqlDatabaseContext->tableCount($table));
5454
$this->assertEquals(2, $this->pgsqlDatabaseContext->numberOfExecutedInsertQueries());
5555
$this->assertEquals(
5656
[
57-
['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
58-
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
59-
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
60-
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three'],
57+
['id' => 1, 'name' => 'Name One', 'description' => 'Description One', 'active' => true],
58+
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two', 'active' => true],
59+
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three', 'active' => true],
60+
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Four', 'active' => false],
6161
],
6262
$this->pgsqlDatabaseContext->selectAll($table)
6363
);
@@ -70,30 +70,30 @@ public function test_inserts_new_rows_or_updates_already_existed_based_on_primar
7070
$bulkInsert->insert(
7171
$table,
7272
new BulkData([
73-
['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
74-
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two'],
75-
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three'],
73+
['id' => 1, 'name' => 'Name One', 'description' => 'Description One', 'active' => true],
74+
['id' => 2, 'name' => 'Name Two', 'description' => 'Description Two', 'active' => false],
75+
['id' => 3, 'name' => 'Name Three', 'description' => 'Description Three', 'active' => true],
7676
])
7777
);
7878

7979
$bulkInsert->insertOrUpdateOnConstraintConflict(
8080
$table,
8181
'flow_doctrine_bulk_test_pkey',
8282
new BulkData([
83-
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two'],
84-
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three'],
85-
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three'],
83+
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two', 'active' => true],
84+
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three', 'active' => false],
85+
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three', 'active' => true],
8686
])
8787
);
8888

8989
$this->assertEquals(4, $this->pgsqlDatabaseContext->tableCount($table));
9090
$this->assertEquals(2, $this->pgsqlDatabaseContext->numberOfExecutedInsertQueries());
9191
$this->assertEquals(
9292
[
93-
['id' => 1, 'name' => 'Name One', 'description' => 'Description One'],
94-
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two'],
95-
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three'],
96-
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three'],
93+
['id' => 1, 'name' => 'Name One', 'description' => 'Description One', 'active' => true],
94+
['id' => 2, 'name' => 'New Name Two', 'description' => 'New Description Two', 'active' => true],
95+
['id' => 3, 'name' => 'New Name Three', 'description' => 'New Description Three', 'active' => false],
96+
['id' => 4, 'name' => 'New Name Four', 'description' => 'New Description Three', 'active' => true],
9797
],
9898
$this->pgsqlDatabaseContext->selectAll($table)
9999
);

0 commit comments

Comments
 (0)