Copy updated readme

This commit is contained in:
Simon Binder 2019-02-28 22:28:46 +01:00
parent c4d696a04c
commit e43a5dea60
1 changed files with 30 additions and 0 deletions

View File

@ -189,6 +189,34 @@ If a column is nullable or has a default value (this includes auto-increments),
can be omitted. All other fields must be set and non-null. The `insert` method will throw
otherwise.
### Custom statements
You can also issue custom queries by calling `customUpdate` for update and deletes and
`customSelect` or `customSelectStream` for select statements. Using the todo example
above, here is a simple custom query that loads all categories and how many items are
in each category:
```dart
class CategoryWithCount {
final Category category;
final int count; // amount of entries in this category
CategoryWithCount(this.category, this.count);
}
// then, in the database class:
Stream<List<CategoryWithCount>> categoriesWithCount() {
// select all categories and load how many associated entries there are for
// each category
return customSelectStream(
'SELECT *, (SELECT COUNT(*) FROM todos WHERE category = c.id) AS "amount" FROM categories c;',
readsFrom: Set.of([todos, categories])).map((rows) {
// when we have the result set, map each row to the data class
return rows
.map((row) => CategoryWithCount(Category.fromData(row.data, this), row.readInt('amount')))
.toList();
});
}
```
## Migrations
Sally provides a migration API that can be used to gradually apply schema changes after bumping
the `schemaVersion` getter inside the `Database` class. To use it, override the `migration`
@ -226,6 +254,8 @@ You can also add individual tables or drop them.
## TODO-List and current limitations
### Limitations (at the moment)
Please note that a workaround for most on this list exists with custom statements.
- No joins
- No `group by` or window functions
- Custom primary key support is very limited