public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            if (Value == null)
            {
                if (!NullValueComparisonOperators.Contains(Operation))
                {
                    throw new InvalidOperationException($"Invalid operation for null value. Should be one of {string.Join(", ", NullValueComparisonOperators)}");
                }
                return(GetNullValueQuery());
            }

            Dictionary <string, object> parameters = null;
            string valueString;

            if (Value is TSqlStatement tsqlStatement)
            {
                valueString = tsqlStatement.GetDescription();
            }
            else
            {
                string parameterName = SqlBuilderHelper.GetUniqueParameterName(SqlBuilderHelper.ComposeParameterName(Field.TableName, Field.FieldName), context);
                context.ParameterNames.Add(parameterName);

                parameters = new Dictionary <string, object> {
                    { parameterName, Value }
                };
                valueString = SqlBuilderHelper.PrepareParameterName(parameterName);
            }

            return(new TSqlQuery(
                       $"{Field.GetFullName()} {SqlBuilderHelper.ConvertBinaryOperationToString(Operation)} {valueString}",
                       parameters
                       ));
        }
Exemple #2
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            string query = $"{TSqlSyntax.Offset} {Offset} {TSqlSyntax.Rows}" +
                           $" {TSqlSyntax.Fetch} {TSqlSyntax.Next} {Fetch} {TSqlSyntax.Rows} {TSqlSyntax.Only}";

            return(new TSqlQuery(query));
        }
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            Dictionary <string, object> parameters = new Dictionary <string, object>();

            string properties = string.Join(TSqlSyntax.FieldsDelimeter, FieldWithValues.Keys);
            string values     = string.Join(TSqlSyntax.FieldsDelimeter, FieldWithValues.Keys.Select(fieldName => {
                object fieldValue = FieldWithValues[fieldName];

                if (fieldValue is TSqlStatement tsqlStatement)
                {
                    return(tsqlStatement.GetDescription());
                }

                string parameterName = SqlBuilderHelper.ComposeParameterName(TableName, fieldName, context);
                context.ParameterNames.Add(parameterName);
                parameters.Add(parameterName, FieldWithValues[fieldName]);

                return(SqlBuilderHelper.PrepareParameterName(parameterName));
            }));

            StringBuilder sb = new StringBuilder();

            sb
            .AppendLine($"{TSqlSyntax.Insert} {SqlBuilderHelper.PrepareTableName(TableName)} ({properties})")
            .AppendLine($"{TSqlSyntax.Values} ({values})");

            return(new TSqlQuery(sb.ToString(), parameters));
        }
Exemple #4
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            IEnumerable <string> items = _orderItems.Select(i => i.Compile());

            return(new TSqlQuery(
                       $"{TSqlSyntax.OrderBy} {string.Join(TSqlSyntax.FieldsDelimeter, items)}"
                       ));
        }
Exemple #5
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            TSqlQuery innerQuery = Clause.Compile(context);

            return(new TSqlQuery(
                       $"{TSqlSyntax.Where} {innerQuery.Query}",
                       new Dictionary <string, object>(innerQuery.Parameters)
                       ));
        }
Exemple #6
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            string parameterName = SqlBuilderHelper.ComposeParameterName(Field.TableName, Field.FieldName, context);

            context.ParameterNames.Add(parameterName);
            Dictionary <string, object> parameters = new Dictionary <string, object> {
                { parameterName, Value }
            };
            string query = $"{Field.GetFullName()} {TSqlSyntax.In} {SqlBuilderHelper.PrepareParameterName(parameterName)}";

            return(new TSqlQuery(query, parameters));
        }
