Skip to content

Commit 496f361

Browse files
authored
Merge pull request #104 from mrt181/main
fix: check for ModelBuilder set PseudoColumns
2 parents ea8d79d + 89aa668 commit 496f361

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

Tests/ksqlDB.RestApi.Client.Tests/KSql/Linq/PullQueries/PullQueryExtensionsTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using FluentAssertions;
2+
using ksqlDb.RestApi.Client.FluentAPI.Builders;
23
using ksqlDB.RestApi.Client.KSql.Linq.PullQueries;
34
using ksqlDB.RestApi.Client.KSql.Query.Context;
45
using ksqlDB.RestApi.Client.KSql.Query.Functions;
@@ -245,4 +246,39 @@ public string SelectColumnsUsingPullQueryThatHaveJsonPropertyNameAndWhere(Identi
245246
//Assert
246247
return ksql.ReplaceLineEndings();
247248
}
249+
250+
private class Record
251+
{
252+
public long? RowOffset { get; set; }
253+
public short? RowPartition { get; set; }
254+
public long RowTime { get; set; }
255+
}
256+
257+
private class Test : Record
258+
{
259+
public string Name { get; set; }
260+
}
261+
262+
[TestCase(Never, ExpectedResult = $"SELECT RowTime, RowOffset, RowPartition, Name FROM {nameof(Test)};")]
263+
[TestCase(Keywords, ExpectedResult = $"SELECT RowTime, RowOffset, RowPartition, Name FROM {nameof(Test)};")]
264+
[TestCase(Always, ExpectedResult = $"SELECT RowTime, RowOffset, RowPartition, `Name` FROM `{nameof(Test)}`;")]
265+
public string SelectColumnsUsingModelBuilderWithPseudoColum(IdentifierEscaping escaping)
266+
{
267+
//Arrange
268+
var modelBuilder = new ModelBuilder();
269+
modelBuilder.Entity<JsonPropertyNameTestData>().Property(i => i.RowOffset).AsPseudoColumn();
270+
modelBuilder.Entity<JsonPropertyNameTestData>().Property(i => i.RowPartition).AsPseudoColumn();
271+
modelBuilder.Entity<JsonPropertyNameTestData>().Property(i => i.RowTime).AsPseudoColumn();
272+
273+
var dbContext = new KSqlDBContext(new KSqlDBContextOptions(TestParameters.KsqlDbUrl)
274+
{ IdentifierEscaping = escaping, ShouldPluralizeFromItemName = false }, modelBuilder);
275+
276+
//Act
277+
var ksql = dbContext.CreatePullQuery<Test>()
278+
.Select(c => new { c.RowTime, c.RowOffset, c.RowPartition, c.Name })
279+
.ToQueryString();
280+
281+
//Assert
282+
return ksql.ReplaceLineEndings();
283+
}
248284
}

ksqlDb.RestApi.Client/ChangeLog.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
## 💥 Breaking changes
99
- removed usupported .NET 6.0, and 7.0 target frameworks
1010
- upgraded Microsoft packages to v9.0.0: `Microsoft.Extensions.DependencyInjection`, `Microsoft.Extensions.Http`, and `Microsoft.Extensions.Logging.Abstractions`
11-
- upgraded `System.Text.Json` to v9.0.0
11+
- upgraded `System.Text.Json` to v9.0.0
12+
13+
# 6.5.2
14+
15+
## 🐛 Bug Fixes
16+
- fixed `IdentifierUtil.IsPseudoColumn` to handle PseudoColumns that are set using `ModelBuilder` correctly
1217

1318
# 6.5.1
1419

ksqlDb.RestApi.Client/KSql/RestApi/Parsers/IdentifierUtil.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,8 @@ private static bool IsPseudoColumn(MemberInfo memberInfo, IMetadataProvider? met
9696
if (memberInfo.GetCustomAttribute<PseudoColumnAttribute>() != null)
9797
return true;
9898

99-
var entityMetadata = metadataProvider?.GetEntities().FirstOrDefault(c => c.Type == memberInfo.DeclaringType);
99+
var entityMetadata = metadataProvider?.GetEntities().FirstOrDefault(c =>
100+
c.FieldsMetadata.FirstOrDefault(fmd => fmd.Path == memberInfo.Name)?.IsPseudoColumn ?? false);
100101

101102
var fieldMetadata =
102103
entityMetadata?.FieldsMetadata.FirstOrDefault(c => c.MemberInfo.Name == memberInfo.Name);

0 commit comments

Comments
 (0)