Skip to content

Commit 29584b1

Browse files
authored
Merge pull request php-enqueue#1169 from memfork/support-dbalv3
Support dbal v3
2 parents 2e5c41c + 628642c commit 29584b1

File tree

7 files changed

+75
-44
lines changed

7 files changed

+75
-44
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"queue-interop/queue-interop": "^0.8.1",
2727
"bunny/bunny": "^0.4|^0.5",
2828
"php-amqplib/php-amqplib": "^2.12.1",
29-
"doctrine/dbal": "^2.12",
29+
"doctrine/dbal": "^2.12|^3.1",
3030
"ramsey/uuid": "^3.5|^4",
3131
"psr/log": "^1.1",
3232
"psr/container": "^1",

pkg/dbal/DbalConsumerHelperTrait.php

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Doctrine\DBAL\Connection;
88
use Doctrine\DBAL\Exception\RetryableException;
9-
use Doctrine\DBAL\Types\Type;
109
use Ramsey\Uuid\Uuid;
1110

1211
trait DbalConsumerHelperTrait
@@ -39,7 +38,7 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
3938
->addOrderBy('priority', 'asc')
4039
->addOrderBy('published_at', 'asc')
4140
->setParameter('queues', $queues, Connection::PARAM_STR_ARRAY)
42-
->setParameter('delayedUntil', $now, Type::INTEGER)
41+
->setParameter('delayedUntil', $now, DbalType::INTEGER)
4342
->setMaxResults(1);
4443

4544
$update = $this->getConnection()->createQueryBuilder()
@@ -48,8 +47,8 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
4847
->set('redeliver_after', ':redeliverAfter')
4948
->andWhere('id = :messageId')
5049
->andWhere('delivery_id IS NULL')
51-
->setParameter('deliveryId', $deliveryId, Type::GUID)
52-
->setParameter('redeliverAfter', $now + $redeliveryDelay, Type::BIGINT)
50+
->setParameter('deliveryId', $deliveryId, DbalType::GUID)
51+
->setParameter('redeliverAfter', $now + $redeliveryDelay, DbalType::BIGINT)
5352
;
5453

5554
while (microtime(true) < $endAt) {
@@ -60,14 +59,14 @@ protected function fetchMessage(array $queues, int $redeliveryDelay): ?DbalMessa
6059
}
6160

6261
$update
63-
->setParameter('messageId', $result['id'], Type::GUID);
62+
->setParameter('messageId', $result['id'], DbalType::GUID);
6463

6564
if ($update->execute()) {
6665
$deliveredMessage = $this->getConnection()->createQueryBuilder()
6766
->select('*')
6867
->from($this->getContext()->getTableName())
6968
->andWhere('delivery_id = :deliveryId')
70-
->setParameter('deliveryId', $deliveryId, Type::GUID)
69+
->setParameter('deliveryId', $deliveryId, DbalType::GUID)
7170
->setMaxResults(1)
7271
->execute()
7372
->fetch();
@@ -103,9 +102,9 @@ protected function redeliverMessages(): void
103102
->set('redelivered', ':redelivered')
104103
->andWhere('redeliver_after < :now')
105104
->andWhere('delivery_id IS NOT NULL')
106-
->setParameter(':now', time(), Type::BIGINT)
107-
->setParameter('deliveryId', null, Type::GUID)
108-
->setParameter('redelivered', true, Type::BOOLEAN)
105+
->setParameter(':now', time(), DbalType::BIGINT)
106+
->setParameter('deliveryId', null, DbalType::GUID)
107+
->setParameter('redelivered', true, DbalType::BOOLEAN)
109108
;
110109

111110
try {
@@ -131,8 +130,8 @@ protected function removeExpiredMessages(): void
131130
->andWhere('delivery_id IS NULL')
132131
->andWhere('redelivered = :redelivered')
133132

134-
->setParameter(':now', time(), Type::BIGINT)
135-
->setParameter('redelivered', false, Type::BOOLEAN)
133+
->setParameter(':now', time(), DbalType::BIGINT)
134+
->setParameter('redelivered', false, DbalType::BOOLEAN)
136135
;
137136

138137
try {
@@ -153,7 +152,7 @@ private function deleteMessage(string $deliveryId): void
153152
$this->getConnection()->delete(
154153
$this->getContext()->getTableName(),
155154
['delivery_id' => $deliveryId],
156-
['delivery_id' => Type::GUID]
155+
['delivery_id' => DbalType::GUID]
157156
);
158157
}
159158
}

pkg/dbal/DbalContext.php

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
use Doctrine\DBAL\Connection;
88
use Doctrine\DBAL\Schema\Table;
9-
use Doctrine\DBAL\Types\Type;
109
use Interop\Queue\Consumer;
1110
use Interop\Queue\Context;
1211
use Interop\Queue\Destination;
@@ -183,7 +182,7 @@ public function purgeQueue(Queue $queue): void
183182
$this->getDbalConnection()->delete(
184183
$this->getTableName(),
185184
['queue' => $queue->getQueueName()],
186-
['queue' => Type::STRING]
185+
['queue' => DbalType::STRING]
187186
);
188187
}
189188

