exists<_Model extends SqliteModel> method
Future<bool>
exists<_Model extends SqliteModel>({
- Query? query,
- ModelRepository<
SqliteModel> ? repository,
Returns true
if _Model
exists in SQLite.
If query.where
is null
, existence for any record is executed.
Implementation
@override
Future<bool> exists<_Model extends SqliteModel>({
Query? query,
ModelRepository<SqliteModel>? repository,
}) async {
final sqlQuery = QuerySqlTransformer<_Model>(
modelDictionary: modelDictionary,
query: query,
selectStatement: false,
);
final offsetRegex = RegExp(r'OFFSET \d+');
final offsetIsPresent = sqlQuery.statement.contains(offsetRegex);
var statement = sqlQuery.statement;
/// COUNT(*) does not function with OFFSET.
/// Instead, when an OFFSET is defined, a single column managed by is queried
/// and that result is counted via Dart
if (offsetIsPresent) {
statement = statement.replaceFirstMapped(RegExp(r'SELECT COUNT\(\*\) FROM ([\S]+)'), (match) {
return 'SELECT ${match.group(1)}.${InsertTable.PRIMARY_KEY_COLUMN} FROM ${match.group(1)}';
});
}
final countQuery = await (await getDb()).rawQuery(statement, sqlQuery.values);
final count = offsetIsPresent ? countQuery.length : sqlite_utils.firstIntValue(countQuery);
return (count ?? 0) > 0;
}