Skip to content

Commit

Permalink
Merge pull request apache#30 from rafael-telles/flight-jdbc-driver-cr…
Browse files Browse the repository at this point in the history
…eate-metadata-type-name

[Java] [JDBC] Flight jdbc driver create metadata type name.
  • Loading branch information
rafael-telles authored May 10, 2022
2 parents e383cef + 98d4e73 commit c9b722d
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 8 deletions.
11 changes: 11 additions & 0 deletions cpp/src/arrow/flight/sql/column_metadata.cc
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ bool StringToBoolean(const std::string& string_value) {
const char* ColumnMetadata::kCatalogName = "ARROW:FLIGHT:SQL:CATALOG_NAME";
const char* ColumnMetadata::kSchemaName = "ARROW:FLIGHT:SQL:SCHEMA_NAME";
const char* ColumnMetadata::kTableName = "ARROW:FLIGHT:SQL:TABLE_NAME";
const char* ColumnMetadata::kTypeName = "ARROW:FLIGHT:SQL:TYPE_NAME";
const char* ColumnMetadata::kPrecision = "ARROW:FLIGHT:SQL:PRECISION";
const char* ColumnMetadata::kScale = "ARROW:FLIGHT:SQL:SCALE";
const char* ColumnMetadata::kIsAutoIncrement = "ARROW:FLIGHT:SQL:IS_AUTO_INCREMENT";
Expand All @@ -65,6 +66,10 @@ arrow::Result<std::string> ColumnMetadata::GetTableName() const {
return metadata_map_->Get(kTableName);
}

arrow::Result<std::string> ColumnMetadata::GetTypeName() const {
return metadata_map_->Get(kTypeName);
}

arrow::Result<int32_t> ColumnMetadata::GetPrecision() const {
std::string precision_string;
ARROW_ASSIGN_OR_RAISE(precision_string, metadata_map_->Get(kPrecision));
Expand Down Expand Up @@ -130,6 +135,12 @@ ColumnMetadata::ColumnMetadataBuilder& ColumnMetadata::ColumnMetadataBuilder::Ta
return *this;
}

ColumnMetadata::ColumnMetadataBuilder& ColumnMetadata::ColumnMetadataBuilder::TypeName(
std::string& type_name) {
metadata_map_->Append(ColumnMetadata::kTypeName, type_name);
return *this;
}

ColumnMetadata::ColumnMetadataBuilder& ColumnMetadata::ColumnMetadataBuilder::Precision(
int32_t precision) {
metadata_map_->Append(ColumnMetadata::kPrecision, std::to_string(precision));
Expand Down
24 changes: 18 additions & 6 deletions cpp/src/arrow/flight/sql/column_metadata.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@ class ColumnMetadata {
static const char* kTableName;
/// \brief Constant variable to hold the value of the key that
/// will be used in the KeyValueMetadata class.
static const char* kTypeName;
/// \brief Constant variable to hold the value of the key that
/// will be used in the KeyValueMetadata class.
static const char* kPrecision;
/// \brief Constant variable to hold the value of the key that
/// will be used in the KeyValueMetadata class.
Expand Down Expand Up @@ -78,6 +81,10 @@ class ColumnMetadata {
/// \return The table name.
arrow::Result<std::string> GetTableName() const;

/// \brief Return the type name set in the KeyValueMetadata.
/// \return The type name.
arrow::Result<std::string> GetTypeName() const;

/// \brief Return the precision set in the KeyValueMetadata.
/// \return The precision.
arrow::Result<int32_t> GetPrecision() const;
Expand Down Expand Up @@ -117,15 +124,20 @@ class ColumnMetadata {
ColumnMetadataBuilder& CatalogName(std::string& catalog_name);

/// \brief Set the schema_name in the KeyValueMetadata object.
/// \param[in] schema_name The schema_name.
/// \param[in] schema_name The schema_name.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& SchemaName(std::string& schema_name);

/// \brief Set the table name in the KeyValueMetadata object.
/// \param[in] table_name The table name.
/// \param[in] table_name The table name.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& TableName(std::string& table_name);

/// \brief Set the type name in the KeyValueMetadata object.
/// \param[in] type_name The type name.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& TypeName(std::string& type_name);

/// \brief Set the precision in the KeyValueMetadata object.
/// \param[in] precision The precision.
/// \return A ColumnMetadataBuilder.
Expand All @@ -138,22 +150,22 @@ class ColumnMetadata {

/// \brief Set the IsAutoIncrement in the KeyValueMetadata object.
/// \param[in] is_auto_increment The IsAutoIncrement.
/// \return A ColumnMetadataBuilder.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& IsAutoIncrement(bool is_auto_increment);

/// \brief Set the IsCaseSensitive in the KeyValueMetadata object.
/// \param[in] is_case_sensitive The IsCaseSensitive.
/// \return A ColumnMetadataBuilder.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& IsCaseSensitive(bool is_case_sensitive);

/// \brief Set the IsReadOnly in the KeyValueMetadata object.
/// \param[in] is_read_only The IsReadOnly.
/// \return A ColumnMetadataBuilder.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& IsReadOnly(bool is_read_only);

/// \brief Set the IsSearchable in the KeyValueMetadata object.
/// \param[in] is_searchable The IsSearchable.
/// \return A ColumnMetadataBuilder.
/// \return A ColumnMetadataBuilder.
ColumnMetadataBuilder& IsSearchable(bool is_searchable);

ColumnMetadata Build() const;
Expand Down
3 changes: 3 additions & 0 deletions format/FlightSql.proto
Original file line number Diff line number Diff line change
Expand Up @@ -1118,6 +1118,7 @@ message CommandGetDbSchemas {
* - ARROW:FLIGHT:SQL:CATALOG_NAME - Table's catalog name
* - ARROW:FLIGHT:SQL:DB_SCHEMA_NAME - Database schema name
* - ARROW:FLIGHT:SQL:TABLE_NAME - Table name
* - ARROW:FLIGHT:SQL:TYPE_NAME - Type name
* - ARROW:FLIGHT:SQL:PRECISION - Column precision/size
* - ARROW:FLIGHT:SQL:SCALE - Column scale/decimal digits if applicable
* - ARROW:FLIGHT:SQL:IS_AUTO_INCREMENT - "1" indicates if the column is auto incremented, "0" otherwise.
Expand Down Expand Up @@ -1457,6 +1458,7 @@ message ActionClosePreparedStatementRequest {
* - ARROW:FLIGHT:SQL:CATALOG_NAME - Table's catalog name
* - ARROW:FLIGHT:SQL:DB_SCHEMA_NAME - Database schema name
* - ARROW:FLIGHT:SQL:TABLE_NAME - Table name
* - ARROW:FLIGHT:SQL:TYPE_NAME - Type name
* - ARROW:FLIGHT:SQL:PRECISION - Column precision/size
* - ARROW:FLIGHT:SQL:SCALE - Column scale/decimal digits if applicable
* - ARROW:FLIGHT:SQL:IS_AUTO_INCREMENT - "1" indicates if the column is auto incremented, "0" otherwise.
Expand Down Expand Up @@ -1491,6 +1493,7 @@ message TicketStatementQuery {
* - ARROW:FLIGHT:SQL:CATALOG_NAME - Table's catalog name
* - ARROW:FLIGHT:SQL:DB_SCHEMA_NAME - Database schema name
* - ARROW:FLIGHT:SQL:TABLE_NAME - Table name
* - ARROW:FLIGHT:SQL:TYPE_NAME - Type name
* - ARROW:FLIGHT:SQL:PRECISION - Column precision/size
* - ARROW:FLIGHT:SQL:SCALE - Column scale/decimal digits if applicable
* - ARROW:FLIGHT:SQL:IS_AUTO_INCREMENT - "1" indicates if the column is auto incremented, "0" otherwise.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1037,8 +1037,10 @@ private int setGetColumnsVectorSchemaRootFromFields(final VectorSchemaRoot curre
}

dataTypeVector.setSafe(insertIndex, SqlTypes.getSqlTypeIdFromArrowType(fieldType));
typeNameVector.setSafe(insertIndex,
SqlTypes.getSqlTypeNameFromArrowType(fieldType).getBytes(CHARSET));
byte[] typeName = columnMetadata.getTypeName() != null ?
columnMetadata.getTypeName().getBytes(CHARSET) :
SqlTypes.getSqlTypeNameFromArrowType(fieldType).getBytes(CHARSET);
typeNameVector.setSafe(insertIndex, typeName);

// We're not setting COLUMN_SIZE for ROWID SQL Types, as there's no such Arrow type.
// We're not setting COLUMN_SIZE nor DECIMAL_DIGITS for Float/Double as their precision and scale are variable.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@ private static void addLegacyMetadataSqlCmdSupport(final MockFlightSqlProducer p
.catalogName("CATALOG_NAME_1")
.schemaName("SCHEMA_NAME_1")
.tableName("TABLE_NAME_1")
.typeName("TYPE_NAME_1")
.precision(10)
.scale(0)
.isAutoIncrement(true)
Expand All @@ -187,6 +188,7 @@ private static void addLegacyMetadataSqlCmdSupport(final MockFlightSqlProducer p
.catalogName("CATALOG_NAME_2")
.schemaName("SCHEMA_NAME_2")
.tableName("TABLE_NAME_2")
.typeName("TYPE_NAME_2")
.precision(65535)
.scale(0)
.isAutoIncrement(false)
Expand All @@ -202,6 +204,7 @@ private static void addLegacyMetadataSqlCmdSupport(final MockFlightSqlProducer p
.catalogName("CATALOG_NAME_3")
.schemaName("SCHEMA_NAME_3")
.tableName("TABLE_NAME_3")
.typeName("TYPE_NAME_3")
.precision(15)
.scale(20)
.isAutoIncrement(false)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ 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";
Expand Down Expand Up @@ -96,6 +97,14 @@ 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.
Expand Down Expand Up @@ -217,6 +226,16 @@ public Builder tableName(String 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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("ID", new FieldType(false, MinorType.INT.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("INTEGER")
.schemaName("APP")
.tableName("FOREIGNTABLE")
.precision(10)
Expand All @@ -263,6 +264,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("FOREIGNNAME", new FieldType(true, MinorType.VARCHAR.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("VARCHAR")
.schemaName("APP")
.tableName("FOREIGNTABLE")
.precision(100)
Expand All @@ -272,6 +274,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("VALUE", new FieldType(true, MinorType.INT.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("INTEGER")
.schemaName("APP")
.tableName("FOREIGNTABLE")
.precision(10)
Expand All @@ -287,6 +290,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("ID", new FieldType(false, MinorType.INT.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("INTEGER")
.schemaName("APP")
.tableName("INTTABLE")
.precision(10)
Expand All @@ -296,6 +300,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("KEYNAME", new FieldType(true, MinorType.VARCHAR.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("VARCHAR")
.schemaName("APP")
.tableName("INTTABLE")
.precision(100)
Expand All @@ -305,6 +310,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("VALUE", new FieldType(true, MinorType.INT.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("INTEGER")
.schemaName("APP")
.tableName("INTTABLE")
.precision(10)
Expand All @@ -314,6 +320,7 @@ public void testGetTablesResultFilteredWithSchema() throws Exception {
new Field("FOREIGNID", new FieldType(true, MinorType.INT.getType(), null,
new FlightSqlColumnMetadata.Builder()
.catalogName("")
.typeName("INTEGER")
.schemaName("APP")
.tableName("INTTABLE")
.precision(10)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,7 @@ private static VectorSchemaRoot getTablesRoot(final DatabaseMetaData databaseMet
final String catalogName = columnsData.getString("TABLE_CAT");
final String schemaName = columnsData.getString("TABLE_SCHEM");
final String tableName = columnsData.getString("TABLE_NAME");
final String typeName = columnsData.getString("TYPE_NAME");
final String fieldName = columnsData.getString("COLUMN_NAME");
final int dataType = columnsData.getInt("DATA_TYPE");
final boolean isNullable = columnsData.getInt("NULLABLE") != DatabaseMetaData.columnNoNulls;
Expand All @@ -611,6 +612,7 @@ private static VectorSchemaRoot getTablesRoot(final DatabaseMetaData databaseMet
.catalogName(catalogName)
.schemaName(schemaName)
.tableName(tableName)
.typeName(typeName)
.precision(precision)
.scale(scale)
.isAutoIncrement(isAutoIncrement)
Expand Down

0 comments on commit c9b722d

Please sign in to comment.