Skip to content

Commit

Permalink
Merge pull request #360 from SwissBorg/155-journal-metadata/upsert-mi…
Browse files Browse the repository at this point in the history
…n-ordering

Also upsert min_ordering on metadata trigger
  • Loading branch information
tiagomota authored Sep 7, 2023
2 parents 2bfafae + eccda7c commit 52b153a
Show file tree
Hide file tree
Showing 6 changed files with 11 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ BEGIN
ON CONFLICT (persistence_id) DO UPDATE
SET
max_sequence_number = GREATEST(public.journal_metadata.max_sequence_number, NEW.sequence_number),
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering);
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering),
min_ordering = LEAST(public.journal_metadata.min_ordering, NEW.ordering);

RETURN NEW;
END;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,8 @@ BEGIN
ON CONFLICT (persistence_id) DO UPDATE
SET
max_sequence_number = GREATEST(public.journal_metadata.max_sequence_number, NEW.sequence_number),
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering);
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering),
min_ordering = LEAST(public.journal_metadata.min_ordering, NEW.ordering);

RETURN NEW;
END;
Expand Down
3 changes: 2 additions & 1 deletion core/src/test/resources/schema/postgres/plain-schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,8 @@ BEGIN
ON CONFLICT (persistence_id) DO UPDATE
SET
max_sequence_number = GREATEST(public.journal_metadata.max_sequence_number, NEW.sequence_number),
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering);
max_ordering = GREATEST(public.journal_metadata.max_ordering, NEW.ordering),
min_ordering = LEAST(public.journal_metadata.min_ordering, NEW.ordering);

RETURN NEW;
END;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ abstract class PostgresJournalSpec(config: String, schemaType: SchemaType)
minOrdering > 0 shouldBe true
}

"upsert only max_sequence_number and max_ordering if metadata already exists" in {
"if metadata already exists only max_sequence_number and max_ordering should update and min_ordering should stay the same" in {
// given
val perId = "perId-meta-2"
val sender = TestProbe()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ private[journal] trait JournalSchema {
ON CONFLICT (#$persistenceId) DO UPDATE
SET
#$maxSequenceNumber = GREATEST(#$fullTableName.#$maxSequenceNumber, NEW.#$sequenceNumber),
#$maxOrdering = GREATEST(#$fullTableName.#$maxOrdering, NEW.#$ordering);
#$maxOrdering = GREATEST(#$fullTableName.#$maxOrdering, NEW.#$ordering),
#$minOrdering = LEAST(#$fullTableName.#$minOrdering, NEW.#$ordering);
RETURN NEW;
END;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@ BEGIN
vals := '($1).' || j_persistence_id_column || ', ($1).' || j_sequence_number_column || ', ($1).' || j_ordering_column ||
', CASE WHEN ($1).' || j_sequence_number_column || ' = ' || first_sequence_number_value || ' THEN ($1).' || j_ordering_column || ' ELSE ' || unset_min_ordering_value || ' END';
upds := jm_max_sequence_number_column || ' = GREATEST(' || jm_table || '.' || jm_max_sequence_number_column || ', ($1).' || j_sequence_number_column || '), ' ||
jm_max_ordering_column || ' = GREATEST(' || jm_table || '.' || jm_max_ordering_column || ', ($1).' || j_ordering_column || ')';
jm_max_ordering_column || ' = GREATEST(' || jm_table || '.' || jm_max_ordering_column || ', ($1).' || j_ordering_column || '), ' ||
jm_min_ordering_column || ' = LEAST(' || jm_table || '.' || jm_min_ordering_column || ', ($1).' || j_ordering_column || ')';

sql := 'INSERT INTO ' || jm_table || ' (' || cols || ') VALUES (' || vals || ') ' ||
'ON CONFLICT (' || jm_persistence_id_column || ') DO UPDATE SET ' || upds;
Expand Down

0 comments on commit 52b153a

Please sign in to comment.