Re: Assertin failed: unknown bindtype with unknown varlen
LacaK <[email protected]>
| Newsgroups | gmane.comp.db.tds.freetds |
|---|---|
| Message-ID | <[email protected]> |
Attached patch, which works for me ...
Thanks
-Laco.
> Hi,
> I get this error "unknown bindtype with unknown varlen" when calling
> dbconvert() in dblib.
> This is my situation:
> I have table with VARBINARY column with value which is empty not null
> (dbdatlen() = 0)
> Then I call dbconvert with srctype=SQLBINARY, srclen=0,
> desttype=SQLBINARY, destlen > 0 and I get above mentioned assertion.
>
> Looking into dbconvert there is in the begining (note condition:
> srclen==0):
>
> if (src == NULL || srclen == 0) {
> int bind = dbbindtype(desttype);
> int size = tds_get_size_by_type(desttype);
>
> if (SYBCHAR == desttype) {
> if (destlen > 0) {
> size = destlen;
> bind = CHARBIND;
> } else {
> size = 1;
> bind = NTBSTRINGBIND;
> }
> }
>
> dbgetnull(dbproc, bind, size, dest); // <--- HERE OCCURS
> ASSERTION
> return size;
> }
>
> Next look into dbgetnull():
>
> /*
> * For variable-length types, nonpositive varlen indicates
> * buffer is "big enough" but also not to pad.
> * Apply terminator (if applicable) and go home.
> */
> if (varlen <= 0) {
> switch (bindtype) {
> case STRINGBIND:
> case NTBSTRINGBIND:
> varaddr[pnullrep->len] = '\0';
> /* fall thru */
> case CHARBIND:
> case VARYCHARBIND:
> + case BINARYBIND: // <--- MISSING HERE ?
> + case VARYBINBIND: // <--- MISSING HERE ?
> break;
>
> As BINARYBIND is not handled ATM default is executed:
> default:
> assert(!"unknown bindtype with unknown varlen");
>
> Can you please fix it ?
> Thanks
> -Laco.
> _______________________________________________
> FreeTDS mailing list
> [email protected]
> http://lists.ibiblio.org/mailman/listinfo/freetds
>
_______________________________________________
FreeTDS mailing list
[email protected]
http://lists.ibiblio.org/mailman/listinfo/freetds
dblib.c.diff
(text/plain, 255 B)
--- dblib.c.orig Fri Mar 27 07:13:04 2015
+++ dblib.c Wed Apr 01 10:01:10 2015
@@ -2245,6 +2245,8 @@
size = 1;
bind = NTBSTRINGBIND;
}
+ } else if (SYBBINARY == desttype) {
+ size = destlen;
}
dbgetnull(dbproc, bind, size, dest);