1 28 29 30 package com.caucho.quercus.lib.db; 31 32 import com.caucho.quercus.env.ArrayValue; 33 import com.caucho.quercus.env.ArrayValueImpl; 34 import com.caucho.quercus.env.Env; 35 import com.caucho.util.L10N; 36 37 import java.sql.SQLException ; 38 import java.util.logging.Level ; 39 import java.util.logging.Logger ; 40 41 class PDOError { 42 private final static L10N L = new L10N(PDOError.class); 43 private final static Logger log = Logger.getLogger(PDOError.class.getName()); 44 45 private static final int ERRMODE_SILENT = PDO.ERRMODE_SILENT; 46 private static final int ERRMODE_WARNING = PDO.ERRMODE_WARNING; 47 private static final int ERRMODE_EXCEPTION = PDO.ERRMODE_EXCEPTION; 48 49 private static final String ERR_NONE = PDO.ERR_NONE; 50 private static final String ERR_GENERAL = "HY000"; 51 52 private final Env _env; 53 54 private int _errmode; 55 private boolean _isError; 56 private String _errorCode = ERR_NONE; 57 private ArrayValue _errorInfo; 58 59 public PDOError(Env env) 60 { 61 _env = env; 62 } 63 64 67 public void clear() 68 { 69 _isError = false; 70 _errorCode = ERR_NONE; 71 _errorInfo = null; 72 } 73 74 private void error(String errorCode, int driverError, String errorMessage) 75 { 76 _isError = true; 77 78 int level = Math.max(_errmode, ERRMODE_SILENT); 79 80 _errorCode = errorCode; 81 82 _errorInfo = new ArrayValueImpl(); 83 _errorInfo.put(errorCode); 84 _errorInfo.put(driverError); 85 _errorInfo.put(errorMessage); 86 87 if (level == ERRMODE_WARNING) { 88 _env.warning("SQLSTATE[" + _errorCode + "]: " + errorMessage); 89 } 90 else if (level == ERRMODE_EXCEPTION) { 91 } 93 } 94 100 public void error(Throwable exception) 101 { 102 log.log(Level.FINE, exception.toString(), exception); 103 104 String errorCode; 105 String errorMessage; 106 int driverError; 107 108 if (exception instanceof SQLException ) { 109 SQLException sqlException = (SQLException ) exception; 110 errorCode = sqlException.getSQLState(); 111 errorMessage = sqlException.getMessage(); 112 driverError = sqlException.getErrorCode(); 113 } 114 else { 115 errorCode = ERR_GENERAL; 116 errorMessage = exception.getMessage(); 117 driverError = 0; 118 } 119 120 error(errorCode, driverError, errorMessage); 121 } 122 123 public String errorCode() 124 { 125 return _errorCode; 126 } 127 128 public ArrayValue errorInfo() 129 { 130 if (_errorInfo == null) { 131 _errorInfo = new ArrayValueImpl(); 132 _errorInfo.put(ERR_NONE); 133 } 134 135 return _errorInfo; 136 } 137 138 public int getErrmode() 139 { 140 return _errmode; 141 } 142 143 public boolean isError() 144 { 145 return _isError; 146 } 147 148 152 public void notice(String message) 153 { 154 _isError = true; 155 156 _errorCode = ERR_GENERAL; 157 158 _errorInfo = new ArrayValueImpl(); 159 _errorInfo.put(_errorCode); 160 _errorInfo.put(2050); 161 _errorInfo.put(""); 162 163 _env.notice(message); 164 } 165 166 177 public boolean setErrmode(int value) 178 { 179 switch (value) { 180 case ERRMODE_SILENT: 181 case ERRMODE_WARNING: 182 case ERRMODE_EXCEPTION: 183 _errmode = value; 184 return true; 185 186 default: 187 warning(L.l("invalid error mode")); 188 return false; 189 } 190 } 191 192 196 public void warning(String message) 197 { 198 _isError = true; 199 200 _errorCode = ERR_GENERAL; 201 202 _errorInfo = new ArrayValueImpl(); 203 _errorInfo.put(_errorCode); 204 205 if (_errmode == ERRMODE_EXCEPTION) { 206 } 208 else { 209 _env.warning("SQLSTATE[" + _errorCode + "]: " + message); 210 } 211 } 212 213 public void unsupportedAttribute(int attribute) 214 { 215 error("IM001", 0, L.l("attribute `{0}' is not supported", attribute)); 216 } 217 218 public void unsupportedAttributeValue(Object value) 219 { 220 error("IM001", 0, L.l("attribute value `{0}' is not supported", value)); 221 } 222 } 223 | Popular Tags |