The third version of the patch.
Added support of UTF8 in OUT parameters of DBPROC. Fixed bug with
choping of OUT parameters.
diff -uNr DBD-MaxDB-7.5.00.32.origin/dbdimp.c DBD-MaxDB-7.5.00.32/dbdimp.c
--- DBD-MaxDB-7.5.00.32.origin/dbdimp.c 2005-09-12 15:26:20.000000000 +0900
+++ DBD-MaxDB-7.5.00.32/dbdimp.c 2005-09-16 17:41:22.000000000 +0900
@@ -477,11 +477,12 @@
dbd_maxdb_internal_error(dbh, DBD_ERR_INITIALIZATION_FAILED_S,
"Cannot get connection from environment");
DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
}
- if (! SQLDBC_Connection_connectASCII(imp_dbh->m_connection,
+ if (! SQLDBC_Connection_connectNTS(imp_dbh->m_connection,
host,
dbname,
user,
password,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
imp_dbh->m_connprop)==SQLDBC_OK){
dbd_maxdb_sqldbc_error(dbh,
SQLDBC_Connection_getError(imp_dbh->m_connection)) ;
DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
@@ -967,7 +968,7 @@
}
}
- retcode = SQLDBC_Statement_executeASCII (imp_dbh->m_stmt, statement);
+ retcode = SQLDBC_Statement_executeNTS (imp_dbh->m_stmt,
statement,SQLDBC_StringEncodingType_Encoding_UTF8);
if (retcode != SQLDBC_OK && retcode != SQLDBC_NO_DATA_FOUND){
dbd_maxdb_sqldbc_error(dbh,
SQLDBC_Statement_getError(imp_dbh->m_stmt));
DBD_MAXDB_METHOD_RETURN (imp_dbh, dbd_maxdb_db_executeUpdate,
DBD_MAXDB_ERROR_RETVAL);
@@ -1029,7 +1030,7 @@
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare,
SQLDBC_FALSE);
}
}
- if (SQLDBC_PreparedStatement_prepareASCII (imp_sth->m_prepstmt,
statement) != SQLDBC_OK) {
+ if (SQLDBC_PreparedStatement_prepareNTS (imp_sth->m_prepstmt,
statement,SQLDBC_StringEncodingType_Encoding_UTF8) != SQLDBC_OK) {
dbd_maxdb_sqldbc_error(sth,
SQLDBC_PreparedStatement_getError(imp_sth->m_prepstmt));
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
}
@@ -1043,12 +1044,6 @@
if (parcnt) Newz(242, imp_sth->m_bindParms, parcnt,
dbd_maxdb_bind_param);
}
- imp_sth->m_rsmd=SQLDBC_PreparedStatement_getResultSetMetaData
(imp_sth->m_prepstmt);
- if (SQLDBC_PreparedStatement_isQuery(imp_sth->m_prepstmt) &&
!imp_sth->m_rsmd) {
- dbd_maxdb_internal_error(sth, DBD_ERR_INITIALIZATION_FAILED_S,
"Cannot get resultset metadata");
- DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
- }
-
DBIc_IMPSET_on(imp_sth);
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_TRUE);
}
@@ -1185,6 +1180,11 @@
DBD_MAXDB_METHOD_ENTER(imp_sth, dbd_maxdb_registerResultSet);
+ if (DBIc_NUM_FIELDS(imp_sth) < 0) {
+ dbd_maxdb_internal_error(sth, DBD_ERR_INITIALIZATION_FAILED_S,
"Wrong number of columns");
+ DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_registerResultSet,
SQLDBC_FALSE);
+ }
+
if (imp_sth->m_cols){
/*already registered*/
return SQLDBC_TRUE;
@@ -1214,20 +1214,20 @@
case SQLDBC_SQLTYPE_NUMBER :
case SQLDBC_SQLTYPE_SMALLINT :
case SQLDBC_SQLTYPE_INTEGER : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength
(imp_sth->m_rsmd, column) + 2;
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column) + 2;
break;
}
- case SQLDBC_SQLTYPE_BOOLEAN : {
+ case SQLDBC_SQLTYPE_BOOLEAN : {
collen = 1;
break;
}
case SQLDBC_SQLTYPE_FLOAT :
case SQLDBC_SQLTYPE_VFLOAT : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength
(imp_sth->m_rsmd, column) + 6; /*-[0-9]+.[0-9]+E[-][0-9][0-9]*/
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column) + 6; /*-[0-9]+.[0-9]+E[-][0-9][0-9]*/
break;
}
default : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength
(imp_sth->m_rsmd, column);
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column);
break;
}
}
@@ -1243,7 +1243,7 @@
allColumnsLength = 0;
for (column = 1; column <= colcnt; column++) {
dbd_maxdb_bind_column *m_col = &imp_sth->m_cols[column-1];
- SQLDBC_Int4 ColumnLength =
SQLDBC_ResultSetMetaData_getColumnLength (imp_sth->m_rsmd, column);
+ SQLDBC_Int4 ColumnLength =
SQLDBC_ResultSetMetaData_getPhysicalLength (imp_sth->m_rsmd, column);
SQLDBC_SQLType ColumnType =
SQLDBC_ResultSetMetaData_getColumnType (imp_sth->m_rsmd, column);
m_col->hostType = SQLDBC_HOSTTYPE_ASCII;
m_col->chopBlanks = SQLDBC_FALSE;
@@ -1268,8 +1268,12 @@
break;
}
case SQLDBC_SQLTYPE_CHA :
- case SQLDBC_SQLTYPE_CHE :
+ case SQLDBC_SQLTYPE_CHE :{
+ m_col->chopBlanks = SQLDBC_TRUE;
+ break;
+ }
case SQLDBC_SQLTYPE_UNICODE :{
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
m_col->chopBlanks = SQLDBC_TRUE;
break;
}
@@ -1282,9 +1286,10 @@
break;
}
case SQLDBC_SQLTYPE_VARCHARUNI : {
- break;
- }
- case SQLDBC_SQLTYPE_BOOLEAN : {
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
+ break;
+ }
+ case SQLDBC_SQLTYPE_BOOLEAN : {
m_col->hostType = SQLDBC_HOSTTYPE_INT1;
ColumnLength = 1;
break;
@@ -1304,7 +1309,7 @@
case SQLDBC_SQLTYPE_LONGE :
case SQLDBC_SQLTYPE_STRUNI :
case SQLDBC_SQLTYPE_LONGUNI : {
- m_col->hostType = SQLDBC_HOSTTYPE_ASCII;
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
ColumnLength = DBIc_LongReadLen(imp_sth);
break;
}
@@ -1335,6 +1340,7 @@
int erg = SQLDBC_TRUE;
D_imp_dbh_from_sth;
SQLDBC_Retcode exec_rc;
+ int ChopBlanks = 1; /* always chop blanks DBIc_has(imp_sth,
DBIcf_ChopBlanks); */
DBD_MAXDB_METHOD_ENTER(imp_sth, dbd_maxdb_st_execute);
@@ -1416,8 +1422,8 @@
dbd_maxdb_internal_error(sth,
DBD_ERR_LONG_COLUMN_TRUNCATED_D, paramIndex+1);
DBD_MAXDB_METHOD_RETURN(imp_sth,
dbd_maxdb_st_execute, DBD_MAXDB_ERROR_RETVAL);
}
- if (m_param->indicator >= 0){
- while (m_param->indicator >= 0 &&
buf[m_param->indicator]==' ') --m_param->indicator;
+ if (m_param->chopBlanks && ChopBlanks &&
m_param->indicator > 0){
+ while (m_param->indicator >= 0 &&
buf[m_param->indicator-1]==' ') --m_param->indicator;
}
break;
}
@@ -1788,7 +1794,7 @@
}
case sth_maxdb_option_CursorName:{
char* cursorname = SvPV(valuesv,kl);
- SQLDBC_PreparedStatement_setCursorName
(imp_sth->m_prepstmt, cursorname, kl,
SQLDBC_StringEncodingType_Encoding_Ascii) ;
+ SQLDBC_PreparedStatement_setCursorName
(imp_sth->m_prepstmt, cursorname, kl,
SQLDBC_StringEncodingType_Encoding_UTF8) ;
erg = SQLDBC_TRUE;
break;
}
@@ -1836,7 +1842,7 @@
if( SQLDBC_PreparedStatement_getCursorName (
imp_sth->m_prepstmt,
cname,
- SQLDBC_StringEncodingType_Encoding_Ascii,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&bufferLength) != SQLDBC_OK){
break;
@@ -1885,7 +1891,7 @@
if( SQLDBC_PreparedStatement_getTableName(
imp_sth->m_prepstmt,
cname,
- SQLDBC_StringEncodingType_Encoding_Ascii,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&bufferLength) != SQLDBC_OK){
break;
@@ -1910,7 +1916,7 @@
if (SQLDBC_ResultSetMetaData_getColumnName (imp_sth->m_rsmd,
i,
cname,
-
SQLDBC_StringEncodingType_Encoding_Ascii,
+
SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&colnamelen) !=
SQLDBC_OK) {
dbd_maxdb_internal_error(sth,
DBD_ERR_CANNOT_GET_COLUMNNAME_D, i);
@@ -2178,6 +2184,11 @@
parameter->value = newSViv(intval);
break;
}
+ case SQLDBC_SQLTYPE_UNICODE :
+ case SQLDBC_SQLTYPE_VARCHARUNI :
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ parameter->value = newSVsv(value);
+ break;
case SQLDBC_SQLTYPE_STRB :
case SQLDBC_SQLTYPE_LONGB :
case SQLDBC_SQLTYPE_CHB :
@@ -2208,7 +2219,8 @@
imp_sth->m_hasOutValues= SQLDBC_TRUE;
(void)SvUPGRADE(svVal, SVt_PVNV);
SvPOK_only(svVal);
-
+ parameter->chopBlanks = SQLDBC_FALSE;
+
switch (SQLDBC_ParameterMetaData_getParameterType
(imp_sth->m_paramMetadata, index)) {
case SQLDBC_SQLTYPE_STRB :
case SQLDBC_SQLTYPE_LONGB :
@@ -2217,11 +2229,22 @@
case SQLDBC_SQLTYPE_LONGA :
case SQLDBC_SQLTYPE_LONGE :
case SQLDBC_SQLTYPE_STRUNI :
- case SQLDBC_SQLTYPE_LONGUNI : {
- parameter->hostType = SQLDBC_HOSTTYPE_ASCII;
+ case SQLDBC_SQLTYPE_LONGUNI : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
paramlen = DBIc_LongReadLen(imp_sth);
break;
}
+ case SQLDBC_SQLTYPE_VARCHARUNI : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
+ break;
+ }
+ case SQLDBC_SQLTYPE_UNICODE : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
+ parameter->chopBlanks = SQLDBC_TRUE;
+ break;
+ }
case SQLDBC_SQLTYPE_FIXED :
case SQLDBC_SQLTYPE_NUMBER :
case SQLDBC_SQLTYPE_SMALLINT :
@@ -2242,7 +2265,8 @@
break;
}
default : {
- paramlen = SQLDBC_ParameterMetaData_getParameterLength
(imp_sth->m_paramMetadata, index);
+ parameter->hostType = SQLDBC_HOSTTYPE_ASCII;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
break;
}
}
diff -uNr DBD-MaxDB-7.5.00.32.origin/dbdimp.h DBD-MaxDB-7.5.00.32/dbdimp.h
--- DBD-MaxDB-7.5.00.32.origin/dbdimp.h 2005-09-12 15:26:20.000000000 +0900
+++ DBD-MaxDB-7.5.00.32/dbdimp.h 2005-09-16 17:24:04.000000000 +0900
@@ -81,6 +81,7 @@
int sqltype; /*!< parameter type provide via bind
method */
SQLDBC_HostType hostType; /*!< column datatyp */
SQLDBC_Length indicator; /*!< indicator value */
+ SQLDBC_Bool chopBlanks; /*!< flag that indicates whether the
column is relevant for cutoff blanks*/
} dbd_maxdb_bind_param;
/*
diff -uNr DBD-MaxDB-7.5.00.32.origin/dbdimp.c DBD-MaxDB-7.5.00.32/dbdimp.c
--- DBD-MaxDB-7.5.00.32.origin/dbdimp.c 2005-09-12 15:26:20.000000000 +0900
+++ DBD-MaxDB-7.5.00.32/dbdimp.c 2005-09-16 17:41:22.000000000 +0900
@@ -477,11 +477,12 @@
dbd_maxdb_internal_error(dbh, DBD_ERR_INITIALIZATION_FAILED_S, "Cannot get
connection from environment");
DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
}
- if (! SQLDBC_Connection_connectASCII(imp_dbh->m_connection,
+ if (! SQLDBC_Connection_connectNTS(imp_dbh->m_connection,
host,
dbname,
user,
password,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
imp_dbh->m_connprop)==SQLDBC_OK){
dbd_maxdb_sqldbc_error(dbh,
SQLDBC_Connection_getError(imp_dbh->m_connection)) ;
DBD_MAXDB_METHOD_RETURN(imp_dbh, dbd_maxdb_db_login6, SQLDBC_FALSE);
@@ -967,7 +968,7 @@
}
}
- retcode = SQLDBC_Statement_executeASCII (imp_dbh->m_stmt, statement);
+ retcode = SQLDBC_Statement_executeNTS (imp_dbh->m_stmt,
statement,SQLDBC_StringEncodingType_Encoding_UTF8);
if (retcode != SQLDBC_OK && retcode != SQLDBC_NO_DATA_FOUND){
dbd_maxdb_sqldbc_error(dbh, SQLDBC_Statement_getError(imp_dbh->m_stmt));
DBD_MAXDB_METHOD_RETURN (imp_dbh, dbd_maxdb_db_executeUpdate,
DBD_MAXDB_ERROR_RETVAL);
@@ -1029,7 +1030,7 @@
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
}
}
- if (SQLDBC_PreparedStatement_prepareASCII (imp_sth->m_prepstmt, statement)
!= SQLDBC_OK) {
+ if (SQLDBC_PreparedStatement_prepareNTS (imp_sth->m_prepstmt,
statement,SQLDBC_StringEncodingType_Encoding_UTF8) != SQLDBC_OK) {
dbd_maxdb_sqldbc_error(sth,
SQLDBC_PreparedStatement_getError(imp_sth->m_prepstmt));
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
}
@@ -1043,12 +1044,6 @@
if (parcnt) Newz(242, imp_sth->m_bindParms, parcnt,
dbd_maxdb_bind_param);
}
- imp_sth->m_rsmd=SQLDBC_PreparedStatement_getResultSetMetaData
(imp_sth->m_prepstmt);
- if (SQLDBC_PreparedStatement_isQuery(imp_sth->m_prepstmt) &&
!imp_sth->m_rsmd) {
- dbd_maxdb_internal_error(sth, DBD_ERR_INITIALIZATION_FAILED_S, "Cannot get
resultset metadata");
- DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_FALSE);
- }
-
DBIc_IMPSET_on(imp_sth);
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_prepare, SQLDBC_TRUE);
}
@@ -1185,6 +1180,11 @@
DBD_MAXDB_METHOD_ENTER(imp_sth, dbd_maxdb_registerResultSet);
+ if (DBIc_NUM_FIELDS(imp_sth) < 0) {
+ dbd_maxdb_internal_error(sth, DBD_ERR_INITIALIZATION_FAILED_S, "Wrong
number of columns");
+ DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_registerResultSet,
SQLDBC_FALSE);
+ }
+
if (imp_sth->m_cols){
/*already registered*/
return SQLDBC_TRUE;
@@ -1214,20 +1214,20 @@
case SQLDBC_SQLTYPE_NUMBER :
case SQLDBC_SQLTYPE_SMALLINT :
case SQLDBC_SQLTYPE_INTEGER : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength (imp_sth->m_rsmd,
column) + 2;
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column) + 2;
break;
}
- case SQLDBC_SQLTYPE_BOOLEAN : {
+ case SQLDBC_SQLTYPE_BOOLEAN : {
collen = 1;
break;
}
case SQLDBC_SQLTYPE_FLOAT :
case SQLDBC_SQLTYPE_VFLOAT : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength (imp_sth->m_rsmd,
column) + 6; /*-[0-9]+.[0-9]+E[-][0-9][0-9]*/
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column) + 6; /*-[0-9]+.[0-9]+E[-][0-9][0-9]*/
break;
}
default : {
- collen = SQLDBC_ResultSetMetaData_getColumnLength (imp_sth->m_rsmd,
column);
+ collen = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column);
break;
}
}
@@ -1243,7 +1243,7 @@
allColumnsLength = 0;
for (column = 1; column <= colcnt; column++) {
dbd_maxdb_bind_column *m_col = &imp_sth->m_cols[column-1];
- SQLDBC_Int4 ColumnLength = SQLDBC_ResultSetMetaData_getColumnLength
(imp_sth->m_rsmd, column);
+ SQLDBC_Int4 ColumnLength = SQLDBC_ResultSetMetaData_getPhysicalLength
(imp_sth->m_rsmd, column);
SQLDBC_SQLType ColumnType = SQLDBC_ResultSetMetaData_getColumnType
(imp_sth->m_rsmd, column);
m_col->hostType = SQLDBC_HOSTTYPE_ASCII;
m_col->chopBlanks = SQLDBC_FALSE;
@@ -1268,8 +1268,12 @@
break;
}
case SQLDBC_SQLTYPE_CHA :
- case SQLDBC_SQLTYPE_CHE :
+ case SQLDBC_SQLTYPE_CHE :{
+ m_col->chopBlanks = SQLDBC_TRUE;
+ break;
+ }
case SQLDBC_SQLTYPE_UNICODE :{
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
m_col->chopBlanks = SQLDBC_TRUE;
break;
}
@@ -1282,9 +1286,10 @@
break;
}
case SQLDBC_SQLTYPE_VARCHARUNI : {
- break;
- }
- case SQLDBC_SQLTYPE_BOOLEAN : {
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
+ break;
+ }
+ case SQLDBC_SQLTYPE_BOOLEAN : {
m_col->hostType = SQLDBC_HOSTTYPE_INT1;
ColumnLength = 1;
break;
@@ -1304,7 +1309,7 @@
case SQLDBC_SQLTYPE_LONGE :
case SQLDBC_SQLTYPE_STRUNI :
case SQLDBC_SQLTYPE_LONGUNI : {
- m_col->hostType = SQLDBC_HOSTTYPE_ASCII;
+ m_col->hostType = SQLDBC_HOSTTYPE_UTF8;
ColumnLength = DBIc_LongReadLen(imp_sth);
break;
}
@@ -1335,6 +1340,7 @@
int erg = SQLDBC_TRUE;
D_imp_dbh_from_sth;
SQLDBC_Retcode exec_rc;
+ int ChopBlanks = 1; /* always chop blanks DBIc_has(imp_sth,
DBIcf_ChopBlanks); */
DBD_MAXDB_METHOD_ENTER(imp_sth, dbd_maxdb_st_execute);
@@ -1416,8 +1422,8 @@
dbd_maxdb_internal_error(sth,
DBD_ERR_LONG_COLUMN_TRUNCATED_D, paramIndex+1);
DBD_MAXDB_METHOD_RETURN(imp_sth, dbd_maxdb_st_execute,
DBD_MAXDB_ERROR_RETVAL);
}
- if (m_param->indicator >= 0){
- while (m_param->indicator >= 0 &&
buf[m_param->indicator]==' ') --m_param->indicator;
+ if (m_param->chopBlanks && ChopBlanks && m_param->indicator >
0){
+ while (m_param->indicator >= 0 &&
buf[m_param->indicator-1]==' ') --m_param->indicator;
}
break;
}
@@ -1788,7 +1794,7 @@
}
case sth_maxdb_option_CursorName:{
char* cursorname = SvPV(valuesv,kl);
- SQLDBC_PreparedStatement_setCursorName (imp_sth->m_prepstmt,
cursorname, kl, SQLDBC_StringEncodingType_Encoding_Ascii) ;
+ SQLDBC_PreparedStatement_setCursorName (imp_sth->m_prepstmt,
cursorname, kl, SQLDBC_StringEncodingType_Encoding_UTF8) ;
erg = SQLDBC_TRUE;
break;
}
@@ -1836,7 +1842,7 @@
if( SQLDBC_PreparedStatement_getCursorName (
imp_sth->m_prepstmt,
cname,
- SQLDBC_StringEncodingType_Encoding_Ascii,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&bufferLength) != SQLDBC_OK){
break;
@@ -1885,7 +1891,7 @@
if( SQLDBC_PreparedStatement_getTableName(
imp_sth->m_prepstmt,
cname,
- SQLDBC_StringEncodingType_Encoding_Ascii,
+ SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&bufferLength) != SQLDBC_OK){
break;
@@ -1910,7 +1916,7 @@
if (SQLDBC_ResultSetMetaData_getColumnName (imp_sth->m_rsmd,
i,
cname,
-
SQLDBC_StringEncodingType_Encoding_Ascii,
+
SQLDBC_StringEncodingType_Encoding_UTF8,
cnameLen,
&colnamelen) !=
SQLDBC_OK) {
dbd_maxdb_internal_error(sth, DBD_ERR_CANNOT_GET_COLUMNNAME_D, i);
@@ -2178,6 +2184,11 @@
parameter->value = newSViv(intval);
break;
}
+ case SQLDBC_SQLTYPE_UNICODE :
+ case SQLDBC_SQLTYPE_VARCHARUNI :
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ parameter->value = newSVsv(value);
+ break;
case SQLDBC_SQLTYPE_STRB :
case SQLDBC_SQLTYPE_LONGB :
case SQLDBC_SQLTYPE_CHB :
@@ -2208,7 +2219,8 @@
imp_sth->m_hasOutValues= SQLDBC_TRUE;
(void)SvUPGRADE(svVal, SVt_PVNV);
SvPOK_only(svVal);
-
+ parameter->chopBlanks = SQLDBC_FALSE;
+
switch (SQLDBC_ParameterMetaData_getParameterType
(imp_sth->m_paramMetadata, index)) {
case SQLDBC_SQLTYPE_STRB :
case SQLDBC_SQLTYPE_LONGB :
@@ -2217,11 +2229,22 @@
case SQLDBC_SQLTYPE_LONGA :
case SQLDBC_SQLTYPE_LONGE :
case SQLDBC_SQLTYPE_STRUNI :
- case SQLDBC_SQLTYPE_LONGUNI : {
- parameter->hostType = SQLDBC_HOSTTYPE_ASCII;
+ case SQLDBC_SQLTYPE_LONGUNI : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
paramlen = DBIc_LongReadLen(imp_sth);
break;
}
+ case SQLDBC_SQLTYPE_VARCHARUNI : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
+ break;
+ }
+ case SQLDBC_SQLTYPE_UNICODE : {
+ parameter->hostType = SQLDBC_HOSTTYPE_UTF8;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
+ parameter->chopBlanks = SQLDBC_TRUE;
+ break;
+ }
case SQLDBC_SQLTYPE_FIXED :
case SQLDBC_SQLTYPE_NUMBER :
case SQLDBC_SQLTYPE_SMALLINT :
@@ -2242,7 +2265,8 @@
break;
}
default : {
- paramlen = SQLDBC_ParameterMetaData_getParameterLength
(imp_sth->m_paramMetadata, index);
+ parameter->hostType = SQLDBC_HOSTTYPE_ASCII;
+ paramlen = SQLDBC_ParameterMetaData_getPhysicalLength
(imp_sth->m_paramMetadata, index);
break;
}
}
diff -uNr DBD-MaxDB-7.5.00.32.origin/dbdimp.h DBD-MaxDB-7.5.00.32/dbdimp.h
--- DBD-MaxDB-7.5.00.32.origin/dbdimp.h 2005-09-12 15:26:20.000000000 +0900
+++ DBD-MaxDB-7.5.00.32/dbdimp.h 2005-09-16 17:24:04.000000000 +0900
@@ -81,6 +81,7 @@
int sqltype; /*!< parameter type provide via bind method */
SQLDBC_HostType hostType; /*!< column datatyp */
SQLDBC_Length indicator; /*!< indicator value */
+ SQLDBC_Bool chopBlanks; /*!< flag that indicates whether the column is
relevant for cutoff blanks*/
} dbd_maxdb_bind_param;
/*
--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]