@@ -269,9 +269,9 @@ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
269269 J_DuckResultSetMeta = (jclass)env->NewGlobalRef (tmpLocalRef);
270270 env->DeleteLocalRef (tmpLocalRef);
271271
272- J_DuckResultSetMeta_init =
273- env-> GetMethodID (J_DuckResultSetMeta, " <init> " ,
274- " (II[Ljava/ lang/String;[Ljava/lang/String;[Ljava/lang/String; Ljava/lang/String;)V" );
272+ J_DuckResultSetMeta_init = env-> GetMethodID (J_DuckResultSetMeta, " <init> " ,
273+ " (II[Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;Ljava/ "
274+ " lang/String;[Ljava/lang/String;[Ljava/lang/String;)V" );
275275
276276 tmpLocalRef = env->FindClass (" org/duckdb/DuckDBVector" );
277277 J_DuckVector = (jclass)env->NewGlobalRef (tmpLocalRef);
@@ -782,7 +782,8 @@ static std::string type_to_jduckdb_type(LogicalType logical_type) {
782782}
783783
784784static jobject build_meta (JNIEnv *env, size_t column_count, size_t n_param, const duckdb::vector<string> &names,
785- const duckdb::vector<LogicalType> &types, StatementProperties properties) {
785+ const duckdb::vector<LogicalType> &types, StatementProperties properties,
786+ const duckdb::vector<LogicalType> ¶m_types) {
786787 auto name_array = env->NewObjectArray (column_count, J_String, nullptr );
787788 auto type_array = env->NewObjectArray (column_count, J_String, nullptr );
788789 auto type_detail_array = env->NewObjectArray (column_count, J_String, nullptr );
@@ -802,10 +803,26 @@ static jobject build_meta(JNIEnv *env, size_t column_count, size_t n_param, cons
802803 env->NewStringUTF (type_to_jduckdb_type (types[col_idx]).c_str ()));
803804 }
804805
806+ auto param_type_array = env->NewObjectArray (n_param, J_String, nullptr );
807+ auto param_type_detail_array = env->NewObjectArray (n_param, J_String, nullptr );
808+
809+ for (idx_t param_idx = 0 ; param_idx < n_param; param_idx++) {
810+ std::string param_name;
811+ if (param_types[param_idx].id () == LogicalTypeId::ENUM) {
812+ param_name = " ENUM" ;
813+ } else {
814+ param_name = param_types[param_idx].ToString ();
815+ }
816+
817+ env->SetObjectArrayElement (param_type_array, param_idx, env->NewStringUTF (param_name.c_str ()));
818+ env->SetObjectArrayElement (param_type_detail_array, param_idx,
819+ env->NewStringUTF (type_to_jduckdb_type (param_types[param_idx]).c_str ()));
820+ }
821+
805822 auto return_type = env->NewStringUTF (StatementReturnTypeToString (properties.return_type ).c_str ());
806823
807824 return env->NewObject (J_DuckResultSetMeta, J_DuckResultSetMeta_init, n_param, column_count, name_array, type_array,
808- type_detail_array, return_type);
825+ type_detail_array, return_type, param_type_array, param_type_detail_array );
809826}
810827
811828jobject _duckdb_jdbc_query_result_meta (JNIEnv *env, jclass, jobject res_ref_buf) {
@@ -815,9 +832,11 @@ jobject _duckdb_jdbc_query_result_meta(JNIEnv *env, jclass, jobject res_ref_buf)
815832 }
816833 auto &result = res_ref->res ;
817834
818- auto n_param = -1 ; // no params now
835+ auto n_param = 0 ; // no params now
836+ duckdb::vector<LogicalType> param_types (n_param);
819837
820- return build_meta (env, result->ColumnCount (), n_param, result->names , result->types , result->properties );
838+ return build_meta (env, result->ColumnCount (), n_param, result->names , result->types , result->properties ,
839+ param_types);
821840}
822841
823842jobject _duckdb_jdbc_prepared_statement_meta (JNIEnv *env, jclass, jobject stmt_ref_buf) {
@@ -829,9 +848,14 @@ jobject _duckdb_jdbc_prepared_statement_meta(JNIEnv *env, jclass, jobject stmt_r
829848
830849 auto &stmt = stmt_ref->stmt ;
831850 auto n_param = stmt->named_param_map .size ();
851+ auto expected_parameter_types = stmt->GetExpectedParameterTypes ();
852+ duckdb::vector<LogicalType> param_types (n_param);
853+ for (auto &it : stmt->named_param_map ) {
854+ param_types[it.second - 1 ] = expected_parameter_types[it.first ];
855+ }
832856
833857 return build_meta (env, stmt->ColumnCount (), n_param, stmt->GetNames (), stmt->GetTypes (),
834- stmt->GetStatementProperties ());
858+ stmt->GetStatementProperties (), param_types );
835859}
836860
837861jobject ProcessVector (JNIEnv *env, Connection *conn_ref, Vector &vec, idx_t row_count);
0 commit comments