public SelectStatement Where(SelectColumn selectColumn, Operator @operator, string value1, string value2) { WhereColumn whereColumn = new WhereColumn(selectColumn.Join, selectColumn.ColumnDef, selectColumn.Statement, @operator, value1, value2); WhereColumns.Add(whereColumn); return(this); }
public SelectStatement SelectCustom(string statement, string type, string alias, ColumnType columnType = ColumnType.SelectWhereOrderBy, string[] dependentOnAliases = null, bool isVisible = true, int sortOrder = 0) { ColumnDef columnDef = new ColumnDef(null, alias, type, 0, false, false, null); SelectColumn selectColumn = new SelectColumn(null, columnDef, alias, columnType, dependentOnAliases, isVisible, sortOrder, Aggregates.None, null, null, statement); SelectColumns.Add(selectColumn); return(this); }
private void GetJoinAndColumnDef(string column, Action <Join, ColumnDef> action) { string alias = null; string name; if (column.Contains(".")) { alias = column.Split('.')[0]; name = column.Split('.')[1]; } else { name = column; var allColumnDefs = _builder.ColumnDefs .Join(Joins, j => j.ObjectDef, cd => cd.ObjectDef, (cd, j) => new { Join = j, ColumnDef = cd }) .Where(item => item.ColumnDef.Name == name) .ToList(); if (allColumnDefs.Count == 1) { alias = allColumnDefs[0].Join.Alias; } else if (allColumnDefs.Count(item => item.ColumnDef.IsPrimaryKey) == 1) { alias = allColumnDefs.Single(item => item.ColumnDef.IsPrimaryKey).Join.Alias; } } Join join = Joins.Single(item => item.Alias == alias); ColumnDef columnDef = null; if (join.SelectStatement != null) { SelectColumn selectColumn = join.SelectStatement.SelectColumns.Single(item => item.Alias == name); if (selectColumn.AggregateColumnDef != null) { columnDef = selectColumn.AggregateColumnDef; } else { throw new NotImplementedException(); } } else { columnDef = _builder.ColumnDefs.Single(item => item.ObjectDef == join.ObjectDef && item.Name == name); } action(join, columnDef); }
public SelectStatement OrderBy(string alias) { SelectColumn selectColumn = SelectColumns.Single(item => item.Alias == alias); if (Math.Abs(selectColumn.OrderByIndex) == 1) { selectColumn.OrderByIndex = -selectColumn.OrderByIndex; } else { selectColumn.OrderByIndex = 1; int so = 2; foreach (SelectColumn sc in SelectColumns .Where(item => item.Alias != alias && item.OrderByIndex != 0) .OrderBy(item => Math.Abs(item.OrderByIndex))) { sc.OrderByIndex = so++ *(sc.OrderByIndex > 0 ? 1 : -1); } } return(this); }
public SelectStatement Select(string column, string alias = null, ColumnType columnType = ColumnType.SelectWhereOrderBy, bool isVisible = true, int sortOrder = 0, Aggregates aggregate = Aggregates.None, string isNull = null, SelectStatement optionsSelectStatement = null) { GetJoinAndColumnDef(column, (join, columnDef) => { if (String.IsNullOrEmpty(alias)) { alias = columnDef.Name; } ColumnDef aggregateColumnDef = null; if (aggregate != Aggregates.None) { string type = ""; if (aggregate == Aggregates.Count) { type = "int"; } else { throw new NotImplementedException(); } aggregateColumnDef = new ColumnDef(null, alias, type, 0, true, false, null); } isVisible = isVisible && ((columnType & ColumnType.Identifier) == ColumnType.Identifier || (columnType & ColumnType.Select) == ColumnType.Select); SelectColumn selectColumn = new SelectColumn(@join, columnDef, alias, columnType, null, isVisible, sortOrder, aggregate, aggregateColumnDef, isNull, optionsSelectStatement: optionsSelectStatement); SelectColumns.Add(selectColumn); }); return(this); }