Skip to content

Commit 776db8e

Browse files
committed
[ksqlDB.RestApi.Client]: Merge branch 'release/6.5' of https://github.com/tomasfabian/ksqlDB.RestApi.Client-DotNet
2 parents b54993c + 3610c8a commit 776db8e

File tree

5 files changed

+55
-8
lines changed

5 files changed

+55
-8
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: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
# ksqlDB.RestApi.Client
22

3-
# 7.0.0
3+
# 7.0.0 (unreleased)
44
- added .NET 9.0 target framework
55

66
# ⚠️ Breaking changes
77
- removed usupported .NET 6.0, and 7.0 target frameworks
88
- upgraded Microsoft packages to v9.0.0: `Microsoft.Extensions.DependencyInjection`, `Microsoft.Extensions.Http`, and `Microsoft.Extensions.Logging.Abstractions`
99
- upgraded `System.Text.Json` to v9.0.0
1010

11+
# 6.5.1
12+
- fixed `IEntityTypeBuilder<TEntity>.Entity<TEntity>` automatically creates FieldMetadata for primitive field in Base class #102
13+
1114
# 6.5.0
1215
- 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).
1316

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

0 commit comments

Comments
 (0)