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) {
var (tableName, fieldName) = _parseConstraintTableField(error.message);
return EntityFieldInvalid(
"unique",
_invalidValue(failedSQL, fieldName, error),
tableName: tableName,
fieldName: fieldName,
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,
);
}