if (queryName != null) { logger.debug("Query {} is going to be used to retrieve results from working memory", queryName); QueryResults results = kieSession.getQueryResults(queryName); results.forEach(row -> assignments.add((Assignment)row.get("assignment"))); } else { logger.debug("No query defined, retrieving all facts of type Assignment");
@Test(timeout = 10000L) public void noResultTest() { QueryResults results = ksession.getQueryResults("EventsFromStream"); assertEquals(0, results.size()); }
@Test public void deleteFactTwiceTest() { FactHandle george = ksession.insert(new Person("George", 19)); QueryResults results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(1L); ksession.delete(george); results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); ksession.delete(george); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); }
@Test(timeout = 5000) public void testConcurrentQueries() { boolean succ = false; try { final QueryResults res = ksession.getQueryResults("foo"); succ = (res.size() == 1); return succ; } catch (final Exception e) {
@Test public void testDroolsQueryCleanup() throws Exception { KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBase("test_QueryMemoryLeak.drl")); retractedWorker = (Object) ksession.getQueryResults( "getWorker", new Object[]{workerId} );
public void runQueryListenerTest( QueryListenerOption option ) throws IOException, ClassNotFoundException { String str = ""; str += "package org.drools.compiler.integrationtests\n"; str += "import " + Cheese.class.getCanonicalName() + " \n"; str += "query cheeses(String $type) \n"; str += " $cheese : Cheese(type == $type) \n"; str += "end\n"; KieBase kbase = SerializationHelper.serializeObject(loadKnowledgeBaseFromString(str)); KieSession ksession = createKieSession( kbase, option ); // insert some data into the session for ( int i = 0; i < 10000; i++ ) { ksession.insert( new Cheese( i % 2 == 0 ? "stilton" : "brie" ) ); } // query the session List<Cheese> cheeses; for ( int i = 0; i < 100; i++ ) { org.kie.api.runtime.rule.QueryResults queryResults = ksession.getQueryResults( "cheeses", new Object[]{"stilton"} ); cheeses = new ArrayList<Cheese>(); for ( QueryResultsRow row : queryResults ) { cheeses.add( (Cheese) row.get( "$cheese" ) ); } assertEquals( 5000, cheeses.size() ); } }
private static QueryResults getQueryResults(KieSession session, String queryName, Object... arguments ) throws Exception { QueryResultsImpl results = (QueryResultsImpl) session.getQueryResults( queryName, arguments ); assertEquals( "Query results size", results.size(), flatResults.size() ); assertEquals( "Query results identifiers", results.getIdentifiers().length, flatResults.getIdentifiers().length ); Set<String> resultIds = new TreeSet<String>(Arrays.asList(results.getIdentifiers())); Set<String> flatIds = new TreeSet<String>(Arrays.asList(flatResults.getIdentifiers())); QueryResultsRow copyRow = copyFlatIter.next(); for( String id : identifiers ) { Object obj = row.get(id); if( obj != null ) { Object copyObj = copyRow.get(id); assertTrue( "Flat query result [" + i + "] does not contain result: '" + id + "': " + obj + "/" + copyObj, obj != null && obj.equals(copyObj)); String copyFhStr = copyFh.toExternalForm(); copyFhStr = copyFhStr.substring(0, copyFhStr.lastIndexOf(":")); assertEquals( "Unequal fact handles for fact handle '" + ((InternalFactHandle) fh).getId() + "':", fhStr, copyFhStr );
private void doIt(Object o1, Object o2, String query, int expected, boolean doUpdate, boolean doRetract) { KieSession knowledgeSession = knowledgeBase.newKieSession(); try { knowledgeSession.insert( o1 ); FactHandle handle2 = knowledgeSession.insert( o2 ); if ( doUpdate ) { knowledgeSession.update( handle2, o2 ); } else if ( doRetract ) { knowledgeSession.retract( handle2 ); handle2 = knowledgeSession.insert( o2 ); } QueryResults queryResults = knowledgeSession.getQueryResults( query ); assertEquals( expected, queryResults.size() ); } finally { knowledgeSession.dispose(); } }
private static void execute(KieContainer kc) { KieSession ksession = kc.newKieSession("rule2KS"); Person p1 = new Person(35, "xu", "handsome"); Person p2 = new Person(30, "hua", "handsome"); ksession.insert(p1); ksession.insert(p2); ksession.fireAllRules(); QueryResults results = ksession.getQueryResults("people2"); System.out.println("we have " + results.size() + " people over the age of 30"); System.out.println("These people are are over 30:"); for (QueryResultsRow row : results) { Person person = (Person) row.get("person"); System.out.println(person.getName() + "\n"); } ksession.dispose(); } }
@Test public void noResultTest() { QueryResults results = ksession.getQueryResults("EventsFromStream"); assertEquals(0, results.size()); }
@Test public void deleteUpdatedFactTest() { FactHandle person = ksession.insert(new Person("George", 18)); ksession.update(person, new Person("John", 21)); QueryResults results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(1L); ksession.delete(person); results = ksession.getQueryResults("countPerson"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$personCount")).isEqualTo(0L); }
private void verifyWithQueryNoPersonsPresentInFacts() { QueryResults results = ksession.getQueryResults("persons"); assertThat(results).isNotEmpty(); results = ksession.getQueryResults("persons"); assertThat(results).isNotEmpty(); final QueryResultsRow resultsRow = results.iterator().next(); assertThat(resultsRow.get("$persons")).isInstanceOf(List.class); final List<Object> persons = (List<Object>) resultsRow.get("$persons"); assertThat(persons).isEmpty(); }
@Test public void testDeclaredLengthWindowInQuery() { EntryPoint entryPoint = ksession.getEntryPoint("EventStream"); TestEvent event; for (int i = 1; i <= 10; i++) { event = new TestEvent(null, "lengthDec", null); entryPoint.insert(event); assertEquals((i < 5 ? i : 5), ((Long) ksession .getQueryResults("TestDeclaredLengthWindow") .iterator().next().get("$eventCount")).intValue()); } }
@Test public void deleteFactTest() { ksession.insert(new Person("Petr", 25)); FactHandle george = ksession.insert(new Person("George", 19)); QueryResults results = ksession.getQueryResults("informationAboutPersons"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$countOfPerson")).isEqualTo(2L); ksession.delete(george); results = ksession.getQueryResults("informationAboutPersons"); Assertions.assertThat(results).isNotEmpty(); Assertions.assertThat(results.iterator().next().get("$countOfPerson")).isEqualTo(1L); }
private <T> void verifyFactsWithQuery(final Class<T> expectedClassOfFacts, final String queryToGetFacts, final T... factsToVerify) { final QueryResults results = ksession.getQueryResults(queryToGetFacts); assertThat(results).isNotEmpty(); final QueryResultsRow resultsRow = results.iterator().next(); assertThat(resultsRow.get("$" + queryToGetFacts)).isInstanceOf(List.class); final List<Object> objects = (List<Object>) resultsRow.get("$" + queryToGetFacts); assertThat(objects).hasSize(factsToVerify.length); assertThat(objects).hasOnlyElementsOfType(expectedClassOfFacts); assertThat(objects).containsAll(Arrays.asList(factsToVerify)); }
@Test public void testLengthWindow() { EntryPoint entryPoint = ksession.getEntryPoint("EventStream"); TestEvent event; for (int i = 1; i <= 20; i++) { event = new TestEvent(null, "length", null); entryPoint.insert(event); assertEquals((i < 10 ? i : 10), ((Long) ksession.getQueryResults("TestLengthWindow") .iterator().next().get("$eventCount")).intValue()); } }
@Test(timeout = 20000) public void testQueries2() throws InterruptedException { final int numberOfObjects = 100; session.insert(new BeanA(seed)); final QueryResults results = session.getQueryResults("Query"); Assertions.assertThat(results).hasSize(numberOfObjects); for (final QueryResultsRow row : results) { final BeanA bean = (BeanA) row.get("bean"); Assertions.assertThat(bean.getSeed()).isEqualTo(seed);
private void addResults(List r, String nameQuery, String nameResult){ Iterator<QueryResultsRow> rows = session.getQueryResults(nameQuery).iterator(); while (rows.hasNext()) { QueryResultsRow row = rows.next(); r.add( row.get(nameResult)); } } }
@Test public void testTimeWindow() throws InterruptedException { EntryPoint entryPoint = ksession.getEntryPoint("EventStream"); final long results[] = new long[] { 1, 2, 3, 3, 3 }; TestEvent event; for (int i = 0; i < 5; i++) { event = new TestEvent(null, "time", null); entryPoint.insert(event); assertEquals(results[i], ksession.getQueryResults("TestTimeWindow") .iterator().next().get("$eventCount")); clock.advanceTime(100, TimeUnit.MILLISECONDS); } }
@Test public void testQueryFromCode() { final String drl = "import org.drools.compiler.oopath.model.Thing;\n" + "query isContainedIn( Thing $x, Thing $y )\n" + " $y := /$x/children\n" + "or\n" + " ( $z := /$x/children and isContainedIn( $z, $y; ) )\n" + "end\n"; final Thing smartphone = new Thing("smartphone"); final List<String> itemList = Arrays.asList(new String[] { "display", "keyboard", "processor" }); itemList.stream().map(item -> new Thing(item)).forEach((thing) -> smartphone.addChild(thing)); final KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL ) .build() .newKieSession(); ksession.insert(smartphone); final QueryResults queryResults = ksession.getQueryResults("isContainedIn", new Object[] { smartphone, Variable.v }); final List<String> resultList = StreamSupport.stream(queryResults.spliterator(), false) .map(row -> ((Thing) row.get("$y")).getName()).collect(Collectors.toList()); assertThat(resultList).as("Query does not contain all items").containsAll(itemList); ksession.dispose(); }