Subversion Repositories oidplus

Rev

Rev 1317 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
786 daniel-mar 1
<?php
2
 
3
/*
4
 * OIDplus 2.0
1086 daniel-mar 5
 * Copyright 2019 - 2023 Daniel Marschall, ViaThinkSoft
786 daniel-mar 6
 *
7
 * Licensed under the Apache License, Version 2.0 (the "License");
8
 * you may not use this file except in compliance with the License.
9
 * You may obtain a copy of the License at
10
 *
11
 *     http://www.apache.org/licenses/LICENSE-2.0
12
 *
13
 * Unless required by applicable law or agreed to in writing, software
14
 * distributed under the License is distributed on an "AS IS" BASIS,
15
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
 * See the License for the specific language governing permissions and
17
 * limitations under the License.
18
 */
19
 
1050 daniel-mar 20
namespace ViaThinkSoft\OIDplus;
786 daniel-mar 21
 
1086 daniel-mar 22
// phpcs:disable PSR1.Files.SideEffects
23
\defined('INSIDE_OIDPLUS') or die;
24
// phpcs:enable PSR1.Files.SideEffects
25
 
786 daniel-mar 26
class OIDplusQueryResultOci extends OIDplusQueryResult {
1130 daniel-mar 27
 
28
        /**
29
         * @var bool
30
         */
786 daniel-mar 31
        protected $no_resultset;
1130 daniel-mar 32
 
33
        /**
34
         * @var mixed
35
         */
786 daniel-mar 36
        protected $res;
37
 
1116 daniel-mar 38
        /**
1130 daniel-mar 39
         * @param mixed $res
1116 daniel-mar 40
         */
786 daniel-mar 41
        public function __construct($res) {
42
                $this->no_resultset = is_bool($res);
43
 
44
                if (!$this->no_resultset) {
45
                        $this->res = $res;
46
                }
47
        }
48
 
1116 daniel-mar 49
        /**
50
         *
51
         */
786 daniel-mar 52
        public function __destruct() {
53
                if ($this->res) {
54
                        oci_free_statement($this->res);
1232 daniel-mar 55
                        $this->res = null;
786 daniel-mar 56
                }
57
        }
58
 
1116 daniel-mar 59
        /**
60
         * @return bool
61
         */
786 daniel-mar 62
        public function containsResultSet(): bool {
63
                return !$this->no_resultset;
64
        }
65
 
1116 daniel-mar 66
        /**
1156 daniel-mar 67
         * @return void
1116 daniel-mar 68
         */
1156 daniel-mar 69
        public function prefetchAll() {
70
                if (!is_null($this->prefetchedArray)) return;
786 daniel-mar 71
                $this->prefetchedArray = array();
72
                oci_fetch_all($this->res, $this->prefetchedArray, 0, -1, OCI_FETCHSTATEMENT_BY_ROW);
1236 daniel-mar 73
                foreach ($this->prefetchedArray as &$row) { /** @phpstan-ignore-line */
74
                        $this->fixFields($row);
75
                }
1317 daniel-mar 76
                unset($row); /** @phpstan-ignore-line */
786 daniel-mar 77
        }
78
 
1116 daniel-mar 79
        /**
1156 daniel-mar 80
         * @return int
1116 daniel-mar 81
         */
1156 daniel-mar 82
        protected function do_num_rows(): int {
83
                // This function does not return number of rows selected! For SELECT statements this function will return the number of rows, that were fetched to the buffer with oci_fetch*() functions.
84
                //return oci_num_rows($this->res);
786 daniel-mar 85
 
1156 daniel-mar 86
                if (is_null($this->prefetchedArray)) {
87
                        $this->prefetchAll();
786 daniel-mar 88
                }
89
 
1471 daniel-mar 90
                return count($this->prefetchedArray);
786 daniel-mar 91
        }
92
 
1116 daniel-mar 93
        /**
1156 daniel-mar 94
         * @return array|null
1116 daniel-mar 95
         */
1156 daniel-mar 96
        protected function do_fetch_array()/*: ?array*/ {
97
                $ret = oci_fetch_array($this->res);
98
                if ($ret === false) $ret = null;
99
                return $ret;
786 daniel-mar 100
        }
101
 
1116 daniel-mar 102
        /**
1156 daniel-mar 103
         * @return object|null
1116 daniel-mar 104
         */
1152 daniel-mar 105
        protected function do_fetch_object()/*: ?object*/ {
1156 daniel-mar 106
                $ret = oci_fetch_object($this->res);
107
                if ($ret === false) $ret = null;
786 daniel-mar 108
                return $ret;
109
        }
110
}