Skip to content

Commit

Permalink
[DMS-277] updated insert and delete SQL
Browse files Browse the repository at this point in the history
  • Loading branch information
bradbanister committed Jul 22, 2024
1 parent 228fe6a commit c680e15
Showing 1 changed file with 24 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -376,9 +376,28 @@ NpgsqlTransaction transaction
int[] parentDocumentPartitionKeys = new int[bulkReferences.ReferentialIds.Length];
Array.Fill(parentDocumentPartitionKeys, bulkReferences.ParentDocumentPartitionKey);

// Use unnest() to bulk insert references, left join to find referenced documents ids
// or null if this is an invalid reference (and FK constraint is disabled)
await using var command = new NpgsqlCommand(
@"INSERT INTO dms.Reference (ParentDocumentId, ParentDocumentPartitionKey, ReferentialId, ReferentialPartitionKey)
SELECT * FROM unnest($1, $2, $3, $4)",
@"INSERT INTO dms.Reference (
ParentDocumentId,
ParentDocumentPartitionKey,
ReferentialId,
ReferentialPartitionKey,
ReferencedDocumentId,
ReferencedDocumentPartitionKey
)
SELECT
ids.documentId,
ids.documentPartitionKey,
ids.referentialId,
ids.referentialPartitionKey,
a.documentId,
a.documentPartitionKey
FROM unnest($1, $2, $3, $4) AS
ids(documentId, documentPartitionKey, referentialId, referentialPartitionKey)
LEFT JOIN dms.Alias a ON
ids.referentialId = a.referentialId and ids.referentialPartitionKey = a.referentialPartitionKey",
connection,
transaction
)
Expand Down Expand Up @@ -511,12 +530,9 @@ LockOption lockOption
{
await using NpgsqlCommand command =
new(
$@"SELECT d.ResourceName FROM dms.Document d INNER JOIN (
SELECT ParentDocumentId, ParentDocumentPartitionKey FROM dms.Reference r
INNER JOIN dms.Alias a ON r.ReferentialId = a.ReferentialId AND r.ReferentialPartitionKey = a.ReferentialPartitionKey
INNER JOIN dms.Document d2 ON d2.Id = a.DocumentId AND d2.DocumentPartitionKey = a.DocumentPartitionKey
WHERE d2.DocumentUuid =$1 AND d2.DocumentPartitionKey = $2) AS re
ON re.ParentDocumentId = d.id AND re.ParentDocumentPartitionKey = d.DocumentPartitionKey
$@"SELECT d.ResourceName FROM dms.Document d
INNER JOIN dms.Reference r
ON r.ReferencedDocumentId = d.Id AND r.ReferencedDocumentPartitionKey = d.DocumentPartitionKey
ORDER BY d.ResourceName {SqlFor(lockOption)};",
connection,
transaction
Expand Down

0 comments on commit c680e15

Please sign in to comment.