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

Reply via email to