Yes Henry I know about those. I have a reasonable understanding of it but I lack the flying time in general solving real issues with J.
I spent 45 minutes last night just absorbing the page on ranks, array, k-cells and frames....it makes sense when you read it! I am never going to get a job working with J unless I start my own start-up I guess. Thanks. Sean On Tue, 8 Dec 2020 at 19:36, Henry Rich <henryhr...@gmail.com> wrote: > Do you know about NuVoc and the ancillary pages pointed to below the > primitive table? There is a lot written about rank. > > Henry Rich > > On 12/8/2020 2:27 PM, emacstheviking wrote: > > Hauke, > > PERFECT! > > > > ,.psz &.> pqfname@(res&;)"0 i.ncols > > ┌───────────────────┐ > > │id │ > > ├───────────────────┤ > > │invoice_id │ > > ├───────────────────┤ > > │created │ > > ├───────────────────┤ > > │status │ > > ├───────────────────┤ > > │ce_survey_id │ > > ├───────────────────┤ > > │organisation_id │ > > ├───────────────────┤ > > │payment_provider_id│ > > └───────────────────┘ > > > > I just have to go through it step at a time until I fully understand the > > magic! I have a vague understanding of rank and shape and that you can > use > > "0 "1 etc which affects the frame/k-cell metrics but could you explain > what > > it is doing here please? > > > > Thanks > > 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 > > > -- > This email has been checked for viruses by AVG. > https://www.avg.com > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm