@@ -103,6 +103,9 @@ type RawColumnWriter struct {
103103 validator invariants.Value [* colblk.DataBlockValidator ]
104104 disableKeyOrderChecks bool
105105 cpuMeasurer base.CPUMeasurer
106+
107+ // RawColumnWriter writes data sequentially so each writer can have a compressor
108+ compressor block.Compressor
106109}
107110
108111// Assert that *RawColumnWriter implements RawWriter.
@@ -184,6 +187,8 @@ func newColumnarWriter(
184187 w .writeQueue .wg .Add (1 )
185188 w .cpuMeasurer = cpuMeasurer
186189 go w .drainWriteQueue ()
190+
191+ w .compressor = block .GetCompressor (w .opts .Compression )
187192 return w
188193}
189194
@@ -711,10 +716,10 @@ func (w *RawColumnWriter) enqueueDataBlock(
711716 // Serialize the data block, compress it and send it to the write queue.
712717 cb := compressedBlockPool .Get ().(* compressedBlock )
713718 cb .blockBuf .checksummer .Type = w .opts .Checksum
714- cb .physical = block .CompressAndChecksum (
719+ cb .physical = block .CompressAndChecksumWithCompressor (
715720 & cb .blockBuf .dataBuf ,
716721 serializedBlock ,
717- w .opts . Compression ,
722+ w .compressor ,
718723 & cb .blockBuf .checksummer ,
719724 )
720725 return w .enqueuePhysicalBlock (cb , separator )
@@ -1040,6 +1045,7 @@ func (w *RawColumnWriter) Close() (err error) {
10401045 return err
10411046 }
10421047 w .meta .Properties = w .props
1048+ w .compressor .Close ()
10431049 // Release any held memory and make any future calls error.
10441050 * w = RawColumnWriter {meta : w .meta , err : errWriterClosed }
10451051 return nil
@@ -1220,10 +1226,10 @@ func (w *RawColumnWriter) addDataBlock(b, sep []byte, bhp block.HandleWithProper
12201226 // Serialize the data block, compress it and send it to the write queue.
12211227 cb := compressedBlockPool .Get ().(* compressedBlock )
12221228 cb .blockBuf .checksummer .Type = w .opts .Checksum
1223- cb .physical = block .CompressAndChecksum (
1229+ cb .physical = block .CompressAndChecksumWithCompressor (
12241230 & cb .blockBuf .dataBuf ,
12251231 b ,
1226- w .opts . Compression ,
1232+ w .compressor ,
12271233 & cb .blockBuf .checksummer ,
12281234 )
12291235 if err := w .enqueuePhysicalBlock (cb , sep ); err != nil {
0 commit comments