[bug](jdbc) fix jdbc can't get object of PGobject (#16496)

when pg table have some  unsupported column type like: point, polygon, jsonb......
jdbc catalog will convert it to string type in doris. but get result set in java is org.postgresql.util.PGobject
 
Some test need this pr: #16442
This commit is contained in:
zhangstar333
2023-02-10 16:19:02 +08:00
committed by GitHub
parent 06788bc2d0
commit b99e2dc727
5 changed files with 620 additions and 153 deletions

View File

@ -460,7 +460,20 @@ Status JdbcConnector::_convert_batch_result_set(JNIEnv* env, jobject jcolumn_dat
address[1]);
break;
}
case TYPE_CHAR:
case TYPE_CHAR: {
bool need_trim_spaces = false;
if ((_conn_param.table_type == TOdbcTableType::POSTGRESQL) ||
(_conn_param.table_type == TOdbcTableType::ORACLE)) {
need_trim_spaces = true;
}
auto column_string = reinterpret_cast<vectorized::ColumnString*>(col_ptr);
address[1] = reinterpret_cast<int64_t>(column_string->get_offsets().data());
auto chars_addres = reinterpret_cast<int64_t>(&column_string->get_chars());
env->CallNonvirtualVoidMethod(_executor_obj, _executor_clazz, _executor_get_char_result,
jcolumn_data, column_is_nullable, num_rows, address[0],
address[1], chars_addres, need_trim_spaces);
break;
}
case TYPE_STRING:
case TYPE_VARCHAR: {
auto column_string = reinterpret_cast<vectorized::ColumnString*>(col_ptr);
@ -591,6 +604,8 @@ Status JdbcConnector::_register_func_id(JNIEnv* env) {
JDBC_EXECUTOR_COPY_BATCH_SIGNATURE, _executor_get_double_result));
RETURN_IF_ERROR(register_id(_executor_clazz, "copyBatchStringResult",
"(Ljava/lang/Object;ZIJJJ)V", _executor_get_string_result));
RETURN_IF_ERROR(register_id(_executor_clazz, "copyBatchCharResult",
"(Ljava/lang/Object;ZIJJJZ)V", _executor_get_char_result));
RETURN_IF_ERROR(register_id(_executor_clazz, "copyBatchDateResult",
JDBC_EXECUTOR_COPY_BATCH_SIGNATURE, _executor_get_date_result));

View File

@ -127,6 +127,7 @@ private:
jmethodID _executor_get_largeint_result;
jmethodID _executor_get_float_result;
jmethodID _executor_get_double_result;
jmethodID _executor_get_char_result;
jmethodID _executor_get_string_result;
jmethodID _executor_get_date_result;
jmethodID _executor_get_datev2_result;

View File

@ -795,6 +795,7 @@ suite("test_jdbc_query_mysql", "p0") {
FROM ( SELECT id AS a, id % 3 AS b FROM ${exMysqlTable}) t1
JOIN ${exMysqlTable} t2 ON t1.a = t2.id GROUP BY t1.a) o
ON l.b = o.d AND l.a = o.a order by l.a desc limit 3"""
// this pr fixed, wait for merge: https://github.com/apache/doris/pull/16442
order_qt_sql48 """ SELECT x, y, COUNT(*) as c FROM (SELECT k8, 0 AS x FROM $jdbcMysql57Table1) a
JOIN (SELECT k8, 1 AS y FROM $jdbcMysql57Table1) b ON a.k8 = b.k8 group by x, y order by c desc limit 3 """
order_qt_sql49 """ SELECT * FROM (SELECT * FROM $jdbcMysql57Table1 WHERE k8 % 120 > 110) l
@ -934,7 +935,7 @@ suite("test_jdbc_query_mysql", "p0") {
order_qt_sql111 """ SELECT rank() OVER () FROM (SELECT k8 FROM $jdbcMysql57Table1 LIMIT 10) as t LIMIT 3 """
order_qt_sql112 """ SELECT k7, count(DISTINCT k8) FROM $jdbcMysql57Table1 WHERE k8 > 110 GROUP BY GROUPING SETS ((), (k7)) """
// TODO: check this, maybe caused by datasource in JDBC
// test alter resource
sql """alter resource $jdbcResourceMysql57 properties("password" = "1234567")"""
test {

View File

@ -70,7 +70,7 @@ suite("test_jdbc_query_pg", "p0") {
);
"""
order_qt_sql1 """select count(*) from $jdbcPg14Table1"""
order_qt_sql2 """select * from $jdbcPg14Table1"""
order_qt_sql2 """select * from $jdbcPg14Table1 order by k1,k2,k3,k4,k5,k6,k7,k8,k9,k10;"""
// test for : doris query external table which is pg table's view
@ -498,6 +498,7 @@ suite("test_jdbc_query_pg", "p0") {
FROM ( SELECT id AS a, id % 3 AS b FROM ${dorisExTable1}) t1
JOIN ${dorisExTable1} t2 ON t1.a = t2.id GROUP BY t1.a) o
ON l.b = o.d AND l.a = o.a order by l.a desc limit 3"""
// this pr fixed, wait for merge: https://github.com/apache/doris/pull/16442
order_qt_sql48 """ SELECT x, y, COUNT(*) as c FROM (SELECT k8, 0 AS x FROM $jdbcPg14Table1) a
JOIN (SELECT k8, 1 AS y FROM $jdbcPg14Table1) b ON a.k8 = b.k8 group by x, y order by c desc limit 3 """
order_qt_sql49 """ SELECT * FROM (SELECT * FROM $jdbcPg14Table1 WHERE k8 % 120 > 110) l