AbstractSequence::unlockStorage()
last analyzed

Size

Total Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
nc 1
dl 0
loc 1
c 0
b 0
f 0
1
<?php
2
namespace Fwlib\Db;
3
4
5
/**
6
 * Sequences of number management
7
 *
8
 * Design for profile unique code generate. Use prefix to identify different
9
 * profile, or profile in different category.
10
 *
11
 * Should use db transaction for concurrence, or similar mechanism for non-db
12
 * storage. Even though this class may not suitable for high concurrence
13
 * system, which should use native db sequence/identity or better others.
14
 *
15
 * @copyright   Copyright 2014-2015 Fwolf
16
 * @license     http://www.gnu.org/licenses/lgpl.html LGPL-3.0+
17
 */
18
abstract class AbstractSequence
19
{
20
    /**
21
     * Get a number and prepare next
22
     *
23
     * @param   string  $prefix
24
     * @param   integer $step
25
     * @return  integer
26
     */
27
    public function get($prefix, $step = 1)
28
    {
29
        $this->lockStorage($prefix);
30
31
        $current = $this->read($prefix);
32
33
        if (is_null($current)) {
34
            $current = $this->getStartNumber($prefix);
35
            $this->initialize($prefix, $current + $step);
36
37
        } else {
38
            $this->increase($prefix, $step);
39
        }
40
41
        $this->unlockStorage($prefix);
42
43
        return $current;
44
    }
45
46
47
    /**
48
     * Get start number of prefix
49
     *
50
     * In common the value will be 1, but sometimes we need extend and rewrite
51
     * this method in child class, to get start number from exists used code.
52
     *
53
     * @param   string  $prefix
54
     * @return  integer
55
     */
56
    protected function getStartNumber($prefix)
0 ignored issues
show
Unused Code introduced by
The parameter $prefix is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
57
    {
58
        return 1;
59
    }
60
61
62
    /**
63
     * Increase value of a prefix
64
     *
65
     * @param   string  $prefix
66
     * @param   integer $step
67
     */
68
    abstract protected function increase($prefix, $step);
69
70
71
    /**
72
     * Create new record in storage for prefix and set value
73
     *
74
     * @param   string  $prefix
75
     * @param   integer $value
76
     */
77
    abstract protected function initialize($prefix, $value);
78
79
80
    /**
81
     * Lock storage, prohibit others to read/write
82
     *
83
     * @param   string  $prefix
84
     */
85
    abstract protected function lockStorage($prefix);
86
87
88
    /**
89
     * Read current value of prefix from storage
90
     *
91
     * Return null if current prefix has no corresponding value.
92
     *
93
     * @param   string  $prefix
94
     * @return  integer|null
95
     */
96
    abstract protected function read($prefix);
97
98
99
    /**
100
     * Unlock storage, allow others to read/write
101
     *
102
     * @param   string  $prefix
103
     */
104
    abstract protected function unlockStorage($prefix);
105
}
106