File:
0.00.1a/core/database/DatabaseBase.php (
View as Code)
1: 2: /* -------------------------------------------------------------
3: This file is part of FreeDESK
4:
5: FreeDESK is (C) Copyright 2012 David Cutting
6:
7: FreeDESK is free software: you can redistribute it and/or modify
8: it under the terms of the GNU General Public License as published by
9: the Free Software Foundation, either version 3 of the License, or
10: (at your option) any later version.
11:
12: FreeDESK is distributed in the hope that it will be useful,
13: but WITHOUT ANY WARRANTY; without even the implied warranty of
14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: GNU General Public License for more details.
16:
17: You should have received a copy of the GNU General Public License
18: along with FreeDESK. If not, see www.gnu.org/licenses
19:
20: For more information see www.purplepixie.org/freedesk/
21: -------------------------------------------------------------- */
22: /**
23: * Database Query Type
24: **/
25: abstract class QueryType
26: {
27: const Equal = 0;
28: const Like = 1;
29: const MoreThan = 2;
30: const MoreThanEqual = 3;
31: const LessThan = 4;
32: const LessThanEqual = 5;
33: const NotEqual = 6;
34:
35: const OpenBracket = 100;
36: const CloseBracket = 101;
37:
38: const opAND = 200;
39: const opOR = 201;
40: }
41:
42: /**
43: * Query Builder Class
44: **/
45: class QueryBuilder
46: {
47: /**
48: * Query items array
49: **/
50: var $items = array();
51:
52: /**
53: * Limit Flag
54: **/
55: var $limit = false;
56:
57: /**
58: * Start (for limit)
59: **/
60: var $start = 0;
61:
62: /**
63: * Entries (for limit)
64: **/
65: var $entries = 30;
66:
67: /**
68: * Order Flag
69: **/
70: var $order = false;
71:
72: /**
73: * Order fields
74: **/
75: var $orderlist = array();
76:
77: /**
78: * Add item
79: * @param string $field Field
80: * @param mixed $type QueryType const
81: * @param mixed $value Value
82: **/
83: function Add($field, $type, $value)
84: {
85: $this->items[] = array(
86: "field" => $field,
87: "type" => $type,
88: "value" => $value );
89: }
90:
91: /**
92: * Add an order field
93: * @param string $field Field
94: * @param bool $asc Ascending (optional, default true) - false is descending
95: **/
96: function AddOrder($field, $asc = true)
97: {
98: if (!$this->order)
99: $this->order = true;
100: $this->orderlist[$field]=$asc;
101: }
102:
103: /**
104: * Open bracket
105: **/
106: function OpenBracket()
107: {
108: $this->items[] = array("type" => QueryType::OpenBracket);
109: }
110:
111: /**
112: * Close bracket
113: **/
114: function CloseBracket()
115: {
116: $this->items[] = array("type" => QueryType::CloseBracket);
117: }
118:
119: /**
120: * Add operation
121: * @param mixed $operation Op of type QueryType
122: **/
123: function AddOperation($operation)
124: {
125: $this->items[] = array("type" => $operation);
126: }
127: }
128:
129:
130: /**
131: * DatabaseBase is the abstract base class for database system implementations
132: **/
133:
134: abstract class DatabaseBase
135: {
136: /**
137: * Constructor
138: * @param object $freeDESK FreeDESK instance
139: **/
140: //abstract function DatabaseBase(&$freekDESK);
141:
142: /**
143: * Connect
144: * @param string $server Database server
145: * @param string $username Database username
146: * @param string $password Database password
147: * @param string $database Database name
148: * @param string $prefix Database table prefix (optonal, default "")
149: * @return bool Successful connection or not
150: **/
151: abstract function Connect($server, $username, $password,
152: $database, $prefix="");
153:
154: /**
155: * Disconnect
156: **/
157: abstract function Disconnect();
158:
159: /**
160: * Return table name with correct prefix and escaping
161: * @param string $table table un-prefixed
162: * @return string table with prefix and escape
163: **/
164: abstract function Table($table);
165:
166: /**
167: * Sanitise user-input using correct escaping
168: * @param string $input user input
169: * @return string Sanitised output
170: **/
171: abstract function Safe($input);
172:
173: /**
174: * Sanitise user-input string and quote
175: * @param string $input user input
176: * @return string Sanitised quoted output
177: **/
178: abstract function SafeQuote($input);
179:
180:
181:
182: /**
183: * Contain a field correctly
184: * @param string $field The field name
185: * @return string Escaped field
186: **/
187: abstract function Field($field);
188:
189: /**
190: * Escape and contain a field correctly
191: * @param string $value The value of the field
192: * @return string Escaped and prefixed+suffixed data
193: **/
194: function FieldSafe($value)
195: {
196: return $this->Field($this->Safe($value));
197: }
198:
199: /**
200: * Perform a query
201: * @param string $query SQL query
202: * @param bool $report Record any errors using LoggingEngine (optonal, default true)
203: * @return mixed Results of query
204: **/
205: abstract function Query($query, $report=true);
206:
207: /**
208: * Number of rows affected by last query
209: * @return int number of rows affected
210: **/
211: abstract function RowsAffected();
212:
213: /**
214: * Number of rows in a result set
215: * @param mixed $result Result set
216: * @return int number of rows in the set
217: **/
218: abstract function NumRows(&$result);
219:
220: /**
221: * Fetch next associated array from result set
222: * @param mixed $result Result Set
223: * @return array Assocative Array of Results
224: **/
225: abstract function FetchAssoc(&$result);
226:
227: /**
228: * Free a result set
229: * @param mixed $result Result Set
230: **/
231: abstract function Free(&$result);
232:
233: /**
234: * Return an error flag
235: * @return bool Experienced error on last command
236: **/
237: abstract function Error();
238:
239: /**
240: * Last error code
241: * @return int Error code
242: **/
243: abstract function ErrorCode();
244:
245: /**
246: * Last error description
247: * @return string Error description
248: **/
249: abstract function ErrorDescription();
250:
251: /**
252: * Details of the last error
253: * @return string Code and error description
254: **/
255: function LastError()
256: {
257: return $this->ErrorCode().": ".$this->ErrorDescription();
258: }
259:
260: /**
261: * The last inserted ID
262: * @return mixed Last inserted ID
263: **/
264: abstract function InsertID();
265:
266: /**
267: * Generate a clause from a QueryBuilder object
268: * @param object &$query QueryBuilder object
269: * @return string query string
270: **/
271: abstract function Clause(&$query);
272:
273: }
274:
275: ?>
276: