The Store Layer
The store layer provides a flexible way of defining how and where we should store the data.
RDBMS schema management
Define a new schema
You can define a new schema in the store/rdbms/rdbms_schema.go file.
The system goes over all definitions and assures that all of the tables are present in the connected database.
|
This step doesn’t take into account any potential schema manipulations. See Update existing schemas for details. |
// General bits regarding the package
// ...
func (s Schema) Tables() []*Table {
return []*Table{
// Other schema definitions
// ...
s.ComposeModule(),
// Other schema definitions
// ...
}
}
// Other schema definitions
// ...
func (Schema) ComposeModule() *Table {
return TableDef("compose_module",
ID,
ColumnDef("rel_namespace", ColumnTypeIdentifier),
ColumnDef("handle", ColumnTypeVarchar, ColumnTypeLength(handleLength)),
ColumnDef("name", ColumnTypeText),
ColumnDef("meta", ColumnTypeJson),
CUDTimestamps,
AddIndex("namespace", IColumn("rel_namespace")),
AddIndex("unique_handle", IColumn("rel_namespace"), IExpr("LOWER(handle)"), IWhere("LENGTH(handle) > 0 AND deleted_at IS NULL")),
)
}
// Other schema definitions
// ...
Update existing schemas
|
When developing new features that require new store definitions, don’t clutter the If you are working with others, make sure to also coordinate this with them. |
You can define schema altering in the store/rdbms/generic_upgrades.go file.
The system will go over all of the definitions and ensure that everything is up-to-date.
|
The system will only apply the changes that have not yet been applied. The result is the same, no matter how many times you run it. |
// General bits regarding the package
// ...
func (g genericUpgrades) Before(ctx context.Context) error {
return g.all(ctx,
g.RenameActionlog,
// Other operations
// ...
)
}
// Other definitions
// ...
func (g genericUpgrades) RenameActionlog(ctx context.Context) error {
return g.RenameTable(ctx, "sys_actionlog", "actionlog")
}
// Other definitions
// ...