Skip to content

Commit

Permalink
Fix MDEV-12973: Blank columns querying SQL Server
Browse files Browse the repository at this point in the history
Added support of NCHAR, NVARCHAR an ROWID JDBC types.
  modified:   storage/connect/jdbconn.cpp
  • Loading branch information
Buggynours committed Jun 8, 2017
1 parent 5b534a6 commit da3c3b9
Showing 1 changed file with 40 additions and 21 deletions.
61 changes: 40 additions & 21 deletions storage/connect/jdbconn.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,42 +120,47 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
int type;

switch (stp) {
case -1: // LONGVARCHAR
case -1: // LONGVARCHAR
case -16: // LONGNVARCHAR (unicode)
if (GetTypeConv() != TPC_YES)
return TYPE_ERROR;
else
len = MY_MIN(abs(len), GetConvSize());
case 12: // VARCHAR
case 12: // VARCHAR
case -9: // NVARCHAR (unicode)
v = 'V';
case 1: // CHAR
case 1: // CHAR
case -15: // NCHAR (unicode)
case -8: // ROWID
type = TYPE_STRING;
break;
case 2: // NUMERIC
case 3: // DECIMAL
case -3: // VARBINARY
case 2: // NUMERIC
case 3: // DECIMAL
case -3: // VARBINARY
type = TYPE_DECIM;
break;
case 4: // INTEGER
case 4: // INTEGER
type = TYPE_INT;
break;
case 5: // SMALLINT
case 5: // SMALLINT
type = TYPE_SHORT;
break;
case -6: // TINYINT
case -7: // BIT
case -6: // TINYINT
case -7: // BIT
case 16: // BOOLEAN
type = TYPE_TINY;
break;
case 6: // FLOAT
case 7: // REAL
case 8: // DOUBLE
case 6: // FLOAT
case 7: // REAL
case 8: // DOUBLE
type = TYPE_DOUBLE;
break;
case 93: // TIMESTAMP, DATETIME
case 93: // TIMESTAMP, DATETIME
type = TYPE_DATE;
len = 19 + ((prec) ? (prec+1) : 0);
v = (tn && toupper(tn[0]) == 'T') ? 'S' : 'E';
break;
case 91: // DATE, YEAR
case 91: // DATE, YEAR
type = TYPE_DATE;

if (!tn || toupper(tn[0]) != 'Y') {
Expand All @@ -167,17 +172,27 @@ int TranslateJDBCType(int stp, char *tn, int prec, int& len, char& v)
} // endif len

break;
case 92: // TIME
case 92: // TIME
type = TYPE_DATE;
len = 8 + ((prec) ? (prec+1) : 0);
v = 'T';
break;
case -5: // BIGINT
case -5: // BIGINT
type = TYPE_BIGINT;
break;
case 0: // NULL
case -2: // BINARY
case -4: // LONGVARBINARY
case 0: // NULL
case -2: // BINARY
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:
type = TYPE_ERROR;
len = 0;
Expand Down Expand Up @@ -1225,9 +1240,12 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)

switch (ctyp) {
case 12: // VARCHAR
case -9: // NVARCHAR
case -1: // LONGVARCHAR
case 1: // CHAR
case 3: // DECIMAL
case -15: // NCHAR
case 3: // DECIMAL
case -8: // ROWID
if (jb && ctyp != 3)
cn = (jstring)jb;
else if (!gmID(g, chrfldid, "StringField", "(ILjava/lang/String;)Ljava/lang/String;"))
Expand All @@ -1245,6 +1263,7 @@ void JDBConn::SetColumnValue(int rank, PSZ name, PVAL val)
case 4: // INTEGER
case 5: // SMALLINT
case -6: // TINYINT
case 16: // BOOLEAN
case -7: // BIT
if (!gmID(g, intfldid, "IntField", "(ILjava/lang/String;)I"))
val->SetValue((int)env->CallIntMethod(job, intfldid, rank, jn));
Expand Down

0 comments on commit da3c3b9

Please sign in to comment.