Completed
Push — develop ( 3b8e4a...656576 )
by Arjay
03:44 queued 02:00
created

Sequence::currentValue()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 1
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
11
     */
12
    protected $connection;
13
14
    /**
15
     * @param Connection $connection
16
     */
17
    public function __construct(Connection $connection)
18
    {
19
        $this->connection = $connection;
20
    }
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
    public function create($name, $start = 1, $nocache = false)
31
    {
32
        if (! $name) {
33
            return false;
34
        }
35
36
        $nocache = $nocache ? 'nocache' : '';
37
38
        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 or ! $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("select *
79
            from all_sequences
80
            where
81
                sequence_name=upper('{$name}')
82
                and sequence_owner=upper(user)
83
            ");
84
    }
85
86
    /**
87
     * get sequence next value
88
     *
89
     * @param  string $name
90
     * @return integer
91
     */
92
    public function nextValue($name)
93
    {
94
        if (! $name) {
95
            return 0;
96
        }
97
98
        return $this->connection->selectOne("SELECT $name.NEXTVAL as id FROM DUAL")->id;
99
    }
100
101
    /**
102
     * same function as lastInsertId. added for clarity with oracle sql statement.
103
     *
104
     * @param  string $name
105
     * @return integer
106
     */
107
    public function currentValue($name)
108
    {
109
        return $this->lastInsertId($name);
110
    }
111
112
    /**
113
     * function to get oracle sequence last inserted id
114
     *
115
     * @param  string $name
116
     * @return integer
117
     */
118
    public function lastInsertId($name)
119
    {
120
        // check if a valid name and sequence exists
121
        if (! $name or ! $this->exists($name)) {
122
            return 0;
123
        }
124
125
        return $this->connection->selectOne("select {$name}.currval as id from dual")->id;
126
    }
127
}
128