This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/main by this push:
     new 22b42b0e77 GH-39558: [Java] Add SQL_ALL_TABLES_ARE_SELECTABLE, 
SQL_NULL_ORDERING and SQL_MAX_COLUMNS_IN_TABLE support to SqlInfoBuilder 
(#39561)
22b42b0e77 is described below

commit 22b42b0e7718c91cc80390090f64fda312ff93a0
Author: Alexander Blazhkov <[email protected]>
AuthorDate: Fri Jan 12 22:56:04 2024 +0300

    GH-39558: [Java] Add SQL_ALL_TABLES_ARE_SELECTABLE, SQL_NULL_ORDERING and 
SQL_MAX_COLUMNS_IN_TABLE support to SqlInfoBuilder (#39561)
    
    This PR adds ability to specify `SQL_ALL_TABLES_ARE_SELECTABLE` and 
`SQL_NULL_ORDERING` metadata in `org.apache.arrow.flight.sql.SqlInfoBuilder`.
    
    ### Rationale for this change
    
    Without this change it is impossible to specify whether all tables are 
selectable, supported null ordering and maximum number of columns in table 
using `SqlInfoBuilder`.
    
    ### What changes are included in this PR?
    
    In this PR two methods are added to `SqlInfoBuilder`:
    - `withSqlAllTablesAreSelectable` accepting boolean parameter that 
specifies whether all tables are selectable
    - `withSqlNullOrdering` accepting 
`org.apache.arrow.flight.sql.impl.FlightSql.SqlNullOrdering` value that 
specifies supported null ordering
    - `withSqlMaxColumnsInTable` accepting long parameter that specifies 
maximum number of columns in table
    
    ### Are these changes tested?
    
    To ensure correctness 
`org.apache.arrow.flight.TestFlightSql#testGetSqlInfoResultsWithManyArgs` test 
is added).
    
    ### Are there any user-facing changes?
    
    This PR does not contain any breaking changes of user API.
    
    * Closes: #39558
    
    Authored-by: Alexander Blazhkov <[email protected]>
    Signed-off-by: David Li <[email protected]>
---
 .../apache/arrow/flight/sql/SqlInfoBuilder.java    | 31 ++++++++++++++
 .../org/apache/arrow/flight/TestFlightSql.java     | 48 +++++++++++-----------
 .../arrow/flight/sql/example/FlightSqlExample.java |  5 ++-
 3 files changed, 60 insertions(+), 24 deletions(-)

diff --git 
a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/SqlInfoBuilder.java
 
b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/SqlInfoBuilder.java
index 18793f9b90..251a709f63 100644
--- 
a/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/SqlInfoBuilder.java
+++ 
b/java/flight/flight-sql/src/main/java/org/apache/arrow/flight/sql/SqlInfoBuilder.java
@@ -32,6 +32,7 @@ import java.util.function.Consumer;
 import java.util.function.ObjIntConsumer;
 
 import org.apache.arrow.flight.sql.impl.FlightSql.SqlInfo;
+import org.apache.arrow.flight.sql.impl.FlightSql.SqlNullOrdering;
 import org.apache.arrow.flight.sql.impl.FlightSql.SqlOuterJoinsSupportLevel;
 import org.apache.arrow.flight.sql.impl.FlightSql.SqlSupportedCaseSensitivity;
 import org.apache.arrow.flight.sql.impl.FlightSql.SqlSupportedElementActions;
@@ -502,6 +503,26 @@ public class SqlInfoBuilder {
     return withBitIntProvider(SqlInfo.SQL_QUOTED_IDENTIFIER_CASE_VALUE, 
value.getNumber());
   }
 
+  /**
+   * Sets a value for {@link SqlInfo#SQL_ALL_TABLES_ARE_SELECTABLE} in the 
builder.
+   *
+   * @param value the value for {@link SqlInfo#SQL_ALL_TABLES_ARE_SELECTABLE} 
to be set.
+   * @return the SqlInfoBuilder itself.
+   */
+  public SqlInfoBuilder withSqlAllTablesAreSelectable(final boolean value) {
+    return withBooleanProvider(SqlInfo.SQL_ALL_TABLES_ARE_SELECTABLE_VALUE, 
value);
+  }
+
+  /**
+   * Sets a value for {@link SqlInfo#SQL_NULL_ORDERING} in the builder.
+   *
+   * @param value the value for {@link SqlInfo#SQL_NULL_ORDERING} to be set.
+   * @return the SqlInfoBuilder itself.
+   */
+  public SqlInfoBuilder withSqlNullOrdering(final SqlNullOrdering value) {
+    return withBitIntProvider(SqlInfo.SQL_NULL_ORDERING_VALUE, 
value.getNumber());
+  }
+
   /**
    * Sets a value SqlInf @link SqlInfo#SQL_MAX_BINARY_LITERAL_LENGTH} in the 
builder.
    *
@@ -572,6 +593,16 @@ public class SqlInfoBuilder {
     return withBitIntProvider(SqlInfo.SQL_MAX_COLUMNS_IN_SELECT_VALUE, value);
   }
 
+  /**
+   * Sets a value for {@link SqlInfo#SQL_MAX_COLUMNS_IN_TABLE} in the builder.
+   *
+   * @param value the value for {@link SqlInfo#SQL_MAX_COLUMNS_IN_TABLE} to be 
set.
+   * @return the SqlInfoBuilder itself.
+   */
+  public SqlInfoBuilder withSqlMaxColumnsInTable(final long value) {
+    return withBitIntProvider(SqlInfo.SQL_MAX_COLUMNS_IN_TABLE_VALUE, value);
+  }
+
   /**
    * Sets a value for {@link SqlInfo#SQL_MAX_CONNECTIONS} in the builder.
    *
diff --git 
a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/TestFlightSql.java
 
b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/TestFlightSql.java
index 7635b80ecd..948364a920 100644
--- 
a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/TestFlightSql.java
+++ 
b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/TestFlightSql.java
@@ -106,6 +106,12 @@ public class TestFlightSql {
         
.put(Integer.toString(FlightSql.SqlInfo.FLIGHT_SQL_SERVER_ARROW_VERSION_VALUE), 
"10.14.2.0 - (1828579)");
     GET_SQL_INFO_EXPECTED_RESULTS_MAP
         
.put(Integer.toString(FlightSql.SqlInfo.FLIGHT_SQL_SERVER_READ_ONLY_VALUE), 
"false");
+    GET_SQL_INFO_EXPECTED_RESULTS_MAP
+        
.put(Integer.toString(FlightSql.SqlInfo.SQL_ALL_TABLES_ARE_SELECTABLE_VALUE), 
"true");
+    GET_SQL_INFO_EXPECTED_RESULTS_MAP
+        .put(
+            Integer.toString(FlightSql.SqlInfo.SQL_NULL_ORDERING_VALUE),
+            
Integer.toString(FlightSql.SqlNullOrdering.SQL_NULLS_SORTED_AT_END_VALUE));
     GET_SQL_INFO_EXPECTED_RESULTS_MAP
         .put(Integer.toString(FlightSql.SqlInfo.SQL_DDL_CATALOG_VALUE), 
"false");
     GET_SQL_INFO_EXPECTED_RESULTS_MAP
@@ -122,6 +128,8 @@ public class TestFlightSql {
         .put(
             
Integer.toString(FlightSql.SqlInfo.SQL_QUOTED_IDENTIFIER_CASE_VALUE),
             
Integer.toString(SqlSupportedCaseSensitivity.SQL_CASE_SENSITIVITY_CASE_INSENSITIVE_VALUE));
+    GET_SQL_INFO_EXPECTED_RESULTS_MAP
+        
.put(Integer.toString(FlightSql.SqlInfo.SQL_MAX_COLUMNS_IN_TABLE_VALUE), "42");
   }
 
   @AfterAll
@@ -135,12 +143,15 @@ public class TestFlightSql {
         FlightSql.SqlInfo.FLIGHT_SQL_SERVER_VERSION,
         FlightSql.SqlInfo.FLIGHT_SQL_SERVER_ARROW_VERSION,
         FlightSql.SqlInfo.FLIGHT_SQL_SERVER_READ_ONLY,
+        FlightSql.SqlInfo.SQL_ALL_TABLES_ARE_SELECTABLE,
+        FlightSql.SqlInfo.SQL_NULL_ORDERING,
         FlightSql.SqlInfo.SQL_DDL_CATALOG,
         FlightSql.SqlInfo.SQL_DDL_SCHEMA,
         FlightSql.SqlInfo.SQL_DDL_TABLE,
         FlightSql.SqlInfo.SQL_IDENTIFIER_CASE,
         FlightSql.SqlInfo.SQL_IDENTIFIER_QUOTE_CHAR,
-        FlightSql.SqlInfo.SQL_QUOTED_IDENTIFIER_CASE);
+        FlightSql.SqlInfo.SQL_QUOTED_IDENTIFIER_CASE,
+        FlightSql.SqlInfo.SQL_MAX_COLUMNS_IN_TABLE);
   }
 
   private static List<List<String>> getNonConformingResultsForGetSqlInfo(
@@ -152,6 +163,7 @@ public class TestFlightSql {
         final List<String> result = results.get(index);
         final String providedName = result.get(0);
         final String expectedName = Integer.toString(args[index].getNumber());
+        System.err.println(expectedName);
         if 
(!(GET_SQL_INFO_EXPECTED_RESULTS_MAP.get(providedName).equals(result.get(1)) &&
             providedName.equals(expectedName))) {
           nonConformingResults.add(result);
@@ -603,31 +615,21 @@ public class TestFlightSql {
   }
 
   @Test
-  public void testGetSqlInfoResultsWithTwoArgs() throws Exception {
-    final FlightSql.SqlInfo[] args = {
-        FlightSql.SqlInfo.FLIGHT_SQL_SERVER_NAME,
-        FlightSql.SqlInfo.FLIGHT_SQL_SERVER_VERSION};
-    final FlightInfo info = sqlClient.getSqlInfo(args);
-    try (final FlightStream stream = 
sqlClient.getStream(info.getEndpoints().get(0).getTicket())) {
-      Assertions.assertAll(
-          () -> MatcherAssert.assertThat(
-              stream.getSchema(),
-              is(FlightSqlProducer.Schemas.GET_SQL_INFO_SCHEMA)
-          ),
-          () -> MatcherAssert.assertThat(
-              getNonConformingResultsForGetSqlInfo(getResults(stream), args),
-              is(emptyList())
-          )
-      );
-    }
-  }
-
-  @Test
-  public void testGetSqlInfoResultsWithThreeArgs() throws Exception {
+  public void testGetSqlInfoResultsWithManyArgs() throws Exception {
     final FlightSql.SqlInfo[] args = {
         FlightSql.SqlInfo.FLIGHT_SQL_SERVER_NAME,
         FlightSql.SqlInfo.FLIGHT_SQL_SERVER_VERSION,
-        FlightSql.SqlInfo.SQL_IDENTIFIER_QUOTE_CHAR};
+        FlightSql.SqlInfo.FLIGHT_SQL_SERVER_ARROW_VERSION,
+        FlightSql.SqlInfo.FLIGHT_SQL_SERVER_READ_ONLY,
+        FlightSql.SqlInfo.SQL_ALL_TABLES_ARE_SELECTABLE,
+        FlightSql.SqlInfo.SQL_NULL_ORDERING,
+        FlightSql.SqlInfo.SQL_DDL_CATALOG,
+        FlightSql.SqlInfo.SQL_DDL_SCHEMA,
+        FlightSql.SqlInfo.SQL_DDL_TABLE,
+        FlightSql.SqlInfo.SQL_IDENTIFIER_CASE,
+        FlightSql.SqlInfo.SQL_IDENTIFIER_QUOTE_CHAR,
+        FlightSql.SqlInfo.SQL_QUOTED_IDENTIFIER_CASE,
+        FlightSql.SqlInfo.SQL_MAX_COLUMNS_IN_TABLE};
     final FlightInfo info = sqlClient.getSqlInfo(args);
     try (final FlightStream stream = 
sqlClient.getStream(info.getEndpoints().get(0).getTicket())) {
       Assertions.assertAll(
diff --git 
a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java
 
b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java
index 3cc8f4a1c1..11f38ded5f 100644
--- 
a/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java
+++ 
b/java/flight/flight-sql/src/test/java/org/apache/arrow/flight/sql/example/FlightSqlExample.java
@@ -237,7 +237,10 @@ public class FlightSqlExample implements 
FlightSqlProducer, AutoCloseable {
                   SqlSupportedCaseSensitivity.SQL_CASE_SENSITIVITY_UPPERCASE :
                   metaData.storesLowerCaseQuotedIdentifiers() ?
                       
SqlSupportedCaseSensitivity.SQL_CASE_SENSITIVITY_LOWERCASE :
-                      
SqlSupportedCaseSensitivity.SQL_CASE_SENSITIVITY_UNKNOWN);
+                      SqlSupportedCaseSensitivity.SQL_CASE_SENSITIVITY_UNKNOWN)
+          .withSqlAllTablesAreSelectable(true)
+          .withSqlNullOrdering(SqlNullOrdering.SQL_NULLS_SORTED_AT_END)
+          .withSqlMaxColumnsInTable(42);
     } catch (SQLException e) {
       throw new RuntimeException(e);
     }

Reply via email to