[freetds] defncopy query "order by" different for ASE

Frediano Ziglio freddy77 at gmail.com
Thu Aug 25 07:34:45 EDT 2016


2016-08-24 19:20 GMT+01:00 John Kendall <john at capps.com>:
>
>> On Aug 24, 2016, at 10:50 AM, James K. Lowden <james.k.lowden at icloud.com> wrote:
>>
>> On Wed, 24 Aug 2016 06:25:47 +0000
>> John Kendall <john at capps.com> wrote:
>>
>>>
>>>> On Aug 23, 2016, at 10:41 PM, James K. Lowden
>>>> <james.k.lowden at icloud.com> wrote:
>>>>
>>>> On Wed, 24 Aug 2016 01:38:25 +0000
>>>> John Kendall <john at capps.com> wrote:
>>>>
>>>>> I figured it out.  Getting the right headers in the right order
>>>>> slowed me down. Here is my patch for consideration.
>>>>
>>>> John, I think all you need is a call to the public function
>>>>
>>>>     const char *dbversion(void);
>>>>
>>>
>>> It looks like dbversion() returns the FreeTDS version number,
>>> currently "freetds v1.00.13." The patch is working for me, but if
>>> there is a better way... John
>>
>> Sorry, late night.  The macro you want is DBTDS().  It returns an
>> integer for which symbolic constants are defined in sybdb.h.
>>
>> --jkl
>
> That's the ticket!  Many thanks.
> New, simpler patch for consideration:
>
> *** defncopy.c  2016-06-19 02:00:01.000000000 -0700
> --- defncopy.c-patch    2016-08-24 11:13:30.883345277 -0700
> *************** main(int argc, char *argv[])
> *** 220,232 ****
>                                          " and          o.name = '%s'"
>                                          " and          o.uid = user_id('%s')"
>                                          " and          o.type not in ('U', 'S')" /* no user or system tables */
> !                                        " order by     c.number, c.colid"
>                                         ;
>                 static const char query_table[] = " execute sp_help '%s.%s' ";
>
>                 parse_argument(argv[i], &procedure);
>
> !               erc = dbfcmd(dbproc, query, procedure.name, procedure.owner);
>
>                 /* Send the query to the server (we could use dbsqlexec(), instead) */
>                 erc = dbsqlsend(dbproc);
> --- 220,233 ----
>                                          " and          o.name = '%s'"
>                                          " and          o.uid = user_id('%s')"
>                                          " and          o.type not in ('U', 'S')" /* no user or system tables */
> !                                        " order by     c.number, %s c.colid"
>                                         ;
>                 static const char query_table[] = " execute sp_help '%s.%s' ";
>
>                 parse_argument(argv[i], &procedure);
>
> !               erc = dbfcmd(dbproc, query, procedure.name, procedure.owner,
> !                            (DBTDS(dbproc) == DBTDS_5_0) ? "c.colid2, ":"");
>
>                 /* Send the query to the server (we could use dbsqlexec(), instead) */
>                 erc = dbsqlsend(dbproc);
>

Hi,
  converted to a patch and applied. Both master and 1.0.

Thanks,
  Frediano


More information about the FreeTDS mailing list