blob: aecb7c3be20ae177ddb9d3f96d01f2bc53ee1560 [file] [log] [blame]
// Class and table with the same name in the two models
pattern ClassAndTable
class : OO!Class,
table : DB!Table guard: class.name = table.name {
onmatch {
// Synchronise table columns with class attributes
for (attr in class.attributes) {
var col = table.columns.selectOne(col|col.name=attr.name);
if (not col.isDefined()) {
col = new DB!Column;
table.columns.add(col);
}
sync(attr, col);
}
}
}
// Class without corresponding table
pattern ClassAndNoTable
class : OO!Class,
no table : DB!Table from: DB!Table.all.select(table|table.name = class.name) {
onmatch {
// Create a table with that name
var table : new DB!Table;
DB!Database.all.first().tables.add(table);
table.name = class.name;
for (attr in class.attributes) {
var col = new DB!Column;
table.columns.add(col);
sync(attr, col);
}
}
}
// Table without corresponding class
pattern TableAndNoClass
table : DB!Table,
no class : OO!Class from: OO!Class.all.select(class|class.name = table.name) {
onmatch {
// Delete the table
delete table;
}
}
operation sync(attr : OO!Attribute, col : DB!Column) {
col.name = attr.name;
col.type = attr.type.toDbType();
}
operation String toDbType() {
if (self = "String") return "nvarchar";
else return "int";
}