@@ -221,18 +220,18 @@ public function createDataBaseTable(): void
221220

222221
$table = new Table($this->getTableName());
223222

224-
$table->addColumn('id', Type::GUID, ['length' => 16, 'fixed' => true]);
225-
$table->addColumn('published_at', Type::BIGINT);
226-
$table->addColumn('body', Type::TEXT, ['notnull' => false]);
227-
$table->addColumn('headers', Type::TEXT, ['notnull' => false]);
228-
$table->addColumn('properties', Type::TEXT, ['notnull' => false]);
229-
$table->addColumn('redelivered', Type::BOOLEAN, ['notnull' => false]);
230-
$table->addColumn('queue', Type::STRING);
231-
$table->addColumn('priority', Type::SMALLINT, ['notnull' => false]);
232-
$table->addColumn('delayed_until', Type::BIGINT, ['notnull' => false]);
233-
$table->addColumn('time_to_live', Type::BIGINT, ['notnull' => false]);
234-
$table->addColumn('delivery_id', Type::GUID, ['length' => 16, 'fixed' => true, 'notnull' => false]);
235-
$table->addColumn('redeliver_after', Type::BIGINT, ['notnull' => false]);
223+
$table->addColumn('id', DbalType::GUID, ['length' => 16, 'fixed' => true]);
224+
$table->addColumn('published_at', DbalType::BIGINT);
225+
$table->addColumn('body', DbalType::TEXT, ['notnull' => false]);
226+
$table->addColumn('headers', DbalType::TEXT, ['notnull' => false]);
227+
$table->addColumn('properties', DbalType::TEXT, ['notnull' => false]);
228+
$table->addColumn('redelivered', DbalType::BOOLEAN, ['notnull' => false]);
229+
$table->addColumn('queue', DbalType::STRING);
230+
$table->addColumn('priority', DbalType::SMALLINT, ['notnull' => false]);
231+
$table->addColumn('delayed_until', DbalType::BIGINT, ['notnull' => false]);
232+
$table->addColumn('time_to_live', DbalType::BIGINT, ['notnull' => false]);
233+
$table->addColumn('delivery_id', DbalType::GUID, ['length' => 16, 'fixed' => true, 'notnull' => false]);
234+
$table->addColumn('redeliver_after', DbalType::BIGINT, ['notnull' => false]);
236235

237236
$table->setPrimaryKey(['id']);
238237
$table->addIndex(['priority', 'published_at', 'queue', 'delivery_id', 'delayed_until', 'id']);

pkg/dbal/DbalProducer.php

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace Enqueue\Dbal;
66

7-
use Doctrine\DBAL\Types\Type;
87
use Interop\Queue\Destination;
98
use Interop\Queue\Exception\Exception;
109
use Interop\Queue\Exception\InvalidDestinationException;
@@ -107,18 +106,18 @@ public function send(Destination $destination, Message $message): void
107106

