Skip to content

Commit a48a288

Browse files
committed
[ksqlDB.RestApi.Client]: added PseudoColumnNameValidator #96
1 parent fb526ba commit a48a288

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Linq.Expressions;
1+
using ksqlDB.RestApi.Client.Infrastructure.Extensions;
2+
using ksqlDB.RestApi.Client.KSql.RestApi.Validation;
23
using ksqlDb.RestApi.Client.Metadata;
34

45
namespace ksqlDb.RestApi.Client.FluentAPI.Builders
@@ -68,8 +69,15 @@ public IFieldTypeBuilder<TProperty> AsStruct()
6869
return this;
6970
}
7071

72+
private readonly PseudoColumnValidator pseudoColumnValidator = new();
73+
7174
public IFieldTypeBuilder<TProperty> AsPseudoColumn()
7275
{
76+
var columnName = fieldMetadata.ColumnName ?? fieldMetadata.MemberInfo.GetMemberName(default(EntityMetadata?));
77+
78+
if (!pseudoColumnValidator.IsValid(columnName))
79+
throw new InvalidOperationException($"{columnName} is not a valid pseudocolumn name");
80+
7381
fieldMetadata.IsPseudoColumn = true;
7482
return this;
7583
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using ksqlDb.RestApi.Client.KSql.RestApi.Parsers;
2+
using ksqlDB.RestApi.Client.Infrastructure.Extensions;
3+
4+
namespace ksqlDB.RestApi.Client.KSql.RestApi.Validation
5+
{
6+
internal class PseudoColumnValidator
7+
{
8+
private readonly string[] allowedPseudoColumnNames =
9+
[
10+
"Headers".ToUpper(),
11+
nameof(SystemColumns.ROWOFFSET).ToUpper(),
12+
nameof(SystemColumns.ROWPARTITION).ToUpper(),
13+
nameof(SystemColumns.ROWTIME).ToUpper()
14+
];
15+
16+
internal bool IsValid(string columnName)
17+
{
18+
return columnName.ToUpper().IsOneOfFollowing(allowedPseudoColumnNames);
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)