Commit da3c3b90 authored by Olivier Bertrand's avatar Olivier Bertrand

Fix MDEV-12973: Blank columns querying SQL Server

Added support of NCHAR, NVARCHAR an ROWID JDBC types.
  modified:   storage/connect/jdbconn.cpp
parent 5b534a68
...@@ -120,42 +120,47 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v) ...@@ -120,42 +120,47 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
int type; int type;
switch (stp) { switch (stp) {
case -1: // LONGVARCHAR case -1: // LONGVARCHAR
case -16: // LONGNVARCHAR (unicode)
if (GetTypeConv() != TPC_YES) if (GetTypeConv() != TPC_YES)
return TYPE_ERROR; return TYPE_ERROR;
else else
len = MY_MIN(abs(len), GetConvSize()); len = MY_MIN(abs(len), GetConvSize());
case 12: // VARCHAR case 12: // VARCHAR
case -9: // NVARCHAR (unicode)
v = 'V'; v = 'V';
case 1: // CHAR case 1: // CHAR
case -15: // NCHAR (unicode)
case -8: // ROWID
type = TYPE_STRING; type = TYPE_STRING;
break; break;
case 2: // NUMERIC case 2: // NUMERIC
case 3: // DECIMAL case 3: // DECIMAL
case -3: // VARBINARY case -3: // VARBINARY
type = TYPE_DECIM; type = TYPE_DECIM;
break; break;
case 4: // INTEGER case 4: // INTEGER
type = TYPE_INT; type = TYPE_INT;
break; break;
case 5: // SMALLINT case 5: // SMALLINT
type = TYPE_SHORT; type = TYPE_SHORT;
break; break;
case -6: // TINYINT case -6: // TINYINT
case -7: // BIT case -7: // BIT
case 16: // BOOLEAN
type = TYPE_TINY; type = TYPE_TINY;
break; break;
case 6: // FLOAT case 6: // FLOAT
case 7: // REAL case 7: // REAL
case 8: // DOUBLE case 8: // DOUBLE
type = TYPE_DOUBLE; type = TYPE_DOUBLE;
break; break;
case 93: // TIMESTAMP, DATETIME case 93: // TIMESTAMP, DATETIME
type = TYPE_DATE; type = TYPE_DATE;
len = 19 + ((prec) ? (prec+1) : 0); len = 19 + ((prec) ? (prec+1) : 0);
v = (tn && toupper(tn[0]) == 'T') ? 'S' : 'E'; v = (tn && toupper(tn[0]) == 'T') ? 'S' : 'E';
break; break;
case 91: // DATE, YEAR case 91: // DATE, YEAR
type = TYPE_DATE; type = TYPE_DATE;
if (!tn || toupper(tn[0]) != 'Y') { if (!tn || toupper(tn[0]) != 'Y') {
...@@ -167,17 +172,27 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v) ...@@ -167,17 +172,27 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
} // endif len } // endif len
break; break;
case 92: // TIME case 92: // TIME
type = TYPE_DATE; type = TYPE_DATE;
len = 8 + ((prec) ? (prec+1) : 0); len = 8 + ((prec) ? (prec+1) : 0);
v = 'T'; v = 'T';
break; break;
case -5: // BIGINT case -5: // BIGINT
type = TYPE_BIGINT; type = TYPE_BIGINT;
break; break;
case 0: // NULL case 0: // NULL
case -2: // BINARY case -2: // BINARY
case -4: // LONGVARBINARY case -4: // LONGVARBINARY
case 70: // DATALINK
case 2000: // JAVA_OBJECT
case 2001: // DISTINCT
case 2002: // STRUCT
case 2003: // ARRAY
case 2004: // BLOB
case 2005: // CLOB
case 2006: // REF
case 2009: // SQLXML
case 2011: // NCLOB
default: default:
type = TYPE_ERROR; type = TYPE_ERROR;
len = 0; len = 0;
...@@ -1225,9 +1240,12 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val) ...@@ -1225,9 +1240,12 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
switch (ctyp) { switch (ctyp) {
case 12: // VARCHAR case 12: // VARCHAR
case -9: // NVARCHAR
case -1: // LONGVARCHAR case -1: // LONGVARCHAR
case 1: // CHAR case 1: // CHAR
case 3: // DECIMAL case -15: // NCHAR
case 3: // DECIMAL
case -8: // ROWID
if (jb && ctyp != 3) if (jb && ctyp != 3)
cn = (jstring)jb; cn = (jstring)jb;
else if (!gmID(g, chrfldid, "StringField", "(ILjava/lang/String;)Ljava/lang/String;")) else if (!gmID(g, chrfldid, "StringField", "(ILjava/lang/String;)Ljava/lang/String;"))
...@@ -1245,6 +1263,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val) ...@@ -1245,6 +1263,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
case 4: // INTEGER case 4: // INTEGER
case 5: // SMALLINT case 5: // SMALLINT
case -6: // TINYINT case -6: // TINYINT
case 16: // BOOLEAN
case -7: // BIT case -7: // BIT
if (!gmID(g, intfldid, "IntField", "(ILjava/lang/String;)I")) if (!gmID(g, intfldid, "IntField", "(ILjava/lang/String;)I"))
val->SetValue((int)env->CallIntMethod(job, intfldid, rank, jn)); val->SetValue((int)env->CallIntMethod(job, intfldid, rank, jn));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment