Bingo Hauke, I was waiting patiently and you arrived. :D

I will study those in great detail for sure.
Thanks for your time,
Sean


On Tue, 8 Dec 2020 at 17:15, Hauke Rehr <hauke.r...@uni-jena.de> wrote:

> Did I miss something or didn’t anyone answer the looping question yet?
>
> Without knowing much about what the names involved are doing,
> I think it ought to be
> pqfname@(res&;)"0 i. ncols
> which will have the shape
> (shape of i. ncols)×(shape of whatever pqfname res;0 returns)
>
> Am 08.12.20 um 14:34 schrieb emacstheviking:
> > Apologies for the length of this email but my brain has thrown one
> again...
> >
> > I am currently working on a wrapper for Postgres using libpq-fe. It's
> > working but in need of some higher level functions to make result sets
> > easier to work with and feel more J-like.
> >
> > Once the query is executed, all results have been stored in RAM by the
> > library (not my first choice!) and then a value is obtained like so
> >
> >     pqgetvalue result_set;row;col
> >
> > I've seen the source code for the library and the above translate
> directly
> > into an array read;
> >
> > char * PQgetvalue(const PGresult *res, int tup_num, int field_num)
> > {
> >   if (!check_tuple_field_number(res, tup_num, field_num))
> >     return NULL;
> >   return res->tuples[tup_num][field_num].value;
> > }
> >
> >
> > *# mema and management.*
> >
> > My plan was to write a 'pgquery' verb that takes the connection handle
> and
> > a SQL query (details to be settled) and then creates and executes the
> query
> > and returns back a table of boxed strings. My first question then is how
> is
> > the memory managed? I know from the documentation that memf is the
> natural
> > (obverse?) way to release memory but I wanted to know what happens if I
> > allocate a string with mema then return it and assign it into a boxed
> > structure.  I have an ffi helper I wrote, I call it psz:
> >
> >     psz=: 3 : 'memr (>y),0,_1'
> >
> > If I assign the return value to a variable:
> >
> >     name =. psz a-mem-address-of-a-C-String
> >
> > is the pointer aliased or can I now memf the original address and still
> > have a viable copy of the string later. I ask this because, for the
> > lifetime of the result set object, the internally allocated memory is
> > always around until a pqclear is executed. In this particular case I am
> > hopefully correct in thinking that my returned box list of strings is
> > stable up until that time.
> >
> > (In --this case-- I don't need to release anything as the library does it
> > but I wanted a general asnwer about what memr actually does)
> >
> > I am more interested in the general case of using 'memr' though; does it
> > allocate a copy or, as I suspect, is it merely re-typing the memory
> address
> > as a string, in the same manner that 'ic' can be used to process integers
> > and floats. Some insights would be appreciated.
> >
> >
> > *# looping*
> >
> > This brings me to how best to extract the data from the internal result
> > set? My basic flow so far is this:
> >
> > conn=. pqconnectdb<'dbname=foo'
> > res=.pqexec conn;'select * from some_table'
> > nrows=. pqtuples res
> > ncols=. pqfields res
> >
> > So I might have 7 rows and 12 columns per row. Obtaining the name of the
> > columns is done using the pqfname call. I've been playing around and the
> > basic loop I have is awful!
> >
> > pgtest =: 3 : 0
> >  nrows=. pqntuples y
> >  ncols=. pqnfields y
> >  NB. get the column names as the first row
> >   for_j. i. ncols do.
> >    c =. pqfname y;j
> >    smoutput psz c
> >  end.
> > ''
> > )
> >
> > I know I can do this 'looplessly' but have so far failed. It's going to
> be
> > a combination of bonding and maybe a hook or something but as I say,
> total
> > quagmire at the moment! The thing I require to be looped is this:
> >
> >     pqfname res;col.  NB. where col is i. ncols
> >
> > My thought process was along the lines of, produce an array of res;i
> pairs
> > but that feels ugly, then I thought about and played with trying to just
> > pass the i. ncols list into a bonded call to ; but somehow got stuck...
> >
> > So..I am after some nice solutions to how best to iterate ncols to obtain
> > the initial row of column names and then extract each row of data from
> the
> > result set...I know this can be done very succinctly, I continue to work
> on
> > it...
> >
> > Loving the challenge of thinking so differently!
> >
> > Thanks all,
> > Sean
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> >
>
> --
> ----------------------
> mail written using NEO
> neo-layout.org
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to