use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.datatype.Date in project legend-pure by finos.
the class FunctionExpressionProcessor method milestoningMissingDateParamErrorMsg.
private static void milestoningMissingDateParamErrorMsg(ProcessorSupport processorSupport, AbstractProperty<?> property, StringBuilder message) {
MilestonedPropertyMetaData milestonedPropertyMetaData = MilestoningFunctions.getMilestonedMetaDataForProperty((QualifiedProperty<?>) property, processorSupport);
message.append("is milestoned with stereotypes: ");
milestonedPropertyMetaData.getClassTemporalStereotypes().appendString(message, "[ ", ",", " ]");
message.append(" and requires date parameters: ");
milestonedPropertyMetaData.getTemporalDatePropertyNamesForStereotypes().appendString(message, "[ ", ", ", " ]");
}
use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.datatype.Date in project legend-pure by finos.
the class TestSimpleGrammar method testTableWithBusinessSnapshotMilestoning.
@Test
public void testTableWithBusinessSnapshotMilestoning() {
this.runtime.createInMemorySource("test.pure", "###Relational\n" + "Database pack::ProductDatabase (\n" + " Table ProductTable\n" + " (\n" + " milestoning( \n" + " business(BUS_SNAPSHOT_DATE = snapshotDate)\n" + " )" + " id INT PRIMARY KEY,\n" + " name VARCHAR(200),\n" + " snapshotDate Date\n" + " )\n" + ")\n");
this.runtime.compile();
Database productDatabase = (Database) this.runtime.getCoreInstance("pack::ProductDatabase");
RichIterable<? extends Milestoning> milestonings = productDatabase._schemas().getFirst()._tables().getFirst()._milestoning().selectInstancesOf(BusinessSnapshotMilestoning.class);
Assert.assertEquals(1, milestonings.size());
Assert.assertTrue(milestonings.getFirst() instanceof BusinessSnapshotMilestoning);
BusinessSnapshotMilestoning businessSnapshotMilestoning = (BusinessSnapshotMilestoning) milestonings.getFirst();
Assert.assertEquals("snapshotDate", businessSnapshotMilestoning._snapshotDate()._name());
Assert.assertNull(businessSnapshotMilestoning._infinityDate());
}
use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.datatype.Date in project legend-pure by finos.
the class TestAggregationAwareMapping method testAggregationAwareMappingGrammarMultiAggregate.
@Test
public void testAggregationAwareMappingGrammarMultiAggregate() {
String source = "###Pure\n" + "Class Sales\n" + "{\n" + " id: Integer[1];\n" + " salesDate: FiscalCalendar[1];\n" + " revenue: Float[1];\n" + "}\n" + "\n" + "Class FiscalCalendar\n" + "{\n" + " date: Date[1];\n" + " fiscalYear: Integer[1];\n" + " fiscalMonth: Integer[1];\n" + " fiscalQtr: Integer[1];\n" + "}\n" + "native function sum(f:Float[*]):Float[1];\n" + "\n" + "###Relational\n" + "Database db \n" + "(\n" + " Table sales_base (id INT PRIMARY KEY, sales_date DATE, revenue FLOAT)\n" + " Table calendar (date DATE PRIMARY KEY, fiscal_year INT, fiscal_qtr INT, fiscal_month INT)\n" + " \n" + " Table sales_by_date (sales_date DATE, net_revenue FLOAT)\n" + " Table sales_by_qtr (sales_qtr_first_date DATE, net_revenue FLOAT)\n" + " \n" + " Join sales_calendar (sales_base.sales_date = calendar.date)\n" + " Join sales_date_calendar (sales_by_date.sales_date = calendar.date)\n" + " Join sales_qtr_calendar (sales_by_qtr.sales_qtr_first_date = calendar.date)\n" + "\n" + ")\n" + "\n" + "###Mapping\n" + "Mapping map\n" + "(\n" + " FiscalCalendar [b] : Relational {\n" + " scope([db]calendar)\n" + " (\n" + " date : date,\n" + " fiscalYear : fiscal_year,\n" + " fiscalQtr : fiscal_qtr,\n" + " fiscalMonth : fiscal_month\n" + " )\n" + " }\n" + " \n" + " Sales [a] : AggregationAware {\n" + " Views : [\n" + " (\n" + " ~modelOperation : {\n" + " ~canAggregate false,\n" + " ~groupByFunctions (\n" + " $this.salesDate.fiscalYear,\n" + " $this.salesDate.fiscalQtr\n" + " ),\n" + " ~aggregateValues (\n" + " ( ~mapFn: $this.revenue, ~aggregateFn: $mapped->sum() )\n" + " )\n" + " },\n" + " ~aggregateMapping : Relational {\n" + " salesDate ( \n" + " fiscalQtr : [db]@sales_qtr_calendar | calendar.fiscal_qtr, \n" + " fiscalYear : [db]@sales_qtr_calendar | calendar.fiscal_year\n" + " ),\n" + " revenue : [db]sales_by_qtr.net_revenue\n" + " }\n" + " ),\n" + " (\n" + " ~modelOperation : {\n" + " ~canAggregate true,\n" + " ~groupByFunctions (\n" + " $this.salesDate\n" + " ),\n" + " ~aggregateValues (\n" + " ( ~mapFn: $this.revenue, ~aggregateFn: $mapped->sum() )\n" + " )\n" + " },\n" + " ~aggregateMapping : Relational {\n" + " scope([db]sales_by_date)\n" + " (\n" + " salesDate [b] : [db]@sales_date_calendar,\n" + " revenue : net_revenue\n" + " )\n" + " }\n" + " )\n" + " ],\n" + " ~mainMapping : Relational {\n" + " scope([db]sales_base)\n" + " (\n" + " salesDate [b] : [db]@sales_calendar,\n" + " revenue : revenue\n" + " )\n" + " }\n" + " }\n" + ")";
this.runtime.createInMemorySource("mapping.pure", source);
this.runtime.compile();
InstanceSetImplementation setImpl = (InstanceSetImplementation) ((Mapping) this.runtime.getCoreInstance("map"))._classMappings().toSortedList(new Comparator<SetImplementation>() {
@Override
public int compare(SetImplementation o1, SetImplementation o2) {
return o1._id().compareTo(o2._id());
}
}).get(0);
Assert.assertTrue(setImpl instanceof AggregationAwareSetImplementation);
AggregationAwareSetImplementation aggSetImpl = (AggregationAwareSetImplementation) setImpl;
Assert.assertEquals("a", aggSetImpl._id());
Assert.assertNotNull(aggSetImpl._mainSetImplementation());
Assert.assertTrue(aggSetImpl._mainSetImplementation() instanceof RootRelationalInstanceSetImplementation);
Assert.assertEquals("a_Main", aggSetImpl._mainSetImplementation()._id());
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().size() == 2);
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification());
Assert.assertFalse(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._canAggregate());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._groupByFunctions().size() == 2);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._aggregateValues().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation() instanceof RootRelationalInstanceSetImplementation);
Assert.assertEquals("a_Aggregate_0", aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation()._id());
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._canAggregate());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._groupByFunctions().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._aggregateValues().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._setImplementation() instanceof RootRelationalInstanceSetImplementation);
Assert.assertEquals("a_Aggregate_1", aggSetImpl._aggregateSetImplementations().toList().get(1)._setImplementation()._id());
}
use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.datatype.Date in project legend-pure by finos.
the class TestAggregationAwareMapping method testAggregationAwareMappingGrammarSingleAggregate.
@Test
public void testAggregationAwareMappingGrammarSingleAggregate() {
String source = "###Pure\n" + "Class Sales\n" + "{\n" + " id: Integer[1];\n" + " salesDate: FiscalCalendar[1];\n" + " revenue: Float[1];\n" + "}\n" + "\n" + "Class FiscalCalendar\n" + "{\n" + " date: Date[1];\n" + " fiscalYear: Integer[1];\n" + " fiscalMonth: Integer[1];\n" + " fiscalQtr: Integer[1];\n" + "}\n" + "native function sum(f:Float[*]):Float[1];\n" + "\n" + "###Relational\n" + "Database db \n" + "(\n" + " Table sales_base (id INT PRIMARY KEY, sales_date DATE, revenue FLOAT)\n" + " Table calendar (date DATE PRIMARY KEY, fiscal_year INT, fiscal_qtr INT, fiscal_month INT)\n" + " \n" + " Table sales_by_date (sales_date DATE, net_revenue FLOAT)\n" + " \n" + " Join sales_calendar (sales_base.sales_date = calendar.date)\n" + " Join sales_date_calendar (sales_by_date.sales_date = calendar.date)\n" + ")\n" + "\n" + "###Mapping\n" + "Mapping map\n" + "(\n" + " FiscalCalendar [b] : Relational {\n" + " scope([db]calendar)\n" + " (\n" + " date : date,\n" + " fiscalYear : fiscal_year,\n" + " fiscalQtr : fiscal_qtr,\n" + " fiscalMonth : fiscal_month\n" + " )\n" + " }\n" + " \n" + " Sales [a] : AggregationAware {\n" + " Views : [\n" + " (\n" + " ~modelOperation : {\n" + " ~canAggregate true,\n" + " ~groupByFunctions (\n" + " $this.salesDate\n" + " ),\n" + " ~aggregateValues (\n" + " ( ~mapFn: $this.revenue, ~aggregateFn: $mapped->sum() )\n" + " )\n" + " },\n" + " ~aggregateMapping : Relational {\n" + " scope([db]sales_by_date)\n" + " (\n" + " salesDate [b] : [db]@sales_date_calendar,\n" + " revenue : net_revenue\n" + " )\n" + " }\n" + " )\n" + " ],\n" + " ~mainMapping : Relational {\n" + " scope([db]sales_base)\n" + " (\n" + " salesDate [b] : [db]@sales_calendar,\n" + " revenue : revenue\n" + " )\n" + " }\n" + " }\n" + ")";
this.runtime.createInMemorySource("mapping.pure", source);
this.runtime.compile();
InstanceSetImplementation setImpl = (InstanceSetImplementation) ((Mapping) this.runtime.getCoreInstance("map"))._classMappings().toSortedList(new Comparator<SetImplementation>() {
@Override
public int compare(SetImplementation o1, SetImplementation o2) {
return o1._id().compareTo(o2._id());
}
}).get(0);
Assert.assertTrue(setImpl instanceof AggregationAwareSetImplementation);
AggregationAwareSetImplementation aggSetImpl = (AggregationAwareSetImplementation) setImpl;
Assert.assertEquals("a", aggSetImpl._id());
Assert.assertNotNull(aggSetImpl._mainSetImplementation());
Assert.assertTrue(aggSetImpl._mainSetImplementation() instanceof RootRelationalInstanceSetImplementation);
Assert.assertEquals("a_Main", aggSetImpl._mainSetImplementation()._id());
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().size() == 1);
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._canAggregate());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._groupByFunctions().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._aggregateValues().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation() instanceof RootRelationalInstanceSetImplementation);
Assert.assertEquals("a_Aggregate_0", aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation()._id());
}
use of org.finos.legend.pure.m3.coreinstance.meta.relational.metamodel.datatype.Date in project legend-pure by finos.
the class TestAggregationAwareMapping method testAggregationAwareMappingGrammarMultiAggregate.
@Test
public void testAggregationAwareMappingGrammarMultiAggregate() {
String source = "###Pure\n" + "Class Sales\n" + "{\n" + " id: Integer[1];\n" + " salesDate: FiscalCalendar[1];\n" + " revenue: Float[1];\n" + "}\n" + "\n" + "Class FiscalCalendar\n" + "{\n" + " date: Date[1];\n" + " fiscalYear: Integer[1];\n" + " fiscalMonth: Integer[1];\n" + " fiscalQtr: Integer[1];\n" + "}\n" + "\n" + "Class Sales_By_Date\n" + "{\n" + " salesDate: FiscalCalendar[1];\n" + " netRevenue: Float[1];\n" + "}\n" + "\n" + "Class Sales_By_Qtr\n" + "{\n" + " salesQtrFirstDate: FiscalCalendar[1];\n" + " netRevenue: Float[1];\n" + "}\n" + "\n" + "function meta::pure::functions::math::sum(numbers:Float[*]):Float[1]\n" + "{\n" + " $numbers->plus();\n" + "}\n" + "###Mapping\n" + "Mapping map\n" + "(\n" + " FiscalCalendar [b] : Pure {\n" + " ~src FiscalCalendar\n" + " date : $src.date,\n" + " fiscalYear : $src.fiscalYear,\n" + " fiscalMonth : $src.fiscalMonth,\n" + " fiscalQtr : $src.fiscalQtr\n" + " }\n" + " \n" + " Sales [a] : AggregationAware {\n" + " Views : [\n" + " (\n" + " ~modelOperation : {\n" + " ~canAggregate false,\n" + " ~groupByFunctions (\n" + " $this.salesDate.fiscalYear,\n" + " $this.salesDate.fiscalQtr\n" + " ),\n" + " ~aggregateValues (\n" + " ( ~mapFn: $this.revenue, ~aggregateFn: $mapped->sum() )\n" + " )\n" + " },\n" + " ~aggregateMapping : Pure {\n" + " ~src Sales_By_Qtr\n" + " salesDate [b] : $src.salesQtrFirstDate,\n" + " revenue : $src.netRevenue\n" + " }\n" + " ),\n" + " (\n" + " ~modelOperation : {\n" + " ~canAggregate true,\n" + " ~groupByFunctions (\n" + " $this.salesDate\n" + " ),\n" + " ~aggregateValues (\n" + " ( ~mapFn: $this.revenue, ~aggregateFn: $mapped->sum() )\n" + " )\n" + " },\n" + " ~aggregateMapping : Pure {\n" + " ~src Sales_By_Date\n" + " salesDate [b] : $src.salesDate,\n" + " revenue : $src.netRevenue\n" + " }\n" + " )\n" + " ],\n" + " ~mainMapping : Pure {\n" + " ~src Sales\n" + " salesDate [b] : $src.salesDate,\n" + " revenue : $src.revenue\n" + " }\n" + " }\n" + ")";
this.runtime.createInMemorySource("mapping.pure", source);
this.runtime.compile();
InstanceSetImplementation setImpl = (InstanceSetImplementation) ((org.finos.legend.pure.m3.coreinstance.meta.pure.mapping.Mapping) this.runtime.getCoreInstance("map"))._classMappings().toSortedList(new Comparator<SetImplementation>() {
@Override
public int compare(SetImplementation o1, SetImplementation o2) {
return o1._id().compareTo(o2._id());
}
}).get(0);
Assert.assertTrue(setImpl instanceof AggregationAwareSetImplementation);
AggregationAwareSetImplementation aggSetImpl = (AggregationAwareSetImplementation) setImpl;
Assert.assertEquals("a", aggSetImpl._id());
Assert.assertNotNull(aggSetImpl._mainSetImplementation());
Assert.assertTrue(aggSetImpl._mainSetImplementation() instanceof PureInstanceSetImplementation);
Assert.assertEquals("a_Main", aggSetImpl._mainSetImplementation()._id());
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().size() == 2);
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification());
Assert.assertFalse(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._canAggregate());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._groupByFunctions().size() == 2);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._aggregateSpecification()._aggregateValues().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation() instanceof PureInstanceSetImplementation);
Assert.assertEquals("a_Aggregate_0", aggSetImpl._aggregateSetImplementations().toList().get(0)._setImplementation()._id());
Assert.assertNotNull(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._canAggregate());
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._groupByFunctions().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._aggregateSpecification()._aggregateValues().size() == 1);
Assert.assertTrue(aggSetImpl._aggregateSetImplementations().toList().get(1)._setImplementation() instanceof PureInstanceSetImplementation);
Assert.assertEquals("a_Aggregate_1", aggSetImpl._aggregateSetImplementations().toList().get(1)._setImplementation()._id());
}
Aggregations