@Override public void initializeListener(QueryBatcher queryBatcher) { pb = queryBatcher.getPrimaryClient().newRowManager().newPlanBuilder(); }
@SuppressWarnings("unchecked") @BeforeClass public static void beforeClass() { Common.connect(); rowMgr = Common.client.newRowManager(); p = rowMgr.newPlanBuilder(); Map<String,Object> row = new HashMap<String,Object>(); row.put("rowId", 1); lit = p.fromLiterals(new Map[]{row}); } @AfterClass
@Test public void testFromSqljoinInnerWithkeymatchSelect() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testFromSqljoinInnerWithkeymatchSelect method"); RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ModifyPlan plan1 = p.fromSql("SELECT opticFunctionalTest.master.name AS MasterName, opticFunctionalTest.master.date, opticFunctionalTest.detail.name AS DetailName, opticFunctionalTest.detail.amount, opticFunctionalTest.detail.color" + " FROM opticFunctionalTest.detail" + " INNER JOIN opticFunctionalTest.master ON opticFunctionalTest.master.id = opticFunctionalTest.detail.masterId" + " ORDER BY DetailName DESC"); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); jsonResults = jacksonHandle.get().path("rows"); // Should have 6 nodes returned. assertEquals("Six rows not returned from testFromSqljoinInnerWithkeymatchSelect method ", 6, jsonResults.size()); assertEquals("Row 1 MasterName value incorrect", "Master 2", jsonResults.path(0).path("MasterName").path("value").asText()); assertEquals("Row 1 DetailName value incorrect", "Detail 6", jsonResults.path(0).path("DetailName").path("value").asText()); assertEquals("Row 1 opticFunctionalTest.detail.amount value incorrect", "60.06", jsonResults.path(0).path("opticFunctionalTest.detail.amount").path("value").asText()); assertEquals("Row 6 MasterName value incorrect", "Master 1", jsonResults.path(5).path("MasterName").path("value").asText()); assertEquals("Row 6 DetailName value incorrect", "Detail 1", jsonResults.path(5).path("DetailName").path("value").asText()); assertEquals("Row 6 opticFunctionalTest.detail.color value incorrect", "blue", jsonResults.path(5).path("opticFunctionalTest.detail.color").path("value").asText()); }
@Test public void testFromSqlGroupBy() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testFromSqlGroupBy method"); RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ModifyPlan plan1 = p.fromSql("SELECT opticFunctionalTest.master.name, opticFunctionalTest.detail.name AS DetailName, opticFunctionalTest.detail.color, SUM(amount) AS DetailSum " + " FROM opticFunctionalTest.detail " + " INNER JOIN opticFunctionalTest.master ON opticFunctionalTest.master.id = opticFunctionalTest.detail.masterId " + " GROUP BY opticFunctionalTest.master.name " + " ORDER BY DetailSum DESC"); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); jsonResults = jacksonHandle.get().path("rows"); // Should have 2 nodes returned. assertEquals("Two rows not returned from testFromSqlGroupBy method ", 2, jsonResults.size()); assertEquals("Row 1 opticFunctionalTest.master.name value incorrect", "Master 2", jsonResults.path(0).path("opticFunctionalTest.master.name").path("value").asText()); assertEquals("Row 1 DetailSum value incorrect", "120.12", jsonResults.path(0).path("DetailSum").path("value").asText()); assertEquals("Row 2 opticFunctionalTest.master.name value incorrect", "Master 1", jsonResults.path(1).path("opticFunctionalTest.master.name").path("value").asText()); assertEquals("Row 2 DetailSum value incorrect", "90.09", jsonResults.path(1).path("DetailSum").path("value").asText()); }
@Test public void testFromSqlUnionOffsetLimit() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testFromSqlUnionOffsetLimit method"); RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ModifyPlan plan1 = p.fromSql( "SELECT opticFunctionalTest.detail.id, opticFunctionalTest.detail.name FROM opticFunctionalTest.detail ORDER BY name " + " UNION " + " SELECT opticFunctionalTest.master.id, opticFunctionalTest.master.name FROM opticFunctionalTest.master ORDER BY name", "myPlan" ) .orderBy(p.desc("id")) .offsetLimit(1, 3); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); jsonResults = jacksonHandle.get().path("rows"); // Should have 3 nodes returned. assertEquals("Three rows not returned from testFromSqlUnionOffsetLimit method ", 3, jsonResults.size()); assertEquals("Row 1 myPlan value incorrect", "Detail 5", jsonResults.path(0).path("myPlan.name").path("value").asText()); assertEquals("Row 2 myPlan value incorrect", "Detail 4", jsonResults.path(1).path("myPlan.name").path("value").asText()); assertEquals("Row 3 myPlan value incorrect", "Detail 3", jsonResults.path(2).path("myPlan.name").path("value").asText()); }
@Test public void testJsonPropertyWordQuery() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testJsonPropertyWordQuery method"); // Create a new Plan. RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); // plan1 - fromView ModifyPlan plan1 = p.fromView("opticFunctionalTest4", "detail4", null, null) .where(p.cts.jsonPropertyWordQuery("name", "Detail 100")); // plan2 - fromView ModifyPlan plan2 = p.fromView("opticFunctionalTest4", "master4"); ModifyPlan output = plan1.joinInner(plan2, p.on(p.schemaCol("opticFunctionalTest4", "detail4", "masterId"), p.schemaCol("opticFunctionalTest4", "master4", "id"))) .orderBy(p.schemaCol("opticFunctionalTest4", "detail4", "id")); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(output, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); assertTrue("Number of Elements after plan execution is incorrect. Should be 3", 3 == jsonBindingsNodes.size()); assertEquals("Row 1 opticFunctionalTest4.detail4.id value incorrect", "100", jsonBindingsNodes.path(0).path("opticFunctionalTest4.detail4.id").path("value").asText()); assertEquals("Row 1 opticFunctionalTest4.master4.name value incorrect", "Master 100", jsonBindingsNodes.path(0).path("opticFunctionalTest4.master4.name").path("value") .asText()); assertEquals("Row 2 opticFunctionalTest4.detail4.name value incorrect", "Detail 200", jsonBindingsNodes.path(1).path("opticFunctionalTest4.detail4.name").path("value") .asText()); assertEquals("Row 2 opticFunctionalTest4.master4.date value incorrect", "2016-04-02", jsonBindingsNodes.path(1).path("opticFunctionalTest4.master4.date").path("value") .asText()); assertEquals("Row 3 opticFunctionalTest4.detail4.amount value incorrect", "72.9", jsonBindingsNodes.path(2).path("opticFunctionalTest4.detail4.amount").path("value").asText()); assertEquals("Row 3 opticFunctionalTest4.detail4.color value incorrect", "yellow", jsonBindingsNodes.path(2).path("opticFunctionalTest4.detail4.color").path("value").asText()); }
RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder();
@Test public void testfromTriples() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testBuiltinFuncsFromView method"); // Create a new Plan. RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ExportablePlan plan1 = p.fromTriples(p.pattern(p.col("id"), p.sem.iri("http://marklogic.com/baseball/players/age"), p.col("age"))) .orderBy(p.col("age")); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); // Verify first node. Iterator<JsonNode> nameNodesItr = jsonBindingsNodes.elements(); // Should have 8 nodes returned. assertEquals("Eight nodes not returned from testfromTriples method ", 8, jsonBindingsNodes.size()); JsonNode jsonNameNode = null; if (nameNodesItr.hasNext()) { jsonNameNode = nameNodesItr.next(); // Verify result 1's values. assertEquals("Row 1 age value incorrect", "19", jsonNameNode.path("age").path("value").asText()); // Verify the last node's age value assertEquals("Row 8 age value incorrect", "34", jsonBindingsNodes.get(7).path("age").path("value").asText()); } else { fail("Could not traverse the Eight Triplesin testfromTriples method"); } }
RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); PlanPrefixer rowGraph = p.prefixer("http://marklogic.com/baseball/players");
@Test public void testFromSqlUnionSelectOrderbyLimitOffset() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testFromSqlUnionSelectOrderbyLimitOffset method"); RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ModifyPlan plan1 = p.fromSql( "SELECT opticFunctionalTest.detail.id, opticFunctionalTest.detail.name FROM opticFunctionalTest.detail ORDER BY name " + " UNION " + " SELECT opticFunctionalTest.master.id, opticFunctionalTest.master.name FROM opticFunctionalTest.master ORDER BY name" ) .orderBy(p.desc("id")) .limit(3) .offset(1) .select(p.as("myName", p.col("name"))); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); jsonResults = jacksonHandle.get().path("rows"); // Should have 2 nodes returned. assertEquals("Two rows not returned from testFromSqlUnionSelectOrderbyLimitOffset method ", 2, jsonResults.size()); assertEquals("Row 1 myName value incorrect", "Detail 5", jsonResults.path(0).path("myName").path("value").asText()); assertEquals("Row 2 myName value incorrect", "Detail 4", jsonResults.path(1).path("myName").path("value").asText()); }
@Test public void testJoinfromViewfronLexicons() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testJoinInnerWithInnerDocMixed method"); // Create a new Plan. RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); Map<String, CtsReferenceExpr> indexes = new HashMap<String, CtsReferenceExpr>(); indexes.put("uri", p.cts.uriReference()); indexes.put("city", p.cts.jsonPropertyReference("city")); indexes.put("popularity", p.cts.jsonPropertyReference("popularity")); indexes.put("date", p.cts.jsonPropertyReference("date")); indexes.put("distance", p.cts.jsonPropertyReference("distance")); indexes.put("point", p.cts.jsonPropertyReference("latLonPoint")); // plan1 - fromView ModifyPlan plan1 = p.fromView("opticFunctionalTest", "detail", "myDetail"); // plan2 - fromLexicons ModifyPlan plan2 = p.fromLexicons(indexes, "myCity"); ModifyPlan output = plan1.joinInner(plan2).offsetLimit(0, 2); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(output, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); assertTrue("Number of Elements after plan execution is incorrect. Should be 2", 2 == jsonBindingsNodes.size()); }
@Test public void testIntersectDiffSchemas() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testIntersectDiffSchemas method"); // Create a new Plan. RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); ModifyPlan plan1 = p.fromView("opticFunctionalTest", "master"); ModifyPlan plan2 = p.fromView("opticFunctionalTest2", "master"); ModifyPlan plan3 = p.fromView("opticFunctionalTest", "detail"); ModifyPlan plan4 = plan1.select(p.as("unionId", p.schemaCol("opticFunctionalTest", "master", "id"))) .union(plan2.select(p.as("unionId", p.schemaCol("opticFunctionalTest2", "master", "id")))) .intersect( plan3.select(p.as("unionId", p.col( "id"))) ) .orderBy(p.col("unionId")); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan4, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); // Should have 4 nodes returned. assertEquals("Four nodes not returned from testIntersectDiffSchemas method ", 4, jsonBindingsNodes.size()); assertEquals("Element 1 union id value incorrect", "1", jsonBindingsNodes.get(0).path("unionId").path("value").asText()); assertEquals("Element 1 union id value incorrect", "2", jsonBindingsNodes.get(1).path("unionId").path("value").asText()); assertEquals("Element 1 union id value incorrect", "3", jsonBindingsNodes.get(2).path("unionId").path("value").asText()); assertEquals("Element 1 union id value incorrect", "4", jsonBindingsNodes.get(3).path("unionId").path("value").asText()); }
RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder();
RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder();
@Test public void testnamedSchemaViewWithQualifier() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testnamedSchemaViewWithQualifier method"); RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); AccessPlan plan = p.fromView("opticFunctionalTest", "detail", "MarkLogicQAQualifier"); plan.orderBy(p.sortKeySeq(p.viewCol("opticFunctionalTest", "MarkLogicQAQualifier.masterId"), p.viewCol("opticFunctionalTest", "MarkLogicQAQualifier.color"), p.viewCol("opticFunctionalTest", "MarkLogicQAQualifier.amount"))); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); // Should have 6 nodes returned. assertEquals("Six nodes not returned from testnamedSchemaViewWithQualifier method ", 6, jsonBindingsNodes.size()); }
@Test public void testMultipleQuriesNested() throws KeyManagementException, NoSuchAlgorithmException, IOException, SAXException, ParserConfigurationException { System.out.println("In testMultipleQuriesNested method"); System.out.println("In testMultipleQuriesLinear method"); // Create a new Plan. RowManager rowMgr = client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); // plan1 - fromView CtsQueryExpr andQuery3 = p.cts.jsonPropertyWordQuery("id", "1"); CtsQueryExpr andQuery4 = p.cts.jsonPropertyWordQuery("amount", "20.2"); CtsQueryExpr andQuery7 = p.cts.jsonPropertyWordQuery("id", "4"); CtsQueryExpr andQuery8 = p.cts.jsonPropertyWordQuery("name", "Detail 6"); CtsQueryExpr andQuery5 = p.cts.jsonPropertyWordQuery("name", "Master 1"); CtsQueryExpr andQuery6 = p.cts.jsonPropertyWordQuery("name", "Master 2"); CtsQueryExpr andQuery1 = p.cts.andQuery(andQuery3, andQuery4); CtsQueryExpr andQuery2 = p.cts.andQuery(andQuery7, andQuery8); CtsQueryExpr andQuery9 = p.cts.andQuery(andQuery5, andQuery6); CtsQueryExpr orQuery = p.cts.orQuery(andQuery1, andQuery2); CtsQueryExpr andQuery10 = p.cts.andQuery(orQuery, andQuery9); ModifyPlan plan1 = p.fromView("opticFunctionalTest", "detail").where(andQuery10); JacksonHandle jacksonHandle = new JacksonHandle(); jacksonHandle.setMimetype("application/json"); rowMgr.resultDoc(plan1, jacksonHandle); JsonNode jsonResults = jacksonHandle.get(); JsonNode jsonBindingsNodes = jsonResults.path("rows"); // Make sure that nested and queries do not blow up the plan. assertTrue("Number of Elements after plan execution is incorrect. Should be 6", 6 == jsonBindingsNodes.size()); }
@Test public void testExplain() throws IOException { RowManager rowMgr = Common.client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); PlanBuilder.ExportablePlan builtPlan = p.fromLiterals(litRows); JsonNode jsonRoot = rowMgr.explain(builtPlan, new JacksonHandle()).get(); assertNotNull(jsonRoot); jsonRoot = rowMgr.explainAs(builtPlan, JsonNode.class); assertNotNull(jsonRoot); Document xmlRoot = rowMgr.explain(builtPlan, new DOMHandle()).get(); assertNotNull(xmlRoot); xmlRoot = rowMgr.explainAs(builtPlan, Document.class); assertNotNull(xmlRoot); String stringRoot = rowMgr.explain(builtPlan, new StringHandle()).get(); assertNotNull(new ObjectMapper().readTree(stringRoot)); } private DOMHandle initNamespaces(DOMHandle handle) {
@Test public void testParams() throws IOException, XPathExpressionException { RowManager rowMgr = Common.client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); PlanParamExpr cityParam = p.param("city"); PlanParamExpr limitParam = p.param("limit"); PlanBuilder.ExportablePlan builtPlan = p.fromLiterals(litRows) .orderBy(p.col("rowNum")) .where(p.eq(p.col("city"), cityParam)) .select(p.colSeq("rowNum", "temp")) .limit(limitParam); RowSet<RowRecord> recordRowSet = rowMgr.resultRows( builtPlan.bindParam(cityParam, "Seattle").bindParam(limitParam, 1) ); Iterator<RowRecord> recordRowItr = recordRowSet.iterator(); assertTrue("no record row to iterate", recordRowItr.hasNext()); RowRecord recordRow = recordRowItr.next(); checkSingleRow(recordRow); assertFalse("expected one record row", recordRowItr.hasNext()); recordRowSet.close(); } @Test
@Test public void testView() { RowManager rowMgr = Common.client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); PlanBuilder.ExportablePlan builtPlan = p.fromView("opticUnitTest", "musician") .where( p.cts.andQuery( p.cts.jsonPropertyWordQuery("instrument", "trumpet"), p.cts.jsonPropertyWordQuery(p.xs.string("lastName"), p.xs.stringSeq("Armstrong", "Davis")) ) ) .select(null, "") .orderBy(p.col("lastName")); String[] lastName = {"Armstrong", "Davis"}; String[] firstName = {"Louis", "Miles"}; String[] dob = {"1901-08-04", "1926-05-26"}; int rowNum = 0; for (RowRecord row: rowMgr.resultRows(builtPlan)) { assertEquals("unexpected lastName value in row record "+rowNum, lastName[rowNum], row.getString("lastName")); assertEquals("unexpected firstName value in row record "+rowNum, firstName[rowNum], row.getString("firstName")); assertEquals("unexpected dob value in row record "+rowNum, dob[rowNum], row.getString("dob")); rowNum++; } assertEquals("unexpected count of result records", 2, rowNum); } @Test
@Test public void testJoinDocUri() throws IOException { RowManager rowMgr = Common.client.newRowManager(); PlanBuilder p = rowMgr.newPlanBuilder(); PlanBuilder.ExportablePlan builtPlan = p.fromView("opticUnitTest", "musician", "", p.fragmentIdCol("musicianDocId")) .joinDocUri(p.col("musicianDocUri"), p.fragmentIdCol("musicianDocId")) .orderBy(p.col("lastName")) .select(p.col("lastName"), p.col("firstName"), p.col("musicianDocUri")) .limit(2); String[] lastName = {"Armstrong", "Byron"}; String[] firstName = {"Louis", "Don"}; String[] musicianDocUri = {"/optic/test/musician1.json", "/optic/test/musician2.json"}; int rowNum = 0; for (RowRecord row: rowMgr.resultRows(builtPlan)) { assertEquals("unexpected lastName value in row record "+rowNum, lastName[rowNum], row.getString("lastName")); assertEquals("unexpected firstName value in row record "+rowNum, firstName[rowNum], row.getString("firstName")); assertEquals("unexpected musicianDocUri value in row record "+rowNum, musicianDocUri[rowNum], row.getString("musicianDocUri")); rowNum++; } assertEquals("unexpected count of result records", 2, rowNum); } @Test