1 21 22 package org.opensubsystems.patterns.listdata.persist.db; 23 24 import org.opensubsystems.core.error.OSSException; 25 import org.opensubsystems.core.util.GlobalConstants; 26 import org.opensubsystems.patterns.listdata.data.ListOptions; 27 28 36 public final class ListQueryPreprocessor 37 { 38 40 43 private ListQueryPreprocessor( 44 ) 45 { 46 } 48 49 51 63 public static String preprocessSelectQueryForCreationDate( 67 String inputQuery, 68 ListOptions options, 69 ListDatabaseSchema schema 70 ) throws OSSException 71 { 72 78 StringBuffer buffer = new StringBuffer (); 79 StringBuffer bufferTemp = new StringBuffer (); 80 StringBuffer bufferTemp1 = new StringBuffer (); 81 82 String strQueryLowerCase = inputQuery.toLowerCase(); 87 String strTableName = ""; 88 String strColumnName = ""; 89 String strAllColumnNames = ""; 90 String strTemp = ""; 91 boolean isAsc = true; 92 93 int iSortColumnStart = strQueryLowerCase.indexOf(" order by "); 96 int iSortColumnEnd = strQueryLowerCase.lastIndexOf(" asc") + 1; 97 int iSortColumnEndDesc = strQueryLowerCase.lastIndexOf(" desc") + 1; 98 int iInnerSortColumnEnd = 0; 99 int iActualPositionStart = 0; 100 int iActualPositionEnd = 0; 101 102 if (iSortColumnEndDesc > iSortColumnEnd) 104 { 105 iSortColumnEnd = iSortColumnEndDesc; 106 isAsc = false; 107 } 108 109 if (iSortColumnStart != -1) 111 { 112 if (GlobalConstants.ERROR_CHECKING) 113 { 114 assert iSortColumnEnd != 0 116 : "There should be set up value for ASC/DESC position."; 117 } 118 119 strColumnName = inputQuery.substring(iSortColumnStart 124 + " order by ".length(), 125 iSortColumnEnd); 126 127 if (strColumnName.toUpperCase().indexOf("CREATION_DATE") != -1) 130 { 131 if (strColumnName.indexOf(",") == -1) 134 { 135 if (strColumnName.indexOf(".") != -1) 139 { 140 strTableName = strColumnName.substring( 141 0, strColumnName.indexOf(".")); 142 143 buffer.append(inputQuery); 144 buffer.append(", "); 145 buffer.append(strTableName); 146 buffer.append(".ID "); 147 if (isAsc) 148 { 149 buffer.append("asc"); 152 } 153 else 154 { 155 buffer.append("desc"); 162 } 163 } 164 else 165 { 166 173 buffer.append(inputQuery); 174 buffer.append(", ID "); 175 if (isAsc) 176 { 177 buffer.append("asc"); 178 } 179 else 180 { 181 buffer.append("desc"); 182 } 183 } 184 } 185 else 186 { 187 buffer.append(inputQuery.substring( 190 0, iSortColumnStart + " order by ".length())); 191 strAllColumnNames = inputQuery.substring( 192 iSortColumnStart + " order by ".length(), 193 inputQuery.length()); 194 while (strAllColumnNames.indexOf(",", iActualPositionStart) != -1 195 || iActualPositionStart < strAllColumnNames.length()) 196 { 197 iActualPositionEnd = strAllColumnNames.indexOf( 200 ",", iActualPositionStart); 201 if (iActualPositionEnd == -1) 202 { 203 iActualPositionEnd = strAllColumnNames.length(); 206 } 207 strTemp = strAllColumnNames.substring(iActualPositionStart, 208 iActualPositionEnd); 209 210 if (iActualPositionStart > 0) 211 { 212 buffer.append(","); 213 } 214 buffer.append(strTemp); 215 if (strTemp.indexOf(".") != -1) 218 { 219 strTableName = strTemp.substring(0, strTemp.indexOf(".")); 221 iInnerSortColumnEnd = strTemp.toLowerCase().lastIndexOf( 223 " asc"); 224 isAsc = true; 225 if (iInnerSortColumnEnd == -1) 226 { 227 iInnerSortColumnEnd = strTemp.toLowerCase().lastIndexOf( 228 " desc"); 229 if (iInnerSortColumnEnd != -1) 230 { 231 isAsc = false; 232 } 233 else 234 { 235 iInnerSortColumnEnd = strTemp.length(); 237 } 238 } 239 strColumnName = strTemp.substring(strTemp.indexOf(".") + 1, 240 iInnerSortColumnEnd); 241 if (strColumnName.equalsIgnoreCase("CREATION_DATE")) 244 { 245 bufferTemp.delete(0, bufferTemp.length()); 247 bufferTemp.append(strTableName.toUpperCase()); 248 bufferTemp.append(".ID "); 249 bufferTemp1.delete(0, bufferTemp1.length()); 251 bufferTemp1.append(strTableName.toUpperCase()); 252 bufferTemp1.append(".ID,"); 253 if ((strAllColumnNames.toUpperCase().indexOf( 254 bufferTemp.toString()) == -1) 255 && (strAllColumnNames.toUpperCase().indexOf( 256 bufferTemp1.toString()) == -1)) 257 { 258 262 buffer.append(", "); 263 buffer.append(strTableName); 264 buffer.append(".ID "); 265 if (isAsc) 266 { 267 buffer.append("asc"); 268 } 269 else 270 { 271 buffer.append("desc"); 272 } 273 } 274 } 275 } 276 else 277 { 278 iInnerSortColumnEnd = strTemp.toLowerCase().lastIndexOf( 282 " asc"); 283 isAsc = true; 284 if (iInnerSortColumnEnd == -1) 285 { 286 iInnerSortColumnEnd = strTemp.toLowerCase().lastIndexOf( 287 " desc"); 288 if (iInnerSortColumnEnd != -1) 289 { 290 isAsc = false; 291 } 292 else 293 { 294 iInnerSortColumnEnd = strTemp.length(); 296 } 297 } 298 strColumnName = strTemp.substring(0, iInnerSortColumnEnd); 299 if (strColumnName.trim().equalsIgnoreCase("CREATION_DATE")) 302 { 303 if (strAllColumnNames.toUpperCase().indexOf(" ID ") == -1 304 && strAllColumnNames.toUpperCase().indexOf(" ID,") == -1) 305 { 306 309 buffer.append(", ID "); 310 if (isAsc) 311 { 312 buffer.append("asc"); 313 } 314 else 315 { 316 buffer.append("desc"); 317 } 318 } 319 } 320 } 321 iActualPositionStart = iActualPositionEnd + 1; 322 } 323 } 324 } 325 else 326 { 327 buffer.append(inputQuery); 328 } 329 } 330 331 return buffer.toString(); 332 } 333 } 334 | Popular Tags |