public static Ref getQueryReferences(Query query, QueryResults results) { if (results.size() == 0) { return null; } Map<String, Object> map = new HashMap<String, Object>(); org.drools.QueryResults inner = ((NativeQueryResults) results).getResults(); Declaration[] params = inner.getParameters(); for (MyMapReferenceEntryType entry : query.getReferences()) { Declaration dec = params[entry.getKey()]; map.put(entry.getValue(), inner.get(0).get(dec.getIdentifier())); } Ref ref = new Ref(); ref.setReferences(MapArgsAdapterHelper.marshal(map)); return ref; }
@Test public void testQuery() throws Exception { String str = ""; str += "package org.drools.test \n"; str += "import org.drools.Cheese \n"; str += "query cheeses \n"; str += " stilton : Cheese(type == 'stilton') \n"; str += " cheddar : Cheese(type == 'cheddar', price == stilton.price) \n"; str += "end\n"; KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(ResourceFactory.newByteArrayResource(str.getBytes()), ResourceType.DRL); if (kbuilder.hasErrors()) { fail(kbuilder.getErrors().toString()); } KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); kbase = SerializationHelper.serializeObject(kbase); StatelessKnowledgeSession ksession = kbase.newStatelessKnowledgeSession(); Cheese stilton1 = new Cheese("stilton", 1); Cheese cheddar1 = new Cheese("cheddar", 1); Cheese stilton2 = new Cheese("stilton", 2); Cheese cheddar2 = new Cheese("cheddar", 2); Cheese stilton3 = new Cheese("stilton", 3); Cheese cheddar3 = new Cheese("cheddar", 3); Set set = new HashSet(); List list = new ArrayList(); list.add(stilton1); list.add(cheddar1); set.add(list); list = new ArrayList(); list.add(stilton2); list.add(cheddar2); set.add(list); list = new ArrayList(); list.add(stilton3); list.add(cheddar3); set.add(list); List<Command> cmds = new ArrayList<Command>(); cmds.add(CommandFactory.newInsert(stilton1)); cmds.add(CommandFactory.newInsert(stilton2)); cmds.add(CommandFactory.newInsert(stilton3)); cmds.add(CommandFactory.newInsert(cheddar1)); cmds.add(CommandFactory.newInsert(cheddar2)); cmds.add(CommandFactory.newInsert(cheddar3)); cmds.add(CommandFactory.newQuery("cheeses", "cheeses")); ExecutionResults batchResult = (ExecutionResults) ksession.execute(CommandFactory.newBatchExecution(cmds)); org.drools.runtime.rule.QueryResults results = (org.drools.runtime.rule.QueryResults) batchResult.getValue("cheeses"); assertEquals(3, results.size()); assertEquals(2, results.getIdentifiers().length); Set newSet = new HashSet(); for (org.drools.runtime.rule.QueryResultsRow result : results) { list = new ArrayList(); list.add(result.get("stilton")); list.add(result.get("cheddar")); newSet.add(list); } assertEquals(set, newSet); }