Sequence   A
last analyzed

Complexity

Total Complexity 15

Size/Duplication

Total Lines 118
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 23.33%

Importance

Changes 0
Metric Value
dl 0
loc 118
ccs 7
cts 30
cp 0.2333
rs 10
c 0
b 0
f 0
wmc 15
lcom 1
cbo 0

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A create() 0 10 3
A drop() 0 18 3
A nextValue() 0 8 2
A currentValue() 0 4 1
A lastInsertId() 0 9 3
A exists() 0 10 2
1
<?php
2
3
namespace Yajra\Oci8\Schema;
4
5
use Illuminate\Database\Connection;
6
7
class Sequence
8
{
9
    /**
10
     * @var \Illuminate\Database\Connection|\Yajra\Oci8\Oci8Connection
11
     */
12
    protected $connection;
13
14
    /**
15
     * @param Connection $connection
16
     */
17 3
    public function __construct(Connection $connection)
18
    {
19 3
        $this->connection = $connection;
20 3
    }
21
22
    /**
23
     * function to create oracle sequence
24
     *
25
     * @param  string $name
26
     * @param  integer $start
27
     * @param  boolean $nocache
28
     * @return boolean
29
     */
30 3
    public function create($name, $start = 1, $nocache = false)
31
    {
32 3
        if (! $name) {
33
            return false;
34
        }
35
36 3
        $nocache = $nocache ? 'nocache' : '';
37
38 3
        return $this->connection->statement("create sequence {$name} start with {$start} {$nocache}");
39
    }
40
41
    /**
42
     * function to safely drop sequence db object
43
     *
44
     * @param  string $name
45
     * @return boolean
46
     */
47
    public function drop($name)
48
    {
49
        // check if a valid name and sequence exists
50
        if (! $name || ! $this->exists($name)) {
51
            return false;
52
        }
53
54
        return $this->connection->statement("
55
            declare
56
                e exception;
57
                pragma exception_init(e,-02289);
58
            begin
59
                execute immediate 'drop sequence {$name}';
60
            exception
61
            when e then
62
                null;
63
            end;");
64
    }
65
66
    /**
67
     * function to check if sequence exists
68
     *
69
     * @param  string $name
70
     * @return boolean
71
     */
72
    public function exists($name)
73
    {
74
        if (! $name) {
75
            return false;
76
        }
77
78
        return $this->connection->selectOne(
79
            "select * from all_sequences where sequence_name=upper('{$name}') and sequence_owner=upper(user)"
80
        );
81
    }
82
83
    /**
84
     * get sequence next value
85
     *
86
     * @param  string $name
87
     * @return integer
88
     */
89
    public function nextValue($name)
90
    {
91
        if (! $name) {
92
            return 0;
93
        }
94
95
        return $this->connection->selectOne("SELECT $name.NEXTVAL as id FROM DUAL")->id;
96
    }
97
98
    /**
99
     * same function as lastInsertId. added for clarity with oracle sql statement.
100
     *
101
     * @param  string $name
102
     * @return integer
103
     */
104
    public function currentValue($name)
105
    {
106
        return $this->lastInsertId($name);
107
    }
108
109
    /**
110
     * function to get oracle sequence last inserted id
111
     *
112
     * @param  string $name
113
     * @return integer
114
     */
115
    public function lastInsertId($name)
116
    {
117
        // check if a valid name and sequence exists
118
        if (! $name || ! $this->exists($name)) {
119
            return 0;
120
        }
121
122
        return $this->connection->selectOne("select {$name}.currval as id from dual")->id;
123
    }
124
}
125