[ 
https://issues.apache.org/jira/browse/IGNITE-16411?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Evgeny Stanilovsky updated IGNITE-16411:
----------------------------------------
    Fix Version/s: 3.0.0-alpha5

> NPE in org.apache.ignite.internal.jdbc.JdbcDatabaseMetadata.getColumns
> ----------------------------------------------------------------------
>
>                 Key: IGNITE-16411
>                 URL: https://issues.apache.org/jira/browse/IGNITE-16411
>             Project: Ignite
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 3.0.0-alpha3
>            Reporter: Fedor Malchikov 
>            Assignee: Vladimir Ermakov
>            Priority: Blocker
>              Labels: ignite-3
>             Fix For: 3.0.0-alpha5
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> {code:java}
> [INFO ] 2022-01-26 18:39:46,803 [main]  com.oltpbenchmark.DBWorkload main - 
> Finished creating new YCSB database...
> Exception in thread "main" java.util.concurrent.CompletionException: class 
> org.apache.ignite.client.IgniteClientException: null
>     at 
> java.base/java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:412)
>     at 
> java.base/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2044)
>     at 
> org.apache.ignite.internal.jdbc.JdbcDatabaseMetadata.getColumns(JdbcDatabaseMetadata.java:975)
>     at com.oltpbenchmark.util.SQLUtil.getCatalogDirect(SQLUtil.java:458)
>     at com.oltpbenchmark.util.SQLUtil.getCatalog(SQLUtil.java:411)
>     at 
> com.oltpbenchmark.api.BenchmarkModule.refreshCatalog(BenchmarkModule.java:233)
>     at com.oltpbenchmark.DBWorkload.main(DBWorkload.java:416)
> Caused by: class org.apache.ignite.client.IgniteClientException: null
>     at 
> org.apache.ignite.internal.client.TcpClientChannel.convertException(TcpClientChannel.java:241)
>     at 
> org.apache.ignite.internal.client.TcpClientChannel.send(TcpClientChannel.java:197)
>     at 
> org.apache.ignite.internal.client.TcpClientChannel.serviceAsync(TcpClientChannel.java:143)
>     at 
> org.apache.ignite.internal.client.ReliableChannel.handleServiceAsync(ReliableChannel.java:188)
>     at 
> org.apache.ignite.internal.client.ReliableChannel.serviceAsync(ReliableChannel.java:144)
>     at 
> org.apache.ignite.internal.client.TcpIgniteClient.sendRequestAsync(TcpIgniteClient.java:145)
>     at 
> org.apache.ignite.internal.client.query.JdbcClientQueryEventHandler.columnsMetaAsync(JdbcClientQueryEventHandler.java:103)
>     at 
> org.apache.ignite.internal.jdbc.JdbcDatabaseMetadata.getColumns(JdbcDatabaseMetadata.java:974)
>     ... 4 more
> Caused by: java.lang.NullPointerException
>     at io.netty.buffer.ByteBufUtil.utf8MaxBytes(ByteBufUtil.java:948)
>     at 
> org.apache.ignite.internal.client.proto.ClientMessagePacker.packString(ClientMessagePacker.java:292)
>     at 
> org.apache.ignite.client.proto.query.event.JdbcMetaColumnsRequest.writeBinary(JdbcMetaColumnsRequest.java:89)
>     at 
> org.apache.ignite.internal.client.TcpIgniteClient.lambda$sendRequestAsync$1(TcpIgniteClient.java:145)
>     at 
> org.apache.ignite.internal.client.TcpClientChannel.send(TcpClientChannel.java:182)
>     ... 10 more {code}
> after create table:
> {code:sql}
> CREATE TABLE usertable (
> ycsb_key int PRIMARY KEY,
> field1 varchar(100),
> field2 varchar(100),
> field3 varchar(100),
> field4 varchar(100),
> field5 varchar(100),
> field6 varchar(100),
> field7 varchar(100),
> field8 varchar(100),
> field9 varchar(100),
> field10 varchar(100)
> );{code}
> Reproduced on:
> {code:java}
> private static AbstractCatalog getCatalogDirect(DatabaseType databaseType, 
> Connection connection) throws SQLException {
>     DatabaseMetaData md = connection.getMetaData();
>     String separator = md.getIdentifierQuoteString();
>     String catalog = connection.getCatalog();
>     String schema = connection.getSchema();
>     Map<String, Table> tables = new HashMap<>();
>     List<String> excludedColumns = new ArrayList<>();
>     try (ResultSet table_rs = md.getTables(catalog, schema, null, new 
> String[]{"TABLE"})) {
>         while (table_rs.next()) {
>             String table_type = table_rs.getString("TABLE_TYPE");
>             if (!table_type.equalsIgnoreCase("TABLE")) {
>                 continue;
>             }
>             String table_name = table_rs.getString("TABLE_NAME");
>             Table catalog_tbl = new Table(table_name, separator);
>             try (ResultSet col_rs = md.getColumns(catalog, schema, 
> table_name, null)) {
>                 while (col_rs.next()) {
>                     String col_name = col_rs.getString("COLUMN_NAME");
>                     if (excludedColumns.contains(col_name.toUpperCase())) {
>                         LOG.debug("found excluded column [{}] for in database 
> type [{}].  Skipping...", col_name, databaseType);
>                         continue;
>                     }
>                     int col_type = col_rs.getInt("DATA_TYPE");
>                     Integer col_size = col_rs.getInt("COLUMN_SIZE");
>                     boolean col_nullable = 
> col_rs.getString("IS_NULLABLE").equalsIgnoreCase("YES");
>                     Column catalog_col = new Column(col_name, separator, 
> catalog_tbl, col_type, col_size, col_nullable);
>                     catalog_tbl.addColumn(catalog_col);
>                 }
>             } {code}
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to