Need to call SQLGetData multiple times to get long field, limit per Get is set by ODBC driver. I'm using a Windows 2003 PostgreSQL ODBC driver.
Example patch.
--- /weigj-go-odbc-514210d/odbc.go
+++ /weigj-go-odbc-514210d-2/odbc.go
@@ -453,12 +453,22 @@
case C.SQL_WCHAR, C.SQL_WVARCHAR, C.SQL_WLONGVARCHAR:
value := make([]uint16, int(field_len)+8)
ret = C.SQLGetData(C.SQLHSTMT(stmt.handle), C.SQLUSMALLINT(field_index+1), C.SQL_C_WCHAR, C.SQLPOINTER(unsafe.Pointer(&value[0])), C.SQLINTEGER(int(field_len)+4), &fl)
s := UTF16ToString(value)
s := ""
for Success(ret) {
if len(UTF16ToString(value))<=0 { break }
s += UTF16ToString(value)
ret = C.SQLGetData(C.SQLHSTMT(stmt.handle), C.SQLUSMALLINT(field_index+1), C.SQL_C_WCHAR, C.SQLPOINTER(unsafe.Pointer(&value[0])), C.SQLINTEGER(int(field_len)+4), &fl)
}
v = s
default:
value := make([]byte, int(fl)+2)
ret = C.SQLGetData(C.SQLHSTMT(stmt.handle), C.SQLUSMALLINT(field_index+1), C.SQL_C_CHAR, C.SQLPOINTER(unsafe.Pointer(&value[0])), C.SQLINTEGER(int(field_len)+4), &fl)
s := string(value[0:])
s := ""
for Success(ret) {
if len(string(value[0:]))<=0 { break }
s += string(value[0:])
ret = C.SQLGetData(C.SQLHSTMT(stmt.handle), C.SQLUSMALLINT(field_index+1), C.SQL_C_CHAR, C.SQLPOINTER(unsafe.Pointer(&value[0])), C.SQLINTEGER(int(field_len)+4), &fl)
}
v = s
debugPrint("default type", value, fl, s)
}
Need to call SQLGetData multiple times to get long field, limit per Get is set by ODBC driver. I'm using a Windows 2003 PostgreSQL ODBC driver.
Example patch.
--- /weigj-go-odbc-514210d/odbc.go +++ /weigj-go-odbc-514210d-2/odbc.go @@ -453,12 +453,22 @@ case C.SQL_WCHAR, C.SQL_WVARCHAR, C.SQL_WLONGVARCHAR: value := make([]uint16, int(field_len)+8) ret = C.SQLGetData(C.SQLHSTMT(stmt.handle), C.SQLUSMALLINT(field_index+1), C.SQL_C_WCHAR, C.SQLPOINTER(unsafe.Pointer(&value[0])), C.SQLINTEGER(int(field_len)+4), &fl)