protected int GetIndex(Bamboo.Query.Query.Column column, System.Collections.IEnumerable columnCoordinates) { //TODO DELETE //if (column is Bamboo.Query.Query.FunctionColumn) //{ // Bamboo.Query.Query.FunctionColumn functionColumn = (Bamboo.Query.Query.FunctionColumn)column; // string name = functionColumn.Function + "(" + functionColumn.Identifier + ")"; // foreach (ColumnCoordinate columnCoordinate in columnCoordinates) // { // if (columnCoordinate.Name.Equals(name)) // { // return columnCoordinate.Index; // } // } //} //else //{ foreach (ColumnCoordinate columnCoordinate in columnCoordinates) { if (columnCoordinate.Name.Equals(column.Identifier)) { return(columnCoordinate.Index); } } //} throw new System.Exception("Column does not exist: " + column.Identifier); }
private static string GetColumnName(Bamboo.Query.Query.Column column) { if (column.Alias != null && column.Alias.Length > 0) { return(column.Alias); } else if (column.Identifier.IndexOf("(") != -1) { string identifier = column.Identifier; string function = identifier.Substring(0, identifier.IndexOf("(")); int start = identifier.IndexOf("(") + 1; string columnIdentifier = identifier.Substring(start, identifier.Length - (start + 1)); if (columnIdentifier.IndexOf(".") != -1) { return(columnIdentifier.Substring(columnIdentifier.LastIndexOf(".") + 1)); } else { return(columnIdentifier); } } else { if (column.Identifier.IndexOf(".") != -1) { return(column.Identifier.Substring(column.Identifier.LastIndexOf(".") + 1)); } else { return(column.Identifier); } } }
public GroupByNode(Bamboo.Query.Planning.Node node, System.Collections.IList groupBy, System.Collections.IList select) { this._node = node; int[] indexes = GetIndexes(groupBy, this._node.ColumnCoordinates); Bamboo.Query.Aggregators.Aggregator[] aggregators = GetAggregators(select); this._indexes = indexes; this._aggregators = aggregators; ColumnCoordinate[] columnCoordinates = new ColumnCoordinate[groupBy.Count + aggregators.Length]; int i; for (i = 0; i < groupBy.Count; i++) { Bamboo.Query.Query.Column column = (Bamboo.Query.Query.Column)groupBy[i]; columnCoordinates[i] = new ColumnCoordinate(column.Identifier, i); } foreach (Bamboo.Query.Query.Column column in select) { if (column.Identifier.IndexOf("(") != -1) { string identifier = column.Identifier; string function = identifier.Substring(0, identifier.IndexOf("(")); int start = identifier.IndexOf("(") + 1; string columnIdentifier = identifier.Substring(start, identifier.Length - (start + 1)); columnCoordinates[i] = new ColumnCoordinate(function + "(" + columnIdentifier + ")", i); i++; } } this._columnCoordinates = columnCoordinates; }
//TODO private static Bamboo.Query.Query.Column CreateColumn(string identifier, string alias, string from) { if (identifier.IndexOf(".") == -1) { //TODO do a check. //if (joins.Count > 0) //{ // throw new System.Exception("Invalid column name: " + identifier); //} if (identifier.IndexOf("(") == -1) { identifier = from + "." + identifier; } else { string function = identifier.Substring(0, identifier.IndexOf("(")); int start = identifier.IndexOf("(") + 1; string columnIdentifier = identifier.Substring(start, identifier.Length - (start + 1)); identifier = function + "(" + from + "." + columnIdentifier + ")"; } } Bamboo.Query.Query.Column column = new Bamboo.Query.Query.Column(identifier, alias); return(column); }
public SelectNode(Bamboo.Query.Planning.Node node, System.Collections.IList select) { this._node = node; this._indexes = GetIndexes(select, this._node.ColumnCoordinates); ColumnCoordinate[] columnCoordinates = new ColumnCoordinate[select.Count]; for (int i = 0; i < columnCoordinates.Length; i++) { Bamboo.Query.Query.Column column = (Bamboo.Query.Query.Column)select[i]; columnCoordinates[i] = new ColumnCoordinate(column.Identifier, i); } this._columnCoordinates = columnCoordinates; }
private static string GetTableName(Bamboo.Query.Query.Column column) { string identifier = column.Identifier; if (identifier.IndexOf(".") != -1) { return(identifier.Substring(0, identifier.IndexOf("."))); } else { return(""); } }
private static System.Collections.IList GetGroupBy(System.Collections.ArrayList tokens, string from) { System.Collections.ArrayList groupBy = new System.Collections.ArrayList(); foreach (string token in tokens) { if (!token.Equals(",")) { Bamboo.Query.Query.Column column = CreateColumn(token, from); groupBy.Add(column); } } return(groupBy); }
private static Bamboo.Query.Query.JoinClause GetJoin(System.Collections.ArrayList tokens) { System.Text.StringBuilder Table = new System.Text.StringBuilder(); System.Text.StringBuilder OnColumn = new System.Text.StringBuilder(); System.Text.StringBuilder EqualsColumn = new System.Text.StringBuilder(); System.Text.StringBuilder current = Table; for (int i = 0; i < tokens.Count; i++) { string token = (string)tokens[i]; if (token.ToUpper().Equals("ON")) { current = OnColumn; } else if (token.ToUpper().Equals("=")) { current = EqualsColumn; } else { current.Append(token); } } string tableName = Table.ToString(); //ON Bamboo.Query.Query.Column onColumn = CreateJoinColumn(OnColumn.ToString()); //= Bamboo.Query.Query.Column equalsColumn = CreateJoinColumn(EqualsColumn.ToString()); if (tableName.Equals(GetTableName(onColumn))) { return(new Bamboo.Query.Query.JoinClause(equalsColumn, onColumn)); } else if (tableName.Equals(GetTableName(equalsColumn))) { return(new Bamboo.Query.Query.JoinClause(onColumn, equalsColumn)); } else { throw new System.Exception("Invalid join."); } }
private Bamboo.Query.Aggregators.Aggregator ToAggregator(Bamboo.Query.Query.Column column) { string identifier = column.Identifier; string aggregator = identifier.Substring(0, identifier.IndexOf("(")); int start = identifier.IndexOf("(") + 1; string columnIdentifier = identifier.Substring(start, identifier.Length - (start + 1)); switch (aggregator.ToUpper()) { case "SUM": { return(new Bamboo.Query.Aggregators.SumDoubleAggregator(GetIndex(new Bamboo.Query.Query.Column(columnIdentifier), this._node.ColumnCoordinates))); } case "SUMINT": { return(new Bamboo.Query.Aggregators.SumIntAggregator(GetIndex(new Bamboo.Query.Query.Column(columnIdentifier), this._node.ColumnCoordinates))); } case "SUMDOUBLE": { return(new Bamboo.Query.Aggregators.SumDoubleAggregator(GetIndex(new Bamboo.Query.Query.Column(columnIdentifier), this._node.ColumnCoordinates))); } case "COUNT": { return(new Bamboo.Query.Aggregators.CountAggregator(GetIndex(new Bamboo.Query.Query.Column(columnIdentifier), this._node.ColumnCoordinates))); } case "INC": { return(new Bamboo.Query.Aggregators.IncrementAggregator()); } default: { throw new System.Exception("Unknown function: " + aggregator); } } }
private static void GenerateSelect(SelectStatement query, System.Text.StringBuilder stringBuilder) { if (query.Select.Count == 0) { return; } stringBuilder.Append("SELECT"); stringBuilder.Append(" "); for (int i = 0; i < query.Select.Count; i++) { Bamboo.Query.Query.Column column = (Bamboo.Query.Query.Column)query.Select[i]; if (i != 0) { stringBuilder.Append(", "); } // TODO Watch out for functions. Escape(stringBuilder, column.Identifier); } }
public NotEqualsPredicate(Bamboo.Query.Query.Column column, object value) { this._column = column; this._value = value; }
public JoinClause(Bamboo.Query.Query.Column leftColumn, Bamboo.Query.Query.Column rightColumn) { this._leftColumn = leftColumn; this._rightColumn = rightColumn; }
public GreaterThanPredicate(Bamboo.Query.Query.Column column, System.IComparable value) { this._column = column; this._value = value; }
public JoinNode(Bamboo.Query.Planning.Node leftNode, Bamboo.Query.Planning.Node rightNode, Bamboo.Query.Query.Column leftColumn, Bamboo.Query.Query.Column rightColumn) { this._leftNode = leftNode; this._rightNode = rightNode; this._leftRowIndex = GetIndex(leftColumn, this._leftNode.ColumnCoordinates); this._rightRowIndex = GetIndex(rightColumn, this._rightNode.ColumnCoordinates); System.Collections.IEnumerable leftNodeColumnCoordinates = this._leftNode.ColumnCoordinates; System.Collections.IEnumerable rightNodeColumnCoordinates = this._rightNode.ColumnCoordinates; int length = 0; foreach (ColumnCoordinate columnCoordinate in leftNodeColumnCoordinates) { object ignore = columnCoordinate; length++; } foreach (ColumnCoordinate columnCoordinate in rightNodeColumnCoordinates) { object ignore = columnCoordinate; length++; } ColumnCoordinate[] columnCoordinates = new ColumnCoordinate[length]; int i = 0; foreach (ColumnCoordinate columnCoordinate in leftNodeColumnCoordinates) { columnCoordinates[i] = new ColumnCoordinate(columnCoordinate.Name, i); i++; } foreach (ColumnCoordinate columnCoordinate in rightNodeColumnCoordinates) { columnCoordinates[i] = new ColumnCoordinate(columnCoordinate.Name, i); i++; } this._columnCoordinates = columnCoordinates; }