X-Original-To: pgsql-sql@postgresql.org Received: from spampd.localdomain (postgresql.org [64.49.215.8]) by postgresql.org (Postfix) with ESMTP id 3C352476341 for ; Wed, 26 Mar 2003 17:48:08 -0500 (EST) Received: from mb1i0.ns.pitt.edu (mb1i0.ns.pitt.edu [136.142.186.35]) by postgresql.org (Postfix) with ESMTP id 1887047632B for ; Wed, 26 Mar 2003 17:48:04 -0500 (EST) Received: from localhost ([136.142.36.12]) by pitt.edu (PMDF V5.2-32 #41462) with ESMTPA id <01KTZM1YQIX2000DV6@mb1i0.ns.pitt.edu> for pgsql-sql@postgresql.org; Wed, 26 Mar 2003 17:47:28 EST Date: Wed, 26 Mar 2003 17:47:11 -0500 From: "G. Anthony Reina" Subject: Re: How can I pass an array from PostgreSQL to C (libpq)? In-reply-to: <3E81FA6A.8090201@joeconway.com> Originator-info: login-id=gar8; server=imap.pitt.edu To: Joe Conway Cc: pgsql-sql@postgresql.org Message-id: <519653832.1048700831@dell1.neurobio.pitt.edu> MIME-version: 1.0 X-Mailer: Mulberry/2.2.1 (Win32) Content-type: text/plain; charset=us-ascii; format=flowed Content-disposition: inline Content-transfer-encoding: 7bit References: <3E81FA6A.8090201@joeconway.com> X-Spam-Status: No, hits=-26.0 required=5.0 tests=BAYES_01,IN_REP_TO,QUOTED_EMAIL_TEXT,REFERENCES, REPLY_WITH_QUOTES autolearn=ham version=2.50 X-Spam-Level: X-Spam-Checker-Version: SpamAssassin 2.50 (1.173-2003-02-20-exp) X-Archive-Number: 200303/602 X-Sequence-Number: 12640 Yes, in the past I had used binary cursor and things seemed to work fine. However, recently when I ran the binary cursor stuff, the array ends up getting shifted to the right one index. So what should be placed in array_var[n] was getting placed in array var[n+1]. Plus, I was always a little concerned with the binary cursor when going across platforms (e.g. endianess, alignment). I ended up just writing a little script that parses the string for the comma separators. That works fine, but wanted to see if others had more elegant solutions. I'll take a look at the /utils directory you mentioned. Perhaps there are functions that I'm not aware of (e.g. I didn't know there was a built in function called array_dims that gives the array dimensions). -Tony --On Wednesday, March 26, 2003 11:07 AM -0800 Joe Conway wrote:r > > PQgetvalue is always going to give you the string representation of the > field value *unless* you specify a binary cursor. In that case you'll get > all requested fields in binary form, and it's your responsibility to deal > with making sense of what you get. There are some backend macros and > functions that can help you get at array values. Take a look at > src/utils/adt/arrayfuncs.c and src/include/utils/array.h. You might want > to read through contrib/array and/or contrib/intarray for examples. > > You could also consider writing your array manipulation code in a user > defined C function and just return the end result to the libpq program. > It's hard to know if this is an option without more detail on what you're > trying to do. > > Joe >