Exemple #7
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append($"{JoinType.GetDescription()} {TSqlSyntax.Join} {SqlBuilderHelper.PrepareTableName(JoinedTable)}");
            if (TableHints.HasValue)
            {
                string hints = SqlBuilderHelper.GetTableHintString(TableHints.Value);
                sb.Append(" ");
                sb.Append($"{TSqlSyntax.With}({hints})");
            }
            sb.Append(" ");
            sb.Append($"{TSqlSyntax.On} {LeftField.GetFullName()} {SqlBuilderHelper.ConvertBinaryOperationToString(Operation)} {RightField.GetFullName()}");

            return(new TSqlQuery(sb.ToString()));
        }
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            Dictionary <string, object> parameters = new Dictionary <string, object>();
            StringBuilder queryString = new StringBuilder();

            foreach (Clause clause in InnerClauses)
            {
                if (queryString.Length > 0)
                {
                    queryString.Append($" {SqlBuilderHelper.ConvertBooleanOperationToString(BooleanOperation)} ");
                }
                TSqlQuery clauseQuery = clause.Compile(context);
                queryString.Append(clauseQuery.Query);
                foreach (KeyValuePair <string, object> item in clauseQuery.Parameters)
                {
                    parameters.Add(item.Key, item.Value);
                }
            }
            return(new TSqlQuery($"({queryString})", parameters));
        }
Exemple #9
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            string concatenatedFields = TSqlSyntax.AllFieldsSymbol;

            if (SelectItems != null & SelectItems.Any())
            {
                concatenatedFields = string.Join(
                    TSqlSyntax.FieldsDelimeter,
                    SelectItems.Select(f => f.Compile())
                    );
            }

            StringBuilder sb = new StringBuilder();

            sb.Append($"{TSqlSyntax.Select}");

            if (Distinct)
            {
                sb.Append(" ");
                sb.Append($"{TSqlSyntax.Distinct}");
            }
            if (topCount.HasValue)
            {
                sb.Append(" ");
                sb.Append($"{TSqlSyntax.Top} {topCount}");
            }
            sb.Append(" ");
            sb.Append($"{concatenatedFields} {TSqlSyntax.From} {SqlBuilderHelper.PrepareTableName(TableName)}");

            if (TableHints.HasValue)
            {
                string hints = SqlBuilderHelper.GetTableHintString(TableHints.Value);
                sb.Append(" ");
                sb.Append($"{TSqlSyntax.With}({hints})");
            }

            return(new TSqlQuery(sb.ToString()));
        }
Exemple #10
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            Dictionary <string, object> parameters = new Dictionary <string, object>();
            StringBuilder sb = new StringBuilder();

            foreach (UpdateClauseItem item in UpdateItems)
            {
                if (sb.Length > 0)
                {
                    sb.Append(TSqlSyntax.FieldsDelimeter);
                }

                string fieldName = SqlBuilderHelper.PrepareFieldName(TableName, item.FieldName);
                string assignmentOperatorString = SqlBuilderHelper.ConvertAssignmentOperatorToString(item.AssignmentOperator);
                string valueString;

                if (item.Value is TSqlStatement tsqlStatement)
                {
                    valueString = tsqlStatement.GetDescription();
                }
                else
                {
                    string parameterName = SqlBuilderHelper.ComposeParameterName(TableName, item.FieldName, context);
                    context.ParameterNames.Add(parameterName);
                    parameters.Add(parameterName, item.Value);
                    valueString = SqlBuilderHelper.PrepareParameterName(parameterName);
                }

                sb.AppendLine($"{fieldName} {assignmentOperatorString} {valueString}");
            }

            return(new TSqlQuery(
                       $"{TSqlSyntax.Update} {SqlBuilderHelper.PrepareTableName(TableName)} {TSqlSyntax.Set} {sb}",
                       parameters
                       ));
        }
 public override TSqlQuery Compile(ClauseCompilationContext context)
 {
     return(new TSqlQuery($"{TSqlSyntax.Select} {TSqlStatement.RowCountVariable.GetDescription()}", null));
 }
Exemple #12
0
        public override TSqlQuery Compile(ClauseCompilationContext context)
        {
            string query = $"{TSqlSyntax.Delete} {TSqlSyntax.From} {SqlBuilderHelper.PrepareTableName(TableName)}";

            return(new TSqlQuery(query));
        }
 public override TSqlQuery Compile(ClauseCompilationContext context)
 {
     return(new TSqlQuery($"{TSqlSyntax.Select} {TSqlStatement.ScopeIdentityCall.GetDescription()}", null));
 }
Exemple #14
0
 public TSqlBuilder()
 {
     _clauses = new List <Clause>();
     _clauseCompilationContext = new ClauseCompilationContext();
 }