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(""); }
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(""); }