Dear Devs,    I would like to help expand the jdbc resultset metadata available 
when querying a table. Consider the following example:


CREATE TABLE ARTICLE (
    ID BIGINT,
    BODY text,
    LAST_MODIFIED TIMESTAMP with time zone,
        CONSTRAINT PK_ ARTICLE PRIMARY KEY (ID)
 );
After creating the table, I can query the column metadata using the 
java.sql.ResultSetMetaData. Example:

 java.sql.ResultSet rs = stmt.executeQuery("select * from article);
java.sql.ResultSetMetaData rsmd = rs.getMetaData();

However, the resultset /column metadata will return the following types:

- id: long- body: object- last_modified: object
Note that the body and last_modified fields are identified as generic objects 
instead of their formal java types. This is not consistent with other jdbc 
drivers (e.g. postgresql, h2, etc). 

 After a little digging, I found the JdbcColumnMeta(GridQueryFieldMetadata 
info) constructor which calls the JdbcThinUtils class. However, at this point 
the GridQueryFieldMetadata is already mapped to a generic "object" so it is 
impossible to return the correct type from the JdbcThinUtils class.

Next, I decided to see how tables are created in the first place. Specifically, 
the GridSqlQueryParser.parseCreateTable() method. In there, I can see the 
correct column metadata. For example, if I add the following code in the 
parseCreateTable method...
for (Column col : data.columns){
    System.out.println(col.getName() + " (" + col.getType() + ")");
} 

...it will print the following:
ID (5)
BODY (16)
LAST_MODIFIED (24)

I would like to preserve this metadata so that I can see it when using the jdbc 
resultset metadata object. Any suggestions?

Note that the ID column type (5) is preserved. I suspect the other types 
identified in the JdbcThinUtils class are preserved as well.


Thanks in advance,Peter







Reply via email to