1 21 22 package org.continuent.sequoia.controller.requests; 23 24 import java.sql.Connection ; 25 26 36 public abstract class RequestFactory 37 { 38 39 private RequestRegExp driverRegExp = null; 40 41 46 protected RequestFactory(RequestRegExp regexp) 47 { 48 driverRegExp = regexp; 49 } 50 51 68 protected AbstractRequest decodeReadRequestFromString(String sqlQuery, 69 boolean escapeProcessing, int timeout, String lineSeparator) 70 { 71 AbstractRequest decodedRequest = null; 72 if (driverRegExp.getSelectRequestPattern().matcher(sqlQuery).matches()) 73 { 74 decodedRequest = getSelectRequest(sqlQuery, escapeProcessing, timeout, 75 lineSeparator); 76 if (driverRegExp.getSelectForUpdatePattern().matcher(sqlQuery).matches()) 77 ((SelectRequest) decodedRequest).setMustBroadcast(true); 78 } 79 if (driverRegExp.getUnknownWriteRequestPattern().matcher(sqlQuery) 80 .matches()) 81 { 82 decodedRequest = getUnknownWriteRequest(sqlQuery, escapeProcessing, 83 timeout, lineSeparator); 84 } 85 else if (driverRegExp.getUnknownReadRequestPattern().matcher(sqlQuery) 86 .matches()) 87 { 88 decodedRequest = getUnknownReadRequest(sqlQuery, escapeProcessing, 89 timeout, lineSeparator); 90 if (driverRegExp.getSelectForUpdatePattern().matcher(sqlQuery).matches()) 91 ((SelectRequest) decodedRequest).setMustBroadcast(true); 92 } 93 return decodedRequest; 94 } 95 96 109 protected AbstractRequest decodeWriteRequestFromString(String sqlQuery, 110 boolean escapeProcessing, int timeout, String lineSeparator) 111 { 112 AbstractRequest decodedRequest = null; 113 if (driverRegExp.getInsertQueryPattern().matcher(sqlQuery).matches()) 114 { 115 decodedRequest = getInsertRequest(sqlQuery, escapeProcessing, timeout, 116 lineSeparator); 117 } 118 else if (driverRegExp.getUpdateRequestPattern().matcher(sqlQuery).matches()) 119 { 120 decodedRequest = getUpdateRequest(sqlQuery, escapeProcessing, timeout, 121 lineSeparator); 122 } 123 else if (driverRegExp.getDeleteRequestPattern().matcher(sqlQuery).matches()) 124 { 125 decodedRequest = getDeleteRequest(sqlQuery, escapeProcessing, timeout, 126 lineSeparator); 127 } 128 else if (driverRegExp.getCreateRequestPattern().matcher(sqlQuery).matches()) 129 { 130 decodedRequest = getCreateRequest(sqlQuery, escapeProcessing, timeout, 131 lineSeparator); 132 } 133 else if (driverRegExp.getDropRequestPattern().matcher(sqlQuery).matches()) 134 { 135 decodedRequest = getDropRequest(sqlQuery, escapeProcessing, timeout, 136 lineSeparator); 137 } 138 else if (driverRegExp.getAlterRequestPattern().matcher(sqlQuery).matches()) 139 { 140 decodedRequest = getAlterRequest(sqlQuery, escapeProcessing, timeout, 141 lineSeparator); 142 } 143 else if (driverRegExp.getStoredProcedurePattern().matcher(sqlQuery) 144 .matches()) 145 { 146 decodedRequest = getStoredProcedure(sqlQuery, escapeProcessing, timeout, 147 lineSeparator); 148 } 149 return decodedRequest; 150 } 151 152 172 public AbstractRequest requestFromString(String sqlQuery, 173 boolean isProbablyAReadRequest, boolean escapeProcessing, int timeout, 174 String lineSeparator) 175 { 176 AbstractRequest decodedRequest = null; 177 if (isProbablyAReadRequest) 178 { 179 decodedRequest = decodeReadRequestFromString(sqlQuery, escapeProcessing, 181 timeout, lineSeparator); 182 } 183 if (decodedRequest == null || decodedRequest instanceof UnknownWriteRequest) 184 { 185 decodedRequest = decodeWriteRequestFromString(sqlQuery, escapeProcessing, 188 timeout, lineSeparator); 189 } 190 if (decodedRequest == null && !isProbablyAReadRequest) 191 { 192 decodedRequest = decodeReadRequestFromString(sqlQuery, escapeProcessing, 194 timeout, lineSeparator); 195 } 196 else if (decodedRequest == null) 197 { 198 decodedRequest = getUnknownReadRequest(sqlQuery, escapeProcessing, 200 timeout, lineSeparator); 201 } 202 return decodedRequest; 203 } 204 205 214 public boolean requestNeedsExecute(AbstractRequest request) 215 { 216 if (driverRegExp.getStatementExecuteRequestPattern().matcher( 218 request.getSqlOrTemplate()).matches()) 219 return true; 220 221 String sql = request.getSqlOrTemplate(); 224 int semiColonIdx = sql.indexOf(';'); 225 226 if (semiColonIdx == -1) 228 return false; 229 230 if (sql.indexOf(';', semiColonIdx) != -1) 233 return true; 234 235 if (sql.trim().endsWith(";")) 238 return false; else 240 return true; 241 } 242 243 250 public boolean isAuthorizedRequest(String sql) 251 { 252 return !driverRegExp.getUnauthorizedRequestsPattern().matcher(sql) 253 .matches(); 254 } 255 256 268 public boolean isBroadcastRequired(int transactionIsolationLevel) 269 { 270 return transactionIsolationLevel == Connection.TRANSACTION_SERIALIZABLE; 271 } 272 273 276 protected abstract AlterRequest getAlterRequest(String sqlQuery, 277 boolean escapeProcessing, int timeout, String lineSeparator); 278 279 282 protected abstract CreateRequest getCreateRequest(String sqlQuery, 283 boolean escapeProcessing, int timeout, String lineSeparator); 284 285 288 protected abstract DeleteRequest getDeleteRequest(String sqlQuery, 289 boolean escapeProcessing, int timeout, String lineSeparator); 290 291 294 protected abstract DropRequest getDropRequest(String sqlQuery, 295 boolean escapeProcessing, int timeout, String lineSeparator); 296 297 300 protected abstract InsertRequest getInsertRequest(String sqlQuery, 301 boolean escapeProcessing, int timeout, String lineSeparator); 302 303 306 protected abstract SelectRequest getSelectRequest(String sqlQuery, 307 boolean escapeProcessing, int timeout, String lineSeparator); 308 309 312 protected abstract StoredProcedure getStoredProcedure(String sqlQuery, 313 boolean escapeProcessing, int timeout, String lineSeparator); 314 315 318 protected abstract UnknownReadRequest getUnknownReadRequest(String sqlQuery, 319 boolean escapeProcessing, int timeout, String lineSeparator); 320 321 324 protected abstract UnknownWriteRequest getUnknownWriteRequest( 325 String sqlQuery, boolean escapeProcessing, int timeout, 326 String lineSeparator); 327 328 331 protected abstract UpdateRequest getUpdateRequest(String sqlQuery, 332 boolean escapeProcessing, int timeout, String lineSeparator); 333 } 334 | Popular Tags |