108107
try {
109108
$rowsAffected = $this->context->getDbalConnection()->insert($this->context->getTableName(), $dbalMessage, [
110-
'id' => Type::GUID,
111-
'published_at' => Type::INTEGER,
112-
'body' => Type::TEXT,
113-
'headers' => Type::TEXT,
114-
'properties' => Type::TEXT,
115-
'priority' => Type::SMALLINT,
116-
'queue' => Type::STRING,
117-
'time_to_live' => Type::INTEGER,
118-
'delayed_until' => Type::INTEGER,
119-
'redelivered' => Type::SMALLINT,
120-
'delivery_id' => Type::STRING,
121-
'redeliver_after' => Type::BIGINT,
109+
'id' => DbalType::GUID,
110+
'published_at' => DbalType::INTEGER,
111+
'body' => DbalType::TEXT,
112+
'headers' => DbalType::TEXT,
113+
'properties' => DbalType::TEXT,
114+
'priority' => DbalType::SMALLINT,
115+
'queue' => DbalType::STRING,
116+
'time_to_live' => DbalType::INTEGER,
117+
'delayed_until' => DbalType::INTEGER,
118+
'redelivered' => DbalType::SMALLINT,
119+
'delivery_id' => DbalType::STRING,
120+
'redeliver_after' => DbalType::BIGINT,
122121
]);
123122

124123
if (1 !== $rowsAffected) {

pkg/dbal/DbalType.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Enqueue\Dbal;
6+
7+
class DbalType
8+
{
9+
public const ARRAY = 'array';
10+
public const ASCII_STRING = 'ascii_string';
11+
public const BIGINT = 'bigint';
12+
public const BINARY = 'binary';
13+
public const BLOB = 'blob';
14+
public const BOOLEAN = 'boolean';
15+
public const DATE_MUTABLE = 'date';
16+
public const DATE_IMMUTABLE = 'date_immutable';
17+
public const DATEINTERVAL = 'dateinterval';
18+
public const DATETIME_MUTABLE = 'datetime';
19+
public const DATETIME_IMMUTABLE = 'datetime_immutable';
20+
public const DATETIMETZ_MUTABLE = 'datetimetz';
21+
public const DATETIMETZ_IMMUTABLE = 'datetimetz_immutable';
22+
public const DECIMAL = 'decimal';
23+
public const FLOAT = 'float';
24+
public const GUID = 'guid';
25+
public const INTEGER = 'integer';
26+
public const JSON = 'json';
27+
public const OBJECT = 'object';
28+
public const SIMPLE_ARRAY = 'simple_array';
29+
public const SMALLINT = 'smallint';
30+
public const STRING = 'string';
31+
public const TEXT = 'text';
32+
public const TIME_MUTABLE = 'time';
33+
public const TIME_IMMUTABLE = 'time_immutable';
34+
}

pkg/dbal/Tests/DbalConsumerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55
namespace Enqueue\Dbal\Tests;
66

77
use Doctrine\DBAL\Connection;
8-
use Doctrine\DBAL\Types\Type;
98
use Enqueue\Dbal\DbalConsumer;
109
use Enqueue\Dbal\DbalContext;
1110
use Enqueue\Dbal\DbalDestination;
1211
use Enqueue\Dbal\DbalMessage;
1312
use Enqueue\Dbal\DbalProducer;
13+
use Enqueue\Dbal\DbalType;
1414
use Enqueue\Test\ClassExtensionTrait;
1515
use Interop\Queue\Consumer;
1616
use Interop\Queue\Exception\InvalidMessageException;
@@ -72,7 +72,7 @@ public function testShouldDeleteMessageOnAcknowledge()
7272
->with(
7373
'some-table-name',
7474
['delivery_id' => $deliveryId->toString()],
75-
['delivery_id' => Type::GUID]
75+
['delivery_id' => DbalType::GUID]
7676
)
7777
;
7878

@@ -143,7 +143,7 @@ public function testShouldDeleteMessageFromQueueOnReject()
143143
->with(
144144
'some-table-name',
145145
['delivery_id' => $deliveryId->toString()],
146-
['delivery_id' => Type::GUID]
146+
['delivery_id' => DbalType::GUID]
147147
)
148148
;
149149

pkg/dbal/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"require": {
99
"php": "^7.3|^8.0",
1010
"queue-interop/queue-interop": "^0.8",
11-
"doctrine/dbal": "^2.12",
11+
"doctrine/dbal": "^2.12|^3.1",
1212
"doctrine/persistence": "^1.3.3|^2.0",
1313
"ramsey/uuid": "^3.5|^4"
1414
},

0 commit comments

Comments
 (0)