4paradigm / 4paradigm/OpenMLDB

Support JDBC API to getMetaData

Open
#3,772 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
1.7k
Forks
331
Avg merge
12d 12h
Merged PRs (30d)
1

Description

**Describe the feature you'd like**

We may support standard JDBC API to get meta data so that we can get schema from result set.

Here is the basic usage.

```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class Main {
public static void main(String[] args) {
try {
// Establish a connection to your database
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");

// Create a statement
Statement stmt = conn.createStatement();

// Execute a query
ResultSet rs = stmt.executeQuery("SELECT * FROM your_table");

// Get the metadata of the result set
ResultSetMetaData rsMetaData = rs.getMetaData();

// Get the number of columns in the result set
int columnCount = rsMetaData.getColumnCount();

// Print column names and types
System.out.println("Column Count: " + columnCount);
for (int i = 1; i <= columnCount; i++) {
String columnName = rsMetaData.getColumnName(i);
String columnType = rsMetaData.getColumnTypeName(i);
System.out.println("Column " + i + ": Name=" + columnName + ", Type=" + columnType);
}

// Close the result set, statement, and connection
rs.close();
stmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```

Currently we may get the error of null pointer exception.

```
java.io.IOException: current do not support this method
at com._4paradigm.openmldb.OpenmldbMysqlServer$1.query(OpenmldbMysqlServer.java:80)
at cn.paxos.mysql.MySqlListener.handleQuery(MySqlListener.java:307)
at cn.paxos.mysql.MySqlListener$ServerHandler.channelRead(MySqlListener.java:150)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38)
at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:353)
at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)
java.lang.NullPointerException
at cn.paxos.mysql.MySqlListener.handleQuery(MySqlListener.java:315)
at cn.paxos.mysql.MySqlListener$ServerHandler.channelRead(MySqlListener.java:150)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
at io.netty.channel.AbstractChannelHandlerContext.access$600(AbstractChannelHandlerContext.java:38)
at io.netty.channel.AbstractChannelHandlerContext$7.run(AbstractChannelHandlerContext.java:353)
at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66)
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:897)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:834)
```

Contributor guide

Open the contributing guide

Research direction

The issue points to OpenmldbMysqlServer.java line 80 where the query method throws an error. Look at the JDBC driver implementation in the codebase, likely under a java or jdbc module. Understand how result sets are currently handled and where metadata should be populated. Check existing tests for JDBC functionality to see the expected behavior. Implementing getMetaData requires understanding the OpenMLDB schema system and mapping it to JDBC types.

Written by the indexing model from the issue text.

Assessment

Tech stack
java, mysql
Domain
api, backend, databases
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.