Skip to content

Commit 12f649e

Browse files
⅄ trunk → 25-05-22-synhash
2 parents 3cdd7cf + abe58eb commit 12f649e

File tree

12 files changed

+87
-52
lines changed

12 files changed

+87
-52
lines changed

.github/workflows/ci.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,6 @@ jobs:
238238
with:
239239
path: ${{env.ucm_local_bin}}
240240
name: local-bin-${{matrix.os}}
241-
if-no-files-found: error
242241
- name: set built binaries permissions
243242
if: steps.cache-transcript-test-results.outputs.cache-hit != 'true'
244243
run: chmod +x ${{env.ucm_local_bin}}/*
@@ -335,7 +334,6 @@ jobs:
335334
with:
336335
path: ${{env.ucm_local_bin}}
337336
name: local-bin-${{ matrix.os }}
338-
if-no-files-found: error
339337
- name: set binaries permissions
340338
if: steps.cache-transcript-test-results.outputs.cache-hit != 'true'
341339
run: chmod +x ${{env.ucm_local_bin}}/*

codebase2/codebase-sqlite/U/Codebase/Sqlite/Operations.hs

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ import Unison.NameSegment.Internal qualified as NameSegment
214214
import Unison.Prelude
215215
import Unison.ShortHash (ShortCausalHash (..), ShortNamespaceHash (..))
216216
import Unison.Sqlite
217-
import Unison.Util.Defns (DefnsF)
217+
import Unison.Util.Defns (Defns (..), DefnsF)
218218
import Unison.Util.List qualified as List
219219
import Unison.Util.Map qualified as Map
220220
import Unison.Util.Monoid (foldMapM)
@@ -1155,21 +1155,23 @@ directDependentsWithinScope scope0 query0 = do
11551155
-- | `transitiveDependentsWithinScope scope query` returns all transitive dependents of `query` that are in `scope` (not
11561156
-- including `query` itself).
11571157
transitiveDependentsWithinScope ::
1158-
Set C.Reference.Id ->
1158+
DefnsF Set C.TermReferenceId C.TypeReferenceId ->
11591159
Set C.Reference ->
11601160
Transaction (DefnsF Set C.TermReferenceId C.TypeReferenceId)
1161-
transitiveDependentsWithinScope scope0 query0 = do
1162-
-- Convert C -> S
1163-
scope1 <- Set.traverse c2sReferenceId scope0
1164-
query1 <- Set.traverse c2sReference query0
1161+
transitiveDependentsWithinScope scope0 query0
1162+
| (Set.null scope0.terms && Set.null scope0.types) || Set.null query0 = pure (Defns Set.empty Set.empty)
1163+
| otherwise = do
1164+
-- Convert C -> S
1165+
scope1 <- bitraverse (Set.traverse c2sReferenceId) (Set.traverse c2sReferenceId) scope0
1166+
query1 <- Set.traverse c2sReference query0
11651167

1166-
-- Do the query
1167-
dependents0 <- Q.getTransitiveDependentsWithinScope scope1 query1
1168+
-- Do the query
1169+
dependents0 <- Q.getTransitiveDependentsWithinScope scope1 query1
11681170

1169-
-- Convert S -> C
1170-
dependents1 <- bitraverse (Set.traverse s2cReferenceId) (Set.traverse s2cReferenceId) dependents0
1171+
-- Convert S -> C
1172+
dependents1 <- bitraverse (Set.traverse s2cReferenceId) (Set.traverse s2cReferenceId) dependents0
11711173

1172-
pure dependents1
1174+
pure dependents1
11731175

11741176
-- | returns a list of known definitions referencing `h`
11751177
dependentsOfComponent :: H.Hash -> Transaction (Set C.Reference.Id)

codebase2/codebase-sqlite/U/Codebase/Sqlite/Queries.hs

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,7 @@ module U.Codebase.Sqlite.Queries
273273
addProjectBranchLastAccessedColumn,
274274
addMergeBranchTables,
275275
addUpdateBranchTable,
276+
addDerivedDependentsByDependencyIndex,
276277

277278
-- ** schema version
278279
currentSchemaVersion,
@@ -318,6 +319,7 @@ import Control.Monad.Writer (MonadWriter, runWriterT)
318319
import Control.Monad.Writer qualified as Writer
319320
import Data.Aeson qualified as Aeson
320321
import Data.Aeson.Text qualified as Aeson
322+
import Data.Bifoldable (bifold)
321323
import Data.Bitraversable (bitraverse)
322324
import Data.ByteString.Lazy (LazyByteString)
323325
import Data.Bytes.Put (runPutS)
@@ -441,7 +443,7 @@ type TextPathSegments = [Text]
441443
-- * main squeeze
442444

443445
currentSchemaVersion :: SchemaVersion
444-
currentSchemaVersion = 20
446+
currentSchemaVersion = 21
445447

446448
runCreateSql :: Transaction ()
447449
runCreateSql =
@@ -519,6 +521,10 @@ addUpdateBranchTable :: Transaction ()
519521
addUpdateBranchTable =
520522
executeStatements $(embedProjectStringFile "sql/017-add-update-branch-table.sql")
521523

524+
addDerivedDependentsByDependencyIndex :: Transaction ()
525+
addDerivedDependentsByDependencyIndex =
526+
executeStatements $(embedProjectStringFile "sql/018-add-derived-dependents-by-dependency-index.sql")
527+
522528
schemaVersion :: Transaction SchemaVersion
523529
schemaVersion =
524530
queryOneCol
@@ -1969,13 +1975,13 @@ getDirectDependentsWithinScope scope query = do
19691975
-- | `getTransitiveDependentsWithinScope scope query` returns all transitive dependents of `query` that are in `scope`
19701976
-- (not including `query` itself).
19711977
getTransitiveDependentsWithinScope ::
1972-
Set S.Reference.Id ->
1978+
DefnsF Set S.TermReferenceId S.TypeReferenceId ->
19731979
Set S.Reference ->
19741980
Transaction (DefnsF Set S.TermReferenceId S.TypeReferenceId)
19751981
getTransitiveDependentsWithinScope scope query = do
19761982
-- Populate a temporary table with all of the references in `scope`
19771983
let scopeTableName = [sql| dependents_search_scope |]
1978-
createTemporaryTableOfReferenceIds scopeTableName scope
1984+
createTemporaryTableOfReferenceIds scopeTableName (bifold scope)
19791985

19801986
-- Populate a temporary table with all of the references in `query`
19811987
let queryTableName = [sql| dependencies_query |]
@@ -2002,29 +2008,33 @@ getTransitiveDependentsWithinScope scope query = do
20022008
result0 :: [S.Reference.Id :. Only ObjectType] <-
20032009
queryListRow
20042010
[sql|
2005-
WITH RECURSIVE transitive_dependents (dependent_object_id, dependent_component_index, type_id) AS (
2006-
SELECT d.dependent_object_id, d.dependent_component_index, object.type_id
2007-
FROM dependents_index d
2008-
JOIN object ON d.dependent_object_id = object.id
2009-
JOIN $queryTableName q
2010-
ON q.builtin IS d.dependency_builtin
2011-
AND q.object_id IS d.dependency_object_id
2012-
AND q.component_index IS d.dependency_component_index
2013-
JOIN $scopeTableName s
2014-
ON s.object_id = d.dependent_object_id
2015-
AND s.component_index = d.dependent_component_index
2016-
2017-
UNION SELECT d.dependent_object_id, d.dependent_component_index, object.type_id
2018-
FROM dependents_index d
2019-
JOIN object ON d.dependent_object_id = object.id
2020-
JOIN transitive_dependents t
2021-
ON t.dependent_object_id = d.dependency_object_id
2022-
AND t.dependent_component_index = d.dependency_component_index
2023-
JOIN $scopeTableName s
2024-
ON s.object_id = d.dependent_object_id
2025-
AND s.component_index = d.dependent_component_index
2011+
WITH RECURSIVE
2012+
dependents_index_in_scope AS (
2013+
SELECT *
2014+
FROM dependents_index
2015+
WHERE (dependent_object_id, dependent_component_index) IN (
2016+
SELECT object_id, component_index
2017+
FROM $scopeTableName
2018+
)
2019+
),
2020+
transitive_dependents (object_id, component_index, type_id) AS (
2021+
SELECT d.dependent_object_id, d.dependent_component_index, o.type_id
2022+
FROM $queryTableName q
2023+
JOIN dependents_index_in_scope d
2024+
ON d.dependency_builtin IS q.builtin
2025+
AND d.dependency_object_id IS q.object_id
2026+
AND d.dependency_component_index IS q.component_index
2027+
JOIN object o ON d.dependent_object_id = o.id
2028+
UNION
2029+
SELECT d.dependent_object_id, d.dependent_component_index, o.type_id
2030+
FROM transitive_dependents t
2031+
JOIN dependents_index_in_scope d
2032+
ON t.object_id = d.dependency_object_id
2033+
AND t.component_index = d.dependency_component_index
2034+
JOIN object o ON d.dependent_object_id = o.id
20262035
)
2027-
SELECT * FROM transitive_dependents
2036+
SELECT *
2037+
FROM transitive_dependents t
20282038
|]
20292039

20302040
execute [sql| DROP TABLE $scopeTableName |]
@@ -2034,8 +2044,8 @@ getTransitiveDependentsWithinScope scope query = do
20342044
let result1 =
20352045
List.foldl'
20362046
( \deps -> \case
2037-
dep :. Only TermComponent -> Defns (Set.insert dep deps.terms) deps.types
2038-
dep :. Only DeclComponent -> Defns deps.terms (Set.insert dep deps.types)
2047+
dep :. Only TermComponent -> let !terms = Set.insert dep deps.terms in Defns terms deps.types
2048+
dep :. Only DeclComponent -> let !types = Set.insert dep deps.types in Defns deps.terms types
20392049
_ -> deps -- impossible; could error here
20402050
)
20412051
(Defns Set.empty Set.empty)
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
CREATE INDEX derived_dependents_by_dependency
2+
ON dependents_index (dependency_object_id, dependency_component_index);

codebase2/codebase-sqlite/unison-codebase-sqlite.cabal

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ extra-source-files:
2727
sql/015-add-project-branch-last-accessed.sql
2828
sql/016-add-merge-branch-tables.sql
2929
sql/017-add-update-branch-table.sql
30+
sql/018-add-derived-dependents-by-dependency-index.sql
3031
sql/create.sql
3132

3233
source-repository head

lib/unison-prelude/src/Unison/Util/Timing.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ startTiming = (,) <$> getMonotonicTimeNSec <*> getCPUTime
2828
stopTiming :: String -> (Word64, Integer) -> IO ()
2929
stopTiming label (systemTimeStart, cpuTimeStart) = do
3030
(systemTimeEnd, cpuTimeEnd) <- startTiming
31-
let systemDiff = realToFrac @Word64 @Double (systemTimeEnd - systemTimeStart) / 1_000
31+
let systemDiff = realToFrac @Word64 @Double (systemTimeEnd - systemTimeStart)
3232
let cpuDiff = realToFrac @Integer @Double (cpuTimeEnd - cpuTimeStart) / 1_000
3333
printf "%s: %s (cpu), %s (system)\n" label (renderNanos cpuDiff) (renderNanos systemDiff)
3434
where

parser-typechecker/src/Unison/Codebase/SqliteCodebase/Migrations.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,8 @@ migrations regionVar getDeclType termBuffer declBuffer rootCodebasePath =
8787
(17 {- This migration takes a raw sqlite connection -}, \conn -> migrateSchema16To17 conn),
8888
sqlMigration 18 Q.addProjectBranchLastAccessedColumn,
8989
sqlMigration 19 Q.addMergeBranchTables,
90-
sqlMigration 20 Q.addUpdateBranchTable
90+
sqlMigration 20 Q.addUpdateBranchTable,
91+
sqlMigration 21 Q.addDerivedDependentsByDependencyIndex
9192
]
9293
where
9394
runT :: Sqlite.Transaction () -> Sqlite.Connection -> IO ()

parser-typechecker/src/Unison/Codebase/SqliteCodebase/Operations.hs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ createSchema = do
101101
Q.addProjectBranchLastAccessedColumn
102102
Q.addMergeBranchTables
103103
Q.addUpdateBranchTable
104+
Q.addDerivedDependentsByDependencyIndex
104105
(_, emptyCausalHashId) <- emptyCausalHash
105106
(_, ProjectBranch {projectId, branchId}) <- insertProjectAndBranch scratchProjectName scratchBranchName emptyCausalHashId
106107
Q.setCurrentProjectPath projectId branchId []

unison-cli/src/Unison/Cli/UpdateUtils.hs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ module Unison.Cli.UpdateUtils
1717
where
1818

1919
import Control.Monad.Reader (ask)
20-
import Data.Bifoldable (bifoldMap)
2120
import Data.Bitraversable (bitraverse)
2221
import Data.List qualified as List
2322
import Data.Map.Strict qualified as Map
@@ -86,7 +85,7 @@ getNamespaceDependentsOf2 ::
8685
getNamespaceDependentsOf2 defns dependencies = do
8786
let toTermScope = Set.mapMaybe Referent.toReferenceId . BiMultimap.dom
8887
let toTypeScope = Set.mapMaybe Reference.toId . BiMultimap.dom
89-
let scope = bifoldMap toTermScope toTypeScope defns
88+
let scope = bimap toTermScope toTypeScope defns
9089
Operations.transitiveDependentsWithinScope scope dependencies
9190
<&> bimap (Set.foldl' addTerms Map.empty) (Set.foldl' addTypes Map.empty)
9291
where

unison-cli/src/Unison/Codebase/Editor/HandleInput/EditDependents.hs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ handleEditDependents name = do
6262
dependents <-
6363
Cli.runTransaction do
6464
Operations.transitiveDependentsWithinScope
65-
(Branch.deepTermReferenceIds branchWithoutLibdeps <> Branch.deepTypeReferenceIds branchWithoutLibdeps)
65+
Defns
66+
{ terms = Branch.deepTermReferenceIds branchWithoutLibdeps,
67+
types = Branch.deepTypeReferenceIds branchWithoutLibdeps
68+
}
6669
(bifold refs)
6770

6871
let refsAndDependents =

0 commit comments

Comments
 (0)