1: <?php
2:
3: namespace Yajra\Oci8;
4:
5: use Doctrine\DBAL\Connection as DoctrineConnection;
6: use Doctrine\DBAL\Driver\OCI8\Driver as DoctrineDriver;
7: use Illuminate\Database\Connection;
8: use Illuminate\Database\Grammar;
9: use PDO;
10: use Yajra\Oci8\Query\Grammars\OracleGrammar as QueryGrammar;
11: use Yajra\Oci8\Query\OracleBuilder as QueryBuilder;
12: use Yajra\Oci8\Query\Processors\OracleProcessor as Processor;
13: use Yajra\Oci8\Schema\Grammars\OracleGrammar as SchemaGrammar;
14: use Yajra\Oci8\Schema\OracleBuilder as SchemaBuilder;
15: use Yajra\Oci8\Schema\Sequence;
16: use Yajra\Oci8\Schema\Trigger;
17:
18: class Oci8Connection extends Connection
19: {
20: 21: 22:
23: protected $schema;
24:
25: 26: 27:
28: protected $sequence;
29:
30: 31: 32:
33: protected $trigger;
34:
35: 36: 37: 38: 39: 40:
41: public function __construct($pdo, $database = '', $tablePrefix = '', array $config = [])
42: {
43: parent::__construct($pdo, $database, $tablePrefix, $config);
44: $this->sequence = new Sequence($this);
45: $this->trigger = new Trigger($this);
46: }
47:
48: 49: 50: 51: 52:
53: public function getSchema()
54: {
55: return $this->schema;
56: }
57:
58: 59: 60: 61: 62: 63:
64: public function setSchema($schema)
65: {
66: $this->schema = $schema;
67: $sessionVars = [
68: 'CURRENT_SCHEMA' => $schema,
69: ];
70:
71: return $this->setSessionVars($sessionVars);
72: }
73:
74: 75: 76: 77: 78: 79:
80: public function setSessionVars(array $sessionVars)
81: {
82: $vars = [];
83: foreach ($sessionVars as $option => $value) {
84: if (strtoupper($option) == 'CURRENT_SCHEMA') {
85: $vars[] = "$option = $value";
86: } else {
87: $vars[] = "$option = '$value'";
88: }
89: }
90: $sql = "ALTER SESSION SET " . implode(" ", $vars);
91: $this->statement($sql);
92:
93: return $this;
94: }
95:
96: 97: 98: 99: 100:
101: public function getSequence()
102: {
103: return $this->sequence;
104: }
105:
106: 107: 108: 109: 110: 111:
112: public function setSequence(Sequence $sequence)
113: {
114: return $this->sequence = $sequence;
115: }
116:
117: 118: 119: 120: 121:
122: public function getTrigger()
123: {
124: return $this->trigger;
125: }
126:
127: 128: 129: 130: 131: 132:
133: public function setTrigger(Trigger $trigger)
134: {
135: return $this->trigger = $trigger;
136: }
137:
138: 139: 140: 141: 142:
143: public function getSchemaBuilder()
144: {
145: if (is_null($this->schemaGrammar)) {
146: $this->useDefaultSchemaGrammar();
147: }
148:
149: return new SchemaBuilder($this);
150: }
151:
152: 153: 154: 155: 156: 157:
158: public function table($table)
159: {
160: $processor = $this->getPostProcessor();
161:
162: $query = new QueryBuilder($this, $this->getQueryGrammar(), $processor);
163:
164: return $query->from($table);
165: }
166:
167: 168: 169: 170: 171: 172:
173: public function setDateFormat($format = 'YYYY-MM-DD HH24:MI:SS')
174: {
175: $sessionVars = [
176: 'NLS_DATE_FORMAT' => $format,
177: 'NLS_TIMESTAMP_FORMAT' => $format,
178: ];
179:
180: return $this->setSessionVars($sessionVars);
181: }
182:
183: 184: 185: 186: 187:
188: public function getDoctrineConnection()
189: {
190: $driver = $this->getDoctrineDriver();
191:
192: $data = ['pdo' => $this->getPdo(), 'user' => $this->getConfig('database')];
193:
194: return new DoctrineConnection($data, $driver);
195: }
196:
197: 198: 199: 200: 201:
202: protected function getDoctrineDriver()
203: {
204: return new DoctrineDriver;
205: }
206:
207: 208: 209: 210: 211:
212: protected function getDefaultQueryGrammar()
213: {
214: return $this->withTablePrefix(new QueryGrammar);
215: }
216:
217: 218: 219: 220: 221: 222:
223: public function withTablePrefix(Grammar $grammar)
224: {
225: return parent::withTablePrefix($grammar);
226: }
227:
228: 229: 230: 231: 232:
233: protected function getDefaultSchemaGrammar()
234: {
235: return $this->withTablePrefix(new SchemaGrammar);
236: }
237:
238: 239: 240: 241: 242:
243: protected function getDefaultPostProcessor()
244: {
245: return new Processor;
246: }
247: }
248: