Standard   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 6
eloc 28
c 1
b 0
f 0
dl 0
loc 70
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 8 2
A getQueue() 0 41 4
1
<?php
2
3
/**
4
 * @license LGPLv3, https://opensource.org/licenses/LGPL-3.0
5
 * @copyright Aimeos (aimeos.org), 2016-2025
6
 * @package Base
7
 * @subpackage MQueue
8
 */
9
10
11
namespace Aimeos\Base\MQueue;
12
13
14
/**
15
 * Default message queue implementation
16
 *
17
 * @package Base
18
 * @subpackage MQueue
19
 */
20
class Standard extends Base implements Iface
21
{
22
	private \Aimeos\Base\DB\Connection\Iface $conn;
23
	private array $queues = [];
24
25
26
	/**
27
	 * Initializes the message queue object
28
	 *
29
	 * @param array $config Associative list of configuration key/value pairs
30
	 */
31
	public function __construct( array $config )
32
	{
33
		parent::__construct( $config );
34
35
		try {
36
			$this->conn = new \Aimeos\Base\DB\Connection\PDO( $config['db'] ?? [] );
37
		} catch( \Aimeos\Base\DB\Exception $e ) {
38
			throw new \Aimeos\Base\MQueue\Exception( $e->getMessage(), -1, $e );
39
		}
40
	}
41
42
43
	/**
44
	 * Returns the queue for the given name
45
	 *
46
	 * @param string $name Queue name
47
	 * @return \Aimeos\Base\MQueue\Queue\Iface Message queue
48
	 */
49
	public function getQueue( string $name ) : \Aimeos\Base\MQueue\Queue\Iface
50
	{
51
		if( !isset( $this->queues[$name] ) )
52
		{
53
			$adapter = $this->config( 'db/adapter' );
54
55
			$sql = array(
56
				'insert' => $this->config( 'sql/insert', '
57
					INSERT INTO madmin_queue (queue, cname, rtime, message) VALUES (?, ?, ?, ?)
58
				' ),
59
				'reserve' => $this->config( 'sql/reserve', $adapter !== 'mysql' ? '
60
					UPDATE madmin_queue SET cname = ?, rtime = ? WHERE id IN (
61
						SELECT id FROM (
62
							SELECT id FROM madmin_queue WHERE queue = ? AND rtime < ?
63
							ORDER BY id OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
64
						) AS t
65
					)
66
				' : '
67
					UPDATE madmin_queue SET cname = ?, rtime = ? WHERE id IN (
68
						SELECT id FROM (
69
							SELECT id FROM madmin_queue WHERE queue = ? AND rtime < ? ORDER BY id LIMIT 1
70
						) AS t
71
					)
72
				' ),
73
				'get' => $this->config( 'sql/get', $adapter !== 'mysql' ? '
74
					SELECT * FROM madmin_queue WHERE queue = ? AND cname = ? AND rtime = ?
75
					ORDER BY id OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY
76
				' : '
77
					SELECT * FROM madmin_queue WHERE queue = ? AND cname = ? AND rtime = ? ORDER BY id LIMIT 1
78
				' ),
79
				'delete' => $this->config( 'sql/delete', '
80
					DELETE FROM madmin_queue WHERE id = ? AND queue = ?
81
				' ),
82
			);
83
84
			$rtime = $this->config( 'releasetime', 60 );
85
86
			$this->queues[$name] = new \Aimeos\Base\MQueue\Queue\Standard( $this->conn, $name, $sql, $rtime );
87
		}
88
89
		return $this->queues[$name];
90
	}
91
}
92