jooq/jOOQ/src/main/java/org/jooq/LoaderJSONStep.java
Knut Wannheden 11a5422efc [jOOQ/jOOQ#8755] Add Loader[CSV|JSON|Rows]Step#fieldsFromSource()
This new `fieldsFromSource()` method can be used when all or a subset of
the input field names exactly match the target table column names. The
load operation can then be executed without having to specify the fields
and will create rows with all matching fields (other fields are
ignored).

Since the fields are mapped by name this requires the input to specify
the field names. For CSV this means that there must be a header row,
otherwise using `fieldsFromSource()` will result in a runtime exception.
2020-01-10 10:12:25 +01:00

103 lines
3.2 KiB
Java

/*
* Licensed 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.
*
* Other licenses:
* -----------------------------------------------------------------------------
* Commercial licenses for this work are available. These replace the above
* ASL 2.0 and offer limited warranties, support, maintenance, and commercial
* database integrations.
*
* For more information, please visit: http://www.jooq.org/licenses
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*/
package org.jooq;
import java.util.Collection;
import org.jooq.LoaderFieldMapper.LoaderFieldContext;
import org.jooq.exception.LoaderConfigurationException;
/**
* The <code>Loader</code> API is used for configuring data loads.
* <p>
* The step in constructing the {@link org.jooq.Loader} object where you can set
* the mandatory JSON loader options.
*
* @author Lukas Eder
* @author Johannes Bühler
*/
public interface LoaderJSONStep<R extends Record> {
/**
* Specify the fields to be loaded into the table in the correct order.
* <p>
* The JSON column at index <code>i</code> is inserted into the table field
* at index <code>i</code>. If <code>fields[i] == null</code> or
* <code>fields.length &lt;= i</code>, then the JSON
* column is skipped.
*/
@Support
LoaderJSONOptionsStep<R> fields(Field<?>... fields);
/**
* Specify the fields to be loaded into the table in the correct order.
* <p>
* The JSON column at index <code>i</code> is inserted into the table field
* at index <code>i</code>. If
* <code>new ArrayList(fields).get(i) == null</code> or
* <code>new ArrayList(fields).size() &lt;= i</code>, then the JSON column
* is skipped.
*/
@Support
LoaderJSONOptionsStep<R> fields(Collection<? extends Field<?>> fields);
/**
* Specify a function to apply on each input field to receive the target
* table's field.
* <p>
* The input field obtained from {@link LoaderFieldContext#field()} wraps
* the JSON column name if any, or an unspecified field enumeration is used.
* The {@link LoaderFieldContext#index()} property corresponds to the JSON
* column index in enumeration order.
*/
@Support
LoaderJSONOptionsStep<R> fields(LoaderFieldMapper mapper);
/**
* Indicate that all input fields which have a corresponding field in the
* target table (with the same name) should be loaded.
* <p>
* When {@link LoaderLoadStep#execute() executing the loader} input fields
* for which there is no match in the target table will be logged and if no
* field names can be derived for the input data a
* {@link LoaderConfigurationException} will be reported.
*/
@Support
LoaderJSONOptionsStep<R> fieldsFromSource();
}