@@ -34,6 +34,7 @@ import Share.Codebase.Types (CodebaseM)
34
34
import Share.Codebase.Types qualified as Codebase
35
35
import Share.IDs (UserId )
36
36
import Share.Postgres
37
+ import Share.Postgres qualified as PG
37
38
import Share.Postgres.Causal.Types
38
39
import Share.Postgres.Definitions.Queries qualified as Defn
39
40
import Share.Postgres.Definitions.Types
@@ -58,7 +59,7 @@ import Unison.NameSegment.Internal as NameSegment
58
59
import Unison.Reference qualified as Reference
59
60
import Unison.Util.Map qualified as Map
60
61
61
- expectCausalNamespace :: (HasCallStack , QueryM m ) => CausalId -> m (CausalNamespace m )
62
+ expectCausalNamespace :: (HasCallStack , QueryM m e ) => CausalId -> m (CausalNamespace m )
62
63
expectCausalNamespace causalId =
63
64
loadCausalNamespace causalId
64
65
`whenNothingM` unrecoverableError (MissingExpectedEntity $ " Expected causal branch for hash:" <> tShow causalId)
@@ -98,7 +99,7 @@ expectPgCausalNamespace causalId =
98
99
loadPgCausalNamespace causalId
99
100
`whenNothingM` unrecoverableError (MissingExpectedEntity $ " Expected causal branch for causal: " <> tShow causalId)
100
101
101
- loadCausalNamespace :: forall m . (QueryM m ) => CausalId -> m (Maybe (CausalNamespace m ))
102
+ loadCausalNamespace :: forall m e . (QueryM m e ) => CausalId -> m (Maybe (CausalNamespace m ))
102
103
loadCausalNamespace causalId = runMaybeT $ do
103
104
causalHash <- HashQ. expectCausalHashesByIdsOf id causalId
104
105
branchHashId <- HashQ. expectNamespaceIdsByCausalIdsOf id causalId
@@ -139,22 +140,23 @@ expectNamespaceHashByCausalHash causalHash = do
139
140
AND EXISTS (SELECT FROM causal_ownership o WHERE o.causal_id = causals.id AND o.user_id = #{codebaseOwner})
140
141
|]
141
142
142
- expectNamespace :: forall m . (QueryM m ) => BranchHashId -> m (Branch m )
143
+ expectNamespace :: forall m e . (QueryM m e ) => BranchHashId -> m (Branch m )
143
144
expectNamespace branchHashId = do
144
- termsAndConstructors <- getTermsAndConstructors branchHashId <&> (traversed . traversed %~ loadTermMetadata)
145
- types <- getTypes branchHashId <&> (traversed . traversed %~ loadTypeMetadata)
146
145
patches <- getPatches branchHashId
147
146
children <- getChildren branchHashId
148
- pure $
149
- Branch
150
- { -- (<>) is safe here because no referents will overlap between terms and constructors
151
- terms = termsAndConstructors,
152
- types,
153
- patches,
154
- children
155
- }
147
+ pipelined $ do
148
+ termsAndConstructors <- getTermsAndConstructors branchHashId <&> (traversed . traversed %~ loadTermMetadata)
149
+ types <- getTypes branchHashId <&> (traversed . traversed %~ loadTypeMetadata)
150
+ pure $
151
+ Branch
152
+ { -- (<>) is safe here because no referents will overlap between terms and constructors
153
+ terms = termsAndConstructors,
154
+ types,
155
+ patches,
156
+ children
157
+ }
156
158
where
157
- getTermsAndConstructors :: BranchHashId -> m (Map NameSegment (Map Referent NamespaceTermMappingId ))
159
+ getTermsAndConstructors :: forall m . ( QueryA m e ) => BranchHashId -> m (Map NameSegment (Map Referent NamespaceTermMappingId ))
158
160
getTermsAndConstructors branchHashId = do
159
161
queryListRows @ (NameSegment , Maybe Text , Maybe ComponentHash , Maybe PgComponentIndex , Maybe PgConstructorIndex , NamespaceTermMappingId )
160
162
[sql | SELECT name_segment.text AS name_segment, builtin.text AS builtin_text, comp_hash.base32, COALESCE(term.component_index, constr_typ.component_index), constr.constructor_index, mapping.id
@@ -183,7 +185,7 @@ expectNamespace branchHashId = do
183
185
)
184
186
<&> Map. fromListWith (<>)
185
187
186
- getTypes :: BranchHashId -> m (Map NameSegment (Map Reference NamespaceTypeMappingId ))
188
+ getTypes :: forall m . ( QueryA m e ) => BranchHashId -> m (Map NameSegment (Map Reference NamespaceTypeMappingId ))
187
189
getTypes branchHashId = do
188
190
queryListRows
189
191
[sql | SELECT name_segment.text AS name_segment, builtin.text AS builtin_text, component_hashes.base32, typ.component_index, mapping.id
@@ -207,7 +209,7 @@ expectNamespace branchHashId = do
207
209
)
208
210
<&> Map. fromListWith (<>)
209
211
210
- getPatches :: BranchHashId -> m (Map NameSegment (PatchHash , m Patch ))
212
+ getPatches :: forall m . ( QueryM m e ) => BranchHashId -> m (Map NameSegment (PatchHash , m Patch ))
211
213
getPatches branchHashId = do
212
214
queryListRows
213
215
[sql | SELECT name_segment.text AS name_segment, patch.hash, patch.id
@@ -222,7 +224,7 @@ expectNamespace branchHashId = do
222
224
)
223
225
<&> Map. fromList
224
226
225
- getChildren :: BranchHashId -> m (Map NameSegment (CausalBranch m ))
227
+ getChildren :: forall m . ( QueryM m e ) => BranchHashId -> m (Map NameSegment (CausalBranch m ))
226
228
getChildren branchHashId = do
227
229
childIds <-
228
230
queryListRows
@@ -235,7 +237,7 @@ expectNamespace branchHashId = do
235
237
(name_segment,) <$> expectCausalNamespace causalId
236
238
pure $ Map. fromList childList
237
239
238
- loadTermMetadata :: NamespaceTermMappingId -> m MdValues
240
+ loadTermMetadata :: forall m . ( QueryA m e ) => NamespaceTermMappingId -> m MdValues
239
241
loadTermMetadata mappingId = do
240
242
queryListRows @ (Maybe Hash , Maybe PgComponentIndex , Maybe Text )
241
243
[sql |
@@ -248,7 +250,7 @@ expectNamespace branchHashId = do
248
250
|]
249
251
<&> formatMdValues
250
252
251
- loadTypeMetadata :: NamespaceTypeMappingId -> m MdValues
253
+ loadTypeMetadata :: forall m . ( QueryA m e ) => NamespaceTypeMappingId -> m MdValues
252
254
loadTypeMetadata mappingId =
253
255
do
254
256
queryListRows @ (Maybe Hash , Maybe PgComponentIndex , Maybe Text )
@@ -608,7 +610,7 @@ savePgNamespace mayBh b@(BranchFull.Branch {terms, types, patches, children}) =
608
610
execute_ [sql | SELECT save_namespace(#{bhId}) |]
609
611
610
612
-- | Hash a namespace into a BranchHash
611
- hashPgNamespace :: forall m . (QueryM m ) => PgNamespace -> m BranchHash
613
+ hashPgNamespace :: forall m e . (QueryM m e ) => PgNamespace -> m BranchHash
612
614
hashPgNamespace b = do
613
615
BranchFull. Branch {terms, types, patches, children} <-
614
616
b
@@ -660,7 +662,7 @@ hashPgNamespace b = do
660
662
Referent. Ref r -> H. ReferentRef (v2ToH2Reference r)
661
663
Referent. Con r cid -> H. ReferentCon (v2ToH2Reference r) cid
662
664
663
- hashCausal :: (QueryM m ) => BranchHashId -> Set CausalId -> m CausalHash
665
+ hashCausal :: (QueryM m e ) => BranchHashId -> Set CausalId -> m CausalHash
664
666
hashCausal branchHashId ancestorIds = do
665
667
branchHash <- HashQ. expectBranchHash branchHashId
666
668
ancestors <-
@@ -778,7 +780,7 @@ saveV2BranchShallow v2Branch = do
778
780
mdValuesToMetadataSetFormat (V2. MdValues meta) = BranchFull. Inline meta
779
781
780
782
-- | Get the namespace stats of a namespace.
781
- expectNamespaceStatsOf :: (QueryM m ) => Traversal s t BranchHash NamespaceStats -> s -> m t
783
+ expectNamespaceStatsOf :: (QueryM m e ) => Traversal s t BranchHash NamespaceStats -> s -> m t
782
784
expectNamespaceStatsOf trav s =
783
785
s
784
786
& unsafePartsOf trav %%~ \ branchHashes -> do
@@ -867,13 +869,13 @@ importAccessibleCausals causalHashes = do
867
869
-- Order by determines which values are returned by DISTINCT ON
868
870
ORDER BY copyable.causal_id ASC, copyable.created_at DESC
869
871
|]
870
- for_ results \ case
872
+ lift $ PG. pFor_ results \ case
871
873
(causalId, owner) -> do
872
874
execute_ [sql | SELECT copy_causal_into_codebase(#{causalId}, #{owner}, #{codebaseOwnerUserId}) |]
873
875
pure results
874
876
875
877
-- | Find the best common ancestor between two causals for diffs or merges.
876
- bestCommonAncestor :: (QueryM m ) => CausalId -> CausalId -> m (Maybe CausalId )
878
+ bestCommonAncestor :: (QueryM m e ) => CausalId -> CausalId -> m (Maybe CausalId )
877
879
bestCommonAncestor a b = do
878
880
query1Col
879
881
[sql | SELECT best_common_causal_ancestor(#{a}, #{b}) as causal_id
0 commit comments