Skip to content

Commit b0f2b9e

Browse files
authored
fixing #377 (#405)
1 parent ec67861 commit b0f2b9e

File tree

5 files changed

+38
-28
lines changed

5 files changed

+38
-28
lines changed

docker/cluster/redis.conf

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ cluster-node-timeout 5000
77
daemonize yes
88

99
loadmodule /opt/redis-stack/lib/redisearch.so
10-
loadmodule /opt/redis-stack/lib/redisgraph.so
1110
loadmodule /opt/redis-stack/lib/redistimeseries.so
1211
loadmodule /opt/redis-stack/lib/rejson.so
1312
loadmodule /opt/redis-stack/lib/redisbloom.so

src/Redis.OM/Aggregation/AggregationPredicates/QueryPredicate.cs

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -45,32 +45,32 @@ protected override void ValidateAndPushOperand(Expression expression, Stack<stri
4545
{
4646
if (binaryExpression.Right is ConstantExpression constantExpression)
4747
{
48-
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression.Member, constantExpression));
48+
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression, constantExpression));
4949
}
5050
else if (binaryExpression.Right is UnaryExpression uni)
5151
{
5252
switch (uni.Operand)
5353
{
5454
case ConstantExpression c:
55-
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression.Member, c));
55+
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression, c));
5656
break;
5757
case MemberExpression mem when mem.Expression is ConstantExpression frame:
5858
{
5959
var val = ExpressionParserUtilities.GetValue(mem.Member, frame.Value);
60-
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression.Member, System.Linq.Expressions.Expression.Constant(val)));
60+
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression, System.Linq.Expressions.Expression.Constant(val)));
6161
break;
6262
}
6363
}
6464
}
6565
else if (binaryExpression.Right is MemberExpression mem && mem.Expression is ConstantExpression frame)
6666
{
6767
var val = ExpressionParserUtilities.GetValue(mem.Member, frame.Value);
68-
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression.Member, System.Linq.Expressions.Expression.Constant(val)));
68+
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression, System.Linq.Expressions.Expression.Constant(val)));
6969
}
7070
else
7171
{
7272
var val = ExpressionParserUtilities.GetOperandStringForQueryArgs(binaryExpression.Right);
73-
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression.Member, System.Linq.Expressions.Expression.Constant(val)));
73+
stack.Push(BuildQueryPredicate(binaryExpression.NodeType, memberExpression, System.Linq.Expressions.Expression.Constant(val)));
7474
}
7575
}
7676
else if (expression is ConstantExpression c
@@ -136,7 +136,7 @@ protected override void SplitBinaryExpression(BinaryExpression expression, Stack
136136
}
137137
}
138138

139-
private static string BuildEqualityPredicate(MemberInfo member, ConstantExpression expression)
139+
private static string BuildEqualityPredicate(MemberInfo member, ConstantExpression expression, string memberStr)
140140
{
141141
var sb = new StringBuilder();
142142
var fieldAttribute = member.GetCustomAttribute<SearchFieldAttribute>();
@@ -145,7 +145,7 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
145145
throw new InvalidOperationException("Searches can only be performed on fields marked with a RedisFieldAttribute with the SearchFieldType not set to None");
146146
}
147147

148-
sb.Append($"@{member.Name}:");
148+
sb.Append($"{memberStr}:");
149149
var searchFieldType = fieldAttribute.SearchFieldType != SearchFieldType.INDEXED
150150
? fieldAttribute.SearchFieldType
151151
: ExpressionTranslator.DetermineIndexFieldsType(member);
@@ -167,16 +167,17 @@ private static string BuildEqualityPredicate(MemberInfo member, ConstantExpressi
167167
return sb.ToString();
168168
}
169169

