1: <?php
2:
3: namespace Yajra\Oci8\Query\Processors;
4:
5: use Illuminate\Database\Query\Builder;
6: use Illuminate\Database\Query\Processors\Processor;
7: use PDO;
8:
9: class OracleProcessor extends Processor
10: {
11: 12: 13: 14: 15: 16: 17: 18: 19:
20: public function processInsertGetId(Builder $query, $sql, $values, $sequence = null)
21: {
22: $id = 0;
23: $parameter = 0;
24: $statement = $this->prepareStatement($query, $sql);
25:
26: $parameter = $this->bindValues($values, $statement, $parameter);
27: $statement->bindParam($parameter, $id, PDO::PARAM_INT, 10);
28: $statement->execute();
29:
30: return (int) $id;
31: }
32:
33: 34: 35: 36: 37: 38: 39:
40: private function prepareStatement(Builder $query, $sql)
41: {
42: $pdo = $query->getConnection()->getPdo();
43:
44: return $pdo->prepare($sql);
45: }
46:
47: 48: 49: 50: 51: 52: 53: 54:
55: private function bindValues(&$values, $statement, $parameter)
56: {
57: $count = count($values);
58: for ($i = 0; $i < $count; $i++) {
59: if (is_object($values[$i])) {
60: $values[$i] = (string) $values[$i];
61: }
62: $type = $this->getPdoType($values[$i]);
63: $statement->bindParam($parameter, $values[$i], $type);
64: $parameter++;
65: }
66:
67: return $parameter;
68: }
69:
70: 71: 72: 73: 74: 75:
76: private function getPdoType($value)
77: {
78: if (is_int($value)) {
79: return PDO::PARAM_INT;
80: } elseif (is_bool($value)) {
81: return PDO::PARAM_BOOL;
82: } elseif (is_null($value)) {
83: return PDO::PARAM_NULL;
84: } else {
85: return PDO::PARAM_STR;
86: }
87: }
88:
89: 90: 91: 92: 93: 94: 95: 96: 97:
98: public function saveLob(Builder $query, $sql, array $values, array $binaries)
99: {
100: $id = 0;
101: $parameter = 0;
102: $statement = $this->prepareStatement($query, $sql);
103:
104: $parameter = $this->bindValues($values, $statement, $parameter);
105:
106: $countBinary = count($binaries);
107: for ($i = 0; $i < $countBinary; $i++) {
108: $statement->bindParam($parameter, $binaries[$i], PDO::PARAM_LOB, -1);
109: $parameter++;
110: }
111:
112:
113: $statement->bindParam($parameter, $id, PDO::PARAM_INT, 10);
114:
115: if (! $statement->execute()) {
116: return false;
117: }
118:
119: return (int) $id;
120: }
121: }
122: