Files
chaisql/internal/stream/concat.go
2024-02-17 17:56:41 +04:00

56 lines
1.0 KiB
Go

package stream
import (
"strings"
"github.com/chaisql/chai/internal/environment"
)
// A ConcatOperator concatenates two streams.
type ConcatOperator struct {
BaseOperator
Streams []*Stream
}
// Concat turns two individual streams into one.
func Concat(s ...*Stream) *ConcatOperator {
return &ConcatOperator{Streams: s}
}
func (it *ConcatOperator) Clone() Operator {
streams := make([]*Stream, len(it.Streams))
for i, s := range it.Streams {
streams[i] = s.Clone()
}
return &ConcatOperator{
BaseOperator: it.BaseOperator.Clone(),
Streams: streams,
}
}
func (it *ConcatOperator) Iterate(in *environment.Environment, fn func(*environment.Environment) error) error {
for _, s := range it.Streams {
if err := s.Iterate(in, fn); err != nil {
return err
}
}
return nil
}
func (it *ConcatOperator) String() string {
var s strings.Builder
s.WriteString("concat(")
for i, st := range it.Streams {
if i > 0 {
s.WriteString(", ")
}
s.WriteString(st.String())
}
s.WriteRune(')')
return s.String()
}