|
|
|
# Beispiele für ModelJoin Queries
|
|
|
|
|
|
|
|
- Beispiele für das Library Metamodel
|
|
|
|
- Beispiel ohne join für einen kompletten View sollte jedoch nicht mit ModelJoin kompatibel sein
|
|
|
|
```
|
|
|
|
View name: completeView
|
|
|
|
keep supertype library.Person as ViewPerson
|
|
|
|
keep subtype Employee as ViewEmployee
|
|
|
|
keep supertype Library as ViewLibrary
|
|
|
|
keep attribute library.Library.name as viewLibraryName
|
|
|
|
keep attribute library.Employee.name as viewEmployeeName
|
|
|
|
keep attribute library.Employee.manager as viewManager
|
|
|
|
keep attribute library.Library.employees as viewLibraryEmployees
|
|
|
|
without join
|
|
|
|
```
|
|
|
|
|
|
|
|
- ModelJoin kompatibeles Beispiel mit natural join von einem Element mit sich selbst
|
|
|
|
```
|
|
|
|
viewname CompleteView
|
|
|
|
natural join library.Library with library.Library as ViewLibrary {
|
|
|
|
keep attributes library.Library.name as viewName
|
|
|
|
keep outgoing library.Library.employees as type ViewEmployee as reference viewEmployees {
|
|
|
|
keep supertype library.Person as ViewPerson {
|
|
|
|
keep attributes library.Person.name as viewName
|
|
|
|
}
|
|
|
|
keep outgoing library.Employee.manager as reference viewManager
|
|
|
|
keep attributes library.Employee.salary as viewSalary
|
|
|
|
}
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
|
|
|
## Benötigter Prozess
|
|
|
|
- Eingaben:
|
|
|
|
- Ecore Model
|
|
|
|
- ModelJoin Query als Text Datei
|
|
|
|
|
|
|
|
## Braindump dazu
|
|
|
|
|
|
|
|
### Views auf 2 unterschiedlichen Modellen erzeugen:
|
|
|
|
- für den Join brauchen wir eine neue CompartmentKlasse, welche funktionen zum Zugriff auf die Elemente anbietet Beispiel
|
|
|
|
- Movie -> Aktor
|
|
|
|
- Movie aus imdb.Film und library.VideoCassette
|
|
|
|
- Aktor aus imdb.Actor[playedBy] (über imdb.Figure[figures]) und library.Person[cast]
|
|
|
|
- library.VideoCassete -cast->0..* library.Person
|
|
|
|
- imdb.Film -figures->1..* imdb.Figures -plyedBy->1..* imdb.Actors extends imdb.Person
|
|
|
|
- von imdb zu Library playedBy Relation abbildbar aber nicht anders Rum da keine Information über Figure vorhanden ist
|
|
|
|
|
|
|
|
### Sync Regeln auch in ModelJoin enthalten:
|
|
|
|
- imdb.Person == library.Person
|
|
|
|
- imdb.Film == library.VideoCassete
|
|
|
|
|
|
|
|
### Join ideen
|
|
|
|
- outer joins brauchen wir vermutlich gar nicht da wir erwarten das die Modelle im vollen sync stehen
|
|
|
|
- außer wir haben sowas was von a nach b erstellt und ansonsten nur verbindet wenn vorhanden
|
|
|
|
- library.VideoCassette kann auch nur physisch vorhanden sein wenn sie da ist, sobald ein Film gedreht wird gibt es den der muss aber in einer Bibliothek nicht vorhanden sein
|
|
|
|
- theta join baut das cartesische produkt und filtert dann mit einer where clausel
|
|
|
|
- views sollten alle dispatch regel haben das in ihnen aufgerufene Funktionen nicht nach sich selbst suchen |
|
|
|
\ No newline at end of file |