@@ -169,122 +169,3 @@ object FromUnsafeProjection {
169169 GenerateSafeProjection .generate(exprs)
170170 }
171171}
172-
173- /**
174- * A mutable wrapper that makes two rows appear as a single concatenated row. Designed to
175- * be instantiated once per thread and reused.
176- */
177- class JoinedRow extends InternalRow {
178- private [this ] var row1 : InternalRow = _
179- private [this ] var row2 : InternalRow = _
180-
181- def this (left : InternalRow , right : InternalRow ) = {
182- this ()
183- row1 = left
184- row2 = right
185- }
186-
187- /** Updates this JoinedRow to used point at two new base rows. Returns itself. */
188- def apply (r1 : InternalRow , r2 : InternalRow ): InternalRow = {
189- row1 = r1
190- row2 = r2
191- this
192- }
193-
194- /** Updates this JoinedRow by updating its left base row. Returns itself. */
195- def withLeft (newLeft : InternalRow ): InternalRow = {
196- row1 = newLeft
197- this
198- }
199-
200- /** Updates this JoinedRow by updating its right base row. Returns itself. */
201- def withRight (newRight : InternalRow ): InternalRow = {
202- row2 = newRight
203- this
204- }
205-
206- override def toSeq (fieldTypes : Seq [DataType ]): Seq [Any ] = {
207- assert(fieldTypes.length == row1.numFields + row2.numFields)
208- val (left, right) = fieldTypes.splitAt(row1.numFields)
209- row1.toSeq(left) ++ row2.toSeq(right)
210- }
211-
212- override def numFields : Int = row1.numFields + row2.numFields
213-
214- override def get (i : Int , dt : DataType ): AnyRef =
215- if (i < row1.numFields) row1.get(i, dt) else row2.get(i - row1.numFields, dt)
216-
217- override def isNullAt (i : Int ): Boolean =
218- if (i < row1.numFields) row1.isNullAt(i) else row2.isNullAt(i - row1.numFields)
219-
220- override def getBoolean (i : Int ): Boolean =
221- if (i < row1.numFields) row1.getBoolean(i) else row2.getBoolean(i - row1.numFields)
222-
223- override def getByte (i : Int ): Byte =
224- if (i < row1.numFields) row1.getByte(i) else row2.getByte(i - row1.numFields)
225-
226- override def getShort (i : Int ): Short =
227- if (i < row1.numFields) row1.getShort(i) else row2.getShort(i - row1.numFields)
228-
229- override def getInt (i : Int ): Int =
230- if (i < row1.numFields) row1.getInt(i) else row2.getInt(i - row1.numFields)
231-
232- override def getLong (i : Int ): Long =
233- if (i < row1.numFields) row1.getLong(i) else row2.getLong(i - row1.numFields)
234-
235- override def getFloat (i : Int ): Float =
236- if (i < row1.numFields) row1.getFloat(i) else row2.getFloat(i - row1.numFields)
237-
238- override def getDouble (i : Int ): Double =
239- if (i < row1.numFields) row1.getDouble(i) else row2.getDouble(i - row1.numFields)
240-
241- override def getDecimal (i : Int , precision : Int , scale : Int ): Decimal = {
242- if (i < row1.numFields) {
243- row1.getDecimal(i, precision, scale)
244- } else {
245- row2.getDecimal(i - row1.numFields, precision, scale)
246- }
247- }
248-
249- override def getUTF8String (i : Int ): UTF8String =
250- if (i < row1.numFields) row1.getUTF8String(i) else row2.getUTF8String(i - row1.numFields)
251-
252- override def getBinary (i : Int ): Array [Byte ] =
253- if (i < row1.numFields) row1.getBinary(i) else row2.getBinary(i - row1.numFields)
254-
255- override def getArray (i : Int ): ArrayData =
256- if (i < row1.numFields) row1.getArray(i) else row2.getArray(i - row1.numFields)
257-
258- override def getInterval (i : Int ): CalendarInterval =
259- if (i < row1.numFields) row1.getInterval(i) else row2.getInterval(i - row1.numFields)
260-
261- override def getMap (i : Int ): MapData =
262- if (i < row1.numFields) row1.getMap(i) else row2.getMap(i - row1.numFields)
263-
264- override def getStruct (i : Int , numFields : Int ): InternalRow = {
265- if (i < row1.numFields) {
266- row1.getStruct(i, numFields)
267- } else {
268- row2.getStruct(i - row1.numFields, numFields)
269- }
270- }
271-
272- override def copy (): InternalRow = {
273- val copy1 = row1.copy()
274- val copy2 = row2.copy()
275- new JoinedRow (copy1, copy2)
276- }
277-
278- override def toString : String = {
279- // Make sure toString never throws NullPointerException.
280- if ((row1 eq null ) && (row2 eq null )) {
281- " [ empty row ]"
282- } else if (row1 eq null ) {
283- row2.toString
284- } else if (row2 eq null ) {
285- row1.toString
286- } else {
287- s " { ${row1.toString} + ${row2.toString}} "
288- }
289- }
290- }
0 commit comments