Search in sources :

Example 1 with Query

use of org.kie.api.definition.rule.Query in project drools by kiegroup.

the class AbductionTest method testQueryAPIs.

@Test
public void testQueryAPIs() {
    String droolsSource = "package org.drools.abductive.test; \n" + "import " + Abducible.class.getName() + "; \n" + "" + "declare Foo " + "   @Abducible " + "   id : String " + "end " + "query foo( String $s ) " + "   @Abductive( target=Foo.class ) \n" + "end \n " + "query bar( String $s, Foo $foo ) " + "   $foo := Foo() " + "end \n " + "rule MoveAround " + "when " + "   $s : String() " + "   $f : foo( $s ; ) " + "   bar( $s, $f ; ) " + "then " + "   delete( $s ); " + "   System.out.println( 'Foo ' + $f ); " + "end " + "";
    // ///////////////////////////////////
    KieSession session = getSessionFromString(droolsSource);
    session.insert("faa");
    session.fireAllRules();
    for (Object o : session.getObjects()) {
        System.out.println(">>> " + o);
    }
    assertEquals(1, session.getObjects().size());
    Query q1 = session.getKieBase().getQuery("org.drools.abductive.test", "foo");
    Query q2 = session.getKieBase().getQuery("org.drools.abductive.test", "bar");
    assertNotNull(q1);
    assertNotNull(q2);
    QueryResults q10res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("foo", "foo"));
    QueryResults q11res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("foo", "foo", Variable.v));
    QueryResults q20res = new FlatQueryResults((QueryResultsImpl) session.getQueryResults("bar", "foo", Variable.v));
    assertEquals(1, q10res.size());
    assertEquals(1, q11res.size());
    assertEquals(1, q20res.size());
    QueryResultsRow row10 = q10res.iterator().next();
    QueryResultsRow row11 = q11res.iterator().next();
    QueryResultsRow row20 = q20res.iterator().next();
    assertEquals("foo", row10.get("$s"));
    assertEquals("foo", row11.get("$s"));
    assertEquals("foo", row20.get("$s"));
    Object foo = row20.get("$foo");
    assertSame(foo, session.getObjects().iterator().next());
    // the implicit return argument, the abduced/retrieved fact, is hidden
    assertNull(row11.get(""));
}
Also used : Query(org.kie.api.definition.rule.Query) QueryResultsRow(org.kie.api.runtime.rule.QueryResultsRow) KieSession(org.kie.api.runtime.KieSession) FlatQueryResults(org.drools.core.runtime.rule.impl.FlatQueryResults) Abducible(org.drools.core.beliefsystem.abductive.Abducible) QueryResults(org.kie.api.runtime.rule.QueryResults) FlatQueryResults(org.drools.core.runtime.rule.impl.FlatQueryResults) Test(org.junit.Test)

Example 2 with Query

use of org.kie.api.definition.rule.Query in project drools by kiegroup.

the class KnowledgePackageMetaDataTest method testMetaData.

@Test
public void testMetaData() {
    KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    kBuilder.add(new ByteArrayResource(drl.getBytes()), ResourceType.DRL);
    if (kBuilder.hasErrors()) {
        fail(kBuilder.getErrors().toString());
    }
    InternalKnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase();
    kBase.addPackages(kBuilder.getKnowledgePackages());
    KiePackage pack = kBase.getPackage("org.drools.compiler.test.definitions");
    assertNotNull(pack);
    assertEquals(2, pack.getFunctionNames().size());
    assertTrue(pack.getFunctionNames().contains("fun1"));
    assertTrue(pack.getFunctionNames().contains("fun2"));
    assertEquals(2, pack.getGlobalVariables().size());
    GlobalImpl g1 = new GlobalImpl("N", "java.lang.Integer");
    GlobalImpl g2 = new GlobalImpl("list", "java.util.List");
    assertTrue(pack.getGlobalVariables().contains(g1));
    assertTrue(pack.getGlobalVariables().contains(g2));
    assertEquals(2, pack.getFactTypes().size());
    FactType type;
    for (int j = 0; j < 2; j++) {
        type = pack.getFactTypes().iterator().next();
        if (type.getName().equals("org.drools.compiler.test.definitions.Person")) {
            assertEquals(2, type.getFields().size());
        } else if (type.getName().equals("org.drools.compiler.test.definitions.Foo")) {
            assertEquals("org.drools.compiler.test.definitions.Person", type.getSuperClass());
            FactField fld = type.getField("bar");
            assertEquals(2, fld.getIndex());
            assertEquals(String.class, fld.getType());
        } else {
            fail("Unexpected fact type " + type);
        }
    }
    assertEquals(2, pack.getQueries().size());
    for (Query q : pack.getQueries()) {
        assertTrue(q.getName().equals("qry1") || q.getName().equals("qry2"));
    }
    assertEquals(4, pack.getRules().size());
    assertTrue(pack.getRules().containsAll(pack.getQueries()));
}
Also used : FactField(org.kie.api.definition.type.FactField) KnowledgeBuilder(org.kie.internal.builder.KnowledgeBuilder) Query(org.kie.api.definition.rule.Query) KiePackage(org.kie.api.definition.KiePackage) ByteArrayResource(org.drools.core.io.impl.ByteArrayResource) InternalKnowledgeBase(org.drools.core.impl.InternalKnowledgeBase) GlobalImpl(org.drools.core.definitions.rule.impl.GlobalImpl) FactType(org.kie.api.definition.type.FactType) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)2 Query (org.kie.api.definition.rule.Query)2 Abducible (org.drools.core.beliefsystem.abductive.Abducible)1 GlobalImpl (org.drools.core.definitions.rule.impl.GlobalImpl)1 InternalKnowledgeBase (org.drools.core.impl.InternalKnowledgeBase)1 ByteArrayResource (org.drools.core.io.impl.ByteArrayResource)1 FlatQueryResults (org.drools.core.runtime.rule.impl.FlatQueryResults)1 KiePackage (org.kie.api.definition.KiePackage)1 FactField (org.kie.api.definition.type.FactField)1 FactType (org.kie.api.definition.type.FactType)1 KieSession (org.kie.api.runtime.KieSession)1 QueryResults (org.kie.api.runtime.rule.QueryResults)1 QueryResultsRow (org.kie.api.runtime.rule.QueryResultsRow)1 KnowledgeBuilder (org.kie.internal.builder.KnowledgeBuilder)1