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

com.google.cloud.bigquery.FieldValueList Maven / Gradle / Ivy

/*
 * Copyright 2017 Google LLC
 *
 * 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.
 */

package com.google.cloud.bigquery;

import com.google.api.core.BetaApi;
import com.google.common.collect.ImmutableList;
import java.io.Serializable;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * Google BigQuery Table Field Values class, which represents a row in returned query result (table
 * row). Tables rows can be retrieved as a result of a query or when listing table data.
 *
 * 

Depending on how a corresponding query was executed, each row (an instance of {@code * FieldValueList}) may or may not contain related schema. If schema is not provided, the individual * cells of the row will still be accessible by index but not by name. */ public class FieldValueList extends AbstractList implements Serializable { private static final long serialVersionUID = 2103346761764976902L; private final FieldList schema; private final List row; private FieldValueList(List row, FieldList schema) { if (schema != null && row.size() != schema.size()) { throw new IllegalArgumentException("Row size and fields schema sizes should match"); } this.row = ImmutableList.copyOf(row); this.schema = schema; } /** * Gets field value by index. * * @param index field value index */ @Override public FieldValue get(int index) { return row.get(index); } /** * Gets field value by index. * * @param name field name (defined in schema) * @throws IllegalArgumentException if schema is not provided or if {@code name} was not found in * the schema */ public FieldValue get(String name) { if (schema == null) { throw new UnsupportedOperationException( "Retrieving field value by name is not supported when there is no fields schema provided"); } return get(schema.getIndex(name)); } /** Returns {@code true} if schema is provided, {@code false} otherwise. */ public boolean hasSchema() { return schema != null; } /** Returns the total number of field values in the row. */ @Override public int size() { return row.size(); } /** * Creates an instance of {@code FieldValueList}, useful for testing. * *

This method is unstable. See this discussion for more * context. */ @BetaApi public static FieldValueList of(List row, FieldList schema) { return new FieldValueList(row, schema); } /** * Creates an instance of {@code FieldValueList}, useful for testing. * *

This method is unstable. See this discussion for more * context. */ @BetaApi public static FieldValueList of(List row, Field... schema) { return of(row, schema.length > 0 ? FieldList.of(schema) : null); } FieldValueList withSchema(FieldList schema) { return new FieldValueList(this.row, schema); } static FieldValueList fromPb(List rowPb, FieldList schema) { List row = new ArrayList<>(rowPb.size()); if (schema != null) { if (schema.size() != rowPb.size()) { throw new IllegalArgumentException("Row size and fields schema sizes should match"); } Iterator schemaIter = schema.iterator(); Iterator rowPbIter = rowPb.iterator(); while (rowPbIter.hasNext() && schemaIter.hasNext()) { row.add(FieldValue.fromPb(rowPbIter.next(), schemaIter.next())); } } else { for (Object cellPb : rowPb) { row.add(FieldValue.fromPb(cellPb, null)); } } return FieldValueList.of(row, schema); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy