コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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)));
            }
        }