「这是我参与11月更文挑战的第28天,活动详情查看:2021最后一次更文挑战」。
Flutter持久化库drift(原moor)官方文档翻译汇总 - 掘金 (juejin.cn)
本文翻译自 drift 的 官方文档 Supported sqlite extensions (simonbinder.eu)。
肉翻多有不足,不吝赐教。
支持的 sqlite 扩展
注: 因为 moor_flutter
使用了设备上装载的 sqlite 版本,那在这些设备上这些扩展可能无法使用。
当使用这些扩展时,强烈建议使用 NativeDatabase
。这会使下面列出的扩展在所有的 Android 和 iOS 设备上可用。
json1
要使 drift 文件和编译后的查询中的 json1 扩展可用,需要修改构建选项,在 sqlite_module
部分将 json1
包含进去。
这个 sqlite 扩展不需要其它的表,对所有的 text 列可用。这个扩展可用的话,在 drift 文件和编译后的查询中,所有的 json
函数都可用。
因为 json 扩展是可选的,要在 Dart 查询中也可用需要一个特殊的 import, package:drift/extensions/json1.dart
。 下面展示了一个在 Dart 中使用 json 函数的示例:
import 'package:drift/drift.dart';
import 'package:drift/extensions/json1.dart';
class Contacts extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get data => text()();
}
@DriftDatabase(tables: [Contacts])
class Database extends _$Database {
// 此处省略构造方法和 schemaVersion
Future<List<Contacts>> findContactsWithNumber(String number) {
return (select(contacts)
..where((row) {
// 假定 phone number 是存储在 `data` 列中的一个 json key 。
final phoneNumber = row.data.jsonExtract<String, StringType>('phone_number');
return phoneNumber.equals(number);
})
).get();
}
}
可以在 sqlite.org 学习更多有关 json1 扩展的内容。
fts5
fts5 扩展提供了在 sqlite 表中全文搜索的能力。为了使 fts5 扩展在 drift 文件和编译后查询中可用,需要修改构建选项 在 sqlite_module
部分把 fts5
包含进来。
正如所期望的,当使用 sqlite 时,可以 在 drift 文件中使用 CREATE VIRTUAL TABLE
语句创建一个 fts5 表。
CREATE VIRTUAL TABLE email USING fts5(sender, title, body);
对 fts5 的查询会如期望中运转:
emailsWithFts5: SELECT * FROM email WHERE email MATCH 'fts5' ORDER BY rank;
用于 fts5 的 bm25
、 highlight
、 snippet
函数也可用于自定义查询。
在 Dart 中无法声明 fts5 表,也无法对 fts5 表进行查询。
可以在 sqlite.org 学习更多有关 json1 扩展的内容。