public DataSet _filterInDB(DataFilter filter) throws Exception { // Check if the SQL changes when filtering is requested. If so then reload the full dataset. SQLStatement currentStatement = createSQLStatament(); if (!lastExecutedStmt.equals(currentStatement)) { SQLDataSet sqlDataSet = new SQLDataSet(provider, dataSource, sqlQuery); sqlDataSet.load(); // Apply the in-memory filter in order to cover all the filter properties non specified as SQL conditions. DataFilter _remainingFilter = (DataFilter) filter.cloneFilter(); List<String> propIds = currentStatement.getFilterPropertyIds(); for (String propId : propIds) _remainingFilter.removeProperty(propId); DataSet result = sqlDataSet._filterInMemory(_remainingFilter); // If the in-memory filter applies then return it. if (result != null) return result; return sqlDataSet; } // Apply the in-memory filter by default. return super._filterInMemory(filter); } }
public String execute() throws Exception { if (getArguments().size() < 3) throw new IllegalArgumentException("[" + name + ", missing arguments]"); String requiredStr = getArgument(0); boolean isRequired = false; if (ARGUMENT_REQUIRED.equalsIgnoreCase(requiredStr)) isRequired = true; else if (ARGUMENT_OPTIONAL.equalsIgnoreCase(requiredStr)) isRequired = false; else throw new IllegalArgumentException("[" + name + ", argument " + requiredStr + " is not allowed. Expected: required or optional]"); String sqlColumn = getArgument(1); if (StringUtils.isBlank(sqlColumn)) { throw new IllegalArgumentException("[" + name + ", argument sqlColumn cannot be empty]"); } filterPropertyId = getArgument(2); if (StringUtils.isBlank(filterPropertyId)) { filterPropertyId = sqlColumn.toLowerCase(); } if (dataFilter != null) { String[] filterProperties = dataFilter.getPropertyIds(); for (int i = 0; i < filterProperties.length; i++) { String filterProperty = filterProperties[i]; if (filterPropertyId.equals(filterProperty)) { SQLFilterByCriteria filter = new SQLFilterByCriteria(dataFilter); filterWhereStatement = filter.SQL_getWhereClause(filterPropertyId, sqlColumn, false, true); return getPreparedStatementFragment(); } } } // If code gets this line, filter property doesn't exist on filter. if (isRequired) return "1 != 1"; else return "1 = 1"; }
String[] filterPropertyIds = filter.getPropertyIds(); if (filterPropertyIds.length == 0) return null; FilterByCriteria targetFilter = filter.cloneFilter(); String[] remainingPropIds = filter.getPropertyIds(); for (String propId : remainingPropIds) { if (getPropertyById(propId) == null) {