mirror of
https://github.com/nsnail/FreeSql.git
synced 2025-06-19 04:18:16 +08:00
- 完善 Sqlite DbFirst 获取索引信息;#1425
This commit is contained in:
@ -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}\")");
|
||||
|
Reference in New Issue
Block a user