Class SchemaNegotiatorImpl
- All Implemented Interfaces:
SchemaNegotiator
- Direct Known Subclasses:
FileSchemaNegotiatorImpl
Handles both early- and late-schema readers. Early-schema readers provide a table schema, late-schema readers do not.
If the reader (or, later, the scanner) has a SELECT list, then that select list is pushed down into the result set loader created for the reader.
Also handles parsing out various column types, filling in null columns and (via the vector cache), minimizing changes across readers. In the worst case, a reader might have a column "c" in one file, might skip "c" in the second file, and "c" may appear again in a third file. This negotiator, along with the scan projection and vector cache, "smoothes out" schema changes by preserving the vector for "c" across all three files. In the first and third files "c" is a vector written by the reader, in the second, it is a null column filled in by the scan projector (assuming, of course, that "c" is nullable or an array.)
Pushes limits into the result set loader. The caller must
either check the return value from {#code startBatch()}, or
call atLimit()
after harvest()
to detect when the scan
has reached the limit. Treat the limit condition the same as EOF.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected CustomErrorContext
protected int
protected boolean
protected CustomErrorContext
protected final ReaderLifecycle
protected TupleMetadata
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
batchSize
(int maxRecordsPerBatch) Set the preferred batch size (which may be overridden by the result set loader in order to limit vector or batch size.)build()
Callback from the schema negotiator to build the schema from information from both the table and scan operator.context()
Returns the error context to use for this reader: either the parent or the reader-specific context set inSchemaNegotiator.setErrorContext(CustomErrorContext)
.Returns the reader input schema: the schema which describes the set of columns this reader should produce.boolean
Report whether the projection list is empty, as occurs in two cases: SELECT COUNT(*) ... -- empty project. SELECT a, b FROM table(c d) -- disjoint project.boolean
newReader
(ReaderFactory<?> readerFactory) protected void
The context to use as a parent when creating a custom context.projectionFor
(String colName) Returns the provided schema, if defined.void
schemaIsComplete
(boolean isComplete) void
setErrorContext
(CustomErrorContext errorContext) Specify an advanced error context which allows the reader to fill in custom context values.void
tableSchema
(TupleMetadata schema) void
tableSchema
(TupleMetadata schema, boolean isComplete) Specify the table schema if this is an early-schema reader.userName()
Name of the user running the query.
-
Field Details
-
readerLifecycle
-
readerSchema
-
isSchemaComplete
protected boolean isSchemaComplete -
batchSize
protected int batchSize -
baseErrorContext
-
readerErrorContext
-
-
Constructor Details
-
SchemaNegotiatorImpl
-
-
Method Details
-
isProjectionEmpty
public boolean isProjectionEmpty()Description copied from interface:SchemaNegotiator
Report whether the projection list is empty, as occurs in two cases:- SELECT COUNT(*) ... -- empty project.
- SELECT a, b FROM table(c d) -- disjoint project.
-