public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; if (exp.Object != null && exp.Object.Type == typeof(string)) { var expStrParser = new SqlDbQueryFunctionStringContainsNode() { ModelStrategy = ModelStrategy }; var expStr = expStrParser.Parse(parameterDictionary, functionExpressionNode); expressionBuilder.Append(expStr); } else { var collectionValueParser = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments[0], ModelStrategy); var fieldParser = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments[1], ModelStrategy); var field = fieldParser.Parse(parameterDictionary, exp.Arguments[1]); var collectionValue = collectionValueParser.Parse(parameterDictionary, exp.Arguments[0]); expressionBuilder.Append(field); expressionBuilder.Append(" IN "); expressionBuilder.Append(collectionValue); expressionBuilder.Append(" "); } return(expressionBuilder.ToString()); }
private string ParseSelectorToColumn(DbQueryColumnClause <TModel> expression) { var exp = expression.ColumExpression; // check expression type is "New Expression" or "Parameter Expression" if (exp.Body is NewExpression) { var newExpNode = new SqlDbQueryNewExpressionRenderColumnsNode(); newExpNode.ModelStrategy = _modelStrategy; return(newExpNode.Parse(_parameterDictionary, exp.Body)); } if (exp.Body is UnaryExpression) { var paramNode = SqlDbQueryExpressionFactory.GetNodeParser(exp.Body, _modelStrategy); return(paramNode.Parse(_parameterDictionary, exp.Body)); } if (exp.Body is ParameterExpression) { var paramNode = new SqlDbQueryParameterExpressionRenderColumnsNode(); paramNode.ModelStrategy = _modelStrategy; return(paramNode.Parse(_parameterDictionary, exp.Body)); } throw new NotSupportedException("Not supported expression type."); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp.Object, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); int startIndex = 0, length = 0; var arguments = exp.Arguments; if (arguments.Count() == 1) { length = Convert.ToInt32(argExp.Parse(parameterDictionary, exp.Arguments.ElementAt(0))); } else { startIndex = Convert.ToInt32(argExp.Parse(parameterDictionary, exp.Arguments.ElementAt(0))); length = Convert.ToInt32(argExp.Parse(parameterDictionary, exp.Arguments.ElementAt(1))); } startIndex++; // fix different of T-SQL (start from 1) and CLR (start from 0). expressionBuilder.Append("SUBSTRING("); expressionBuilder.Append(expParser.Parse(parameterDictionary, exp.Object)); expressionBuilder.Append(string.Format(", {0}, {1}", startIndex, length)); expressionBuilder.Append(")"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); var arguments = exp.Arguments; bool firstarg = true; expressionBuilder.Append("CONCAT("); foreach (var argument in arguments) { if (!firstarg) { expressionBuilder.Append(", "); } expressionBuilder.Append(argExp.Parse(parameterDictionary, argument)); } expressionBuilder.Append(")"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; if (exp.Object == null) { var expParser = new SqlQueryFunctionCollectionContainsNode() { ModelStrategy = ModelStrategy }; var expStr = expParser.Parse(parameterDictionary, functionExpressionNode); expressionBuilder.Append(expStr); } else { var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); var callSourceExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Object, ModelStrategy); var argument = argExp.Parse(parameterDictionary, exp.Arguments.First()); // handling parameter, remove first and last character. argument = argument.Substring(1); argument = argument.Substring(0, argument.Length - 1); expressionBuilder.Append(callSourceExp.Parse(parameterDictionary, exp.Object)); expressionBuilder.Append(" LIKE '%"); expressionBuilder.Append(argument); expressionBuilder.Append("%' "); } return(expressionBuilder.ToString()); }
private string ParseSelectorToColumns <TModel>(Expression <Func <TModel, object> > selector) { // check expression type is "New Expression" or "Parameter Expression" if (selector.Body is NewExpression) { var newExpNode = new SqlDbQueryNewExpressionRenderColumnsNode(); newExpNode.ModelStrategy = _modelStrategy; return(newExpNode.Parse(_parameterDictionary, selector.Body)); } else if (selector.Body is UnaryExpression) { var paramNode = SqlDbQueryExpressionFactory.GetNodeParser(selector.Body, _modelStrategy); return(paramNode.Parse(_parameterDictionary, selector.Body)); } else if (selector.Body is ParameterExpression) { var paramNode = new SqlDbQueryParameterExpressionRenderColumnsNode(); paramNode.ModelStrategy = _modelStrategy; return(paramNode.Parse(_parameterDictionary, selector.Body)); } else { throw new DbEnvironmentException( "ERROR_EXPRESSION_NOT_SUPPORTED"); } }
private string ParseGroupByColumns(IEnumerable <DbQueryGroupByClause <TModel> > groupBySelectors) { if (groupBySelectors == null || !groupBySelectors.Any()) { return(string.Empty); } var groupByColumnsBuilder = new StringBuilder(); foreach (var groupBySelector in groupBySelectors) { var groupByClause = groupBySelector.Clause; // check expression type is "New Expression" or "Parameter Expression" if (groupByClause.Body is NewExpression) { throw new NotSupportedException("ERROR_GROUP_BY_NOT_SUPPORT_NEW_EXPRESSION"); } else if (groupByClause.Body is UnaryExpression) { var paramNode = SqlDbQueryExpressionFactory.GetNodeParser(groupByClause.Body, _modelStrategy); var name = paramNode.Parse(_parameterDictionary, groupByClause.Body); if (groupByColumnsBuilder.Length > 0) { groupByColumnsBuilder.Append(", " + name); } else { groupByColumnsBuilder.Append(name); } } else if (groupByClause.Body is ParameterExpression) { var paramNode = new SqlDbQueryParameterExpressionRenderColumnsNode(); paramNode.ModelStrategy = _modelStrategy; var name = paramNode.Parse(_parameterDictionary, groupByClause.Body); if (groupByColumnsBuilder.Length > 0) { groupByColumnsBuilder.Append(", " + name); } else { groupByColumnsBuilder.Append(name); } } else { throw new DbEnvironmentException( "ERROR_EXPRESSION_NOT_SUPPORTED"); } } return(groupByColumnsBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var expParser = SqlDbQueryExpressionFactory.GetNodeParser(functionExpressionNode, ModelStrategy); expressionBuilder.Append("DATEPART(SECOND, "); expressionBuilder.Append(expParser.Parse(parameterDictionary, functionExpressionNode)); expressionBuilder.Append(")"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp.Object, ModelStrategy); expressionBuilder.Append("LTRIM(RTRIM("); expressionBuilder.Append(expParser.Parse(parameterDictionary, exp.Object)); expressionBuilder.Append("))"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); expressionBuilder.Append("("); expressionBuilder.Append(argExp.Parse(parameterDictionary, exp.Arguments.First())); expressionBuilder.Append(" IS NULL) OR (LEN("); expressionBuilder.Append(argExp.Parse(parameterDictionary, exp.Arguments.First())); expressionBuilder.Append(") = 0)"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = (MethodCallExpression)functionExpressionNode; var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); var callSourceExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Object, ModelStrategy); var argument = argExp.Parse(parameterDictionary, exp.Arguments.First()); expressionBuilder.Append("CHARINDEX("); expressionBuilder.Append(argExp.Parse(parameterDictionary, exp.Arguments.First())); expressionBuilder.Append(", "); expressionBuilder.Append(callSourceExp.Parse(parameterDictionary, exp.Object)); expressionBuilder.Append(")"); return(expressionBuilder.ToString()); }
public override string Parse(IDictionary <string, object> parameterDictionary, Expression functionExpressionNode) { var expressionBuilder = new StringBuilder(); var exp = functionExpressionNode as MethodCallExpression; if (exp.Object == null) { throw new NotSupportedException(); } else { var expParser = SqlDbQueryExpressionFactory.GetNodeParser(exp, ModelStrategy); var argExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Arguments.First(), ModelStrategy); var callSourceExp = SqlDbQueryExpressionFactory.GetNodeParser(exp.Object, ModelStrategy); var argument = argExp.Parse(parameterDictionary, exp.Arguments.First()); expressionBuilder.Append(callSourceExp.Parse(parameterDictionary, exp.Object)); expressionBuilder.Append(" LIKE '%"); expressionBuilder.Append(argument.Substring(1)); expressionBuilder.Append(" "); } return(expressionBuilder.ToString()); }