Re: Empty VARCHAR parameters converted to NULL

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CAHt6W4cxRRnUSPcn4MuoKW4ep3NWJNpgCzRrybRyhOzArYJU9w@mail.gmail.com>
The problem is distinguish between null and empty. By definition 0 is null
and - 1 is not accepted. Another negative value could work and a program
could detect of library is FreeTDS or not and use this value (FreeTDS) or 0
(ms or sybase). Libraries do not have same abi so a compile time check
would be fine. Other libraries use 1 as length and fill the byte to a
specific value (like space for varchar and 0 for binaries)
On 17 Mar 2016 03:45, "Joshua Lang" <[email protected]> wrote:

> I assume you're referring to input/output parameters where the input value
> is NULL, but the output value is non-NULL?
>
> The MSDN docs for rpcparam (
> https://msdn.microsoft.com/en-us/library/aa937102(v=sql.80).aspx) don't
> really indicate how this case is handled, but
> I think the following would work for the input/output parameter:
>
> maxlen = <maximum desired length of return value>
> datalen = 0
>
> Basically maxlen is used for the length of the output parameter buffer and
> datalen is the length of the input data.
>
> Thoughts?
>
>
> On Tue, Mar 15, 2016 at 4:37 PM, Frediano Ziglio <[email protected]>
> wrote:
>
> > I was looking at this issue. The problem raise when you want a return
> > value but you want to pass a empty or a NULL varchar. How to
> > differentiate in this case? value cannot be NULL for return
> > parameters.
> >
> > Frediano
> >
> >
> > 2016-01-19 18:25 GMT+00:00 Joshua Lang <[email protected]>:
> > > I've read that older versions didn't even support passing 0-length data
> > > (prior to TDS 7.0 I believe). If this could be supported for later
> > versions
> > > of TDS 7.0, that would be great.
> > >
> > > Thanks.
> > >
> > > On Tue, Jan 19, 2016 at 2:52 AM, Frediano Ziglio <[email protected]>
> > wrote:
> > >
> > >> 2016-01-16 1:41 GMT+00:00 Joshua Lang <[email protected]>:
> > >> > In the latest version of FreeTDS-dblib (0.95.79) I'm passing rpc
> > VARCHAR
> > >> > parameters of 0 length, but non-NULL (empty strings). FreeTDS seems
> to
> > >> turn
> > >> > these into NULL values before passing them on to SQL Server. From
> what
> > >> I've
> > >> > read, it seems as if older databases didn't support passing empty
> > >> strings,
> > >> > but newer ones do? (i.e. TDS 7.0+ do support empty strings).
> > >> >
> > >> > It seems as this is a known issue, but I was wondering if it is
> > possible
> > >> to
> > >> > fix it for the newer versions of SQL server? E.g. in dbrpcparam()
> > >> passing a
> > >> > non-NULL pointer to the 'value' parameter and a 0 to 'datalen' would
> > >> > indicate an empty string is desired if possible.
> > >> >
> > >> > Thoughts?
> > >>
> > >>
> > >> The main problem is not libTDS (the code library) but dbrpcparam
> > >> specification.
> > >> datalen < 0 is invalid for variable fields (like VARCHAR) and 0 is
> used
> > >> for NULL
> > >> value (no matter the data pointer). But looks like your suggestion
> > >> (not NULL value
> > >> and 0 datalen) could be a good choice.
> > >> Not sure however if this could work with all types and server versions
> > >> (for instance
> > >> 0 size TEXT).
> > >> We can do it but I'm not thinking about backporting it to 0.95.
> > >>
> > >> Frediano
> > >> _______________________________________________
> > >> FreeTDS mailing list
> > >> [email protected]
> > >> http://lists.ibiblio.org/mailman/listinfo/freetds
> > >>
> > > _______________________________________________
> > > FreeTDS mailing list
> > > [email protected]
> > > http://lists.ibiblio.org/mailman/listinfo/freetds
> > _______________________________________________
> > FreeTDS mailing list
> > [email protected]
> > http://lists.ibiblio.org/mailman/listinfo/freetds
> >
> _______________________________________________
> FreeTDS mailing list
> [email protected]
> http://lists.ibiblio.org/mailman/listinfo/freetds
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.