Skip to content

Map hstore to ImmutableDictionary#1492

Merged
roji merged 1 commit intonpgsql:mainfrom
roji:HstoreImmutableDictionary
Oct 3, 2020
Merged

Map hstore to ImmutableDictionary#1492
roji merged 1 commit intonpgsql:mainfrom
roji:HstoreImmutableDictionary

Conversation

@roji
Copy link
Copy Markdown
Member

@roji roji commented Sep 8, 2020

Closes #1491
Replaces #1184

Note: this PR currently fails since the provider uses Npgsql 4.1, which doesn't yet have support for ImmutableDictionary (npgsql/npgsql#2776). Once we take a dependency on a newer 5.0 preview everything should work.

/cc @Quogu

protected override RelationalTypeMapping Clone(RelationalTypeMappingParameters parameters)
=> new NpgsqlImmutableHstoreTypeMapping(parameters);

sealed class HstoreComparer : ValueComparer<ImmutableDictionary<string, string>>
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/cc @ajcvickers for a really nice use of a .NET immutable type for version tracking purposes. tl;dr PG has a type called "hstore", which corresponds to .NET Dictionary<string, string?>. This PR also allows you to map hstore to .NET ImmutableDictionary<string, string?>, which (hopefully) efficiently creates copies on updates. This means we can do simple reference comparisons, and skip actually snapshotting altogether.

Could be interesting to think about for other types (e.g. ImmutableArray for mapping blobs/varbinary??).

@roji roji force-pushed the HstoreImmutableDictionary branch from 2b3be6f to 56e7007 Compare September 13, 2020 07:05
@roji roji changed the base branch from dev to main September 17, 2020 14:11
@roji roji force-pushed the HstoreImmutableDictionary branch 2 times, most recently from 03814c1 to ca162bf Compare October 3, 2020 17:35
@roji roji force-pushed the HstoreImmutableDictionary branch from ca162bf to 41b3664 Compare October 3, 2020 19:40
@roji roji merged commit 498710d into npgsql:main Oct 3, 2020
@roji roji deleted the HstoreImmutableDictionary branch October 3, 2020 19:51
Comment thread src/EFCore.PG/Storage/Internal/Mapping/NpgsqlHstoreTypeMapping.cs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Allow hstore columns to be represented as ImmutableDictionary<string, string>

3 participants