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.core.util.GlobalConstants; 27 import org.opensubsystems.patterns.listdata.data.ListOptions; 28 29 38 public class DB2ListDatabaseUtils extends ListDatabaseUtils 39 { 40 42 45 public DB2ListDatabaseUtils() 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()) 62 { 63 72 StringBuffer buffer = new StringBuffer (); 73 StringBuffer bufferOrderedColumns = new StringBuffer (); 74 75 String strQueryLowerCase = inputQuery.toLowerCase(); 80 81 boolean isDesc = false; 82 83 int iStartFromPosition = strQueryLowerCase.indexOf(" from "); 84 85 int iSortColumnStart = strQueryLowerCase.indexOf(" order by "); 88 int iSortColumnEnd = strQueryLowerCase.indexOf(" asc"); 89 if (iSortColumnStart != -1) 90 { 91 if (iSortColumnEnd == -1) 93 { 94 iSortColumnEnd = strQueryLowerCase.indexOf(" desc"); 95 isDesc = true; 96 } 97 98 if (GlobalConstants.ERROR_CHECKING) 99 { 100 assert iSortColumnEnd != -1 101 : "There should be set up value for ASC/DESC position."; 102 } 103 104 bufferOrderedColumns.append( 106 inputQuery.substring(iSortColumnStart + " order by ".length(), 107 iSortColumnEnd)); 108 } 109 110 buffer.append("select * from ("); 112 113 buffer.append(inputQuery.substring(0, iStartFromPosition)); 115 116 buffer.append(", rownumber() over (order by "); 118 buffer.append(bufferOrderedColumns); 119 if (isDesc) 120 { 121 buffer.append(" desc"); 122 } 123 buffer.append(") as RN "); 124 125 buffer.append(inputQuery.substring(iStartFromPosition)); 127 128 buffer.append(") as TR where RN between "); 130 buffer.append(options.getBeginPosition()); 131 buffer.append(" and "); 132 buffer.append(options.getEndPosition()); 133 134 return buffer.toString(); 135 } 136 else 137 { 138 return super.preprocessSelectQuery(inputQuery, options, schema); 141 } 142 } 143 } 144 | Popular Tags |