private List <string> ApplyProjection(List <string> records) { var outputColumns = new List <string>(); var tableStructure = TableUtils.GetTableColumns(DatabaseName, TableName); if (AggregateFunctionList.Count == 0) { // Select the values of the columns from the record and add them to the output foreach (var record in records) { var outputRecord = ""; var recordSplit = record.Split('#'); foreach (var output in OutputParamsAliasList) { outputRecord += recordSplit[tableStructure.IndexOf(output.Item1.Item2)] + "#"; } // Apply DISTINCT as well outputRecord = outputRecord.Remove(outputRecord.Length - 1); if (!outputColumns.Contains(outputRecord)) { outputColumns.Add(outputRecord); } } } else { // Collect the result of the aggregations => This will always be one row } return(outputColumns); }
private List <string> ApplyWhereConditions(List <string> unfilteredRecords, string tableName) { var records = new List <string>(); var groupedConditions = new List <KeyValuePair <string, List <string> > >(); foreach (var condition in WhereConditionsList) { if (groupedConditions.Find(elem => elem.Key == condition.Item1.Item2).Value == null) { groupedConditions.Add(new KeyValuePair <string, List <string> >(condition.Item1.Item2, new List <string>())); } groupedConditions.Find(elem => elem.Key == condition.Item1.Item2).Value.Add(condition.Item2); } var tableStructure = TableUtils.GetTableColumns(DatabaseName, tableName); foreach (var record in unfilteredRecords) { if (RecordMatchesCondition(record, tableStructure, groupedConditions)) { records.Add(record); } } return(records); }
private List <string> SelectWithTableScan() { try { var records = new List <string>(); var unfilteredRecords = MongoDB.GetEntireCollection(TableName); var groupedConditions = new List <KeyValuePair <string, List <string> > >(); foreach (var condition in WhereConditionsList) { if (groupedConditions.Find(elem => elem.Key == condition.Item1.Item2).Value == null) { groupedConditions.Add(new KeyValuePair <string, List <string> >(condition.Item1.Item2, new List <string>())); } groupedConditions.Find(elem => elem.Key == condition.Item1.Item2).Value.Add(condition.Item2); } var tableStructure = TableUtils.GetTableColumns(DatabaseName, TableName); foreach (var indexRecord in unfilteredRecords) { var indRec = indexRecord.GetElement("_id").Value + "#" + indexRecord.GetElement("value").Value; if (RecordMatchesCondition(indRec, tableStructure, groupedConditions)) { records.Add(indRec); } } return(records); } catch (Exception ex) { throw ex; } }
public override void ParseAttributes() { var splitAttributes = Attributes.Split('|'); var selectedTables = new List <string>(); foreach (var selectAttribute in splitAttributes[0].Split('*')) { if (selectAttribute != "") { SelectJoinInfo.Add(new SelectJoinInfo(selectAttribute)); var leftTable = selectAttribute.Split('#')[0]; var rightTable = selectAttribute.Split('#')[2]; if (!selectedTables.Contains(leftTable)) { selectedTables.Add(leftTable); } if (!selectedTables.Contains(rightTable)) { selectedTables.Add(rightTable); } } } for (int idx = 1; idx < splitAttributes.Length; idx++) { if (splitAttributes[idx] != "") { var newColumnConfig = new SelectRowInfo(splitAttributes[idx]); SelectConfigList.Add(newColumnConfig); } } ParseSelectConfig(); foreach (var table in selectedTables) { SelectedTablesStructure.Add(new Tuple <string, List <string> >(table, TableUtils.GetTableColumns(DatabaseName, table))); } }