Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ function meta::relational::mapping::findPropertyMapping(property:AbstractPropert

if($currentPropertyMapping->size() == 1 && ($propMappings->size() > 1),
| //In this use case, the precedent mappings were filtered (and we have nothing to union ... so we can't take the first one)
let result = $propMappings->filter(p|$p.sourceSetImplementationId == $currentPropertyMapping.targetSetImplementationId);
let result = $propMappings->filter(p|$p.sourceSetImplementationId == $currentPropertyMapping.targetSetImplementationId || $p.property == $property);
assert(!$result->isEmpty(),| 'Error can\'t find a mapping for the property:\''+$property.name->toOne()+'\' (owner class:"'+$propertyOwnerClass.name->toOne()+'") in the set implement id:"'+$currentPropertyMapping.targetSetImplementationId->toOne()+'" in ['+$propMappings->map(p|$p.owner->toOne().id+' : ('+$p.sourceSetImplementationId+' -> '+$p.targetSetImplementationId+')')->joinStrings(',')+']');
$result;,
| $propMappings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -374,15 +374,18 @@ function meta::relational::tests::milestoning::initDatabase():Runtime[1]

executeInDb('DROP TABLE IF EXISTS Person;', $connection);
executeInDb('DROP TABLE IF EXISTS Cars;', $connection);
executeInDb('DROP TABLE IF EXISTS CarDetails;', $connection);
executeInDb('DROP TABLE IF EXISTS Bicycles;', $connection);
executeInDb('DROP TABLE IF EXISTS Jets;', $connection);
executeInDb('CREATE TABLE Person (name VARCHAR(100),id INTEGER, PRIMARY KEY(id));', $connection);
executeInDb('CREATE TABLE Cars (in_z TIMESTAMP, out_z TIMESTAMP, id INTEGER PRIMARY KEY, description VARCHAR(200));', $connection);
executeInDb('CREATE TABLE CarDetails (id INTEGER PRIMARY KEY, time TIMESTAMP);', $connection);
executeInDb('CREATE TABLE Bicycles (in_z TIMESTAMP, out_z TIMESTAMP, id INTEGER PRIMARY KEY, description VARCHAR(200));', $connection);
executeInDb('CREATE TABLE Jets (in_z TIMESTAMP, out_z TIMESTAMP, id INTEGER PRIMARY KEY, description VARCHAR(200));', $connection);
executeInDb('INSERT INTO Person (name, id) VALUES (\'Alice\', 1), (\'Bob\', 2), (\'Charlie\', 3), (\'Diana\', 4), (\'Eve\', 5);', $connection);
executeInDb('INSERT INTO Cars (in_z, out_z, id, description) VALUES\n(\'2020-01-01\', \'2050-01-01\', 1, \'Sedan\'),\n(\'2020-01-01\', \'2050-01-01\', 2, \'SUV\'),\n(\'2020-01-01\', \'2050-01-01\', 3, \'Hatchback\'),\n(\'2020-01-01\', \'2050-01-01\', 4, \'Convertible\'),\n(\'2020-01-01\', \'2050-01-01\', 5, \'Truck\');', $connection);
executeInDb('INSERT INTO Bicycles (in_z, out_z, id, description) VALUES\n(\'2020-01-01\', \'2050-01-01\', 5, \'Mountain Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 4, \'Road Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 3, \'Hybrid Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 2, \'Electric Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 1, \'Folding Bike\');', $connection);
executeInDb('INSERT INTO Cars (in_z, out_z, id, description) VALUES\n(\'2020-01-01\', \'2050-01-01\', 1, \'Sedan\'),\n(\'2020-01-01\', \'2050-01-01\', 2, \'SUV\'),\n(\'2020-01-01\', \'2050-01-01\', 3, \'Hatchback\'),\n(\'2020-01-01\', \'2050-01-01\', 4, \'Convertible\'),\n(\'2020-01-01\', \'2050-01-01\', 5, \'Truck\'),\n(\'2100-01-01\', \'2200-01-01\', 6, \'Nuclear Car\');', $connection);
executeInDb('INSERT INTO CarDetails (id, time) VALUES\n(1, \'2025-01-01\'),\n(2, \'2030-01-01\'),\n(3, \'2035-01-01\'),\n(4, \'2040-01-01\'),\n(5, \'2045-01-01\'),\n(6, \'2150-01-01\');', $connection);
executeInDb('INSERT INTO Bicycles (in_z, out_z, id, description) VALUES\n(\'2020-01-01\', \'2050-01-01\', 5, \'Mountain Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 4, \'Road Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 3, \'Hybrid Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 2, \'Electric Bike\'),\n(\'2020-01-01\', \'2050-01-01\', 1, \'Folding Bike\'),\n(\'2200-01-01\', \'2300-01-01\', 6, \'Nuclear Bike\');', $connection);
executeInDb('INSERT INTO Jets (in_z, out_z, id, description) VALUES\n(\'2020-01-01\', \'2050-01-01\', 3, \'Fighter Jet\'),\n(\'2020-01-01\', \'2050-01-01\', 8, \'Water Jet\'),\n(\'2020-01-01\', \'2050-01-01\', 6, \'Hybrid Jet\'),\n(\'2020-01-01\', \'2050-01-01\', 4, \'Supersonic Jet\'),\n(\'2020-01-01\', \'2050-01-01\', 2, \'Transformer Jet\');', $connection);

^Runtime(connectionStores=$connectionStore);
Expand Down Expand Up @@ -1526,6 +1529,63 @@ Mapping meta::relational::tests::milestoning::milestoningmapWithVehicles

)

###Mapping
import meta::relational::tests::milestoning::*;
import meta::relational::tests::milestoning::inheritance::*;

Mapping meta::relational::tests::milestoning::milestoningmapWithVehiclesUnion
(

*CarDetails: Operation
{
meta::pure::router::operations::union_OperationSetImplementation_1__SetImplementation_MANY_(c1,c2)
}

CarDetails[c1]: Relational
{
~primaryKey (
[db]CarDetails.id
)
~mainTable [db]CarDetails
time: [db]CarDetails.time,
car[meta_relational_tests_milestoning_inheritance_Car]: [db]@Car_CarDetails
}

CarDetails[c2]: Relational
{
~primaryKey (
[db]CarDetails.id
)
~mainTable [db]CarDetails
time: [db]CarDetails.time,
car[meta_relational_tests_milestoning_inheritance_Car]: [db]@Car_CarDetails
}

*Car: Relational
{
~primaryKey (
[db]Cars.id
)
~mainTable [db]Cars
id: [db]Cars.id,
description: [db]Cars.description,
wheelCount: 4,
bicycle[meta_relational_tests_milestoning_inheritance_Bicycle]: [db]@CarBicycle
}

*Bicycle: Relational
{
~primaryKey (
[db]Bicycles.id
)
~mainTable [db]Bicycles
id: [db]Bicycles.id,
description: [db]Bicycles.description,
wheelCount: 2
}

)

###Relational
Database meta::relational::tests::milestoning::dbWithInclusion(
include meta::relational::tests::milestoning::dbInclusion
Expand Down Expand Up @@ -2232,6 +2292,12 @@ Database meta::relational::tests::milestoning::db(
description VARCHAR(200)
)

Table CarDetails
(
id INTEGER PRIMARY KEY,
time TIMESTAMP NOT NULL
)


Join Order_Product(OrderTable.prodFk=ProductTable.id)
Join Order_MilestonedProductTable2(OrderTable.prodFk=MilestonedProductTable2.id)
Expand Down Expand Up @@ -2323,6 +2389,9 @@ Database meta::relational::tests::milestoning::db(
Join stockProductView_ProductTable(stockProductView.id = ProductTable.id)
Join PersonCar(Person.id = Cars.id)
Join PersonBicycle(Person.id = Bicycles.id)
Join CarBicycle(Cars.id = Bicycles.id)
Join Car_CarDetails(Cars.id = CarDetails.id)


Filter IsStockType(ProductTable.type='STOCK')
Filter LNSEProducts(ProductExchangeTable.name='STOCK')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,11 @@ Class <<temporal.businesstemporal>> meta::relational::tests::milestoning::inheri
engineType : EngineType[0..1];
}

Class meta::relational::tests::milestoning::inheritance::CarDetails
{
time: DateTime[1];
car: Car[0..1];
}

Enum meta::relational::tests::milestoning::inheritance::EngineType
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,17 @@ function <<test.Test>> meta::relational::tests::milestoning::businessdate::testB
assertSameSQL('select "root".id as "orderId" from OrderTable as "root" left outer join (select "ordertable_2".id as id from OrderTable as "ordertable_2" left outer join ProductTable as "producttable_0" on ("ordertable_2".prodFk = "producttable_0".id and "producttable_0".from_z <= "ordertable_2".orderDate and "producttable_0".thru_z > "ordertable_2".orderDate) where "producttable_0".type = \'STOCK\') as "ordertable_1" on ("root".id = "ordertable_1".id)',$result);
}

function <<test.Test>> meta::relational::tests::milestoning::businessdate::testBusinessDateInjectionFromVarReferenceWithUnion(): Boolean[1]
{
let result1 = execute(|meta::relational::tests::milestoning::inheritance::CarDetails.all()->project([x|$x.car($x.time).id, x|$x.car($x.time).bicycle.id, x|$x.car($x.time).bicycle.description],['Car Details/Car/Id', 'Car Details/Car/Bicycle/Id', 'Car Details/Car/Bicycle/Description']);, milestoningmapWithVehiclesUnion, meta::external::store::relational::tests::testRuntime(), meta::relational::extension::relationalExtensions());
assertSameElements(['1 | 1 | Folding Bike', '1 | 1 | Folding Bike', '2 | 2 | Electric Bike', '2 | 2 | Electric Bike', '3 | 3 | Hybrid Bike', '3 | 3 | Hybrid Bike', '4 | 4 | Road Bike', '4 | 4 | Road Bike', '5 | 5 | Mountain Bike', '5 | 5 | Mountain Bike', '6 | TDSNull | TDSNull', '6 | TDSNull | TDSNull'], $result1.values.rows->map(r | $r.values->makeString(' | ')));
assertEquals('select "cars_0".id as "Car Details/Car/Id", "bicycles_0".id as "Car Details/Car/Bicycle/Id", "bicycles_0".description as "Car Details/Car/Bicycle/Description" from (select "root".id as "pk_0_0", null as "pk_0_1", "root".id as id_0, null as id_1, "root".time as "CarDetailstime_CarDetailstime" from CarDetails as "root" union all select null as "pk_0_0", "root".id as "pk_0_1", null as id_0, "root".id as id_1, "root".time as "CarDetailstime_CarDetailstime" from CarDetails as "root") as "unionBase" left outer join Cars as "cars_0" on (("cars_0".id = "unionBase".id_0 or "cars_0".id = "unionBase".id_1) and "cars_0".in_z <= "unionBase"."CarDetailstime_CarDetailstime" and "cars_0".out_z > "unionBase"."CarDetailstime_CarDetailstime") left outer join (select "bicycles_1".id as id, "bicycles_1".in_z as in_z, "bicycles_1".out_z as out_z, "bicycles_1".description as description from Bicycles as "bicycles_1") as "bicycles_0" on ("bicycles_0".in_z <= "unionBase"."CarDetailstime_CarDetailstime" and "bicycles_0".out_z > "unionBase"."CarDetailstime_CarDetailstime" and "cars_0".id = "bicycles_0".id)', $result1->sqlRemoveFormatting());

let result2 = execute(|meta::relational::tests::milestoning::inheritance::CarDetails.all()->project([x|$x.car($x.time).id, x|$x.car($x.time).bicycleAllVersions.id, x|$x.car($x.time).bicycleAllVersions.description],['Car Details/Car/Id', 'Car Details/Car/Bicycle/Id', 'Car Details/Car/Bicycle/Description']);, milestoningmapWithVehiclesUnion, meta::external::store::relational::tests::testRuntime(), meta::relational::extension::relationalExtensions());
assertSameElements(['1 | 1 | Folding Bike', '1 | 1 | Folding Bike', '2 | 2 | Electric Bike', '2 | 2 | Electric Bike', '3 | 3 | Hybrid Bike', '3 | 3 | Hybrid Bike', '4 | 4 | Road Bike', '4 | 4 | Road Bike', '5 | 5 | Mountain Bike', '5 | 5 | Mountain Bike', '6 | 6 | Nuclear Bike', '6 | 6 | Nuclear Bike'], $result2.values.rows->map(r | $r.values->makeString(' | ')));
assertEquals('select "cars_0".id as "Car Details/Car/Id", "bicycles_0".id as "Car Details/Car/Bicycle/Id", "bicycles_0".description as "Car Details/Car/Bicycle/Description" from (select "root".id as "pk_0_0", null as "pk_0_1", "root".id as id_0, null as id_1, "root".time as "CarDetailstime_CarDetailstime" from CarDetails as "root" union all select null as "pk_0_0", "root".id as "pk_0_1", null as id_0, "root".id as id_1, "root".time as "CarDetailstime_CarDetailstime" from CarDetails as "root") as "unionBase" left outer join Cars as "cars_0" on (("cars_0".id = "unionBase".id_0 or "cars_0".id = "unionBase".id_1) and "cars_0".in_z <= "unionBase"."CarDetailstime_CarDetailstime" and "cars_0".out_z > "unionBase"."CarDetailstime_CarDetailstime") left outer join Bicycles as "bicycles_0" on ("cars_0".id = "bicycles_0".id)', $result2->sqlRemoveFormatting());
}

function <<test.Test>> meta::relational::tests::milestoning::businessdate::testBusinessDatePropagationInColFunction():Boolean[1]
{
let productBusDate = %2016-01-01;
Expand Down
Loading