protected override IEnumerable <Column> GetColumns(IDatabase database, RestrictionDictionary restrictionValues) { var parameters = new ParameterCollection(); var columns = new List <Column>(); //如果指定使用表名查询 if (restrictionValues.TryGetValue(nameof(Column.TableName), out string tableName)) { SqlCommand sql = $@" PRAGMA main.TABLE_INFO('{tableName}')"; columns.AddRange(GetColumns(database, tableName)); } else { //循环所有表,对每个表进行查询 foreach (var tb in GetTables(database, RestrictionDictionary.Empty)) { SqlCommand sql = $@" PRAGMA main.TABLE_INFO('{tb.Name}')"; columns.AddRange(GetColumns(database, tb.Name)); } } //如果使用列名进行查询 if (restrictionValues.TryGetValue(nameof(Column.Name), out string columnName)) { columns = columns.Where(s => s.Name == columnName).ToList(); } return(columns); }
protected override IEnumerable <Database> GetDatabases(IDatabase database, RestrictionDictionary restrictionValues) { var sql = "SHOW DATABASES"; if (restrictionValues.TryGetValue(nameof(Database.Name), out string dbName)) { sql += $" LIKE '{dbName}'"; } return(ExecuteAndParseMetadata(database, sql, null, (wrapper, reader) => new Database { Name = wrapper.GetString(reader, 0) })); }
protected override IEnumerable <ForeignKey> GetForeignKeys(IDatabase database, RestrictionDictionary restrictionValues) { var parameters = new ParameterCollection(); //如果指定使用表名查询 if (restrictionValues.TryGetValue(nameof(ForeignKey.TableName), out string tbName)) { SqlCommand sql = $@" PRAGMA main.FOREIGN_KEY_LIST('{tbName}')"; return(ExecuteAndParseMetadata(database, sql, parameters, (wrapper, reader) => new ForeignKey { TableName = tbName, ColumnName = wrapper.GetString(reader, 4), PKTable = wrapper.GetString(reader, 2), PKColumn = wrapper.GetString(reader, 3) })); } else { var columns = new List <ForeignKey>(); //循环所有表,对每个表进行查询 foreach (var tb in GetTables(database, RestrictionDictionary.Empty)) { SqlCommand sql = $@" PRAGMA main.FOREIGN_KEY_LIST('{tb.Name}')"; columns.AddRange(ExecuteAndParseMetadata(database, sql, parameters, (wrapper, reader) => new ForeignKey { TableName = tb.Name, ColumnName = wrapper.GetString(reader, 4), PKTable = wrapper.GetString(reader, 2), PKColumn = wrapper.GetString(reader, 3) })); } return(columns); } }