- 完善 Sqlite DbFirst 获取索引信息;#1425

This commit is contained in:
2881099
2023-02-16 21:27:07 +08:00
parent ad96603fbf
commit 7ca2ecf7fb
3 changed files with 276 additions and 183 deletions

View File

@ -294,6 +294,45 @@ from {db}.sqlite_master where type='table'{(tbname == null ? "" : $" and {(ignor
addColumn(ds2item, ++position);
}
Dictionary<string, DbIndexInfo> indexes = new Dictionary<string, DbIndexInfo>();
var dbIndexes = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".INDEX_LIST(\"{table}\")");
foreach (var dbIndex in dbIndexes)
{
if (string.Concat(dbIndex[3]) == "pk") continue;
var dbIndexesColumns = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".INDEX_INFO({dbIndex[1]})");
var dbIndexesSql = string.Concat(_orm.Ado.ExecuteScalar(CommandType.Text, $" SELECT sql FROM \"{db}\".sqlite_master WHERE name = '{dbIndex[1]}'"));
foreach (var dbcolumn in dbIndexesColumns)
{
var column = string.Concat(dbcolumn[2]);
var indexName = string.Concat(dbIndex[1]);
var isDesc = dbIndexesSql.IndexOf($@"{column}"" DESC", StringComparison.CurrentCultureIgnoreCase) == -1 ? "0" : "1";
var isUnique = string.Concat(dbIndex[2]);
if (loc3.ContainsKey(table_id) == false || loc3[table_id].ContainsKey(column) == false) continue;
var loc9 = loc3[table_id][column];
if (indexes.TryGetValue(indexName, out var indexInfo) == false)
indexes.Add(indexName, indexInfo = new DbIndexInfo
{
IsUnique = isUnique == "1",
Name = indexName
});
if (indexInfo.Columns.Any(a => a.Column.Name == column) == false)
indexInfo.Columns.Add(new DbIndexColumnInfo
{
Column = loc9,
IsDesc = isDesc == "1"
});
}
}
foreach (var indexItem in indexes)
{
if (indexItem.Value.IsUnique)
loc2[table_id].UniquesDict.Add(indexItem.Key, indexItem.Value);
else
loc2[table_id].IndexesDict.Add(indexItem.Key, indexItem.Value);
}
if (tbname == null)
{
var fks = _orm.Ado.ExecuteArray(CommandType.Text, $"PRAGMA \"{db}\".foreign_key_list(\"{table}\")");