Skip to Content.
Sympa Menu

freetds - Re: [freetds] ctlib compute columns (was: "Fix affected rows after insert with prepared query" side effect)

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Frediano Ziglio <freddy77 AT gmail.com>
  • To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
  • Subject: Re: [freetds] ctlib compute columns (was: "Fix affected rows after insert with prepared query" side effect)
  • Date: Fri, 13 May 2016 07:30:05 +0100

It's always a good idea to open a new thread for a new topic!

2016-05-11 21:47 GMT+01:00 John Kendall <john AT capps.com>:
>
> On May 11, 2016, at 1:23 PM, Frediano Ziglio <freddy77 AT gmail.com> wrote:
>
>> 2016-05-11 6:07 GMT+01:00 John Kendall <john AT capps.com>:
>>>
>>>> On May 10, 2016, at 3:34 PM, Frediano Ziglio <freddy77 AT gmail.com> wrote:
>>>>
>>>> 2016-05-10 22:31 GMT+01:00 John Kendall <john AT capps.com>:
>>>>> It appears the patch for this ("fix ct-library rows count") has broken
>>>>> compute in ctlib:
>>>>>
>>>>>
>>>>> select col=1 into #tbl insert #tbl values (2) select * from #tbl
>>>>> compute sum(col)
>>>>> (1 row affected)
>>>>> (1 row affected)
>>>>> col
>>>>> -----------
>>>>> 1
>>>>> 2
>>>>> 2
>>>>>
>>>>> (3 rows affected)
>>>>>
>>>>> dblib (and ctlib RC1) does the expected:
>>>>>
>>>>> select col=1 into #tbl insert #tbl values (2) select * from #tbl
>>>>> compute sum(col)
>>>>> (1 row affected)
>>>>> (1 row affected)
>>>>> col
>>>>> -----------
>>>>> 1
>>>>> 2
>>>>> sum
>>>>> ===========
>>>>> 3
>>>>>
>>>>> (3 rows affected)
>>>>>
>>>>>
>>>>> Sorry to keep finding things!
>>>>>
>>>>> John
>>>>>
>>>>>
>>>>
>>>> Can you put some more detailed examples? Which program did you use?
>>>>
>>>> Frediano
>>>
>>> I'm using sqsh.
>>>
>>> The compute clause should return an extra result line. In the example I
>>> have given above, the table is a single column table with two rows with
>>> values 1 and 2. Adding the compute sum clause to the select should
>>> return a compute result of 3, instead it is returns an extra copy of the
>>> last row. My example is not a special case, no compute (sum, max, min,
>>> avg, etc) results seem to be returning from any queries with a compute
>>> clause. I never saw this problem before RC4. Backing out the 'fix
>>> ct-library rows count' patch on ct.c makes it return the expected result.
>>>
>>> John
>>>
>>
>>
>> Just to be sure, can you test 1.0rc5 ?
>>
>
> I already have. And it looks good. Thanks.
> While I have your attention, and you are in that part of the code, I wonder
> if you might look into this:
>
> https://lists.ibiblio.org/sympa/arc/freetds/2016q1/029725.html
>
> I want to clarify what I'm asking you to look into. That was a multi-topic
> thread.
> The problem I am still interested in fixing is the ct_compute_info return
> values.
> (The rest of that thread turned out to just be client differences.)
>

Patch looks good. Take a look at "compute operator" in include/freetds/tds.h.

Looks like for dblib constants are defined as protocol so no
transformation is required however ctlib (and our headers!) contain
different constants. Your patch is good however:
- I would add a small function to do the conversion;
- I would add support for additional mssql operators (I would collapse
CNT_BIG into count and *U ones in no -U constants).

Frediano




Archive powered by MHonArc 2.6.24.

Top of Page