[New] Implemented querying of StringParameter
This commit is contained in:
parent
65402e9006
commit
c7ad5d21c2
|
@ -39,6 +39,9 @@ import ch.eitchnet.utils.collections.DateRange;
|
||||||
*/
|
*/
|
||||||
public class PostgreSqlAuditDao implements AuditDao {
|
public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
|
public static final String FIELDS = "id, username, firstname, lastname, date, element_type, element_accessed, new_version, action, access_type";
|
||||||
|
public static final String TABLE_NAME = "audits";
|
||||||
|
|
||||||
private PostgreSqlStrolchTransaction tx;
|
private PostgreSqlStrolchTransaction tx;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,7 +53,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasElement(String type, Long id) {
|
public boolean hasElement(String type, Long id) {
|
||||||
String sql = "select count(*) from audits where element_type = ? and id = ?"; //$NON-NLS-1$
|
String sql = "select count(*) from " + TABLE_NAME + " where element_type = ? and id = ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
@ -75,7 +78,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long querySize(DateRange dateRange) {
|
public long querySize(DateRange dateRange) {
|
||||||
String sql = "select count(*) from audits where date between ? and ?"; //$NON-NLS-1$
|
String sql = "select count(*) from " + TABLE_NAME + " where date between ? and ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
statement.setDate(1, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance());
|
statement.setDate(1, new Date(dateRange.getFromDate().getTime()), Calendar.getInstance());
|
||||||
|
@ -93,7 +96,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long querySize(String type, DateRange dateRange) {
|
public long querySize(String type, DateRange dateRange) {
|
||||||
String sql = "select count(*) from audits where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
String sql = "select count(*) from " + TABLE_NAME + " where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
@ -114,7 +117,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
public Set<String> queryTypes() {
|
public Set<String> queryTypes() {
|
||||||
Set<String> keySet = new HashSet<>();
|
Set<String> keySet = new HashSet<>();
|
||||||
|
|
||||||
String sql = "select distinct element_type from audits"; //$NON-NLS-1$
|
String sql = "select distinct element_type from " + TABLE_NAME; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
try (ResultSet result = statement.executeQuery()) {
|
try (ResultSet result = statement.executeQuery()) {
|
||||||
while (result.next()) {
|
while (result.next()) {
|
||||||
|
@ -131,7 +134,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
@Override
|
@Override
|
||||||
public Audit queryBy(String type, Long id) {
|
public Audit queryBy(String type, Long id) {
|
||||||
|
|
||||||
String sql = "select id, username, firstname, lastname, date, element_type, element_accessed, new_version, action, access_type from audits where element_type = ? and id = ?"; //$NON-NLS-1$
|
String sql = "select " + FIELDS + " from " + TABLE_NAME + " where element_type = ? and id = ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
@ -154,7 +157,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
@Override
|
@Override
|
||||||
public List<Audit> queryAll(String type, DateRange dateRange) {
|
public List<Audit> queryAll(String type, DateRange dateRange) {
|
||||||
List<Audit> list = new ArrayList<>();
|
List<Audit> list = new ArrayList<>();
|
||||||
String sql = "select id, username, firstname, lastname, date, element_type, element_accessed, new_version, action, access_type from audits where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
String sql = "select " + FIELDS + " from " + TABLE_NAME + " where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement statement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
statement.setString(1, type);
|
statement.setString(1, type);
|
||||||
|
@ -176,7 +179,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void save(Audit audit) {
|
public void save(Audit audit) {
|
||||||
String sql = "insert into audits (id, username, firstname, lastname, date, element_type, element_accessed, new_version, action, access_type) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?::access_type)"; //$NON-NLS-1$
|
String sql = "insert into " + TABLE_NAME + " (" + FIELDS + ") values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?::access_type)"; //$NON-NLS-1$
|
||||||
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
setAuditFields(audit, preparedStatement);
|
setAuditFields(audit, preparedStatement);
|
||||||
|
@ -202,7 +205,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(Audit audit) {
|
public void update(Audit audit) {
|
||||||
String sql = "update audits set id = ?, username = ?, firstname = ?, lastname = ?, date = ?, element_type = ?, element_accessed = ?, new_version = ?, action = ?, access_type = ?::access_type where id = ?"; //$NON-NLS-1$
|
String sql = "update " + TABLE_NAME + " set id = ?, username = ?, firstname = ?, lastname = ?, date = ?, element_type = ?, element_accessed = ?, new_version = ?, action = ?, access_type = ?::access_type where id = ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
setAuditFields(audit, preparedStatement);
|
setAuditFields(audit, preparedStatement);
|
||||||
|
@ -229,7 +232,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void remove(Audit audit) {
|
public void remove(Audit audit) {
|
||||||
String sql = "delete from audits where id = ?"; //$NON-NLS-1$
|
String sql = "delete from " + TABLE_NAME + " where id = ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
preparedStatement.setLong(1, audit.getId());
|
preparedStatement.setLong(1, audit.getId());
|
||||||
|
@ -256,7 +259,7 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public long removeAll(String type, DateRange dateRange) {
|
public long removeAll(String type, DateRange dateRange) {
|
||||||
String sql = "delete from audits where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
String sql = "delete from " + TABLE_NAME + " where element_type = ? and date between ? and ?"; //$NON-NLS-1$
|
||||||
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
try (PreparedStatement preparedStatement = this.tx.getConnection().prepareStatement(sql)) {
|
||||||
|
|
||||||
preparedStatement.setString(1, type);
|
preparedStatement.setString(1, type);
|
||||||
|
@ -274,7 +277,9 @@ public class PostgreSqlAuditDao implements AuditDao {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <U> List<U> doQuery(AuditQuery query, AuditVisitor<U> auditVisitor) {
|
public <U> List<U> doQuery(AuditQuery query, AuditVisitor<U> auditVisitor) {
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
PostgreSqlAuditQueryVisitor queryVisitor = new PostgreSqlAuditQueryVisitor(FIELDS);
|
||||||
|
query.accept(queryVisitor);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,138 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2013 Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package li.strolch.persistence.postgresql;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import ch.eitchnet.utils.StringMatchMode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
*/
|
||||||
|
public class PostgreSqlHelper {
|
||||||
|
|
||||||
|
public static String toSql(String indent, StringMatchMode mm, List<Object> values, String... query) {
|
||||||
|
|
||||||
|
// CS EQ
|
||||||
|
// 1. x x
|
||||||
|
// 2. x o
|
||||||
|
// 3. o x
|
||||||
|
// 4. o o
|
||||||
|
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
if (mm.isCaseSensitve() && mm.isEquals()) {
|
||||||
|
if (query.length == 1) {
|
||||||
|
sb.append("name = ?\n");
|
||||||
|
values.add(query[0]);
|
||||||
|
} else {
|
||||||
|
sb.append("name in ( ");
|
||||||
|
for (int i = 0; i < query.length; i++) {
|
||||||
|
sb.append("?");
|
||||||
|
values.add(query[i]);
|
||||||
|
if (i < query.length - 1)
|
||||||
|
sb.append(", ");
|
||||||
|
}
|
||||||
|
sb.append(" )\n");
|
||||||
|
}
|
||||||
|
} else if (!mm.isCaseSensitve() && mm.isEquals()) {
|
||||||
|
if (query.length == 1) {
|
||||||
|
sb.append("lower(name) = ?\n");
|
||||||
|
values.add(query[0].toLowerCase());
|
||||||
|
} else {
|
||||||
|
sb.append("lower(name) in ( ");
|
||||||
|
for (int i = 0; i < query.length; i++) {
|
||||||
|
sb.append("?");
|
||||||
|
values.add(query[i].toLowerCase());
|
||||||
|
if (i < query.length - 1)
|
||||||
|
sb.append(", ");
|
||||||
|
}
|
||||||
|
sb.append(" )\n");
|
||||||
|
}
|
||||||
|
} else if (!mm.isEquals() && mm.isCaseSensitve()) {
|
||||||
|
if (query.length == 1) {
|
||||||
|
sb.append("name like ?\n");
|
||||||
|
values.add("%" + query[0] + "%");
|
||||||
|
} else {
|
||||||
|
sb.append("(\n");
|
||||||
|
for (int i = 0; i < query.length; i++) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append("name like ?");
|
||||||
|
values.add("%" + query[i] + "%");
|
||||||
|
if (i < query.length - 1)
|
||||||
|
sb.append(" or");
|
||||||
|
sb.append("\n");
|
||||||
|
}
|
||||||
|
sb.append(")\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (query.length == 1) {
|
||||||
|
sb.append("lower(name) like ?\n");
|
||||||
|
values.add("%" + query[0].toLowerCase() + "%");
|
||||||
|
} else {
|
||||||
|
sb.append("(\n");
|
||||||
|
for (int i = 0; i < query.length; i++) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append(" ");
|
||||||
|
sb.append("lower(name) like ?");
|
||||||
|
values.add("%" + query[i].toLowerCase() + "%");
|
||||||
|
if (i < query.length - 1)
|
||||||
|
sb.append(" or");
|
||||||
|
sb.append("\n");
|
||||||
|
}
|
||||||
|
sb.append(")\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
ArrayList<Object> values = new ArrayList<>();
|
||||||
|
String sql = toSql(" ", StringMatchMode.CONTAINS_CASE_INSENSITIVE, values, "foo", "bar", "fub");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.CONTAINS_CASE_INSENSITIVE, values, "foo");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.CONTAINS_CASE_SENSITIVE, values, "foo", "bar", "fub");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.CONTAINS_CASE_SENSITIVE, values, "foo");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.EQUALS_CASE_INSENSITIVE, values, "foo", "bar", "fub");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.EQUALS_CASE_INSENSITIVE, values, "foo");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.EQUALS_CASE_SENSITIVE, values, "foo", "bar", "fub");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
|
||||||
|
sql = toSql(" ", StringMatchMode.EQUALS_CASE_SENSITIVE, values, "foo");
|
||||||
|
System.out.println(sql);
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,10 +15,13 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.persistence.postgresql;
|
package li.strolch.persistence.postgresql;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
|
|
||||||
import li.strolch.model.Tags;
|
import li.strolch.model.Tags;
|
||||||
import li.strolch.model.query.DateSelection;
|
import li.strolch.model.query.DateSelection;
|
||||||
import li.strolch.model.query.OrderQueryVisitor;
|
import li.strolch.model.query.OrderQueryVisitor;
|
||||||
import li.strolch.model.query.StateSelection;
|
import li.strolch.model.query.StateSelection;
|
||||||
|
import ch.eitchnet.utils.collections.DateRange;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Robert von Burg <eitch@eitchnet.ch>
|
* @author Robert von Burg <eitch@eitchnet.ch>
|
||||||
|
@ -42,15 +45,34 @@ public class PostgreSqlOrderQueryVisitor extends PostgreSqlQueryVisitor implemen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(DateSelection selection) {
|
public void visit(DateSelection selection) {
|
||||||
sb.append(indent);
|
|
||||||
sb.append("date = ?\n");
|
// TODO handle inclusive and exclusive date ranges
|
||||||
values.add(selection.getDate());
|
|
||||||
|
DateRange dateRange = selection.getDateRange();
|
||||||
|
if (dateRange.isDate()) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append("date = ?\n");
|
||||||
|
values.add(new Date(dateRange.getFromDate().getTime()));
|
||||||
|
} else if (dateRange.isBounded()) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append("date between ? and ?\n");
|
||||||
|
values.add(new Date(dateRange.getFromDate().getTime()));
|
||||||
|
values.add(new Date(dateRange.getToDate().getTime()));
|
||||||
|
} else if (dateRange.isToBounded()) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append("date < ?\n");
|
||||||
|
values.add(new Date(dateRange.getToDate().getTime()));
|
||||||
|
} else if (dateRange.isFromBounded()) {
|
||||||
|
sb.append(indent);
|
||||||
|
sb.append("date > ?\n");
|
||||||
|
values.add(new Date(dateRange.getFromDate().getTime()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(StateSelection selection) {
|
public void visit(StateSelection selection) {
|
||||||
sb.append(indent);
|
sb.append(indent);
|
||||||
sb.append("stae = ?\n");
|
sb.append("state = ?::order_state\n");
|
||||||
values.add(selection.getState().name());
|
values.add(selection.getState().name());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,8 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.persistence.postgresql;
|
package li.strolch.persistence.postgresql;
|
||||||
|
|
||||||
|
import static li.strolch.persistence.postgresql.PostgreSqlHelper.toSql;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -96,13 +98,6 @@ public abstract class PostgreSqlQueryVisitor implements StrolchElementSelectionV
|
||||||
return this.any;
|
return this.any;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the values
|
|
||||||
*/
|
|
||||||
public List<Object> getValues() {
|
|
||||||
return this.values;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return this.type;
|
return this.type;
|
||||||
}
|
}
|
||||||
|
@ -148,27 +143,8 @@ public abstract class PostgreSqlQueryVisitor implements StrolchElementSelectionV
|
||||||
public void visit(NameSelection selection) {
|
public void visit(NameSelection selection) {
|
||||||
this.sb.append(this.indent);
|
this.sb.append(this.indent);
|
||||||
String name = selection.getName();
|
String name = selection.getName();
|
||||||
|
|
||||||
// CS EQ
|
|
||||||
// 1. x x
|
|
||||||
// 2. x o
|
|
||||||
// 3. o x
|
|
||||||
// 4. o o
|
|
||||||
|
|
||||||
StringMatchMode mm = selection.getMatchMode();
|
StringMatchMode mm = selection.getMatchMode();
|
||||||
if (mm.isCaseSensitve() && mm.isEquals()) {
|
this.sb.append(toSql(this.indent, mm, this.values, name));
|
||||||
this.sb.append("name = ?\n");
|
|
||||||
this.values.add(name);
|
|
||||||
} else if (!mm.isCaseSensitve() && mm.isEquals()) {
|
|
||||||
this.sb.append("lower(name) = lower(?)\n");
|
|
||||||
this.values.add(name);
|
|
||||||
} else if (!mm.isEquals() && mm.isCaseSensitve()) {
|
|
||||||
this.sb.append("name like ?");
|
|
||||||
this.values.add("%" + name + "%");
|
|
||||||
} else {
|
|
||||||
this.sb.append("lower(name) like ?");
|
|
||||||
this.values.add(name.toLowerCase());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -240,8 +216,8 @@ public abstract class PostgreSqlQueryVisitor implements StrolchElementSelectionV
|
||||||
}
|
}
|
||||||
|
|
||||||
private void xpath(String bagKey, String paramKey, String paramValue) {
|
private void xpath(String bagKey, String paramKey, String paramValue) {
|
||||||
this.sb.append(this.indent);
|
|
||||||
String xpath = "cast(xpath('//Resource/ParameterBag[@Id=\"${bagKey}\"]/Parameter[@Id=\"${paramKey}\" and @Value=\"${paramValue}\"]', asxml) as text[]) != '{}'\n";
|
String xpath = "cast(xpath('//Resource/ParameterBag[@Id=\"${bagKey}\"]/Parameter[@Id=\"${paramKey}\" and @Value=\"${paramValue}\"]', asxml) as text[]) != '{}'\n";
|
||||||
|
this.sb.append(this.indent);
|
||||||
xpath = xpath.replace("${bagKey}", bagKey);
|
xpath = xpath.replace("${bagKey}", bagKey);
|
||||||
xpath = xpath.replace("${paramKey}", paramKey);
|
xpath = xpath.replace("${paramKey}", paramKey);
|
||||||
xpath = xpath.replace("${paramValue}", paramValue);
|
xpath = xpath.replace("${paramValue}", paramValue);
|
||||||
|
@ -250,7 +226,50 @@ public abstract class PostgreSqlQueryVisitor implements StrolchElementSelectionV
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void visit(StringParameterSelection selection) {
|
public void visit(StringParameterSelection selection) {
|
||||||
xpath(selection.getBagKey(), selection.getParamKey(), selection.getValue());
|
String value = selection.getValue();
|
||||||
|
|
||||||
|
String xpath = "xpath('//Resource/ParameterBag[@Id=\"${bagKey}\"]/Parameter[@Id=\"${paramKey}\"]/@Value', asxml))::TEXT AS content";
|
||||||
|
xpath = xpath.replace("${bagKey}", selection.getBagKey());
|
||||||
|
xpath = xpath.replace("${paramKey}", selection.getParamKey());
|
||||||
|
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append("id in (\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append(" SELECT id\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append(" FROM (\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append(" SELECT id, UNNEST(");
|
||||||
|
sb.append(xpath);
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append("from ");
|
||||||
|
sb.append(getTableName());
|
||||||
|
sb.append("\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append(") AS alias\n");
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append("WHERE ");
|
||||||
|
|
||||||
|
if (selection.getMatchMode().isEquals()) {
|
||||||
|
if (selection.getMatchMode().isCaseSensitve()) {
|
||||||
|
sb.append("content = ?\n");
|
||||||
|
} else {
|
||||||
|
sb.append("content ILIKE ?\n");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
value = "%" + value + "%";
|
||||||
|
if (selection.getMatchMode().isCaseSensitve()) {
|
||||||
|
sb.append("content LIKE ?\n");
|
||||||
|
} else {
|
||||||
|
sb.append("content ILIKE ?\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sb.append(this.indent);
|
||||||
|
sb.append(")\n");
|
||||||
|
|
||||||
|
this.values.add(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -15,8 +15,16 @@
|
||||||
*/
|
*/
|
||||||
package li.strolch.persistence.postgresql.dao.test;
|
package li.strolch.persistence.postgresql.dao.test;
|
||||||
|
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.CONFIG_SRC;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_PASSWORD;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_STORE_PATH_DIR;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_URL;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.DB_USERNAME;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.RUNTIME_PATH;
|
||||||
|
import static li.strolch.persistence.postgresql.dao.test.CachedDaoTest.dropSchema;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.DriverManager;
|
import java.sql.DriverManager;
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
|
@ -24,24 +32,39 @@ import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import li.strolch.agent.api.OrderMap;
|
||||||
|
import li.strolch.agent.api.ResourceMap;
|
||||||
|
import li.strolch.agent.api.StrolchRealm;
|
||||||
|
import li.strolch.model.ModelGenerator;
|
||||||
|
import li.strolch.model.State;
|
||||||
|
import li.strolch.model.query.DateSelection;
|
||||||
import li.strolch.model.query.IdSelection;
|
import li.strolch.model.query.IdSelection;
|
||||||
import li.strolch.model.query.NameSelection;
|
import li.strolch.model.query.NameSelection;
|
||||||
import li.strolch.model.query.OrSelection;
|
import li.strolch.model.query.OrSelection;
|
||||||
import li.strolch.model.query.OrderQuery;
|
import li.strolch.model.query.OrderQuery;
|
||||||
import li.strolch.model.query.ParameterSelection;
|
import li.strolch.model.query.ParameterSelection;
|
||||||
import li.strolch.model.query.ResourceQuery;
|
import li.strolch.model.query.ResourceQuery;
|
||||||
|
import li.strolch.model.query.StateSelection;
|
||||||
import li.strolch.model.query.StrolchTypeNavigation;
|
import li.strolch.model.query.StrolchTypeNavigation;
|
||||||
|
import li.strolch.persistence.api.StrolchTransaction;
|
||||||
import li.strolch.persistence.postgresql.PostgreSqlOrderQueryVisitor;
|
import li.strolch.persistence.postgresql.PostgreSqlOrderQueryVisitor;
|
||||||
import li.strolch.persistence.postgresql.PostgreSqlQueryVisitor;
|
import li.strolch.persistence.postgresql.PostgreSqlQueryVisitor;
|
||||||
import li.strolch.persistence.postgresql.PostgreSqlResourceQueryVisitor;
|
import li.strolch.persistence.postgresql.PostgreSqlResourceQueryVisitor;
|
||||||
|
import li.strolch.runtime.StrolchConstants;
|
||||||
|
import li.strolch.testbase.runtime.RuntimeMock;
|
||||||
|
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import ch.eitchnet.privilege.model.Certificate;
|
||||||
import ch.eitchnet.utils.StringMatchMode;
|
import ch.eitchnet.utils.StringMatchMode;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -50,6 +73,65 @@ import ch.eitchnet.utils.StringMatchMode;
|
||||||
public class QueryTest {
|
public class QueryTest {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(QueryTest.class);
|
private static final Logger logger = LoggerFactory.getLogger(QueryTest.class);
|
||||||
|
private static RuntimeMock runtimeMock;
|
||||||
|
|
||||||
|
private static Date past;
|
||||||
|
private static Date earlier;
|
||||||
|
private static Date current;
|
||||||
|
private static Date later;
|
||||||
|
private static Date future;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClass() throws SQLException {
|
||||||
|
|
||||||
|
dropSchema(DB_URL, DB_USERNAME, DB_PASSWORD);
|
||||||
|
|
||||||
|
File rootPath = new File(RUNTIME_PATH);
|
||||||
|
File configSrc = new File(CONFIG_SRC);
|
||||||
|
runtimeMock = new RuntimeMock();
|
||||||
|
runtimeMock.mockRuntime(rootPath, configSrc);
|
||||||
|
new File(rootPath, DB_STORE_PATH_DIR).mkdir();
|
||||||
|
runtimeMock.startContainer();
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.clear();
|
||||||
|
cal.set(2000, 1, 1);
|
||||||
|
past = cal.getTime();
|
||||||
|
cal.set(2000, 4, 1);
|
||||||
|
earlier = cal.getTime();
|
||||||
|
cal.set(2000, 6, 1);
|
||||||
|
current = cal.getTime();
|
||||||
|
cal.set(2000, 8, 1);
|
||||||
|
later = cal.getTime();
|
||||||
|
cal.set(2000, 11, 1);
|
||||||
|
future = cal.getTime();
|
||||||
|
|
||||||
|
Certificate cert = runtimeMock.getPrivilegeHandler().authenticate("test", "test".getBytes());
|
||||||
|
StrolchRealm realm = runtimeMock.getRealm(StrolchConstants.DEFAULT_REALM);
|
||||||
|
try (StrolchTransaction tx = realm.openTx(cert, "test")) {
|
||||||
|
OrderMap orderMap = tx.getOrderMap();
|
||||||
|
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@1", "Order 1", "MyType1", earlier, State.CREATED));
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@2", "Order 2", "MyType1", current, State.OPEN));
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@3", "Order 3", "MyType1", later, State.CLOSED));
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@4", "Order 4", "MyType2", earlier, State.CREATED));
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@5", "Order 5", "MyType2", current, State.OPEN));
|
||||||
|
orderMap.add(tx, ModelGenerator.createOrder("@6", "Order 6", "MyType2", later, State.CLOSED));
|
||||||
|
|
||||||
|
ResourceMap resourceMap = tx.getResourceMap();
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@1", "Resource 1", "MyType1"));
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@2", "Resource 2", "MyType1"));
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@3", "Resource 3", "MyType1"));
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@4", "Resource 4", "MyType2"));
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@5", "Resource 5", "MyType2"));
|
||||||
|
resourceMap.add(tx, ModelGenerator.createResource("@6", "Resource 6", "MyType2"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void afterClass() {
|
||||||
|
runtimeMock.destroyRuntime();
|
||||||
|
}
|
||||||
|
|
||||||
public Connection openConn() throws SQLException {
|
public Connection openConn() throws SQLException {
|
||||||
String url = "jdbc:postgresql://localhost/testdb";
|
String url = "jdbc:postgresql://localhost/testdb";
|
||||||
|
@ -63,54 +145,110 @@ public class QueryTest {
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryOrderAll() throws SQLException {
|
public void shouldQueryOrderAll() throws SQLException {
|
||||||
|
|
||||||
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("QTestType1"));
|
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.withAny();
|
query.withAny();
|
||||||
performOrderQuery(query, Arrays.asList("myTestOrder1"));
|
performOrderQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResourceAll() throws SQLException {
|
public void shouldQueryResourceAll() throws SQLException {
|
||||||
|
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType2"));
|
||||||
query.withAny();
|
query.withAny();
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@4", "@5", "@6"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldQueryOrderByDate() throws SQLException {
|
||||||
|
|
||||||
|
// range
|
||||||
|
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(earlier, false).to(later, false));
|
||||||
|
performOrderQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
|
|
||||||
|
// equals current
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(current, false).to(current, false));
|
||||||
|
performOrderQuery(query, Arrays.asList("@2"));
|
||||||
|
|
||||||
|
// equals later
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(later, false).to(later, false));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList("@3"));
|
||||||
|
|
||||||
|
// equals earlier
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(earlier, false).to(earlier, false));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList("@1"));
|
||||||
|
|
||||||
|
// past
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().to(past, false));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList());
|
||||||
|
|
||||||
|
// future
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(future, false));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList());
|
||||||
|
|
||||||
|
// earlier
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(past, false).to(earlier, true));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList("@1"));
|
||||||
|
|
||||||
|
// later
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new DateSelection().from(later, false).to(future, true));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList("@3"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void shouldQueryOrderByState() throws SQLException {
|
||||||
|
|
||||||
|
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new StateSelection(State.CREATED));
|
||||||
|
performOrderQuery(query, Arrays.asList("@1"));
|
||||||
|
|
||||||
|
query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
|
query.and().with(new StateSelection(State.OPEN));
|
||||||
|
performOrderQuery(query, Arrays.<String> asList("@2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryOrder1() throws SQLException {
|
public void shouldQueryOrder1() throws SQLException {
|
||||||
|
|
||||||
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("QTestType1"));
|
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(new IdSelection("myTestOrder1", "@2"),
|
query.and().with(new IdSelection("@1", "@2"),
|
||||||
new NameSelection("Test Name", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
new NameSelection("Order 1", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
||||||
performOrderQuery(query, Arrays.asList("myTestOrder1"));
|
performOrderQuery(query, Arrays.asList("@1"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryOrder2() throws SQLException {
|
public void shouldQueryOrder2() throws SQLException {
|
||||||
|
|
||||||
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("QTestType1"));
|
OrderQuery query = new OrderQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.or().with(new IdSelection("myTestOrder1", "@2"),
|
query.or().with(new IdSelection("@1", "@2"),
|
||||||
new NameSelection("Test Name", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
new NameSelection("order 1", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
||||||
performOrderQuery(query, Arrays.asList("myTestOrder1"));
|
performOrderQuery(query, Arrays.asList("@1", "@2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResource1() throws SQLException {
|
public void shouldQueryResource1() throws SQLException {
|
||||||
|
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.or().with(new IdSelection("@_00000000", "@_00000001"),
|
query.or().with(new IdSelection("@1", "@2"),
|
||||||
new NameSelection("Test Name", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
new NameSelection("Resource 1", StringMatchMode.EQUALS_CASE_SENSITIVE));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001"));
|
performResourceQuery(query, Arrays.asList("@1", "@2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResource2() throws SQLException {
|
public void shouldQueryResource2() throws SQLException {
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(
|
query.and().with(
|
||||||
new OrSelection(new IdSelection("@_00000000"), new IdSelection("@_00000001")),
|
new OrSelection(new IdSelection("@1"), new IdSelection("@2")),
|
||||||
new OrSelection(new NameSelection("My Resource 0", StringMatchMode.EQUALS_CASE_SENSITIVE),
|
new OrSelection(new NameSelection("Resource 1", StringMatchMode.EQUALS_CASE_SENSITIVE),
|
||||||
new NameSelection("My Resource 1", StringMatchMode.EQUALS_CASE_SENSITIVE)));
|
new NameSelection("Resource 2", StringMatchMode.EQUALS_CASE_SENSITIVE)));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001"));
|
performResourceQuery(query, Arrays.asList("@1", "@2"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -127,34 +265,34 @@ public class QueryTest {
|
||||||
|
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(ParameterSelection.booleanSelection("@bag01", "@param1", true));
|
query.and().with(ParameterSelection.booleanSelection("@bag01", "@param1", true));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResourceByFloagParam() throws SQLException {
|
public void shouldQueryResourceByFloagParam() throws SQLException {
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(ParameterSelection.floatSelection("@bag01", "@param2", 44.3));
|
query.and().with(ParameterSelection.floatSelection("@bag01", "@param2", 44.3));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResourceByIntegerParam() throws SQLException {
|
public void shouldQueryResourceByIntegerParam() throws SQLException {
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(ParameterSelection.integerSelection("@bag01", "@param3", 77));
|
query.and().with(ParameterSelection.integerSelection("@bag01", "@param3", 77));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResourceByLongParam() throws SQLException {
|
public void shouldQueryResourceByLongParam() throws SQLException {
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType2"));
|
||||||
query.and().with(ParameterSelection.longSelection("@bag01", "@param4", 4453234566L));
|
query.and().with(ParameterSelection.longSelection("@bag01", "@param4", 4453234566L));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@4", "@5", "@6"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldQueryResourceByStringParam() throws SQLException {
|
public void shouldQueryResourceByStringParam() throws SQLException {
|
||||||
|
|
||||||
List<String> expected = Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004");
|
List<String> expected = Arrays.asList("@1", "@2", "@3");
|
||||||
|
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(
|
query.and().with(
|
||||||
|
@ -185,7 +323,7 @@ public class QueryTest {
|
||||||
public void shouldQueryResourceByDateParam() throws SQLException {
|
public void shouldQueryResourceByDateParam() throws SQLException {
|
||||||
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
ResourceQuery query = new ResourceQuery(new StrolchTypeNavigation("MyType1"));
|
||||||
query.and().with(ParameterSelection.dateSelection("@bag01", "@param6", new Date(1354295525628L)));
|
query.and().with(ParameterSelection.dateSelection("@bag01", "@param6", new Date(1354295525628L)));
|
||||||
performResourceQuery(query, Arrays.asList("@_00000000", "@_00000001", "@_00000002", "@_00000003", "@_00000004"));
|
performResourceQuery(query, Arrays.asList("@1", "@2", "@3"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -200,7 +338,7 @@ public class QueryTest {
|
||||||
PostgreSqlResourceQueryVisitor visitor = new PostgreSqlResourceQueryVisitor("id");
|
PostgreSqlResourceQueryVisitor visitor = new PostgreSqlResourceQueryVisitor("id");
|
||||||
query.accept(visitor);
|
query.accept(visitor);
|
||||||
List<String> ids = queryIds(visitor);
|
List<String> ids = queryIds(visitor);
|
||||||
assertEquals(expected, ids);
|
assertEquals(new HashSet<>(expected), new HashSet<>(ids));
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<String> queryIds(PostgreSqlQueryVisitor visitor) throws SQLException {
|
private List<String> queryIds(PostgreSqlQueryVisitor visitor) throws SQLException {
|
||||||
|
|
Loading…
Reference in New Issue