170-
private string BuildQueryPredicate(ExpressionType expType, MemberInfo member, ConstantExpression constExpression)
170+
private string BuildQueryPredicate(ExpressionType expType, MemberExpression member, ConstantExpression constExpression)
171171
{
172+
var memberStr = ExpressionParserUtilities.GetOperandString(member);
172173
var queryPredicate = expType switch
173174
{
174-
ExpressionType.GreaterThan => $"@{member.Name}:[({constExpression.Value} inf]",
175-
ExpressionType.LessThan => $"@{member.Name}:[-inf ({constExpression.Value}]",
176-
ExpressionType.GreaterThanOrEqual => $"@{member.Name}:[{constExpression.Value} inf]",
177-
ExpressionType.LessThanOrEqual => $"@{member.Name}:[-inf {constExpression.Value}]",
178-
ExpressionType.Equal => BuildEqualityPredicate(member, constExpression),
179-
ExpressionType.NotEqual => $"@{member.Name} : -{{{constExpression.Value}}}",
175+
ExpressionType.GreaterThan => $"{memberStr}:[({constExpression.Value} inf]",
176+
ExpressionType.LessThan => $"{memberStr}:[-inf ({constExpression.Value}]",
177+
ExpressionType.GreaterThanOrEqual => $"{memberStr}:[{constExpression.Value} inf]",
178+
ExpressionType.LessThanOrEqual => $"{memberStr}:[-inf {constExpression.Value}]",
179+
ExpressionType.Equal => BuildEqualityPredicate(member.Member, constExpression, memberStr),
180+
ExpressionType.NotEqual => $"{memberStr} : -{{{constExpression.Value}}}",
180181
_ => string.Empty
181182
};
182183
return queryPredicate;

src/Redis.OM/RediSearchCommands.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public static async Task<bool> CreateIndexAsync(this IRedisConnection connection
108108
}
109109
catch (Exception ex)
110110
{
111-
if (ex.Message.Contains("Unknown Index name"))
111+
if (ex.Message.ToLower().Contains("unknown index name"))
112112
{
113113
return null;
114114
}
@@ -134,7 +134,7 @@ public static async Task<bool> CreateIndexAsync(this IRedisConnection connection
134134
}
135135
catch (Exception ex)
136136
{
137-
if (ex.Message.Contains("Unknown Index name"))
137+
if (ex.Message.ToLower().Contains("unknown index name"))
138138
{
139139
return null;
140140
}

test/Redis.OM.Unit.Tests/RediSearchTests/AggregationFunctionalTests.cs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -271,16 +271,5 @@ public async Task GetGroupCount()
271271
Assert.True(1<=result["COUNT"]);
272272
}
273273
}
274-
275-
[Fact]
276-
public void TestUnsortedFields()
277-
{
278-
Setup();
279-
var collection = new RedisAggregationSet<Person>(_connection);
280-
281-
Assert.Throws<NotSupportedException>(() =>
282-
collection.Apply(x => $"{x.RecordShell.Email}", "TheEmailThatNeverWas").ToList());
283-
284-
}
285274
}
286275
}

test/Redis.OM.Unit.Tests/RediSearchTests/AggregationSetTests.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,27 @@ public void PunctuationMarkInTagQuery()
537537
_ = collection.Where(query).ToList();
538538
_substitute.Received().Execute("FT.AGGREGATE", "person-idx", "@FirstName:{Walter\\-Junior}", "WITHCURSOR", "COUNT", "10000");
539539
}
540+
541+
[Fact]
542+
public void CustomPropertyNamesInQuery()
543+
{
544+
//Arrange
545+
_substitute.Execute("FT.AGGREGATE", Arg.Any<string[]>()).Returns(MockedResult);
546+
_substitute.Execute("FT.CURSOR", Arg.Any<string[]>()).Returns(MockedResultCursorEnd);
547+
548+
var collection = new RedisAggregationSet<ObjectWithPropertyNamesDefined>(_substitute, true, 10);
549+
550+
//Act
551+
_ = collection.Where(x => x.RecordShell.Key == "test").ToList();
552+
553+
//Assert
554+
_substitute.Received().Execute("FT.AGGREGATE",
555+
"objectwithpropertynamesdefined-idx",
556+
"@notKey:{test}",
557+
"WITHCURSOR",
558+
"COUNT",
559+
"10");
560+
}
540561

541562
}
542563
}

0 commit comments

Comments
 (0)