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: