Aetheria/Assets/Scripts/ServerShared/NIH/RethinkDb.Driver.Linq/WhereClauseParsers/DefaultParser.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

32 lines
1.1 KiB
C#

using System;
using System.Linq.Expressions;
using System.Reflection;
using Remotion.Linq;
using RethinkDb.Driver.Ast;
namespace RethinkDb.Driver.Linq.WhereClauseParsers
{
public class DefaultParser : IWhereClauseParser
{
public bool IsAppropriate( ReqlAst reql, Expression expression, Type resultType ) => true;
public ReqlExpr Parse( ReqlExpr expression, QueryModel queryModel, Expression predicate )
{
return expression.Filter( reqlExpr => GetWhereReqlAst( reqlExpr, predicate, queryModel ) );
}
private static ReqlExpr GetWhereReqlAst( ReqlExpr reqlExpr, Expression predicate, QueryModel queryModel )
{
var visitor = new ExpressionVisitor( reqlExpr, GetResultType( queryModel ) );
visitor.Visit( predicate );
return visitor.Current;
}
private static Type GetResultType( QueryModel queryModel )
{
if( !queryModel.ResultTypeOverride.GetTypeInfo().IsGenericType )
return queryModel.ResultTypeOverride;
return queryModel.ResultTypeOverride.GetTypeInfo().GenericTypeArguments[0];
}
}
}