]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/adodb/adodb-error.inc.php
No newline at end of file
[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 ?>