]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/adodb/adodb-error.inc.php
locking table specific for better databases
[SourceForge/phpwiki.git] / lib / WikiDB / adodb / adodb-error.inc.php
1 <?php
2 /** 
3  * @version V4.22 15 Apr 2004 (c) 2000-2004 John Lim (jlim@natsoft.com.my). All rights reserved.
4  * Released under both BSD license and Lesser GPL library license. 
5  * Whenever there is any discrepancy between the two licenses, 
6  * the BSD license will take precedence. 
7  *
8  * Set tabs to 4 for best viewing.
9  * 
10  * The following code is adapted from the PEAR DB error handling code.
11  * Portions (c)1997-2002 The PHP Group.
12  */
13
14 if (!defined("DB_ERROR")) define("DB_ERROR",-1);
15
16 if (!defined("DB_ERROR_SYNTAX")) {
17         define("DB_ERROR_SYNTAX",              -2);
18         define("DB_ERROR_CONSTRAINT",          -3);
19         define("DB_ERROR_NOT_FOUND",           -4);
20         define("DB_ERROR_ALREADY_EXISTS",      -5);
21         define("DB_ERROR_UNSUPPORTED",         -6);
22         define("DB_ERROR_MISMATCH",            -7);
23         define("DB_ERROR_INVALID",             -8);
24         define("DB_ERROR_NOT_CAPABLE",         -9);
25         define("DB_ERROR_TRUNCATED",          -10);
26         define("DB_ERROR_INVALID_NUMBER",     -11);
27         define("DB_ERROR_INVALID_DATE",       -12);
28         define("DB_ERROR_DIVZERO",            -13);
29         define("DB_ERROR_NODBSELECTED",       -14);
30         define("DB_ERROR_CANNOT_CREATE",      -15);
31         define("DB_ERROR_CANNOT_DELETE",      -16);
32         define("DB_ERROR_CANNOT_DROP",        -17);
33         define("DB_ERROR_NOSUCHTABLE",        -18);
34         define("DB_ERROR_NOSUCHFIELD",        -19);
35         define("DB_ERROR_NEED_MORE_DATA",     -20);
36         define("DB_ERROR_NOT_LOCKED",         -21);
37         define("DB_ERROR_VALUE_COUNT_ON_ROW", -22);
38         define("DB_ERROR_INVALID_DSN",        -23);
39         define("DB_ERROR_CONNECT_FAILED",     -24);
40         define("DB_ERROR_EXTENSION_NOT_FOUND",-25);
41         define("DB_ERROR_NOSUCHDB",           -25);
42         define("DB_ERROR_ACCESS_VIOLATION",   -26);
43 }
44
45 function adodb_errormsg($value)
46 {
47 global $ADODB_LANG,$ADODB_LANG_ARRAY;
48
49         if (empty($ADODB_LANG)) $ADODB_LANG = 'en';
50         if (isset($ADODB_LANG_ARRAY['LANG']) && $ADODB_LANG_ARRAY['LANG'] == $ADODB_LANG) ;
51         else {
52                 include_once(ADODB_DIR."/lang/adodb-$ADODB_LANG.inc.php");
53     }
54         return isset($ADODB_LANG_ARRAY[$value]) ? $ADODB_LANG_ARRAY[$value] : $ADODB_LANG_ARRAY[DB_ERROR];
55 }
56
57 function adodb_error($provider,$dbType,$errno)
58 {
59         //var_dump($errno);
60         if (is_numeric($errno) && $errno == 0) return 0;
61         switch($provider) { 
62         case 'mysql': $map = adodb_error_mysql(); break;
63         
64         case 'oracle':
65         case 'oci8': $map = adodb_error_oci8(); break;
66         
67         case 'ibase': $map = adodb_error_ibase(); break;
68         
69         case 'odbc': $map = adodb_error_odbc(); break;
70         
71         case 'mssql':
72         case 'sybase': $map = adodb_error_mssql(); break;
73         
74         case 'informix': $map = adodb_error_ifx(); break;
75         
76         case 'postgres': return adodb_error_pg($errno); break;
77         
78         case 'sqlite': return $map = adodb_error_sqlite(); break;
79         default:
80                 return DB_ERROR;
81         }       
82         //print_r($map);
83         //var_dump($errno);
84         if (isset($map[$errno])) return $map[$errno];
85         return DB_ERROR;
86 }
87
88 //**************************************************************************************
89
90 function adodb_error_pg($errormsg)
91 {
92     static $error_regexps = array(
93             '/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE,
94             '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/'      => DB_ERROR_ALREADY_EXISTS,
95             '/divide by zero$/'                     => DB_ERROR_DIVZERO,
96             '/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER,
97             '/ttribute [\"\'].*[\"\'] not found|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD,
98             '/parser: parse error at or near \"/'   => DB_ERROR_SYNTAX,
99             '/referential integrity violation/'     => DB_ERROR_CONSTRAINT
100         );
101         reset($error_regexps);
102     while (list($regexp,$code) = each($error_regexps)) {
103         if (preg_match($regexp, $errormsg)) {
104             return $code;
105         }
106     }
107     // Fall back to DB_ERROR if there was no mapping.
108     return DB_ERROR;
109 }
110         
111 function adodb_error_odbc()
112 {
113 static $MAP = array(
114             '01004' => DB_ERROR_TRUNCATED,
115             '07001' => DB_ERROR_MISMATCH,
116             '21S01' => DB_ERROR_MISMATCH,
117             '21S02' => DB_ERROR_MISMATCH,
118             '22003' => DB_ERROR_INVALID_NUMBER,
119             '22008' => DB_ERROR_INVALID_DATE,
120             '22012' => DB_ERROR_DIVZERO,
121             '23000' => DB_ERROR_CONSTRAINT,
122             '24000' => DB_ERROR_INVALID,
123             '34000' => DB_ERROR_INVALID,
124             '37000' => DB_ERROR_SYNTAX,
125             '42000' => DB_ERROR_SYNTAX,
126             'IM001' => DB_ERROR_UNSUPPORTED,
127             'S0000' => DB_ERROR_NOSUCHTABLE,
128             'S0001' => DB_ERROR_NOT_FOUND,
129             'S0002' => DB_ERROR_NOSUCHTABLE,
130             'S0011' => DB_ERROR_ALREADY_EXISTS,
131             'S0012' => DB_ERROR_NOT_FOUND,
132             'S0021' => DB_ERROR_ALREADY_EXISTS,
133             'S0022' => DB_ERROR_NOT_FOUND,
134                         'S1000' => DB_ERROR_NOSUCHTABLE,
135             'S1009' => DB_ERROR_INVALID,
136             'S1090' => DB_ERROR_INVALID,
137             'S1C00' => DB_ERROR_NOT_CAPABLE
138         );
139                 return $MAP;
140 }
141
142 function adodb_error_ibase()
143 {
144 static $MAP = array(
145             -104 => DB_ERROR_SYNTAX,
146             -150 => DB_ERROR_ACCESS_VIOLATION,
147             -151 => DB_ERROR_ACCESS_VIOLATION,
148             -155 => DB_ERROR_NOSUCHTABLE,
149             -157 => DB_ERROR_NOSUCHFIELD,
150             -158 => DB_ERROR_VALUE_COUNT_ON_ROW,
151             -170 => DB_ERROR_MISMATCH,
152             -171 => DB_ERROR_MISMATCH,
153             -172 => DB_ERROR_INVALID,
154             -204 => DB_ERROR_INVALID,
155             -205 => DB_ERROR_NOSUCHFIELD,
156             -206 => DB_ERROR_NOSUCHFIELD,
157             -208 => DB_ERROR_INVALID,
158             -219 => DB_ERROR_NOSUCHTABLE,
159             -297 => DB_ERROR_CONSTRAINT,
160             -530 => DB_ERROR_CONSTRAINT,
161             -803 => DB_ERROR_CONSTRAINT,
162             -551 => DB_ERROR_ACCESS_VIOLATION,
163             -552 => DB_ERROR_ACCESS_VIOLATION,
164             -922 => DB_ERROR_NOSUCHDB,
165             -923 => DB_ERROR_CONNECT_FAILED,
166             -924 => DB_ERROR_CONNECT_FAILED
167         );
168                 
169                 return $MAP;
170 }
171
172 function adodb_error_ifx()
173 {
174 static $MAP = array(
175             '-201'    => DB_ERROR_SYNTAX,
176             '-206'    => DB_ERROR_NOSUCHTABLE,
177             '-217'    => DB_ERROR_NOSUCHFIELD,
178             '-329'    => DB_ERROR_NODBSELECTED,
179             '-1204'   => DB_ERROR_INVALID_DATE,
180             '-1205'   => DB_ERROR_INVALID_DATE,
181             '-1206'   => DB_ERROR_INVALID_DATE,
182             '-1209'   => DB_ERROR_INVALID_DATE,
183             '-1210'   => DB_ERROR_INVALID_DATE,
184             '-1212'   => DB_ERROR_INVALID_DATE
185        );
186            
187            return $MAP;
188 }
189
190 function adodb_error_oci8()
191 {
192 static $MAP = array(
193                          1 => DB_ERROR_ALREADY_EXISTS,
194             900 => DB_ERROR_SYNTAX,
195             904 => DB_ERROR_NOSUCHFIELD,
196             923 => DB_ERROR_SYNTAX,
197             942 => DB_ERROR_NOSUCHTABLE,
198             955 => DB_ERROR_ALREADY_EXISTS,
199             1476 => DB_ERROR_DIVZERO,
200             1722 => DB_ERROR_INVALID_NUMBER,
201             2289 => DB_ERROR_NOSUCHTABLE,
202             2291 => DB_ERROR_CONSTRAINT,
203             2449 => DB_ERROR_CONSTRAINT
204         );
205            
206         return $MAP;
207 }
208
209 function adodb_error_mssql()
210 {
211 static $MAP = array(
212                   208 => DB_ERROR_NOSUCHTABLE,
213           2601 => DB_ERROR_ALREADY_EXISTS
214        );
215            
216         return $MAP;
217 }
218
219 function adodb_error_sqlite()
220 {
221 static $MAP = array(
222                   1 => DB_ERROR_SYNTAX
223        );
224            
225         return $MAP;
226 }
227
228 function adodb_error_mysql()
229 {
230 static $MAP = array(
231            1004 => DB_ERROR_CANNOT_CREATE,
232            1005 => DB_ERROR_CANNOT_CREATE,
233            1006 => DB_ERROR_CANNOT_CREATE,
234            1007 => DB_ERROR_ALREADY_EXISTS,
235            1008 => DB_ERROR_CANNOT_DROP,
236                    1045 => DB_ERROR_ACCESS_VIOLATION,
237            1046 => DB_ERROR_NODBSELECTED,
238                    1049 => DB_ERROR_NOSUCHDB,
239            1050 => DB_ERROR_ALREADY_EXISTS,
240            1051 => DB_ERROR_NOSUCHTABLE,
241            1054 => DB_ERROR_NOSUCHFIELD,
242            1062 => DB_ERROR_ALREADY_EXISTS,
243            1064 => DB_ERROR_SYNTAX,
244            1100 => DB_ERROR_NOT_LOCKED,
245            1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
246            1146 => DB_ERROR_NOSUCHTABLE,
247            1048 => DB_ERROR_CONSTRAINT,
248                     2002 => DB_ERROR_CONNECT_FAILED
249        );
250            
251         return $MAP;
252 }
253 ?>