1 21 22 package org.opensubsystems.patterns.listdata.persist.db; 23 24 import org.opensubsystems.core.error.OSSException; 25 import org.opensubsystems.core.persist.db.DatabaseImpl; 26 import org.opensubsystems.patterns.listdata.data.ListOptions; 27 28 29 38 public class OracleListDatabaseUtils extends ListDatabaseUtils 39 { 40 42 45 public OracleListDatabaseUtils() 46 { 47 super(); 48 } 49 50 52 55 protected String preprocessSelectQuery( 56 String inputQuery, 57 ListOptions options, 58 ListDatabaseSchema schema 59 ) throws OSSException 60 { 61 if (DatabaseImpl.getInstance().hasSelectListRangeSupport()) 63 { 64 77 StringBuffer buffer = new StringBuffer (); 78 StringBuffer bufferAllColumns = new StringBuffer (); 79 StringBuffer bufferAllAliases = new StringBuffer (); 80 StringBuffer bufferAlias = new StringBuffer (); 81 82 String strQueryLowerCase = inputQuery.toLowerCase(); 87 88 int iStartFromPosition = strQueryLowerCase.indexOf(" from "); 89 int iAliasIndex = 1; 90 int iActualPosition = 0; 91 92 bufferAllColumns.append(inputQuery.substring("select".length(), iStartFromPosition)); 95 while (bufferAllColumns.indexOf(",", iActualPosition) != -1) 96 { 97 iActualPosition = bufferAllColumns.indexOf(",", iActualPosition); 98 bufferAlias.append(" a"); 100 bufferAlias.append(iAliasIndex++); 101 bufferAllColumns.insert(iActualPosition, bufferAlias.toString()); 103 iActualPosition += bufferAlias.length() + 1; 105 bufferAllAliases.append(bufferAlias); 107 bufferAllAliases.append(", "); 108 bufferAlias.delete(0, bufferAlias.length()); 109 } 110 bufferAlias.append(" a"); 112 bufferAlias.append(iAliasIndex); 113 114 bufferAllColumns.append(bufferAlias); 115 bufferAllAliases.append(bufferAlias); 117 118 buffer.append("select "); 120 buffer.append(bufferAllAliases); 121 buffer.append(" from (select "); 123 buffer.append(bufferAllAliases); 124 buffer.append(", rownum RN from (select"); 125 126 buffer.append(bufferAllColumns); 128 129 buffer.append(inputQuery.substring(iStartFromPosition)); 131 132 buffer.append(") where rownum < "); 134 buffer.append(options.getEndPosition() + 1); 135 buffer.append(") where RN > "); 137 buffer.append(options.getBeginPosition() - 1); 138 139 return buffer.toString(); 140 } 141 else 142 { 143 return super.preprocessSelectQuery(inputQuery, options, schema); 146 } 147 } 148 } 149 | Popular Tags |