All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.drill.exec.physical.rowSet.RowSetWriter Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.drill.exec.physical.rowSet;

import org.apache.drill.exec.vector.accessor.TupleWriter;
import org.apache.drill.exec.physical.rowSet.RowSet.SingleRowSet;

/**
 * Interface for writing values to a row set. Only available
 * for newly-created, single, direct row sets. Eventually, if
 * we want to allow updating a row set, we have to create a
 * new row set with the updated columns, then merge the new
 * and old row sets to create a new immutable row set.
 * 

* Typical usage: *


 * void writeABatch() {
 *   RowSetWriter writer = ...
 *   while (! writer.isFull()) {
 *     writer.scalar(0).setInt(10);
 *     writer.scalar(1).setString("foo");
 *     ...
 *     writer.save();
 *   }
 * }
* The above writes until the batch is full, based on size. If values * are large enough to potentially cause vector overflow, do the * following instead: *

 * void writeABatch() {
 *   RowSetWriter writer = ...
 *   while (! writer.isFull()) {
 *     writer.column(0).setInt(10);
 *     try {
 *        writer.column(1).setString("foo");
 *     } catch (VectorOverflowException e) { break; }
 *     ...
 *     writer.save();
 *   }
 *   // Do something with the partially-written last row.
 * }
*

* This writer is for testing, so no provision is available to handle a * partial last row. (Elsewhere n Drill there are classes that handle that case.) */ public interface RowSetWriter extends TupleWriter { /** * Write a row of values, given by Java objects. Object type must * match expected column type. Stops writing, and returns false, * if any value causes vector overflow. Value format: *

    *
  • For scalars, the value as a suitable Java type (int or * Integer, say, for INTEGER values.)
  • *
  • For scalar arrays, an array of a suitable Java primitive type * for scalars. For example, int[] for an INTEGER * column.
  • *
  • For a Map, an Object array with values encoded as above. * (In fact, the list here is the same as the map format.
  • *
  • For a list (repeated map, list of list), an Object * array with values encoded as above. (So, for a repeated map, an outer * Object map encodes the array, an inner one encodes the * map members.
  • *
* * @param values variable-length argument list of column values */ RowSetWriter addRow(Object...values); RowSetWriter addSingleCol(Object value); /** * Indicates if the current row position is valid for * writing. Will be false on the first row, and all subsequent * rows until either the maximum number of rows are written, * or a vector overflows. After that, will return true. The * method returns false as soon as any column writer overflows * even in the middle of a row write. That is, this writer * does not automatically handle overflow rows because that * added complexity is seldom needed for tests. * * @return true if the current row can be written, false * if not */ boolean isFull(); int rowIndex(); /** * Saves the current row and moves to the next row. * Done automatically if using setRow(). */ void save(); /** * Finish writing and finalize the row set being * written. * @return the completed, read-only row set without a * selection vector */ SingleRowSet done(); }