resolveError method
Object
resolveError(
- Object error,
- StackTrace stackTrace,
- Object? operation,
- Object? previousError,
override
Implementation
@override
Object resolveError(
Object error,
StackTrace stackTrace,
Object? operation,
Object? previousError,
) {
if (error is DBSQLiteAdapterException) {
return error;
}
SQL? failedSQL;
if (error is _SQLiteStatementException) {
failedSQL = error.sql;
error = error.error;
}
if (error is SqliteException) {
var extendedCode = error.extendedResultCode;
// SQLITE_CONSTRAINT_UNIQUE / SQLITE_CONSTRAINT_PRIMARYKEY:
if (extendedCode == 2067 || extendedCode == 1555) {
// A composite constraint names all its columns:
var (tableName, fieldsNames) = parseConstraintTableFields(
error.message,
);
var fieldName = fieldsNames?.join(', ');
var composite = fieldsNames != null && fieldsNames.length > 1;
var sqliteError = error;
return EntityFieldInvalid(
"unique",
composite
? fieldsNames
.map((f) => _invalidValue(failedSQL, f, sqliteError))
.toList()
: _invalidValue(failedSQL, fieldName, sqliteError),
tableName: tableName,
fieldName: fieldName,
fieldsNames: composite ? fieldsNames : null,
parentError: error,
parentStackTrace: stackTrace,
previousError: previousError,
operation: operation,
);
}
// SQLITE_CONSTRAINT_FOREIGNKEY:
if (extendedCode == 787) {
return DBSQLiteAdapterException(
'delete.constraint',
error.message,
parentError: error,
parentStackTrace: stackTrace,
previousError: previousError,
operation: operation,
);
}
// SQLITE_CONSTRAINT_NOTNULL:
if (extendedCode == 1299) {
var (tableName, fieldName) = _parseConstraintTableField(error.message);
return EntityFieldInvalid(
"null",
_invalidValue(failedSQL, fieldName, error),
tableName: tableName,
fieldName: fieldName,
parentError: error,
parentStackTrace: stackTrace,
previousError: previousError,
operation: operation,
);
}
// SQLITE_CONSTRAINT_CHECK: a value outside an emulated `ENUM`.
// Note SQLite's CHECK message quotes the expression
// ("CHECK constraint failed: t IN ('a','b')"), not `table.column`, so
// `_parseConstraintTableField` yields nulls here.
if (extendedCode == 275) {
var (tableName, fieldName) = _parseConstraintTableField(error.message);
return EntityFieldInvalid(
"check",
error.message,
tableName: tableName,
fieldName: fieldName,
parentError: error,
parentStackTrace: stackTrace,
previousError: previousError,
);
}
}
return DBSQLiteAdapterException(
'error',
'$error',
parentError: error,
parentStackTrace: stackTrace,
previousError: previousError,
operation: operation,
);
}