Removed MagicOnion Added LiteNetLib Created client and server abstractions Fixed serialization bugs
49 lines
No EOL
1.9 KiB
C#
49 lines
No EOL
1.9 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using Remotion.Linq.Clauses.Expressions;
|
|
using RethinkDb.Driver.Ast;
|
|
using RethinkDb.Driver.Linq.WhereClauseParsers.SubQueryVisitor;
|
|
using RethinkDb.Driver.Utils;
|
|
|
|
namespace RethinkDb.Driver.Linq
|
|
{
|
|
public class MemberNameResolver
|
|
{
|
|
private readonly MemberExpression _expression;
|
|
|
|
public MemberNameResolver( MemberExpression expression )
|
|
{
|
|
_expression = expression;
|
|
}
|
|
|
|
public ReqlExpr Resolve( ReqlExpr reqlExpr ) => ResolveMemberExpression( reqlExpr, _expression );
|
|
|
|
private static ReqlExpr ResolveMemberExpression( ReqlExpr reqlExpr, MemberExpression expression )
|
|
{
|
|
if( expression.Expression.NodeType == ExpressionType.MemberAccess )
|
|
reqlExpr = ResolveMemberExpression( reqlExpr, (MemberExpression)expression.Expression );
|
|
if( expression.Expression.NodeType == ExpressionType.Extension && expression.Expression is SubQueryExpression )
|
|
reqlExpr = ResolveExtensionExpression( reqlExpr, (SubQueryExpression)expression.Expression );
|
|
return reqlExpr[QueryHelper.GetJsonMemberName( expression.Member )];
|
|
}
|
|
|
|
private static ReqlExpr ResolveExtensionExpression( ReqlExpr reqlExpr, SubQueryExpression expression )
|
|
{
|
|
var subQueryVisitors = new List<ISubQueryVisitor>
|
|
{
|
|
new AnySubQueryVisitor(),
|
|
new AllSubQueryVisitor(),
|
|
new FirstAndLastSubQueryVisitor()
|
|
};
|
|
|
|
var subQueryVisitor = subQueryVisitors.FirstOrDefault( x => x.CanVisit( expression.QueryModel ) );
|
|
|
|
if( subQueryVisitor == null )
|
|
throw new NotSupportedException( "subqueries not allowed ." );
|
|
|
|
return subQueryVisitor.Visit( reqlExpr, expression.QueryModel );
|
|
}
|
|
}
|
|
} |