Aetheria/Assets/Scripts/ServerShared/NIH/RethinkDb.Driver.Linq/WhereClauseParsers/BaseIndexParser.cs
hyperion51 e96146b7bb Out with MagicOnion, in with LiteNetLib
Removed MagicOnion
Added LiteNetLib
Created client and server abstractions
Fixed serialization bugs
2020-03-24 14:36:22 +00:00

40 lines
No EOL
1.3 KiB
C#

using System;
using System.Linq;
using System.Linq.Expressions;
using Remotion.Linq;
using RethinkDb.Driver.Ast;
namespace RethinkDb.Driver.Linq.WhereClauseParsers
{
public abstract class BaseIndexParser<T> : IWhereClauseParser
{
public bool IsAppropriate( ReqlAst reql, Expression expression, Type resultType )
{
var binaryExpression = expression as BinaryExpression;
if( !( reql is Table ) || binaryExpression?.NodeType != ExpressionType.Equal )
return false;
var left = binaryExpression.Left as MemberExpression;
if( left != null )
return IsIndex( left );
var right = binaryExpression.Right as MemberExpression;
return right != null && IsIndex( right );
}
private static bool IsIndex( MemberExpression left )
{
return left.Member.CustomAttributes.Any( x => x.AttributeType == typeof( T ) );
}
public abstract ReqlExpr Parse( ReqlExpr expression, QueryModel queryModel, Expression predicate );
protected static object GetValue( BinaryExpression binaryExpression )
{
var left = binaryExpression.Left as ConstantExpression;
return left != null ? left.Value : ( (ConstantExpression)binaryExpression.Right ).Value;
}
}
}