-That- Henry? I have spent a lot of hours reading that book. Thank you Henry, you have no ida how many times I've read the loopless code page and been in awe!
I continue to read it. On Wed, 9 Dec 2020 at 01:58, Joey K Tuttle <[email protected]> wrote: > Jobs - bad assumption. Having said that, I don't want to discourage > entrepreneurs, looking forward to your startup. > > Loops and resources. Henry is modest and I haven't seen any remarks > indicating you have absorbed Henry's book - > > J for C Programmers https://www.jsoftware.com/help/jforc/contents.htm > > If not, you should. > > > On 2020Dec 8, at 12:49, emacstheviking <[email protected]> wrote: > > > > 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 <[email protected]> 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 <[email protected]> > 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 > > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
