internal static string BuildReturnClause(Expression expression) { var lambda = expression as LambdaExpression; if (lambda == null) { throw new InvalidCypherReturnsExpressionException(); } var body = lambda.Body; var newVal = body as NewExpression; if (newVal != null) { return(String.Join(", ", newVal.Arguments.Zip(newVal.Members, ParseExpressionToTerm))); } var prop = body as MemberExpression; if (prop != null) { var entityPropertyNames = new EntityReturnColumns(prop.Member.Name); return(BuildStatement(prop.Member.Name, entityPropertyNames, typeof(Relationship).IsAssignableFrom(((PropertyInfo)prop.Member).PropertyType))); } throw new InvalidCypherReturnsExpressionException(); }
internal static string BuildReturnClause(Expression expression) { var lambda = expression as LambdaExpression; if (lambda == null) { throw new InvalidCypherReturnsExpressionException(); } var body = lambda.Body; var newVal = body as NewExpression; if (newVal != null) { return String.Join(", ", newVal.Arguments.Zip(newVal.Members, ParseExpressionToTerm)); } var prop = body as MemberExpression; if (prop != null) { var entityPropertyNames = new EntityReturnColumns(prop.Member.Name); return BuildStatement(prop.Member.Name, entityPropertyNames, typeof(Relationship).IsAssignableFrom(((PropertyInfo)prop.Member).PropertyType)); } var memberInit = body as MemberInitExpression; if (memberInit != null) { var statement = string.Join(", ", memberInit.Bindings.Select( b => BuildStatement(b.Member.Name, new EntityReturnColumns(b.Member.Name), typeof (Relationship).IsAssignableFrom(((PropertyInfo) b.Member).PropertyType)))); return statement; } throw new InvalidCypherReturnsExpressionException(); }
public Node CreateNode(object properties, string label) { var props = _webSerializer.Serialize(properties); var propNames = new EntityReturnColumns(NodeVariableName); var clause = String.Format(CreateNodeClauseFormat, String.IsNullOrEmpty(label) ? "" : ":" + label, props, propNames.PropertiesPropertyName, propNames.IdPropertyName, propNames.LabelsPropertyName); var endpoint = new CypherClientFactory(_uri, _webClient, _webSerializer).Create(); var result = endpoint.ExecuteQuery <SingleNodeResult>(clause); var node = result.First().NewNode; return(node); }
private static string ParseExpressionToTerm(Expression node, MemberInfo memberInfo) { node = ExpressionEvaluator.PartialEval(node); var constantExp = node as ConstantExpression; if (constantExp != null) { return(constantExp.ToCypherString() + " as " + memberInfo.Name); } var member = node as MemberExpression; // new { prop = param.EntityRef } if (member != null) { var entityName = member.Member.Name; var entityPropertyNames = new EntityReturnColumns(memberInfo.Name); return(BuildStatement(entityName, entityPropertyNames, typeof(Relationship).IsAssignableFrom(((PropertyInfo)member.Member).PropertyType))); } var method = node as MethodCallExpression; // new { prop = param.GraphEntity.Prop<T>("prop") } if (method != null) { if (typeof(IGraphEntity).IsAssignableFrom(method.Method.DeclaringType)) { var methodMember = method.Object as MemberExpression; if (methodMember != null) { var entityName = methodMember.Member.Name; var args = MethodExpressionArgumentEvaluator.EvaluateArguments(method); var retval = String.Format("{0}.{1}? as {2}", entityName, args[0], memberInfo.Name); return(retval); } } var cypherFunctionAttribute = method.Method.GetCustomAttribute <ParseToCypherAttribute>(); if (cypherFunctionAttribute != null) { var @params = MethodExpressionArgumentEvaluator.EvaluateArguments(method); return(string.Format(cypherFunctionAttribute.Format, @params) + " as " + memberInfo.Name); } } throw new InvalidCypherReturnsExpressionException(); }
private static string BuildStatement(string entityName, EntityReturnColumns entityPropertyNames) { var retval = String.Format("{0} as {1}, id({0}) as {2}", entityName, entityPropertyNames.PropertiesPropertyName, entityPropertyNames.IdPropertyName); if (entityPropertyNames.RequiresTypeProperty) { retval += String.Format(", type({0}) as {1}", entityName, entityPropertyNames.TypePropertyName); } if (entityPropertyNames.RequiresLabelsProperty) { retval += String.Format(", labels({0}) as {1}", entityName, entityPropertyNames.LabelsPropertyName); } return retval; }
private static string BuildStatement(string entityName, EntityReturnColumns entityPropertyNames, bool isRelationship) { var retval = String.Format("{0} as {1}, id({0}) as {2}", entityName, entityPropertyNames.PropertiesPropertyName, entityPropertyNames.IdPropertyName); if (isRelationship) { retval += String.Format(", type({0}) as {1}", entityName, entityPropertyNames.TypePropertyName); } else { retval += String.Format(", labels({0}) as {1}", entityName, entityPropertyNames.LabelsPropertyName); } return retval; }
private static string BuildStatement(string entityName, EntityReturnColumns entityPropertyNames, bool isRelationship) { var retval = String.Format("{0} as {1}, id({0}) as {2}", entityName, entityPropertyNames.PropertiesPropertyName, entityPropertyNames.IdPropertyName); if (isRelationship) { retval += String.Format(", type({0}) as {1}", entityName, entityPropertyNames.TypePropertyName); } else { retval += String.Format(", labels({0}) as {1}", entityName, entityPropertyNames.LabelsPropertyName); } return(retval); }
private static string ParseExpressionToTerm(Expression node, MemberInfo memberInfo) { node = ExpressionEvaluator.PartialEval(node); var constantExp = node as ConstantExpression; if (constantExp != null) { return constantExp.ToCypherString(); } var member = node as MemberExpression; // new { prop = param.EntityRef } if (member != null) { var entityName = member.Member.Name; var entityPropertyNames = new EntityReturnColumns((PropertyInfo) memberInfo); return BuildStatement(entityName, entityPropertyNames); } var method = node as MethodCallExpression; // new { prop = param.GraphEntity.Prop<T>("prop") } if (method != null) { if (typeof (IGraphEntity).IsAssignableFrom(method.Method.DeclaringType)) { var methodMember = method.Object as MemberExpression; if (methodMember != null) { var entityName = methodMember.Member.Name; var args = MethodExpressionArgumentEvaluator.EvaluateArguments(method); var retval = String.Format("{0}.{1}? as {2}", entityName, args[0], memberInfo.Name); return retval; } } var cypherFunctionAttribute = method.Method.GetCustomAttribute<ParseToCypherAttribute>(); if (cypherFunctionAttribute != null) { var @params = MethodExpressionArgumentEvaluator.EvaluateArguments(method); return string.Format(cypherFunctionAttribute.Format, @params[0]) + " as " + memberInfo.Name; } } throw new InvalidCypherReturnsExpressionException(); }
public Node CreateNode(object properties, params string[] labels) { var props = _webSerializer.Serialize(properties); var propNames = new EntityReturnColumns(NodeVariableName); var clause = String.Format( CreateNodeClauseFormat, labels != null && labels.Any() ? ":" + string.Join(":", labels) : string.Empty, props, propNames.PropertiesPropertyName, propNames.IdPropertyName, propNames.LabelsPropertyName); var endpoint = new CypherClientFactory(_uri, _username, _password, _webClient, _webSerializer, _entityCache).Create(); var result = endpoint.ExecuteQuery <SingleNodeResult>(clause); var node = result.First().NewNode; return(node); }
internal static string BuildReturnClause(Expression expression) { var lambda = expression as LambdaExpression; if (lambda == null) { throw new InvalidCypherReturnsExpressionException(); } var body = lambda.Body; var newVal = body as NewExpression; if (newVal != null) { return String.Join(", ", newVal.Arguments.Zip(newVal.Members, ParseExpressionToTerm)); } var prop = body as MemberExpression; if (prop != null) { var entityPropertyNames = new EntityReturnColumns((PropertyInfo)prop.Member); return BuildStatement(prop.Member.Name, entityPropertyNames); } throw new InvalidCypherReturnsExpressionException(); }