@@ -581,6 +581,45 @@ queryMinRefId ::
581581 field ->
582582 ReaderT SqlBackend m (Maybe (Key record ))
583583queryMinRefId txIdField txId = do
584+ res <- select $ do
585+ rec <- from $ table @ record
586+ where_ (rec ^. txIdField >=. val txId)
587+ limit 10000
588+ pure $ rec ^. persistIdField
589+ if length res >= 10000
590+ then queryMinRefIdFallback txIdField txId
591+ else pure $ minimumMay $ map unValue res
592+ where
593+ minimumMay [] = Nothing
594+ minimumMay xs = Just (minimum xs)
595+
596+ queryMinRefIdNullable ::
597+ forall m field record .
598+ (MonadIO m , PersistEntity record , PersistField field ) =>
599+ EntityField record (Maybe field ) ->
600+ field ->
601+ ReaderT SqlBackend m (Maybe (Key record ))
602+ queryMinRefIdNullable txIdField txId = do
603+ res <- select $ do
604+ rec <- from $ table @ record
605+ where_ (isJust (rec ^. txIdField))
606+ where_ (rec ^. txIdField >=. just (val txId))
607+ limit 10000
608+ pure $ rec ^. persistIdField
609+ if length res >= 10000
610+ then queryMinRefIdNullableFallback txIdField txId
611+ else pure $ minimumMay $ map unValue res
612+ where
613+ minimumMay [] = Nothing
614+ minimumMay xs = Just (minimum xs)
615+
616+ queryMinRefIdFallback ::
617+ forall m field record .
618+ (MonadIO m , PersistEntity record , PersistField field ) =>
619+ EntityField record field ->
620+ field ->
621+ ReaderT SqlBackend m (Maybe (Key record ))
622+ queryMinRefIdFallback txIdField txId = do
584623 res <- select $ do
585624 rec <- from $ table @ record
586625 where_ (rec ^. txIdField >=. val txId)
@@ -589,13 +628,13 @@ queryMinRefId txIdField txId = do
589628 pure $ rec ^. persistIdField
590629 pure $ unValue <$> listToMaybe res
591630
592- queryMinRefIdNullable ::
631+ queryMinRefIdNullableFallback ::
593632 forall m field record .
594633 (MonadIO m , PersistEntity record , PersistField field ) =>
595634 EntityField record (Maybe field ) ->
596635 field ->
597636 ReaderT SqlBackend m (Maybe (Key record ))
598- queryMinRefIdNullable txIdField txId = do
637+ queryMinRefIdNullableFallback txIdField txId = do
599638 res <- select $ do
600639 rec <- from $ table @ record
601640 where_ (isJust (rec ^. txIdField))
0 commit comments