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

org.apache.arrow.flight.sql.FlightSqlColumnMetadata 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.arrow.flight.sql;

import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

/**
 * Metadata for a column in a Flight SQL query.
 *
 * This can be used with FlightSqlClient to access column's metadata contained in schemas returned
 * by GetTables and query execution as follows:
 * 
 *   FlightSqlColumnMetadata metadata = new FlightSqlColumnMetadata(field.getMetadata());
 *   Integer precision = metadata.getPrecision();
 * 
* * FlightSqlProducer can use this to set metadata on a column in a schema as follows: *
 *   FlightSqlColumnMetadata metadata = new FlightSqlColumnMetadata.Builder()
 *         .precision(10)
 *         .scale(5)
 *         .build();
 *   Field field = new Field("column", new FieldType(..., metadata.getMetadataMap()), null);
 * 
*/ public class FlightSqlColumnMetadata { private static final String CATALOG_NAME = "ARROW:FLIGHT:SQL:CATALOG_NAME"; private static final String SCHEMA_NAME = "ARROW:FLIGHT:SQL:SCHEMA_NAME"; private static final String TABLE_NAME = "ARROW:FLIGHT:SQL:TABLE_NAME"; private static final String TYPE_NAME = "ARROW:FLIGHT:SQL:TYPE_NAME"; private static final String PRECISION = "ARROW:FLIGHT:SQL:PRECISION"; private static final String SCALE = "ARROW:FLIGHT:SQL:SCALE"; private static final String IS_AUTO_INCREMENT = "ARROW:FLIGHT:SQL:IS_AUTO_INCREMENT"; private static final String IS_CASE_SENSITIVE = "ARROW:FLIGHT:SQL:IS_CASE_SENSITIVE"; private static final String IS_READ_ONLY = "ARROW:FLIGHT:SQL:IS_READ_ONLY"; private static final String IS_SEARCHABLE = "ARROW:FLIGHT:SQL:IS_SEARCHABLE"; private static final String BOOLEAN_TRUE_STR = "1"; private static final String BOOLEAN_FALSE_STR = "0"; private final Map metadataMap; /** * Creates a new instance of FlightSqlColumnMetadata. */ public FlightSqlColumnMetadata(Map metadataMap) { this.metadataMap = new HashMap<>(metadataMap); } /** * Returns the metadata map. * @return The metadata map. */ public Map getMetadataMap() { return Collections.unmodifiableMap(metadataMap); } /** * Returns the catalog name. * @return The catalog name. */ public String getCatalogName() { return metadataMap.get(CATALOG_NAME); } /** * Returns the schema name. * @return The schema name. */ public String getSchemaName() { return metadataMap.get(SCHEMA_NAME); } /** * Returns the table name. * @return The table name. */ public String getTableName() { return metadataMap.get(TABLE_NAME); } /** * Returns the type name. * @return The type name. */ public String getTypeName() { return metadataMap.get(TYPE_NAME); } /** * Returns the precision / column size. * @return The precision / column size. */ public Integer getPrecision() { String value = metadataMap.get(PRECISION); if (value == null) { return null; } return Integer.valueOf(value); } /** * Returns the scale / decimal digits. * @return The scale / decimal digits. */ public Integer getScale() { String value = metadataMap.get(SCALE); if (value == null) { return null; } return Integer.valueOf(value); } /** * Returns if the column is auto incremented. * @return True if the column is auto incremented, false otherwise. */ public Boolean isAutoIncrement() { String value = metadataMap.get(IS_AUTO_INCREMENT); if (value == null) { return null; } return stringToBoolean(value); } /** * Returns if the column is case-sensitive. * @return True if the column is case-sensitive, false otherwise. */ public Boolean isCaseSensitive() { String value = metadataMap.get(IS_CASE_SENSITIVE); if (value == null) { return null; } return stringToBoolean(value); } /** * Returns if the column is read only. * @return True if the column is read only, false otherwise. */ public Boolean isReadOnly() { String value = metadataMap.get(IS_READ_ONLY); if (value == null) { return null; } return stringToBoolean(value); } /** * Returns if the column is searchable. * @return True if the column is searchable, false otherwise. */ public Boolean isSearchable() { String value = metadataMap.get(IS_SEARCHABLE); if (value == null) { return null; } return stringToBoolean(value); } /** * Builder of FlightSqlColumnMetadata, used on FlightSqlProducer implementations. */ public static class Builder { private final Map metadataMap; /** * Creates a new instance of FlightSqlColumnMetadata.Builder. */ public Builder() { this.metadataMap = new HashMap<>(); } /** * Sets the catalog name. * @param catalogName the catalog name. * @return This builder. */ public Builder catalogName(String catalogName) { metadataMap.put(CATALOG_NAME, catalogName); return this; } /** * Sets the schema name. * @param schemaName The schema name. * @return This builder. */ public Builder schemaName(String schemaName) { metadataMap.put(SCHEMA_NAME, schemaName); return this; } /** * Sets the table name. * @param tableName The table name. * @return This builder. */ public Builder tableName(String tableName) { metadataMap.put(TABLE_NAME, tableName); return this; } /** * Sets the type name. * @param typeName The type name. * @return This builder. */ public Builder typeName(String typeName) { metadataMap.put(TYPE_NAME, typeName); return this; } /** * Sets the precision / column size. * @param precision The precision / column size. * @return This builder. */ public Builder precision(int precision) { metadataMap.put(PRECISION, Integer.toString(precision)); return this; } /** * Sets the scale / decimal digits. * @param scale The scale / decimal digits. * @return This builder. */ public Builder scale(int scale) { metadataMap.put(SCALE, Integer.toString(scale)); return this; } /** * Sets if the column is auto incremented. * @param isAutoIncrement True if the column is auto incremented. * @return This builder. */ public Builder isAutoIncrement(boolean isAutoIncrement) { metadataMap.put(IS_AUTO_INCREMENT, booleanToString(isAutoIncrement)); return this; } /** * Sets if the column is case-sensitive. * @param isCaseSensitive If the column is case-sensitive. * @return This builder. */ public Builder isCaseSensitive(boolean isCaseSensitive) { metadataMap.put(IS_CASE_SENSITIVE, booleanToString(isCaseSensitive)); return this; } /** * Sets if the column is read only. * @param isReadOnly If the column is read only. * @return This builder. */ public Builder isReadOnly(boolean isReadOnly) { metadataMap.put(IS_READ_ONLY, booleanToString(isReadOnly)); return this; } /** * Sets if the column is searchable. * @param isSearchable If the column is searchable. * @return This builder. */ public Builder isSearchable(boolean isSearchable) { metadataMap.put(IS_SEARCHABLE, booleanToString(isSearchable)); return this; } /** * Builds a new instance of FlightSqlColumnMetadata. * @return A new instance of FlightSqlColumnMetadata. */ public FlightSqlColumnMetadata build() { return new FlightSqlColumnMetadata(metadataMap); } } private static String booleanToString(boolean boolValue) { return boolValue ? BOOLEAN_TRUE_STR : BOOLEAN_FALSE_STR; } private static boolean stringToBoolean(String value) { return value.equals(BOOLEAN_TRUE_STR); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy