protected override List <MemoryQueryResultRow> Init(ShardingRule rule, SchemaMetaData schemaMetaData, ISqlCommandContext <ISqlCommand> sqlCommandContext, List <IStreamDataReader> streamDataReaders) { ICollection <MemoryQueryResultRow> result = new LinkedList <MemoryQueryResultRow>(); var tableNames = new HashSet <string>(); foreach (var streamDataReader in streamDataReaders) { while (streamDataReader.Read()) { MemoryQueryResultRow memoryResultSetRow = new MemoryQueryResultRow(streamDataReader); var actualTableName = memoryResultSetRow.GetCell(0).ToString(); var tableRule = rule.FindTableRuleByActualTable(actualTableName); if (tableRule == null) { if (rule.TableRules.IsEmpty() || schemaMetaData.ContainsTable(actualTableName) && tableNames.Add(actualTableName)) { result.Add(memoryResultSetRow); } } else if (tableNames.Add(tableRule.LogicTable)) { memoryResultSetRow.SetCell(1, tableRule.LogicTable); SetCellValue(memoryResultSetRow, tableRule.LogicTable, actualTableName); result.Add(memoryResultSetRow); } } } return(result.ToList()); }
protected override void SetCellValue(MemoryQueryResultRow memoryResultSetRow, string logicTableName, string actualTableName) { memoryResultSetRow.SetCell(2, memoryResultSetRow.GetCell(2).ToString().ReplaceFirst(actualTableName, logicTableName)); }