示例#1
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var value = Value.BuildSql(sqlOptions);
            var @as   = As;

            if (@as == null)
            {
                return(value);
            }
            var command   = sqlOptions.Command("CAST");
            var asCommand = sqlOptions.Command("AS");

            return($"{command}({value} {asCommand} {@as})");
        }
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var left  = LeftOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var right = RightOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));

            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.Postgres:
                return($"{left} = {sqlOptions.Command("ANY")}({right})");

            default:
                return($"{left} {sqlOptions.Command("IN")} ({right})");
            }
        }
示例#3
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var entity  = Entity;
            var command = sqlOptions.Command(Command);

            return($"{command}({entity})");
        }
示例#4
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var command  = sqlOptions.Command("ON");
            var property = Property.BuildSql(sqlOptions, FlowOptions.Construct(this));

            return($"{command} {property}");
        }
示例#5
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var operand = _selectBuilder.BuildSql(((SqlOptions)sqlOptions.Clone()).Inlined());
            var command = sqlOptions.Command("EXISTS");

            return($"{command}({operand})");
        }
示例#6
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var command   = sqlOptions.Command("UPDATE");
            var tableName = TableName.BuildSql(sqlOptions, FlowOptions.Construct(this));

            return($"{command} {tableName}");
        }
示例#7
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var operand = Operand.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var command = sqlOptions.Command("IS NULL");

            return($"{operand} {command}");
        }
示例#8
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var tableName = Entity.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var command   = sqlOptions.Command("INSERT INTO");

            return($"{command} {tableName}");
        }
示例#9
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var orders = Entities.Select(s => s.BuildSql(sqlOptions, FlowOptions.Construct(this)));
            var order  = string.Join($",{sqlOptions.NewLine()}{sqlOptions.Indent()}", orders);

            return($"{sqlOptions.Command("ORDER BY")}{sqlOptions.NewLine()}{sqlOptions.Indent()}{order}");
        }
 public override string BuildSql(SqlOptions sqlOptions)
 {
     var columns = string.Join($",{sqlOptions.NewLine()}{sqlOptions.Indent()}",
         Entities.Select(e => e.BuildSql(sqlOptions, FlowOptions.Construct(this))));
     var command = sqlOptions.Command("VALUES");
     return $"{command} ({sqlOptions.NewLine()}{sqlOptions.Indent()}{columns}{sqlOptions.NewLine()})";
 }
示例#11
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var tables  = string.Join(", ", Entities.Select(e => e.BuildSql(sqlOptions, FlowOptions.Construct(this))));
            var command = sqlOptions.Command("FROM");

            return($"{command} {tables}");
        }
示例#12
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            string joinType;

            switch (JoinType)
            {
            case JoinType.Inner:
                joinType = "INNER JOIN";
                break;

            case JoinType.Left:
                joinType = "LEFT JOIN";
                break;

            case JoinType.Right:
                joinType = "RIGHT JOIN";
                break;

            case JoinType.FullOuter:
                joinType = "FULL OUTER JOIN";
                break;

            default: throw new ArgumentException(nameof(JoinType));
            }

            var command = sqlOptions.Command(joinType);
            var table   = TableEntity.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var on      = OnBlock.BuildSql(sqlOptions, FlowOptions.Construct(this));

            return($"{command} {table} {on}");
        }
示例#13
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var entities = Entities.Select(c => $"{c.BuildSql(sqlOptions, FlowOptions.Construct(this))}");
            var columns  = string.Join($",{sqlOptions.NewLine()}{sqlOptions.Indent()}", entities);
            var command  = sqlOptions.Command("SET");

            return($"{command}{sqlOptions.NewLine()}{sqlOptions.Indent()}{columns}");
        }
示例#14
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var left    = LeftOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var right   = RightOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var command = sqlOptions.Command("LIKE");

            return($"{left} {command} {right}");
        }
示例#15
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var columnName   = ColumnName;
            var propertyName = PropertyName;
            var command      = sqlOptions.Command("AS");

            return($"{columnName} {command} {propertyName}");
        }
示例#16
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var operands = string.Join(", ",
                                       Operands.Where(operand => operand.Present(sqlOptions))
                                       .Select(operand => operand.BuildSql(sqlOptions, FlowOptions.Construct(this))));
            var command = sqlOptions.Command(Command);

            return($"{command}({operands})");
        }
