use of com.servoy.j2db.query.SetCondition in project servoy-client by Servoy.
the class Messages method fillLocaleMessages.
private static void fillLocaleMessages(String clientId, IDataServer dataServer, Table table, String serverName, Column filterColumn, Object columnValueFilter, String searchKey, String searchText, Locale language, Properties properties, int loadingType, IFoundSetManagerInternal fm) throws ServoyException, RemoteException {
QueryTable messagesTable = new QueryTable(table.getSQLName(), table.getDataSource(), table.getCatalog(), table.getSchema());
QuerySelect sql = new QuerySelect(messagesTable);
// $NON-NLS-1$
QueryColumn msgKey = new QueryColumn(messagesTable, -1, "message_key", Types.VARCHAR, 150, 0, null, 0);
// $NON-NLS-1$
QueryColumn msgVal = new QueryColumn(messagesTable, -1, "message_value", Types.VARCHAR, 2000, 0, null, 0);
// $NON-NLS-1$
QueryColumn msgLang = new QueryColumn(messagesTable, -1, "message_language", Types.VARCHAR, 150, 0, null, 0);
sql.addColumn(msgKey);
sql.addColumn(msgVal);
// $NON-NLS-1$
String condMessages = "MESSAGES";
String langValue = (loadingType == SPECIFIED_LOCALE) ? localeToString(language) : language.getLanguage();
// default
sql.addCondition(condMessages, new CompareCondition(IBaseSQLCondition.EQUALS_OPERATOR, msgLang, new QueryColumnValue(langValue, null)));
if (filterColumn != null) {
CompareCondition cc = new CompareCondition(IBaseSQLCondition.EQUALS_OPERATOR, filterColumn.queryColumn(messagesTable), new QueryColumnValue(columnValueFilter, null));
sql.addCondition(condMessages, cc);
}
// Filter to only include records with the default (null) value for columns flagged as Tenant column
for (Column column : table.getTenantColumns()) {
CompareCondition cc = new CompareCondition(IBaseSQLCondition.ISNULL_OPERATOR, column.queryColumn(messagesTable), null);
sql.addCondition("_svy_tenant_id_filter_" + column.getName(), cc);
}
if (searchKey != null || searchText != null) {
QueryTable subselectTable = new QueryTable(table.getSQLName(), table.getDataSource(), table.getCatalog(), table.getSchema());
QuerySelect subselect = new QuerySelect(subselectTable);
// $NON-NLS-1$
QueryColumn msgKeySub = new QueryColumn(subselectTable, -1, "message_key", Types.VARCHAR, 150, 0, null, 0);
// $NON-NLS-1$
QueryColumn msgValueSub = new QueryColumn(subselectTable, -1, "message_value", Types.VARCHAR, 2000, 0, null, 0);
// $NON-NLS-1$
QueryColumn msgLangSub = new QueryColumn(subselectTable, -1, "message_language", Types.VARCHAR, 150, 0, null, 0);
subselect.addColumn(msgKeySub);
// $NON-NLS-1$
String condSearch = "SEARCH";
if (searchKey != null) {
subselect.addCondition(condSearch, new CompareCondition(IBaseSQLCondition.LIKE_OPERATOR, msgKeySub, new QueryColumnValue('%' + searchKey + '%', null)));
}
if (searchText != null) {
subselect.addConditionOr(condSearch, new CompareCondition(IBaseSQLCondition.LIKE_OPERATOR, msgValueSub, new QueryColumnValue('%' + searchText + '%', null)));
}
sql.addCondition(condMessages, new SetCondition(IBaseSQLCondition.EQUALS_OPERATOR, new QueryColumn[] { msgKey }, subselect, true));
}
// $NON-NLS-1$
if (Debug.tracing())
Debug.trace("Loading messages from DB: SQL: " + sql);
IDataSet set = dataServer.performQuery(clientId, serverName, null, sql, null, fm != null ? fm.getTableFilterParams(serverName, sql) : null, false, 0, Integer.MAX_VALUE, IDataServer.MESSAGES_QUERY);
for (int i = 0; i < set.getRowCount(); i++) {
Object[] row = set.getRow(i);
if (// $NON-NLS-1$
row[1] != null && !"".equals(row[1])) {
properties.setProperty((String) row[0], (String) row[1]);
}
}
}
use of com.servoy.j2db.query.SetCondition in project servoy-client by Servoy.
the class TestNGClient method createDataServer.
@Override
protected IDataServer createDataServer() {
return new IDataServer() {
private final HashMap<String, IDataSet> dataSetMap = new HashMap<String, IDataSet>();
@Override
public void setServerMaintenanceMode(boolean maintenanceMode) throws RemoteException {
}
@Override
public void logMessage(String msg) throws RemoteException {
}
@Override
public boolean isInServerMaintenanceMode() throws RemoteException {
return false;
}
@Override
public boolean releaseLocks(String client_id, String server_name, String table_name, Set<Object> pkhashkeys) throws RemoteException, RepositoryException {
return false;
}
@Override
public IDataSet acquireLocks(String client_id, String server_name, String table_name, Set<Object> pkhashkeys, QuerySelect lockSelect, String transaction_id, ArrayList<TableFilter> filters, int chunkSize) throws RemoteException, RepositoryException {
return null;
}
@Override
public String startTransaction(String clientId, String server_name) throws RepositoryException, RemoteException {
return null;
}
@Override
public Object[] performUpdates(String clientId, ISQLStatement[] statements) throws ServoyException, RemoteException {
return statements;
}
@Override
public IDataSet[] performQuery(String client_id, String server_name, String transaction_id, QueryData[] array) throws ServoyException, RemoteException {
if (array.length > 0) {
String ds = array[0].getSqlSelect().getTable().getDataSource();
if ("mem:relatedtest".equals(ds)) {
IDataSet set = dataSetMap.get(ds);
IDataSet[] returnDataSet = new IDataSet[array.length];
for (int i = 0; i < array.length; i++) {
returnDataSet[i] = new BufferedDataSet();
for (int k = 0; k < set.getRowCount(); k++) {
Object[][] value = (Object[][]) ((Placeholder) ((SetCondition) ((QuerySelect) array[i].getSqlSelect()).getConditions().values().iterator().next().getConditions().get(0)).getValues()).getValue();
if (set.getRow(k)[1].equals(value[0][0])) {
returnDataSet[i].addRow(new Object[] { set.getRow(k)[0], set.getRow(k)[1], set.getRow(k)[2], set.getRow(k)[3] });
}
}
}
return returnDataSet;
}
}
return null;
}
@Override
public IDataSet performQuery(String client_id, String server_name, String driverTableName, String transaction_id, String sql, Object[] questiondata, int startRow, int rowsToRetrieve, boolean updateIdleTimestamp) throws ServoyException, RemoteException {
// don't know the
return dataSetMap.values().iterator().next();
// datasource,
// just return
// the first
// dataset
}
@Override
public IDataSet performQuery(String client_id, String server_name, String transaction_id, ISQLSelect sqlSelect, ColumnType[] resultTypes, ArrayList<TableFilter> filters, boolean distinctInMemory, int startRow, int rowsToRetrieve, boolean updateIdleTimestamp) throws ServoyException, RemoteException {
return dataSetMap.get(sqlSelect.getTable().getDataSource());
}
@Override
public IDataSet performQuery(String client_id, String server_name, String driverTableName, String transaction_id, String sql, Object[] questiondata, int startRow, int rowsToRetrieve, int type) throws ServoyException, RemoteException {
// don't know the
return dataSetMap.values().iterator().next();
// datasource,
// just return
// the first
// dataset
}
@Override
public IDataSet performQuery(String client_id, String server_name, String transaction_id, ISQLSelect sqlSelect, ColumnType[] resultTypes, ArrayList<TableFilter> filters, boolean distinctInMemory, int startRow, int rowsToRetrieve, int type, ITrackingSQLStatement trackingInfo) throws ServoyException, RemoteException {
return dataSetMap.get(sqlSelect.getTable().getDataSource());
}
@Override
public IDataSet performQuery(String client_id, String server_name, String transaction_id, ISQLSelect sqlSelect, ColumnType[] resultTypes, ArrayList<TableFilter> filters, boolean distinctInMemory, int startRow, int rowsToRetrieve, int type) throws ServoyException, RemoteException {
IDataSet set = dataSetMap.get(sqlSelect.getTable().getDataSource());
if (sqlSelect instanceof QuerySelect && ((QuerySelect) sqlSelect).getColumns().size() == 1) {
// pk select
int lastRow = Math.min(set.getRowCount(), startRow + rowsToRetrieve);
BufferedDataSet ds = BufferedDataSetInternal.createBufferedDataSet(null, null, new SafeArrayList<Object[]>(0), lastRow < set.getRowCount());
for (int i = startRow; i < lastRow; i++) {
ds.addRow(new Object[] { set.getRow(i)[0] });
}
return ds;
}
return set;
}
@Override
public IDataSet performQuery(String client_id, String server_name, String driverTableName, String transaction_id, String sql, Object[] questiondata, int startRow, int rowsToRetrieve) throws ServoyException, RemoteException {
// don't know the
return dataSetMap.values().iterator().next();
// datasource,
// just return
// the first
// dataset
}
@Override
public IDataSet performQuery(String client_id, String server_name, String transaction_id, ISQLSelect sqlSelect, ColumnType[] resultTypes, ArrayList<TableFilter> filters, boolean distinctInMemory, int startRow, int rowsToRetrieve) throws ServoyException, RemoteException {
return dataSetMap.get(sqlSelect.getTable().getDataSource());
}
@Override
public IDataSet performCustomQuery(String client_id, String server_name, String driverTableName, String transaction_id, ISQLSelect sqlSelect, ArrayList<TableFilter> filters, int startRow, int rowsToRetrieve) throws ServoyException, RemoteException {
return dataSetMap.get(sqlSelect.getTable().getDataSource());
}
@Override
public boolean notifyDataChange(String client_id, String server_name, String tableName, IDataSet pks, int action, String transaction_id) throws RemoteException {
return false;
}
@Override
public ITable insertQueryResult(String client_id, String queryServerName, String queryTid, ISQLSelect sqlSelect, ArrayList<TableFilter> filters, boolean distinctInMemory, int startRow, int rowsToRetrieve, int type, String dataSource, String targetServerName, String targetTableName, String targetTid, ColumnType[] columnTypes, String[] pkNames) throws ServoyException, RemoteException {
return null;
}
@Override
public InsertResult insertDataSet(String client_id, IDataSet set, final String dataSource, String serverName, String tableName, String tid, ColumnType[] columnTypes, String[] pkNames, HashMap<String, ColumnInfoDef> columnInfoDefinitions) throws ServoyException, RemoteException {
dataSetMap.put(dataSource, set);
Table table = new Table(serverName, serverName, true, ITable.TABLE, null, null);
table.setDataSource(dataSource);
for (int i = 0; i < set.getColumnCount(); i++) {
Column col = new Column(table, set.getColumnNames()[i], set.getColumnTypes()[i], 50, 50, true);
table.addColumn(col);
if (Arrays.binarySearch(pkNames, col.getName()) >= 0) {
col.setDatabasePK(true);
}
}
return new InsertResult(table, new Object[0]);
}
@Override
public QuerySet getSQLQuerySet(String serverName, ISQLQuery sqlQuery, ArrayList<TableFilter> filters, int startRow, int rowsToRetrieve, boolean forceQualifyColumns, boolean disableUseArrayForIn) throws RepositoryException, RemoteException {
QuerySet qs = new QuerySet();
qs.setSelect(new QueryString("select from test", false));
return qs;
}
@Override
public Object getNextSequence(String serverName, String tableName, String columnName, int columnInfoID, String columnInfoServer) throws RepositoryException, RemoteException {
return null;
}
@Override
public Blob getBlob(String clientId, String serverName, ISQLSelect blobSelect, ArrayList<TableFilter> filters, String tid) throws RepositoryException, RemoteException {
return null;
}
@Override
public boolean endTransactions(String client_id, String[] transaction_id, boolean commit) throws RepositoryException, RemoteException {
return false;
}
@Override
public void dropTemporaryTable(String client_id, String serverName, String tableName) throws RemoteException, RepositoryException {
}
@Override
public ISQLStatement createSQLStatement(int action, String server_name, String tableName, Object[] pkColumnData, String tid, ISQLUpdate sqlUpdate, ArrayList<TableFilter> filters) throws RemoteException {
return null;
}
@Override
public ISQLStatement createSQLStatement(int action, String server_name, String tableName, Object[] pkColumnData, String tid, String sql, Object[] questiondata) throws RemoteException, RepositoryException {
return null;
}
@Override
public void addClientAsTableUser(String client_id, String serverName, String tableName) throws RemoteException, RepositoryException {
}
@Override
public IDataSet[] executeProcedure(String clientId, String server_name, String tid, Procedure procedure, Object[] arguments) throws RepositoryException, RemoteException {
return null;
}
};
}
use of com.servoy.j2db.query.SetCondition in project servoy-client by Servoy.
the class FoundSet method loadByQuery.
public boolean loadByQuery(String query, Object[] args) throws ServoyException {
if (query == null || sheet.getTable() == null)
return false;
int from_index = -1;
int order_by_index;
// check requirements
if (!SQLGenerator.isSelectQuery(query)) {
throw new IllegalArgumentException(SQLGenerator.SQL_QUERY_VALIDATION_MESSAGE + ':' + query);
}
String sql_lowercase = Utils.toEnglishLocaleLowerCase(query);
// $NON-NLS-1$
order_by_index = sql_lowercase.lastIndexOf("order by");
boolean analyse_query_parts = (order_by_index != -1);
if (analyse_query_parts) {
// subquery. NOTE: this means that the ordering defined in the order-by part is lost.
if (// $NON-NLS-1$
((from_index = sql_lowercase.indexOf("from")) == -1) || (sql_lowercase.indexOf(Utils.toEnglishLocaleLowerCase(sheet.getTable().getSQLName())) == -1) || // $NON-NLS-1$
(sql_lowercase.indexOf("group by") != -1) || // $NON-NLS-1$
(sql_lowercase.indexOf("having") != -1) || // $NON-NLS-1$
(sql_lowercase.indexOf("union") != -1) || // $NON-NLS-1$
(sql_lowercase.indexOf("join") != -1) || // $NON-NLS-1$
(sql_lowercase.indexOf(".") == -1)) {
analyse_query_parts = false;
}
}
if (initialized && (getFoundSetManager().getEditRecordList().stopIfEditing(this) != ISaveConstants.STOPPED)) {
fsm.getApplication().reportJSError(// $NON-NLS-1$
"couldn't load dataset because foundset had edited records but couldn't save it: " + this + ", edited record(s): " + Utils.stringJoin(getFoundSetManager().getEditRecordList().getEditedRecords(this), '.') + ", failed record(s): " + Utils.stringJoin(getFoundSetManager().getEditRecordList().getFailedRecords(this), '.'), null);
return false;
}
QuerySelect originalQuery = pksAndRecords.getQuerySelectForReading();
QuerySelect sqlSelect = AbstractBaseQuery.deepClone(creationSqlSelect);
sqlSelect.clearCondition(SQLGenerator.CONDITION_RELATION);
sqlSelect.clearCondition(SQLGenerator.CONDITION_OMIT);
if (rowManager != null)
rowManager.clearAndCheckCache();
initialized = true;
Object[] whereArgs = null;
if (args != null) {
whereArgs = new Object[args.length];
for (int i = 0; i < args.length; i++) {
Object o = args[i];
if (o != null && o.getClass().equals(Date.class)) {
o = new Timestamp(((Date) o).getTime());
}
whereArgs[i] = o;
}
}
// for instance, loadRecords(SQL) followed by extended search (S) and invertrecords executes query 'NOT(SQL OR S)'
if (!analyse_query_parts) {
// do not analyze the parts of the query, just create a set-condition that compares the pk columns with the result of the subquery
Iterator<Column> pkIt = ((Table) getTable()).getRowIdentColumns().iterator();
if (!pkIt.hasNext()) {
throw new RepositoryException(ServoyException.InternalCodes.PRIMARY_KEY_NOT_FOUND, new Object[] { getTable().getName() }).setContext(this.toString());
}
List<QueryColumn> pkQueryColumns = new ArrayList<QueryColumn>();
while (pkIt.hasNext()) {
Column c = pkIt.next();
pkQueryColumns.add(c.queryColumn(sqlSelect.getTable()));
}
// must strip of the order-by part because not all databases (Oracle, who else) like order-by in subselect
String customQuery = query;
if (order_by_index > 0) {
// query contains order-by clause, find the next a closing bracket if it exists.
// order-by has to be removed because some dbs do not allow that inside subselect.
char[] chars = query.toCharArray();
int level = 1;
int i;
for (i = order_by_index; level > 0 && i < chars.length; i++) {
switch(chars[i]) {
case ')':
level--;
break;
case '(':
level++;
break;
}
}
// in that case we can leave the ordering in place because it it not the sorting of the top-level query.
if (level == 1) {
// order-by clause was at the end
customQuery = query.substring(0, order_by_index);
}
}
sqlSelect.setCondition(SQLGenerator.CONDITION_SEARCH, new SetCondition(IBaseSQLCondition.IN_OPERATOR, pkQueryColumns.toArray(new QueryColumn[pkQueryColumns.size()]), new QueryCustomSelect(customQuery, whereArgs), true));
// set the previous sort, add all joins that are needed for this sort
List<IQuerySort> origSorts = originalQuery.getSorts();
if (origSorts != null) {
ArrayList<IQuerySort> sorts = new ArrayList<IQuerySort>();
// find which sorts we will use and which tables are needed for that
Set<BaseQueryTable> sortTables = new HashSet<BaseQueryTable>();
for (IQuerySort isort : origSorts) {
if (isort instanceof QuerySort) {
QuerySort sort = (QuerySort) isort;
IQuerySelectValue icolumn = sort.getColumn();
if (icolumn instanceof QueryColumn) {
QueryColumn column = (QueryColumn) icolumn;
sortTables.add(column.getTable());
sorts.add(sort);
}
}
// ignore custom sorts and sorts on other things than columns
}
// try to find the joins that are needed to satisfy tablesToResolve
List<BaseQueryTable> tablesToResolve = new ArrayList<BaseQueryTable>();
tablesToResolve.addAll(sortTables);
List<BaseQueryTable> resolvedTables = new ArrayList<BaseQueryTable>();
resolvedTables.add(sqlSelect.getTable());
ArrayList<ISQLJoin> requiredJoins = new ArrayList<ISQLJoin>();
boolean found = true;
while (found && tablesToResolve.size() > 0) {
BaseQueryTable table = tablesToResolve.remove(0);
if (resolvedTables.contains(table)) {
continue;
}
found = false;
ArrayList<ISQLJoin> joins = originalQuery.getJoins();
if (joins != null) {
for (ISQLJoin ijoin : joins) {
if (!found && ijoin instanceof ISQLTableJoin) {
ISQLTableJoin join = (ISQLTableJoin) ijoin;
if (table.equals(join.getForeignTable())) {
// have to add this join
tablesToResolve.add(join.getPrimaryTable());
resolvedTables.add(table);
requiredJoins.add(join);
found = true;
}
}
}
}
}
if (found) {
sqlSelect.setJoins(requiredJoins);
sqlSelect.setSorts(sorts);
} else {
// $NON-NLS-1$
Debug.log("Could not restore order by in loadRecords(): couild not find all tables for sorting in " + originalQuery);
}
}
} else {
// create a query with the different parts as custom elements
sqlSelect.clearJoins();
// not needed when you have no joins and may conflict with order by
sqlSelect.setDistinct(false);
String tables;
// $NON-NLS-1$
int where_index = sql_lowercase.indexOf("where");
if (where_index == -1) {
tables = query.substring(from_index + 4, order_by_index);
// no where-clause, remove the search condition (was set to FALSE in clear()
sqlSelect.clearCondition(SQLGenerator.CONDITION_SEARCH);
} else {
tables = query.substring(from_index + 4, where_index);
sqlSelect.setCondition(SQLGenerator.CONDITION_SEARCH, new CustomCondition(query.substring(where_index + 5, order_by_index).trim(), whereArgs));
}
// pick the foundset main table from the tables in the query (does not have to be the first one, we generate sql ourselves
// that puts the main table at the end, see QueryGenerator)
boolean foundTable = false;
String mainTable = sheet.getTable().getName();
StringBuilder otherTables = new StringBuilder();
// $NON-NLS-1$
StringTokenizer tok = new StringTokenizer(tables, ",");
// default alias to table name
String mainTableAlias = mainTable;
// $NON-NLS-1$
String whitespace = "\\s+";
while (tok.hasMoreElements()) {
String tableName = tok.nextToken().trim();
String[] lcTableName = tableName.toLowerCase().split(whitespace);
if (matchesMainTablename(lcTableName[0])) {
foundTable = true;
// either 'tabname', 'tabname aliasname' or 'tabname AS aliasname', when no alias is given, use table name as alias
mainTableAlias = tableName.split(whitespace)[lcTableName.length - 1];
} else {
if (otherTables.length() > 0) {
// $NON-NLS-1$
otherTables.append(", ");
}
otherTables.append(tableName);
}
}
// set table alias or unalias table when no alias was used
BaseQueryTable qTable = sqlSelect.getTable();
sqlSelect.relinkTable(sqlSelect.getTable(), new QueryTable(qTable.getName(), qTable.getDataSource(), qTable.getCatalogName(), qTable.getSchemaName(), mainTableAlias));
if (otherTables.length() > 0) {
// $NON-NLS-1$
if (!foundTable)
throw new IllegalArgumentException(fsm.getApplication().getI18NMessage("servoy.foundSet.query.error.firstTable"));
// $NON-NLS-1$
sqlSelect.addJoin(new QueryCustomJoin("foundset.loadbyquery", sqlSelect.getTable(), otherTables.toString()));
}
ArrayList<IQuerySort> sorts = new ArrayList<IQuerySort>();
// $NON-NLS-1$
Enumeration<Object> sortParts = new StringTokenizer(query.substring(order_by_index + 8), ",");
while (sortParts.hasMoreElements()) {
sorts.add(new QueryCustomSort(((String) sortParts.nextElement()).trim()));
}
sqlSelect.setSorts(sorts);
}
return loadByQuery(sqlSelect);
}
use of com.servoy.j2db.query.SetCondition in project servoy-client by Servoy.
the class SQLGenerator method createUpdateLockSelect.
public static QuerySelect createUpdateLockSelect(Table table, Object[][] pkValues, boolean lockInDb) {
QuerySelect lockSelect = new QuerySelect(new QueryTable(table.getSQLName(), table.getDataSource(), table.getCatalog(), table.getSchema()));
if (lockInDb)
lockSelect.setLockMode(ISQLSelect.LOCK_MODE_LOCK_NOWAIT);
LinkedHashMap<Column, QueryColumn> allQueryColumns = new LinkedHashMap<>();
for (Column column : table.getColumns()) {
allQueryColumns.put(column, column.queryColumn(lockSelect.getTable()));
}
lockSelect.setColumns(new ArrayList<IQuerySelectValue>(allQueryColumns.values()));
// get the pk columns, make sure the order is in pk-order (alphabetical)
ArrayList<QueryColumn> pkQueryColumns = new ArrayList<>();
for (Column pkColumn : table.getRowIdentColumns()) {
pkQueryColumns.add(allQueryColumns.get(pkColumn));
}
// values is an array as wide as the columns, each element consists of the values for that column
Object[][] values = new Object[pkQueryColumns.size()][];
for (int k = 0; k < pkQueryColumns.size(); k++) {
values[k] = new Object[pkValues.length];
for (int r = 0; r < pkValues.length; r++) {
values[k][r] = pkValues[r][k];
}
}
lockSelect.setCondition(CONDITION_LOCK, new SetCondition(IBaseSQLCondition.EQUALS_OPERATOR, pkQueryColumns.toArray(new QueryColumn[pkQueryColumns.size()]), values, true));
return lockSelect;
}
use of com.servoy.j2db.query.SetCondition in project servoy-client by Servoy.
the class SQLGenerator method createDynamicPKSetConditionForFoundset.
static SetCondition createDynamicPKSetConditionForFoundset(FoundSet foundSet, BaseQueryTable queryTable, IDataSet pks) {
Table table = (Table) foundSet.getTable();
List<Column> rowIdentColumns = table.getRowIdentColumns();
QueryColumn[] pkQueryColumns = new QueryColumn[rowIdentColumns.size()];
// getPrimaryKeys from table
for (int i = 0; i < rowIdentColumns.size(); i++) {
Column column = rowIdentColumns.get(i);
pkQueryColumns[i] = column.queryColumn(queryTable);
}
// Dynamic PK condition, the special placeholder will be updated when the foundset pk set changes
Placeholder placeHolder = new Placeholder(new TablePlaceholderKey(queryTable, SQLGenerator.PLACEHOLDER_FOUNDSET_PKS));
placeHolder.setValue(new DynamicPkValuesArray(rowIdentColumns, pks.clone()));
return new SetCondition(IBaseSQLCondition.EQUALS_OPERATOR, pkQueryColumns, placeHolder, true);
}
Aggregations