private IStreamDataReader Decorate(List <IStreamDataReader> streamDataReaders, SelectCommandContext selectCommandContext, IStreamDataReader mergedStreamDataReader) { var paginationContext = selectCommandContext.GetPaginationContext(); if (!paginationContext.HasPagination() || 1 == streamDataReaders.Count) { return(mergedStreamDataReader); } String trunkDatabaseName = DatabaseTypes.GetTrunkDatabaseType(_databaseType.GetName()).GetName(); if ("MySql".Equals(trunkDatabaseName) || "PostgreSQL".Equals(trunkDatabaseName)) { return(new LimitDecoratorStreamDataReader(mergedStreamDataReader, paginationContext)); } if ("Oracle".Equals(trunkDatabaseName)) { return(new RowNumberDecoratorStreamDataReader(mergedStreamDataReader, paginationContext)); } if ("SQLServer".Equals(trunkDatabaseName)) { return(new TopAndRowNumberDecoratorStreamDataReader(mergedStreamDataReader, paginationContext)); } return(mergedStreamDataReader); }