@Override public List<List<Object>> getRows(PathQuery query) { List<List<Object>> rows = new ArrayList<List<Object>>(); if (!query.isValid()) { throw new IllegalArgumentException("query is not valid: " + query.verifyQuery()); } PathQueryExecutor runner = api.getPathQueryExecutor(); ExportResultsIterator it; try { it = runner.execute(query); } catch (ObjectStoreException e) { throw new RuntimeException("Could not run query", e); } int rowWidth = query.getView().size(); while (it.hasNext()) { List<ResultElement> row = it.next(); List<Object> parsed = new ArrayList<Object>(rowWidth); for (ResultElement e: row) { Object o = e.getField(); if (o instanceof CharSequence) { // CharSequence subclasses can cause issues on serialisation - stringify them. o = o.toString(); } parsed.add(o); } rows.add(parsed); } return rows; }
@Override public List<List<Object>> getRows(PathQuery query) { List<List<Object>> rows = new ArrayList<List<Object>>(); if (!query.isValid()) { throw new IllegalArgumentException("query is not valid: " + query.verifyQuery()); } PathQueryExecutor runner = api.getPathQueryExecutor(); ExportResultsIterator it; try { it = runner.execute(query); } catch (ObjectStoreException e) { throw new RuntimeException("Could not run query", e); } int rowWidth = query.getView().size(); while (it.hasNext()) { List<ResultElement> row = it.next(); List<Object> parsed = new ArrayList<Object>(rowWidth); for (ResultElement e: row) { Object o = e.getField(); if (o instanceof CharSequence) { // CharSequence subclasses can cause issues on serialisation - stringify them. o = o.toString(); } parsed.add(o); } rows.add(parsed); } return rows; }
if (query.isValid()) { try { Map<String, String> subClasses = query.getSubclasses();
if (query.isValid()) { try { Map<String, String> subClasses = query.getSubclasses();
if (!query.isValid()) { throw new InvalidQueryException(query.verifyQuery());
public void testOrderlessSortOrder() { PathQuery query = createQuery("OrderlessSortOrder.xml"); assertTrue("Orderless sort orders are tolerated", query.isValid()); }
public void testInvalidSortOrder() { PathQuery query = createQuery("InvalidSortOrder.xml"); assertTrue("Invalid sort orders are not tolerated", !query.isValid()); }
if (!query.isValid()) { throw new InvalidQueryException(query.verifyQuery());
return error(JSStrings.getString("IS_NULL")); if (!query.isValid()) { return errorList(query.verifyQuery());
return error(JSStrings.getString("IS_NULL")); if (!query.isValid()) { return errorList(query.verifyQuery());
public void testEmptyView() { PathQuery query = createQuery("emptyView.xml"); assertFalse("Viewless queries should be invalid", query.isValid()); assertEquals(1, query.verifyQuery().size()); }
if (!query.isValid()) { return getInvalidQuery() + formatProblems(query.verifyQuery());
if (!query.isValid()) { return getInvalidQuery() + formatProblems(query.verifyQuery());
public void testMultiTypeConstraint() throws Exception { Model model = Model.getInstanceByName("testmodel"); PathQuery q = new PathQuery(model); q.addView("Employable.name"); assertNotNull(q.addConstraint(new PathConstraintMultitype( "Employable", ConstraintOp.ISA, Arrays.asList("Contractor", "Manager")))); assertEquals(Collections.EMPTY_LIST, q.verifyQuery()); q.clearConstraints(); assertTrue(q.isValid()); q.addConstraint(new PathConstraintMultitype( // Bank cannot be an Employable "Employable", ConstraintOp.ISA, Arrays.asList("Contractor", "Bank"))); assertTrue(!q.isValid()); q.clearConstraints(); assertTrue(q.isValid()); q.addConstraint(new PathConstraintMultitype( // Contractors are not Employees "Employee", ConstraintOp.ISA, Arrays.asList("Contractor", "Manager"))); assertTrue(!q.isValid()); q.clearConstraints(); assertTrue(q.isValid()); q.addConstraint(new PathConstraintMultitype( // No such classes Foo and Bar "Employee", ConstraintOp.ISA, Arrays.asList("Foo", "Bar"))); assertTrue(!q.isValid()); q.clearConstraints(); assertTrue(q.isValid()); q.addConstraint(new PathConstraintMultitype( // Path is an attribute. "Employee.name", ConstraintOp.ISA, Arrays.asList("Contractor", "Manager"))); assertTrue(!q.isValid()); }
PathQuery pathQuery = savedQuery.getPathQuery(); pathQuery.deVerify(); if (!savedQuery.getName().contains(OLD) && !pathQuery.isValid()) { PathQueryUpdate pathQueryUpdate = new PathQueryUpdate(pathQuery, oldModel); try {
PathQuery pathQuery = savedQuery.getPathQuery(); pathQuery.deVerify(); if (!savedQuery.getName().contains(OLD) && !pathQuery.isValid()) { PathQueryUpdate pathQueryUpdate = new PathQueryUpdate(pathQuery, oldModel); try {
public void testRangeConstraints() { Model model = Model.getInstanceByName("testmodel"); PathQuery q = new PathQuery(model); q.addViews("Employee.name"); q.addViews("Employee.age"); q.addConstraint(new PathConstraintRange("Employee.age", ConstraintOp.WITHIN, Collections.singleton("10..30"))); String expected = "<query name=\"query\" model=\"testmodel\" view=\"Employee.name Employee.age\" longDescription=\"\"><constraint path=\"Employee.age\" op=\"WITHIN\"><value>10..30</value></constraint></query>"; assertEquals(expected, q.toXml()); assertTrue(q.isValid()); q = new PathQuery(model); q.addViews("Employee.name"); q.addViews("Employee.age"); q.addConstraint(new PathConstraintRange("Employee.age", ConstraintOp.OUTSIDE, Collections.singleton("10..30"))); assertTrue(q.isValid()); }
public void testTicket2636() throws Exception { Model model = Model.getInstanceByName("testmodel"); PathQuery q = new PathQuery(model); // Add views q.addView("Company.CEO.address.address"); // Add constraints and you can edit the constraint values below q.addConstraint(Constraints.lookup("Company", "Capitol Versicherung AG", ""), "A"); q.addConstraint(Constraints.lessThan("Company.vatNumber", "392018"), "B"); q.addConstraint(Constraints.eq("Company.departments.name", "Accounting"), "C"); // Add join status q.setOuterJoinStatus("Company.CEO", OuterJoinStatus.OUTER); // Add constraintLogic q.setConstraintLogic("(A and B) or C"); assertTrue("The query is now invalid", !q.isValid()); List<String> messages = q.fixUpForJoinStyle(); assertTrue("We should get a message that the logic was changed", messages.size() == 1 && messages.get(0).contains("Changed constraint logic")); assertNotNull(q.getConstraintLogic()); assertEquals("A and B and C", q.getConstraintLogic()); assertTrue("The query is now valid", q.isValid()); }
public void testFixingConstraintLogicWhilePreservingWhatWeCan() throws Exception { Model model = Model.getInstanceByName("testmodel"); PathQuery q = new PathQuery(model); q.addViews("Employee.name", "Employee.department.manager.name", "Employee.department.manager.address.address"); q.addConstraint(Constraints.eq("Employee.age", "28")); q.addConstraint(Constraints.eq("Employee.fullTime", "true")); q.addConstraint(Constraints.eq("Employee.department.manager.name", "David")); q.addConstraint(Constraints.eq("Employee.department.manager.address.address", "123 Some St.")); q.setOuterJoinStatus("Employee.department.manager", OuterJoinStatus.OUTER); q.setConstraintLogic("A or B or C or D"); List<String> messages = q.fixUpForJoinStyle(); assertTrue("We should get a message that the logic was changed", messages.size() == 1 && messages.get(0).contains("Changed constraint logic")); assertNotNull(q.getConstraintLogic()); assertEquals("(A or B) and (C or D)", q.getConstraintLogic()); assertTrue("The query is now valid", q.isValid()); }
assertEquals(OuterJoinStatus.INNER, OuterJoinStatus.valueOf("INNER")); assertEquals(Collections.EMPTY_LIST, q.verifyQuery()); assertTrue(q.isValid()); assertEquals("<query name=\"test\" model=\"testmodel\" view=\"Employee.department.name\" longDescription=\"\"><join path=\"Employee.department\" style=\"INNER\"/></query>", PathQueryBinding.marshal(q, "test", "testmodel", 1)); q.setOuterJoinStatus("Employee.department", null);