Skip to content

Commit 3610c8a

Browse files
authored
Merge pull request #103 from tomasfabian/102-ientitytypebuildertentityentitytentity-automatically-creates-fieldmetadata-for-primitive-field-in-base-class
102 ientitytypebuildertentityentitytentity automatically creates fieldmetadata for primitive field in base class
2 parents 43feca4 + a1c7b2f commit 3610c8a

File tree

6 files changed

+56
-9
lines changed

6 files changed

+56
-9
lines changed

Tests/ksqlDB.RestApi.Client.Tests/FluentAPI/Builders/EntityTypeBuilderTests.cs

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public void RowTime_Property_ShouldBeIgnoredInDDL()
5555
builder.Metadata.FieldsMetadata.First(c => c.MemberInfo.Name == nameof(Tweet.RowTime)).IgnoreInDDL.Should().BeTrue();
5656
}
5757

58-
public class Foo
58+
public class Row
5959
{
6060
public long RowTime;
6161
}
@@ -66,10 +66,10 @@ public void RowTime_Field_ShouldBeIgnoredInDDL()
6666
//Arrange
6767

6868
//Act
69-
EntityTypeBuilder<Foo> fooBuilder = new();
69+
EntityTypeBuilder<Row> rowBuilder = new();
7070

7171
//Assert
72-
fooBuilder.Metadata.FieldsMetadata.First(c => c.MemberInfo.Name == nameof(Foo.RowTime)).IgnoreInDDL.Should().BeTrue();
72+
rowBuilder.Metadata.FieldsMetadata.First(c => c.MemberInfo.Name == nameof(Row.RowTime)).IgnoreInDDL.Should().BeTrue();
7373
}
7474

7575
[Test]
@@ -87,5 +87,24 @@ public void DecimalType_ShouldHaveDecimalFieldMetadata()
8787
.First(c => c.MemberInfo.Name == nameof(Tweet.AccountBalance))
8888
.Should().NotBeNull();
8989
}
90+
91+
public class MyValue : Row
92+
{
93+
public int Id { get; set; }
94+
}
95+
96+
[Test]
97+
public void RowTimeField_AsPseudoColumn_ShouldBeRegisteredOnce()
98+
{
99+
//Arrange
100+
EntityTypeBuilder<MyValue> customBuilder = new();
101+
102+
//Act
103+
customBuilder.Property(c => c.RowTime)
104+
.AsPseudoColumn();
105+
106+
//Assert
107+
customBuilder.Metadata.FieldsMetadata.Count(c => c.MemberInfo.Name == nameof(Row.RowTime)).Should().Be(1);
108+
}
90109
}
91110
}

ksqlDb.RestApi.Client/ChangeLog.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# ksqlDB.RestApi.Client
22

3+
# 6.5.1
4+
- fixed `IEntityTypeBuilder<TEntity>.Entity<TEntity>` automatically creates FieldMetadata for primitive field in Base class #102
5+
36
# 6.5.0
47
- added the `AsPseudoColumn` function to the Fluent API for mapping of C# fields or properties as `ksqldb` [pseudocolumns](https://docs.ksqldb.io/en/latest/reference/sql/data-definition/#pseudocolumns).
58

ksqlDb.RestApi.Client/FluentAPI/Builders/EntityTypeBuilder.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,10 @@ public IFieldTypeBuilder<TProperty> Property<TProperty>(Expression<Func<TEntity,
5757
string path = string.Empty;
5858
foreach (var (memberName, memberInfo) in members)
5959
{
60+
var memberInfoKey = memberInfo.ToMemberInfoKey();
6061
path += memberName;
6162

62-
if (!Metadata.FieldsMetadataDict.TryGetValue(memberInfo, out var fieldMetadata))
63+
if (!Metadata.FieldsMetadataDict.TryGetValue(memberInfoKey, out var fieldMetadata))
6364
{
6465
fieldMetadata = new FieldMetadata()
6566
{
@@ -86,7 +87,7 @@ public IFieldTypeBuilder<TProperty> Property<TProperty>(Expression<Func<TEntity,
8687
break;
8788
}
8889

89-
Metadata.FieldsMetadataDict[memberInfo] = fieldMetadata;
90+
Metadata.FieldsMetadataDict[memberInfoKey] = fieldMetadata;
9091
path += ".";
9192
}
9293

@@ -122,6 +123,8 @@ internal void IgnoreRowTime()
122123

123124
private void AddFieldMetadata(MemberInfo memberInfo, bool ignoreInDDL)
124125
{
126+
var memberInfoKey = memberInfo.ToMemberInfoKey();
127+
125128
var fieldMetadata = new FieldMetadata
126129
{
127130
MemberInfo = memberInfo,
@@ -130,7 +133,7 @@ private void AddFieldMetadata(MemberInfo memberInfo, bool ignoreInDDL)
130133
IgnoreInDDL = ignoreInDDL
131134
};
132135

133-
Metadata.FieldsMetadataDict[memberInfo] = fieldMetadata;
136+
Metadata.FieldsMetadataDict[memberInfoKey] = fieldMetadata;
134137
}
135138
}
136139
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.Reflection;
2+
3+
namespace ksqlDb.RestApi.Client.FluentAPI.Builders;
4+
5+
internal record MemberInfoKey
6+
{
7+
internal Module Module { get; set; }
8+
internal int MetadataToken { get; set; }
9+
}
10+
11+
internal static class MemberInfoExtensions
12+
{
13+
internal static MemberInfoKey ToMemberInfoKey(this MemberInfo memberInfo)
14+
{
15+
return new MemberInfoKey
16+
{
17+
Module = memberInfo.Module,
18+
MetadataToken = memberInfo.MetadataToken
19+
};
20+
}
21+
}

ksqlDb.RestApi.Client/Metadata/EntityMetadata.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Linq.Expressions;
22
using System.Reflection;
3+
using ksqlDb.RestApi.Client.FluentAPI.Builders;
34

45
namespace ksqlDb.RestApi.Client.Metadata
56
{
@@ -9,7 +10,7 @@ internal sealed class EntityMetadata
910

1011
internal MemberInfo? PrimaryKeyMemberInfo { get; set; }
1112

12-
internal readonly IDictionary<MemberInfo, FieldMetadata> FieldsMetadataDict = new Dictionary<MemberInfo, FieldMetadata>();
13+
internal readonly IDictionary<MemberInfoKey, FieldMetadata> FieldsMetadataDict = new Dictionary<MemberInfoKey, FieldMetadata>();
1314

1415
public IEnumerable<FieldMetadata> FieldsMetadata => FieldsMetadataDict.Values;
1516

ksqlDb.RestApi.Client/ksqlDb.RestApi.Client.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
Documentation for the library can be found at https://github.com/tomasfabian/ksqlDB.RestApi.Client-DotNet/blob/main/README.md.
1616
</Description>
1717
<PackageTags>ksql ksqlDB LINQ .NET csharp push query</PackageTags>
18-
<Version>6.5.0</Version>
19-
<AssemblyVersion>6.5.0.0</AssemblyVersion>
18+
<Version>6.5.1</Version>
19+
<AssemblyVersion>6.5.1.0</AssemblyVersion>
2020
<LangVersion>12.0</LangVersion>
2121
<ImplicitUsings>enable</ImplicitUsings>
2222
<PackageReleaseNotes>https://github.com/tomasfabian/ksqlDB.RestApi.Client-DotNet/blob/main/ksqlDb.RestApi.Client/ChangeLog.md</PackageReleaseNotes>

0 commit comments

Comments
 (0)