@@ -512,7 +512,7 @@ JDBConn::JDBConn(PGLOBAL g, TDBJDBC *tdbp)
512
512
xqid = xuid = xid = grs = readid = fetchid = typid = errid = nullptr ;
513
513
prepid = xpid = pcid = nullptr ;
514
514
chrfldid = intfldid = dblfldid = fltfldid = bigfldid = nullptr ;
515
- datfldid = timfldid = tspfldid = nullptr ;
515
+ objfldid = datfldid = timfldid = tspfldid = nullptr ;
516
516
// m_LoginTimeout = DEFAULT_LOGIN_TIMEOUT;
517
517
// m_QueryTimeout = DEFAULT_QUERY_TIMEOUT;
518
518
// m_UpdateOptions = 0;
@@ -1167,9 +1167,10 @@ void JDBConn::Close()
1167
1167
/* **********************************************************************/
1168
1168
void JDBConn::SetColumnValue (int rank, PSZ name, PVAL val)
1169
1169
{
1170
- PGLOBAL& g = m_G;
1171
- jint ctyp;
1172
- jstring cn, jn = nullptr ;
1170
+ PGLOBAL& g = m_G;
1171
+ jint ctyp;
1172
+ jstring cn, jn = nullptr ;
1173
+ jobject jb = nullptr ;
1173
1174
1174
1175
if (rank == 0 )
1175
1176
if (!name || (jn = env->NewStringUTF (name)) == nullptr ) {
@@ -1185,21 +1186,32 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
1185
1186
longjmp (g->jumper [g->jump_level ], TYPE_AM_JDBC);
1186
1187
} // endif Check
1187
1188
1189
+ if (val->GetNullable ())
1190
+ if (!gmID (g, objfldid, " ObjectField" , " (ILjava/lang/String;)Ljava/lang/Object;" )) {
1191
+ jb = env->CallObjectMethod (job, objfldid, (jint)rank, jn);
1192
+
1193
+ if (jb == nullptr ) {
1194
+ val->Reset ();
1195
+ val->SetNull (true );
1196
+ goto chk;
1197
+ } // endif job
1198
+
1199
+ } // endif objfldid
1200
+
1188
1201
switch (ctyp) {
1189
1202
case 12 : // VARCHAR
1190
1203
case -1 : // LONGVARCHAR
1191
1204
case 1 : // CHAR
1192
- if (!gmID (g, chrfldid, " StringField" , " (ILjava/lang/String;)Ljava/lang/String;" )) {
1205
+ if (jb)
1206
+ cn = (jstring)jb;
1207
+ else if (!gmID (g, chrfldid, " StringField" , " (ILjava/lang/String;)Ljava/lang/String;" ))
1193
1208
cn = (jstring)env->CallObjectMethod (job, chrfldid, (jint)rank, jn);
1209
+ else
1210
+ cn = nullptr ;
1194
1211
1195
- if (cn) {
1196
- const char *field = env->GetStringUTFChars (cn, (jboolean)false );
1197
- val->SetValue_psz ((PSZ)field);
1198
- } else {
1199
- val->Reset ();
1200
- val->SetNull (true );
1201
- } // endif cn
1202
-
1212
+ if (cn) {
1213
+ const char *field = env->GetStringUTFChars (cn, (jboolean)false );
1214
+ val->SetValue_psz ((PSZ)field);
1203
1215
} else
1204
1216
val->Reset ();
1205
1217
@@ -1271,6 +1283,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
1271
1283
val->Reset ();
1272
1284
} // endswitch Type
1273
1285
1286
+ chk:
1274
1287
if (Check ()) {
1275
1288
if (rank == 0 )
1276
1289
env->DeleteLocalRef (jn);
0 commit comments