private string CheckForIndex(List <KeyValuePair <string, List <Tuple <string, string> > > > conditionList, string tableName)
        {
            if (!conditionList.Any(elem => elem.Key == tableName))
            {
                return("");
            }

            var conditionsForTable = conditionList.Find(elem => elem.Key == tableName).Value;
            var columnNames        = "";

            foreach (var column in conditionsForTable)
            {
                columnNames += column.Item1 + "_";
            }
            columnNames = columnNames.Remove(columnNames.Length - 1);

            // check if any unique key index files can be used
            var uniqueFiles = TableUtils.GetUniqueFiles(DatabaseName, tableName);

            foreach (var unique in uniqueFiles)
            {
                if (unique.Contains(columnNames))
                {
                    return(unique);
                }
            }

            var searchedIndexName = "Index_" + tableName + "_" + columnNames;
            var indexFiles        = TableUtils.GetIndexFiles(DatabaseName, tableName);

            foreach (var index in indexFiles)
            {
                if (index.IndexFileName.Contains(searchedIndexName))
                {
                    // an index is used in the selection condition if the attributes are a prefix of the attributes in an existing index
                    return(index.IndexFileName);
                }
            }

            return("");
        }
Exemplo n.º 2
0
        private string CheckForIndex(List <Tuple <Tuple <string, string>, string> > conditionList, string tableName)
        {
            if (conditionList.Count == 0)
            {
                return("");
            }

            // build the index name containing the attributes from the condition
            var columnNames = "";

            foreach (var column in conditionList)
            {
                columnNames += column.Item1.Item2 + "_";
            }
            columnNames = columnNames.Remove(columnNames.Length - 1);

            // check if any unique key index files can be used
            var uniqueFiles = TableUtils.GetUniqueFiles(DatabaseName, tableName);

            foreach (var unique in uniqueFiles)
            {
                if (unique.Contains(columnNames))
                {
                    return(unique);
                }
            }

            var searchedIndexName = "Index_" + tableName + "_" + columnNames;
            var indexFiles        = TableUtils.GetIndexFiles(DatabaseName, tableName);

            foreach (var index in indexFiles)
            {
                if (index.IndexFileName.Contains(searchedIndexName))
                {
                    // an index is used in the selection condition if the attributes are a prefix of the attributes in an existing index
                    return(index.IndexFileName);
                }
            }

            return("");
        }