示例#17
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var    column = ColumnName;
            string command;

            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.MySql:
            case SqlDatabaseType.MariaDb:

                command = sqlOptions.Command("VALUES");
                return($"{command}({column})");

            default:
                command = sqlOptions.Command("EXCLUDED");
                return($"{command}.{column}");
            }
        }
示例#18
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var operators =
                Entities.Select(o => o.BuildSql(sqlOptions, FlowOptions.Construct(this)));
            var command    = sqlOptions.Command(Command);
            var separator  = GetSeparator(sqlOptions);
            var conditions = string.Join($"{separator}{command} ", operators);

            return($"{conditions}");
        }
示例#19
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            string command;

            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.MsSql:

                command = sqlOptions.Command("FETCH NEXT");
                break;

            default:
                command = sqlOptions.Command("LIMIT");
                break;
            }

            var limitBy = LimitBy?.BuildSql(sqlOptions, FlowOptions.Construct(this));

            return($"{command} {limitBy}");
        }
示例#20
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.MsSql:
                return("1");

            default:
                return(sqlOptions.Command("TRUE"));
            }
        }
示例#21
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var tableColumnName = TableColumn.BuildSql(sqlOptions, FlowOptions.Construct(this));

            if (Value?.Present(sqlOptions) != true)
            {
                return($"{tableColumnName}");
            }

            var property = Value.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var command  = sqlOptions.Command("AS");

            return($"{tableColumnName} {command} {property}");
        }
示例#22
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var properties = string.Join($",{sqlOptions.NewLine()}{sqlOptions.Indent()}",
                                         Entities.Select(e => e.BuildSql(sqlOptions, FlowOptions.Construct(this))));
            string command;

            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.Postgres:
            case SqlDatabaseType.SqLite:
                command = sqlOptions.Command("DO UPDATE SET");
                break;

            case SqlDatabaseType.MySql:
            case SqlDatabaseType.MariaDb:
                command = sqlOptions.Command("UPDATE");
                break;

            default: return(null);
            }

            return($"{command}{sqlOptions.NewLine()}{sqlOptions.Indent()}{properties}");
        }
示例#23
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            switch (sqlOptions.DatabaseType)
            {
            case SqlDatabaseType.Postgres:
            {
                var left    = LeftOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));
                var right   = RightOperand.BuildSql(sqlOptions, FlowOptions.Construct(this));
                var command = sqlOptions.Command("ILIKE");
                return($"{left} {command} {right}");
            }

            default:
            {
                return(new LikeOperator(LeftOperand.Lower(), RightOperand.Lower()).BuildSql(sqlOptions, FlowOptions.Construct(this)));
            }
            }
        }
示例#24
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            AndOperator andBlock;

            if (Entities.Count == 1 && Entities[0] is AndOperator andOperator)
            {
                andBlock = andOperator;
            }
            else
            {
                andBlock = new AndOperator(Entities);
            }
            andBlock.Indent  = true;
            andBlock.NewLine = true;
            var conditions = andBlock.BuildSql(sqlOptions, FlowOptions.Construct(this));
            var command    = sqlOptions.Command("WHERE");

            return($"{command}{sqlOptions.NewLine()}{sqlOptions.Indent("    ")}{conditions}");
        }
示例#25
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            string dir;

            switch (Direction)
            {
            case OrderDirection.Asc:
                dir = "ASC";
                break;

            case OrderDirection.Desc:
                dir = "DESC";
                break;

            default: return(null);
            }

            var command   = sqlOptions.Command(dir);
            var orderItem = OrderItemOperand?.BuildSql(sqlOptions, FlowOptions.Construct(this)) ??
                            throw new ArgumentException(nameof(OrderItemOperand));

            return($"{orderItem} {command}");
        }
示例#26
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var columns = string.Join($",{sqlOptions.NewLine()}{sqlOptions.Indent()}", Entities.Select(e => e.BuildSql(sqlOptions, FlowOptions.Construct(this))));

            return($"{sqlOptions.Command("SELECT")}{sqlOptions.NewLine()}{sqlOptions.Indent()}{columns}");
        }
示例#27
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            string command = sqlOptions.Command("DO NOTHING");

            return($"{command}");
        }
示例#28
0
        public override string BuildSql(SqlOptions sqlOptions)
        {
            var offset = Offset?.BuildSql(sqlOptions, FlowOptions.Construct(this));

            return($"{sqlOptions.Command("OFFSET")} {offset}");
        }