/** @throws Exception */ @Test public void testNoDataSetWithSubQuery() throws Exception { // outer query without data set int[] dataType = new int[] {DataType.DATE_TYPE}; String[] name = new String[] {"testColumn1"}; IResultIterator ri2 = null; { ScriptExpression[] se = new ScriptExpression[] { new ScriptExpression("new Date()", dataType[0]), }; QueryDefinition queryDefn = new QueryDefinition(); for (int i = 0; i < name.length; i++) queryDefn.addBinding(new Binding(name[i], se[i])); // sub query String subQueryName = "TEST"; SubqueryDefinition subQueryDefn = new SubqueryDefinition(subQueryName, queryDefn); for (int i = 0; i < name.length; i++) subQueryDefn.addBinding( new Binding(name[i], new ScriptExpression("row._outer." + name[i], dataType[i]))); queryDefn.addSubquery(subQueryDefn); DataEngine myDataEngine = new DataEngineImpl( DataEngineContext.newInstance( DataEngineContext.DIRECT_PRESENTATION, null, null, null)); IResultIterator ri = myDataEngine.prepare(queryDefn).execute(null).getResultIterator(); ri.next(); ri2 = ri.getSecondaryIterator(subQueryName, null); } if (ri2.next()) { String str = ""; for (int i = 0; i < name.length; i++) { Object value = ri2.getValue(name[i]); str += value; if (i < name.length - 1) str += ", "; if (dataType[0] == DataType.DATE_TYPE) assertTrue(value.getClass().equals(Date.class)); } testPrintln(str); } ri2.close(); }
/** @throws Exception */ private void genDummy2() throws Exception { expectedValue = new ArrayList(); Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); Context.exit(); // ------------generation---------------- QueryDefinition qd = new QueryDefinition(); // prepare IBaseExpression[] rowBeArray = getDummyRowExpr(); prepareExprNameAndQuery(rowBeArray, null, qd); // prepare sub query SubqueryDefinition subQueryDefn = new SubqueryDefinition(subName, qd); qd.addSubquery(subQueryDefn); IBaseExpression[] rowBeArray2 = getDummyRowExpr(); prepareExprNameAndQuery(rowBeArray2, null, subQueryDefn); // generation IQueryResults qr = myGenDataEngine.prepare(qd).execute(scope); // important step queryResultID = qr.getID(); IResultIterator ri = qr.getResultIterator(); while (ri.next()) { for (int i = 0; i < rowBeArray.length; i++) expectedValue.add(ri.getValue(this.rowExprName[i])); IResultIterator ri2 = ri.getSecondaryIterator(subName, scope); while (ri2.next()) { for (int i = 0; i < rowBeArray2.length; i++) expectedValue.add(ri2.getValue(this.rowExprName[i])); } ri2.close(); } ri.close(); qr.close(); myGenDataEngine.shutdown(); }