Skip to content

Commit c8edba3

Browse files
committed
Merge branch 'ob-10.1' into 10.1
2 parents 1548d7f + cb8e5ec commit c8edba3

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

storage/connect/JdbcInterface.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -692,11 +692,11 @@ public int TimestampField(int n, String name) {
692692
return 0;
693693
} // end of TimestampField
694694

695-
public String ObjectField(int n, String name) {
695+
public Object ObjectField(int n, String name) {
696696
if (rs == null) {
697697
System.out.println("No result set");
698698
} else try {
699-
return (n > 0) ? rs.getObject(n).toString() : rs.getObject(name).toString();
699+
return (n > 0) ? rs.getObject(n) : rs.getObject(name);
700700
} catch (SQLException se) {
701701
SetErrmsg(se);
702702
} //end try/catch

storage/connect/jdbconn.cpp

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ JDBConn::JDBConn(PGLOBAL g, TDBJDBC *tdbp)
512512
xqid = xuid = xid = grs = readid = fetchid = typid = errid = nullptr;
513513
prepid = xpid = pcid = nullptr;
514514
chrfldid = intfldid = dblfldid = fltfldid = bigfldid = nullptr;
515-
datfldid = timfldid = tspfldid = nullptr;
515+
objfldid = datfldid = timfldid = tspfldid = nullptr;
516516
//m_LoginTimeout = DEFAULT_LOGIN_TIMEOUT;
517517
//m_QueryTimeout = DEFAULT_QUERY_TIMEOUT;
518518
//m_UpdateOptions = 0;
@@ -1167,9 +1167,10 @@ void JDBConn::Close()
11671167
/***********************************************************************/
11681168
void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
11691169
{
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;
11731174

11741175
if (rank == 0)
11751176
if (!name || (jn = env->NewStringUTF(name)) == nullptr) {
@@ -1185,21 +1186,32 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
11851186
longjmp(g->jumper[g->jump_level], TYPE_AM_JDBC);
11861187
} // endif Check
11871188

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+
11881201
switch (ctyp) {
11891202
case 12: // VARCHAR
11901203
case -1: // LONGVARCHAR
11911204
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;"))
11931208
cn = (jstring)env->CallObjectMethod(job, chrfldid, (jint)rank, jn);
1209+
else
1210+
cn = nullptr;
11941211

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);
12031215
} else
12041216
val->Reset();
12051217

@@ -1271,6 +1283,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
12711283
val->Reset();
12721284
} // endswitch Type
12731285

1286+
chk:
12741287
if (Check()) {
12751288
if (rank == 0)
12761289
env->DeleteLocalRef(jn);

storage/connect/jdbconn.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class JDBConn : public BLOCK {
165165
jmethodID xpid; // The ExecutePrep method ID
166166
jmethodID pcid; // The ClosePrepStmt method ID
167167
jmethodID errid; // The GetErrmsg method ID
168+
jmethodID objfldid; // The ObjectField method ID
168169
jmethodID chrfldid; // The StringField method ID
169170
jmethodID intfldid; // The IntField method ID
170171
jmethodID dblfldid; // The DoubleField method ID

0 commit comments

Comments
 (0)