@Override public Observable<ColumnSet> query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder(formCatalog, formScanCache, new FormSupervisorAdapter(formCatalog, databaseProvider, userId)); return Observable.just(builder.build(queryModel)); }
public ColumnSet build(QueryModel queryModel) { LOGGER.info(() -> "QUERY: " + queryModel); LOGGER.info(() -> "NCOLS: " + queryModel.getColumns().size()); // We want to make at most one pass over every collection we need to scan, // so first queue up all necessary work before executing FormScanBatch batch = createNewBatch(); // Enqueue the columns we need Slot<ColumnSet> columnSet = enqueue(queryModel, batch); // Now execute the batch try { execute(batch); } catch (Exception e) { throw new RuntimeException("Failed to execute query batch", e); } LOGGER.info(() -> "NROWS: " + columnSet.get().getNumRows()); return columnSet.get(); }
@Test public void minusFunctionTest() { QueryModel queryModel = new QueryModel(intakeForm.getFormId()); queryModel.selectExpr("-1").as("negOne"); queryModel.selectExpr("-1.0").as("negOneDouble"); queryModel.selectExpr("-1*2").as("negOneByTwo"); queryModel.selectExpr("-1.0*2.0").as("negOneByTwoDouble"); queryModel.selectExpr("2*(-1)").as("twoByNegOne"); queryModel.selectExpr("2.0*(-1.0)").as("twoByNegOneDouble"); ColumnSet columnSet = builder.build(queryModel); ColumnView negOne = columnSet.getColumnView("negOne"); ColumnView negOneDouble = columnSet.getColumnView("negOneDouble"); ColumnView negOneByTwo = columnSet.getColumnView("negOneByTwo"); ColumnView negOneByTwoDouble = columnSet.getColumnView("negOneByTwoDouble"); ColumnView twoByNegOne = columnSet.getColumnView("twoByNegOne"); ColumnView twoByNegOneDouble = columnSet.getColumnView("twoByNegOneDouble"); assertThat(negOne.numRows(), equalTo(IntakeForm.ROW_COUNT)); assertThat(negOne.getDouble(0), equalTo(-1.0)); assertThat(negOneDouble.getDouble(0), equalTo(-1.0)); assertThat(negOneByTwo.getDouble(0), equalTo(-2.0)); assertThat(negOneByTwoDouble.getDouble(0), equalTo(-2.0)); assertThat(twoByNegOne.getDouble(0), equalTo(-2.0)); assertThat(twoByNegOneDouble.getDouble(0), equalTo(-2.0)); }
@Test public void circularReference() throws Exception { final FormClass formClass = new FormClass(ResourceId.valueOf("XYZ")); formClass.addField(ResourceId.valueOf("FA")) .setCode("A") .setLabel("Field A") .setType(new CalculatedFieldType("B")); formClass.addField(ResourceId.valueOf("FB")) .setCode("B") .setLabel("Field B") .setType(new CalculatedFieldType("A")); FormStorageProviderStub catalog = new FormStorageProviderStub(); catalog.addForm(formClass).withRowCount(10); ColumnSetBuilder builder = new ColumnSetBuilder(catalog, new NullFormScanCache(), new NullFormSupervisor()); FormScanBatch batch = builder.createNewBatch(); QueryEvaluator evaluator = new QueryEvaluator(FilterLevel.BASE, catalog.getTree(formClass.getId()), batch); Slot<ColumnView> a = evaluator.evaluateExpression(new SymbolNode("A")); Slot<ColumnView> aPlusOne = evaluator.evaluateExpression(FormulaParser.parse("A+1")); builder.execute(batch); assertThat(a.get().numRows(), equalTo(10)); assertThat(a.get().getString(0), nullValue()); assertThat(aPlusOne.get().getString(0), equalTo(Double.toString(1d))); assertThat(aPlusOne.get().getDouble(0), equalTo(1d)); }
@BeforeClass public static void setup() throws Throwable { System.out.println("Running setup..."); dbunit = new DbUnit(); dbunit.openDatabase(); dbunit.dropAllRows(); dbunit.loadDatset(Resources.getResource(MySqlCatalogTest.class, "rdc.db.xml")); catalog = new MySqlCatalogProvider().openCatalog(dbunit.getExecutor()); columnSetBuilder = new ColumnSetBuilder(catalog, new NullFormSupervisor()); }
@Test public void plusFunctionTest() { QueryModel queryModel = new QueryModel(intakeForm.getFormId()); queryModel.selectExpr("+1").as("posOne"); queryModel.selectExpr("+1.0").as("posOneDouble"); queryModel.selectExpr("+1*2").as("posOneByTwo"); queryModel.selectExpr("+1.0*2.0").as("posOneByTwoDouble"); queryModel.selectExpr("2*(+1)").as("twoByPosOne"); queryModel.selectExpr("2.0*(+1.0)").as("twoByPosOneDouble"); ColumnSet columnSet = builder.build(queryModel); ColumnView posOne = columnSet.getColumnView("posOne"); ColumnView posOneDouble = columnSet.getColumnView("posOneDouble"); ColumnView posOneByTwo = columnSet.getColumnView("posOneByTwo"); ColumnView posOneByTwoDouble = columnSet.getColumnView("posOneByTwoDouble"); ColumnView twoByPosOne = columnSet.getColumnView("twoByPosOne"); ColumnView twoByPosOneDouble = columnSet.getColumnView("twoByPosOneDouble"); assertThat(posOne.numRows(), equalTo(IntakeForm.ROW_COUNT)); assertThat(posOne.getDouble(0), equalTo(1.0)); assertThat(posOneDouble.getDouble(0), equalTo(1.0)); assertThat(posOneByTwo.getDouble(0), equalTo(2.0)); assertThat(posOneByTwoDouble.getDouble(0), equalTo(2.0)); assertThat(twoByPosOne.getDouble(0), equalTo(2.0)); assertThat(twoByPosOneDouble.getDouble(0), equalTo(2.0)); }
@Before public void setup() { catalog = new TestingStorageProvider(); builder = new ColumnSetBuilder(catalog, new NullFormScanCache(), new NullFormSupervisor()); intakeForm = catalog.getIntakeForm(); }
public ColumnSet queryColumns(QueryModel queryModel) { if(localCatalog.isLocalQuery(queryModel)) { ColumnSetBuilder builder = new ColumnSetBuilder(localCatalog, new NullFormSupervisor()); return builder.build(queryModel); } else { return remote.queryTable(queryModel); } }
@Test public void testActivity() throws IOException { QueryModel model = new QueryModel(activityFormClass(33)); model.selectField("date1"); model.selectField("date2"); model.selectExpr("Partner.name"); FormTree formTree = new FormTreeBuilder(catalog).queryTree(activityFormClass(33)); FormTreePrettyPrinter.print(formTree); FormClass formClass = catalog.getForm(activityFormClass(33)).get().getFormClass(); for(FormField field : formClass.getFields()) { if(field.getType() instanceof QuantityType) { model.selectField(field.getId()).as("I" + CuidAdapter.getLegacyIdFromCuid(field.getId())); } } Stopwatch stopwatch = Stopwatch.createStarted(); ColumnSet columnSet = columnSetBuilder.build(model); System.out.println("Query executed in " + stopwatch.elapsed(TimeUnit.MILLISECONDS) + " ms"); assertThat(columnSet.getNumRows(), equalTo(652)); StringWriter stringWriter = new StringWriter(); RowBasedJsonWriter writer = new RowBasedJsonWriter(stringWriter); writer.write(columnSet); System.out.println(stringWriter.toString()); }
public ColumnSet query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder(this, new NullFormScanCache(), new NullFormSupervisor()); return builder.build(queryModel); }
@Override public Observable<ColumnSet> queryColumns(QueryModel queryModel) { ColumnSetBuilder columnSetBuilder = new ColumnSetBuilder(catalog, new NullFormSupervisor()); return new ConstantObservable<>(columnSetBuilder.build(queryModel)); }
protected final void query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder( catalog, cache, new FormSupervisorAdapter(catalog, databaseProvider, userId)); columnSet = builder.build(queryModel); for(String field : columnSet.getColumns().keySet()) { System.out.println(field + ": " + column(field)); } }
protected final void query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder( catalog, cache, new FormSupervisorAdapter(catalog, databaseProvider, userId)); columnSet = builder.build(queryModel); for(String field : columnSet.getColumns().keySet()) { System.out.println(field + ": " + column(field)); } }
private ColumnSet query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder(testingCatalog, new NullFormScanCache(), new NullFormSupervisor()); return builder.build(queryModel); }
private ColumnSet query(QueryModel queryModel) { ColumnSetBuilder builder = new ColumnSetBuilder(testingCatalog, new NullFormScanCache(), new NullFormSupervisor()); return builder.build(queryModel); }
@Override public Promise<ColumnSet> queryTableColumns(QueryModel query) { try { FormStorageProvider catalog = newCatalog(); ColumnSetBuilder builder = new ColumnSetBuilder(catalog, new NullFormSupervisor()); return Promise.resolved(builder.build(query)); } catch (Exception e) { return Promise.rejected(e); } }
@Override public Promise<ColumnSet> queryTableColumns(QueryModel query) { if(!connected) { return offlineResult(); } ColumnSetBuilder columnSetBuilder = new ColumnSetBuilder(storageProvider, new NullFormScanCache(), new NullFormSupervisor()); ColumnSet columnSet = columnSetBuilder.build(query); return Promise.resolved(columnSet); }
@Test public void enumIdTests() { TestingStorageProvider catalog = new TestingStorageProvider(); ColumnSetBuilder builder = new ColumnSetBuilder(catalog, new NullFormScanCache(), new NullFormSupervisor()); QueryModel queryModel = new QueryModel(EmptyForm.FORM_ID); queryModel.selectField(EmptyForm.ENUM_FIELD_ID).as("emptyEnum"); queryModel.selectField(EmptyForm.POP_ENUM_FIELD_ID).as("populatedEnum"); ColumnSet columnSet = builder.build(queryModel); ColumnView emptyEnum = columnSet.getColumnView("emptyEnum"); ColumnView populatedEnum = columnSet.getColumnView("populatedEnum"); //// Standard Enum Id Checks // Null check on empty set first assertThat(emptyEnum.get(0), equalTo(null)); assertThat(((EnumColumnView) emptyEnum).getId(0), equalTo(null)); // Value check on populated set assertThat(populatedEnum.get(0).toString(), equalTo("One")); assertThat(((EnumColumnView) populatedEnum).getId(0), equalTo(EmptyForm.ENUM_ONE_ID.asString())); //// Selected Row Enum Id Checks ColumnView emptySelectedRow = emptyEnum.select(new int[]{0}); ColumnView populatedSelectedRow = populatedEnum.select(new int[]{0}); // Null check on empty set first assertThat(emptySelectedRow.get(0), equalTo(null)); assertThat(((EnumColumnView) emptySelectedRow).getId(0), equalTo(null)); // Value check on populated set assertThat(populatedSelectedRow.get(0).toString(), equalTo("One")); assertThat(((EnumColumnView) populatedSelectedRow).getId(0), equalTo(EmptyForm.ENUM_ONE_ID.asString())); }
@Test public void invalidArityTest() { TestingStorageProvider catalog = new TestingStorageProvider(); IntakeForm intakeForm = catalog.getIntakeForm(); ColumnSetBuilder builder = new ColumnSetBuilder(catalog, new NullFormScanCache(), new NullFormSupervisor()); QueryModel queryModel = new QueryModel(intakeForm.getFormId()); queryModel.selectExpr("YEARFRAC(TODAY())").as("age"); ColumnSet columnSet = builder.build(queryModel); ColumnView age = columnSet.getColumnView("age"); assertThat(age.numRows(), equalTo(IntakeForm.ROW_COUNT)); System.out.println(age); }
@Test public void enumRefTests() { TestingStorageProvider catalog = new TestingStorageProvider(); ColumnSetBuilder builder = new ColumnSetBuilder(catalog, new NullFormScanCache(), new NullFormSupervisor()); IntakeForm intakeForm = catalog.getIntakeForm(); QueryModel queryModel = new QueryModel(intakeForm.getFormId()); queryModel.selectField(intakeForm.getNationalityFieldId()).as("nationality"); queryModel.selectExpr(intakeForm.getNationalityFieldId() + "==" + "\"" + intakeForm.getPalestinianId() + "\"").as("palestinian"); queryModel.selectExpr("\"" + intakeForm.getPalestinianId() + "\"" + "==" + intakeForm.getNationalityFieldId()).as("palestinianInverse"); ColumnSet columnSet = builder.build(queryModel); ColumnView nationality = columnSet.getColumnView("nationality"); ColumnView palestinian = columnSet.getColumnView("palestinian"); ColumnView palestinianInverse = columnSet.getColumnView("palestinianInverse"); assertThat(nationality.get(1).toString(), equalTo(NAT_PAL)); assertThat(Boolean.valueOf(palestinian.get(1).toString()), equalTo(true)); assertThat(Boolean.valueOf(palestinianInverse.get(1).toString()), equalTo(true)); }