@@ -738,12 +738,18 @@ class Query<T> {
738738 /// results. Note: [offset] and [limit] are respected, if set.
739739 T ? findFirst () {
740740 T ? result;
741+ Object ? error;
741742 final visitor = dataVisitor ((Pointer <Uint8 > data, int size) {
742- result = _entity.objectFromFB (
743- _store, InternalStoreAccess .reader (_store).access (data, size));
743+ try {
744+ result = _entity.objectFromFB (
745+ _store, InternalStoreAccess .reader (_store).access (data, size));
746+ } catch (e) {
747+ error = e;
748+ }
744749 return false ; // we only want to visit the first element
745750 });
746751 checkObx (C .query_visit (_ptr, visitor, nullptr));
752+ if (error != null ) throw error! ;
747753 reachabilityFence (this );
748754 return result;
749755 }
@@ -756,17 +762,22 @@ class Query<T> {
756762 /// higher than one, otherwise the check for non-unique result won't work.
757763 T ? findUnique () {
758764 T ? result;
759- Exception ? error;
765+ Object ? error;
760766 final visitor = dataVisitor ((Pointer <Uint8 > data, int size) {
761767 if (result == null ) {
762- result = _entity.objectFromFB (
763- _store, InternalStoreAccess .reader (_store).access (data, size));
768+ try {
769+ result = _entity.objectFromFB (
770+ _store, InternalStoreAccess .reader (_store).access (data, size));
771+ return true ;
772+ } catch (e) {
773+ error = e;
774+ return false ;
775+ }
764776 } else {
765777 error = UniqueViolationException (
766778 'Query findUnique() matched more than one object' );
767779 return false ;
768780 }
769- return true ;
770781 });
771782 checkObx (C .query_visit (_ptr, visitor, nullptr));
772783 reachabilityFence (this );
@@ -790,8 +801,10 @@ class Query<T> {
790801 /// Finds Objects matching the query.
791802 List <T > find () {
792803 final result = < T > [];
793- final collector = objectCollector (result, _store, _entity);
804+ final errorWrapper = ObjectCollectorError ();
805+ final collector = objectCollector (result, _store, _entity, errorWrapper);
794806 checkObx (C .query_visit (_ptr, collector, nullptr));
807+ errorWrapper.throwIfError ();
795808 reachabilityFence (this );
796809 return result;
797810 }
0 commit comments