@@ -134,6 +134,14 @@ module U.Codebase.Sqlite.Queries
134
134
expectProjectBranchHead ,
135
135
setMostRecentBranch ,
136
136
loadMostRecentBranch ,
137
+ loadProjectBranchParent ,
138
+ loadMergeBranchParents ,
139
+ insertMergeBranchLocal ,
140
+ insertMergeBranchRemote ,
141
+ insertMergeBranchLooseCode ,
142
+ loadNamespaceUniqueTypeGuids ,
143
+ existsAnyNamespaceUniqueTypeGuidForNamespace ,
144
+ insertNamespaceUniqueTypeGuid ,
137
145
138
146
-- ** remote projects
139
147
loadRemoteProject ,
@@ -257,6 +265,7 @@ module U.Codebase.Sqlite.Queries
257
265
addProjectBranchReflogTable ,
258
266
addProjectBranchCausalHashIdColumn ,
259
267
addProjectBranchLastAccessedColumn ,
268
+ addMergeBranchTables ,
260
269
261
270
-- ** schema version
262
271
currentSchemaVersion ,
@@ -303,11 +312,13 @@ import Control.Monad.Writer qualified as Writer
303
312
import Data.Aeson qualified as Aeson
304
313
import Data.Aeson.Text qualified as Aeson
305
314
import Data.Bitraversable (bitraverse )
315
+ import Data.ByteString.Lazy (LazyByteString )
306
316
import Data.Bytes.Put (runPutS )
307
317
import Data.Foldable qualified as Foldable
308
318
import Data.List qualified as List
309
319
import Data.List.Extra qualified as List
310
320
import Data.List.NonEmpty (NonEmpty )
321
+ import Data.List.NonEmpty qualified as List.NonEmpty
311
322
import Data.List.NonEmpty qualified as Nel
312
323
import Data.List.NonEmpty qualified as NonEmpty
313
324
import Data.Map qualified as Map
@@ -401,6 +412,8 @@ import Unison.Hash qualified as Hash
401
412
import Unison.Hash32 (Hash32 )
402
413
import Unison.Hash32 qualified as Hash32
403
414
import Unison.Hash32.Orphans.Sqlite ()
415
+ import Unison.Name (Name )
416
+ import Unison.Name qualified as Name
404
417
import Unison.NameSegment.Internal (NameSegment (NameSegment ))
405
418
import Unison.NameSegment.Internal qualified as NameSegment
406
419
import Unison.Prelude
@@ -421,7 +434,7 @@ type TextPathSegments = [Text]
421
434
-- * main squeeze
422
435
423
436
currentSchemaVersion :: SchemaVersion
424
- currentSchemaVersion = 18
437
+ currentSchemaVersion = 19
425
438
426
439
runCreateSql :: Transaction ()
427
440
runCreateSql =
@@ -491,6 +504,10 @@ addProjectBranchLastAccessedColumn :: Transaction ()
491
504
addProjectBranchLastAccessedColumn =
492
505
executeStatements $ (embedProjectStringFile " sql/015-add-project-branch-last-accessed.sql" )
493
506
507
+ addMergeBranchTables :: Transaction ()
508
+ addMergeBranchTables =
509
+ executeStatements $ (embedProjectStringFile " sql/016-add-merge-branch-tables.sql" )
510
+
494
511
schemaVersion :: Transaction SchemaVersion
495
512
schemaVersion =
496
513
queryOneCol
@@ -4328,6 +4345,192 @@ loadMostRecentBranch projectId =
4328
4345
project_id = :projectId
4329
4346
|]
4330
4347
4348
+ loadProjectBranchParent :: ProjectId -> ProjectBranchId -> Transaction (Maybe ProjectBranchId )
4349
+ loadProjectBranchParent projectId projectBranchId =
4350
+ queryMaybeCol
4351
+ [sql |
4352
+ SELECT parent_branch_id
4353
+ FROM project_branch_parent
4354
+ WHERE project_id = :projectId
4355
+ AND branch_id = :projectBranchId
4356
+ |]
4357
+
4358
+ loadMergeBranchParents ::
4359
+ ProjectId ->
4360
+ ProjectBranchId ->
4361
+ Transaction
4362
+ ( Maybe
4363
+ ( Maybe ProjectBranchId ,
4364
+ CausalHashId ,
4365
+ Maybe ProjectBranchId ,
4366
+ CausalHashId
4367
+ )
4368
+ )
4369
+ loadMergeBranchParents projectId branchId =
4370
+ queryMaybeRow
4371
+ [sql |
4372
+ SELECT local_source_branch_id, source_causal_hash_id, target_branch_id, target_causal_hash_id
4373
+ FROM merge_branch
4374
+ WHERE project_id = :projectId
4375
+ AND branch_id = :branchId
4376
+ |]
4377
+
4378
+ insertMergeBranchLocal ::
4379
+ ProjectId ->
4380
+ ProjectBranchId ->
4381
+ (ProjectBranchId , CausalHashId ) ->
4382
+ (ProjectBranchId , CausalHashId ) ->
4383
+ Transaction ()
4384
+ insertMergeBranchLocal
4385
+ projectId
4386
+ mergeBranchId
4387
+ (sourceBranchId, sourceCausalHashId)
4388
+ (targetBranchId, targetCausalHashId) =
4389
+ execute
4390
+ [sql |
4391
+ INSERT INTO merge_branch (
4392
+ project_id,
4393
+ branch_id,
4394
+ local_source_project_id,
4395
+ local_source_branch_id,
4396
+ source_causal_hash_id,
4397
+ target_project_id,
4398
+ target_branch_id,
4399
+ target_causal_hash_id
4400
+ )
4401
+ VALUES (
4402
+ :projectId,
4403
+ :mergeBranchId,
4404
+ :projectId,
4405
+ :sourceBranchId,
4406
+ :sourceCausalHashId,
4407
+ :projectId,
4408
+ :targetBranchId,
4409
+ :targetCausalHashId
4410
+ )
4411
+ |]
4412
+
4413
+ insertMergeBranchRemote ::
4414
+ ProjectId ->
4415
+ ProjectBranchId ->
4416
+ (RemoteProjectId , RemoteProjectBranchId , URI , CausalHashId ) ->
4417
+ (ProjectBranchId , CausalHashId ) ->
4418
+ Transaction ()
4419
+ insertMergeBranchRemote
4420
+ projectId
4421
+ mergeBranchId
4422
+ (sourceProjectId, sourceBranchId, sourceHost, sourceCausalHashId)
4423
+ (targetBranchId, targetCausalHashId) =
4424
+ execute
4425
+ [sql |
4426
+ INSERT INTO merge_branch (
4427
+ project_id,
4428
+ branch_id,
4429
+ remote_source_project_id,
4430
+ remote_source_branch_id,
4431
+ remote_source_host,
4432
+ source_causal_hash_id,
4433
+ target_project_id,
4434
+ target_branch_id,
4435
+ target_causal_hash_id
4436
+ )
4437
+ VALUES (
4438
+ :projectId,
4439
+ :mergeBranchId,
4440
+ :sourceProjectId,
4441
+ :sourceBranchId,
4442
+ :sourceHost,
4443
+ :sourceCausalHashId,
4444
+ :projectId,
4445
+ :targetBranchId,
4446
+ :targetCausalHashId
4447
+ )
4448
+ |]
4449
+
4450
+ insertMergeBranchLooseCode ::
4451
+ ProjectId ->
4452
+ ProjectBranchId ->
4453
+ CausalHashId ->
4454
+ (ProjectBranchId , CausalHashId ) ->
4455
+ Transaction ()
4456
+ insertMergeBranchLooseCode
4457
+ projectId
4458
+ mergeBranchId
4459
+ sourceCausalHashId
4460
+ (targetBranchId, targetCausalHashId) =
4461
+ execute
4462
+ [sql |
4463
+ INSERT INTO merge_branch (
4464
+ project_id,
4465
+ branch_id,
4466
+ source_causal_hash_id,
4467
+ target_project_id,
4468
+ target_branch_id,
4469
+ target_causal_hash_id
4470
+ )
4471
+ VALUES (
4472
+ :projectId,
4473
+ :mergeBranchId,
4474
+ :sourceCausalHashId,
4475
+ :projectId,
4476
+ :targetBranchId,
4477
+ :targetCausalHashId
4478
+ )
4479
+ |]
4480
+
4481
+ loadNamespaceUniqueTypeGuids :: BranchHashId -> Transaction (Map Name Text )
4482
+ loadNamespaceUniqueTypeGuids namespaceHashId = do
4483
+ rows <-
4484
+ queryListRow
4485
+ [sql |
4486
+ SELECT type_name, type_guid
4487
+ FROM namespace_unique_type_guid
4488
+ WHERE namespace_hash_id = :namespaceHashId
4489
+ |]
4490
+
4491
+ let f :: ByteString -> Name
4492
+ f bytes =
4493
+ case Aeson. decodeStrict @ [Text ] bytes of
4494
+ Just (segment : segments) ->
4495
+ Name. fromSegments (NameSegment segment NonEmpty. :| map NameSegment segments)
4496
+ _ ->
4497
+ error $
4498
+ reportBug
4499
+ " E955495"
4500
+ ( " busted name in namespace_unique_type_guid (namespace hash id = "
4501
+ ++ show namespaceHashId
4502
+ ++ " )"
4503
+ )
4504
+
4505
+ pure (Map. fromList (over (Lens. mapped . Lens. _1) f rows))
4506
+
4507
+ existsAnyNamespaceUniqueTypeGuidForNamespace :: BranchHashId -> Transaction Bool
4508
+ existsAnyNamespaceUniqueTypeGuidForNamespace namespaceHashId =
4509
+ queryOneCol
4510
+ [sql |
4511
+ SELECT EXISTS (
4512
+ SELECT 1
4513
+ FROM namespace_unique_type_guid
4514
+ WHERE namespace_hash_id = :namespaceHashId
4515
+ )
4516
+ |]
4517
+
4518
+ insertNamespaceUniqueTypeGuid :: BranchHashId -> Name -> Text -> Transaction ()
4519
+ insertNamespaceUniqueTypeGuid namespaceHashId typeName typeGuid =
4520
+ execute
4521
+ [sql |
4522
+ INSERT INTO namespace_unique_type_guid (namespace_hash_id, type_name, type_guid)
4523
+ VALUES (:namespaceHashId, :typeNameJson, :typeGuid)
4524
+ |]
4525
+ where
4526
+ typeNameJson :: LazyByteString
4527
+ typeNameJson =
4528
+ typeName
4529
+ & Name. segments
4530
+ & List.NonEmpty. toList
4531
+ & map NameSegment. toUnescapedText
4532
+ & Aeson. encode
4533
+
4331
4534
-- | Searches for all names within the given name lookup which contain the provided list of segments
4332
4535
-- in order.
4333
4536
-- Search is case insensitive.
0 commit comments