1: <?php
2: /**
3: * LICENSE (BSD)
4: *
5: * Copyright (c) 2013, Gerd Christian Kunze
6: * All rights reserved.
7: *
8: * Redistribution and use in source and binary forms, with or without
9: * modification, are permitted provided that the following conditions are
10: * met:
11: *
12: * * Redistributions of source code must retain the above copyright
13: * notice, this list of conditions and the following disclaimer.
14: *
15: * * Redistributions in binary form must reproduce the above copyright
16: * notice, this list of conditions and the following disclaimer in the
17: * documentation and/or other materials provided with the distribution.
18: *
19: * * Neither the name of Gerd Christian Kunze nor the names of the
20: * contributors may be used to endorse or promote products derived from
21: * this software without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
24: * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
25: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
26: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
27: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
28: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
29: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
30: * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
31: * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
32: * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
33: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34: *
35: * Database
36: * 26.02.2013 19:52
37: */
38: namespace MOC\Module;
39: use MOC\Api;
40: use MOC\Generic\Device\Module;
41:
42: /**
43: *
44: */
45: class Database implements Module {
46: /**
47: * Get Singleton/Instance
48: *
49: * @static
50: * @return Database
51: */
52: public static function InterfaceInstance() {
53: return new Database();
54: }
55:
56: /**
57: * Get Changelog
58: *
59: * @static
60: * @return \MOC\Core\Changelog
61: */
62: public static function InterfaceChangelog() {
63: return Api::Core()->Changelog()->Create( __CLASS__ );
64: }
65:
66: /**
67: * Get Dependencies
68: *
69: * @static
70: * @return \MOC\Core\Depending
71: */
72: public static function InterfaceDepending() {
73: return Api::Core()->Depending();
74: }
75:
76: /** @var Database\Driver $Queue */
77: private $Queue = array();
78: /** @var Database\Driver $Current */
79: private $Current = null;
80:
81: const DRIVER_MYSQL = 10;
82: const DRIVER_ODBC_MSSQL = 101;
83: const DRIVER_ODBC_ORACLE = 102;
84:
85: /**
86: * @param int $DRIVER
87: *
88: * @return Database
89: */
90: public function Driver( $DRIVER = self::DRIVER_ODBC_MSSQL ) {
91: switch( $DRIVER ) {
92: case self::DRIVER_MYSQL: {
93: $this->_openResource( new Database\Driver\Mysql() );
94: break;
95: }
96: case self::DRIVER_ODBC_MSSQL: {
97: $this->_openResource( new Database\Driver\OdbcMssql() );
98: break;
99: }
100: case self::DRIVER_ODBC_ORACLE: {
101: $this->_openResource( new Database\Driver\OdbcOracle() );
102: break;
103: }
104: }
105: return $this;
106: }
107:
108: /**
109: * @param $Host
110: * @param $User
111: * @param $Password
112: * @param null $Database
113: *
114: * @return Database
115: */
116: public function Open( $Host, $User, $Password, $Database = null ) {
117: $this->_getResource()->Open( $Host, $User, $Password, $Database );
118: return $this;
119: }
120:
121: /**
122: * @return Database
123: */
124: public function Close() {
125: $this->_getResource()->Close();
126: $this->_closeResource();
127: return $this;
128: }
129:
130: /**
131: * @param string $SqlTemplate
132: *
133: * @return Database
134: */
135: public function Statement( $SqlTemplate ) {
136: $this->_getResource()->Statement( $SqlTemplate );
137: return $this;
138: }
139:
140: /**
141: * @param mixed $Value
142: * @param null|string $Key
143: * @param int $Type
144: *
145: * @return Database
146: */
147: public function Parameter( $Value, $Key = null, $Type = Database\Driver::PARAM_TYPE_NONE ) {
148: $this->_getResource()->Parameter( $Value, $Key, $Type );
149: return $this;
150: }
151:
152: /**
153: * @param int $FETCH_AS
154: *
155: * @return mixed
156: */
157: public function Execute( $FETCH_AS = Database\Driver::RESULT_AS_ARRAY_ASSOC ) {
158: return $this->_getResource()->Execute( $FETCH_AS );
159: }
160:
161: /**
162: * @param Database\Driver $Resource
163: *
164: * @return Database
165: */
166: public function _openResource( $Resource ) {
167: $this->Current = $Resource;
168: array_push( $this->Queue, $this->Current );
169: return $this;
170: }
171:
172: /**
173: * @param $Index
174: *
175: * @return Database
176: */
177: public function _selectResource( $Index ) {
178: $this->Current = $this->Queue[$Index];
179: return $this;
180: }
181:
182: /**
183: * @return Database\Driver
184: */
185: public function _getResource() {
186: return $this->Current;
187: }
188:
189: /**
190: * @return Database
191: */
192: public function _closeResource() {
193: $this->Current = null;
194: array_pop( $this->Queue );
195: $this->_selectResource( count( $this->Queue ) -1 );
196: return $this;
197: }
198: }
199: