Hi Ziv, You are right! I am quite ashamed of not remembering to check the database state :) Thanks a lot for your help!
Sincerely, Saulo On Fri, Jul 8, 2016 at 2:44 PM, Ziv Scully <[email protected]> wrote: > Hi Saulo, > > Exactly right about the heap. I'd be very surprised if the page blankness > is because of heap-related issues. > > Nested [mapX]s are definitely okay. Maybe it's just that all of the > [taskRows] lists are empty for some reason? (I haven't carefully read your > queries.) Because all your xml is generated in that innermost loop, if that > was the case, every innermost [mapX] would map over 0 things and you'd get > no output. Perhaps try something like: > > fun main () = > timeSheet <- timeSheet 1; > return > <xml> > <body> > <table> > {case timeSheet of > TimeSheet (projectRows) => > mapX (fn projectRow => > case projectRow of > ProjectRow (projectId, projectName, taskRows) => > (**** begin new stuff ****) > <xml> > <tr> > <th>{[projectId]}</th> > <th>{[projectName]}</th> > </tr> > { > (**** end new stuff ****) > mapX (fn taskRow => > case taskRow of > TaskRow (taskId, taskName, _) => > <xml> > <tr> > <td>{[projectId]}</td> > <td>{[projectName]}</td> > <td>{[taskId]}</td> > <td>{[taskName]}</td> > </tr> > </xml>) > taskRows) > (**** begin new stuff ****) > } > </xml> > (**** end new stuff ****) > projectRows} > </table> > </body> > </xml> > > > > On Fri, Jul 8, 2016 at 11:13 AM, Saulo Araujo <[email protected]> wrote: > >> I just found out that the messages "Error triggers unlimited retry: >> Couldn't allocate new heap chunk contiguously; increasing size to..." are >> not error messages, but informative ones. Also, the Ur/Web manual talks >> about the minHeap setting. After setting it to 1024 in my project file, the >> messages vanished, as expected. Unfortunately, my page is blank. If I >> remove the inner mapX like below, I can see the projects stored in the >> database. Does anyone know what I am doing wrong? Is it possible to nest >> mapX like I did? >> >> {case timeSheet of >> TimeSheet (projectRows) => >> mapX (fn projectRow => >> case projectRow of >> ProjectRow (projectId, projectName, taskRows) => >> <xml> >> <tr> >> <td>{[projectId]}</td> >> <td>{[projectName]}</td> (* ... *) >> >> Sincerely, >> Saulo >> >> >> >> On Fri, Jul 8, 2016 at 11:38 AM, Saulo Araujo <[email protected]> wrote: >> >>> Hi, >>> >>> I am getting the error >>> >>> "Error triggers unlimited retry: Couldn't allocate new heap chunk >>> contiguously; increasing size to 512" >>> >>> when I execute the following program >>> >>> open List >>> >>> table user_table: {ID: int, NAME: string} PRIMARY KEY ID >>> >>> table project_table: {ID: int, NAME: string, DESCRIPTION: string, >>> USER_ID: int} PRIMARY KEY ID, >>> CONSTRAINT USER_ID FOREIGN KEY USER_ID REFERENCES user_table(ID) >>> >>> table task_table: {ID: int, NAME: string, DESCRIPTION: string, USER_ID: >>> int} PRIMARY KEY ID, >>> CONSTRAINT USER_ID FOREIGN KEY USER_ID REFERENCES user_table(ID) >>> >>> table project_task_table: {PROJECT_ID: int, TASK_ID: int} PRIMARY KEY >>> (PROJECT_ID, TASK_ID), >>> CONSTRAINT PROJECT_ID FOREIGN KEY PROJECT_ID REFERENCES >>> project_table (ID), >>> CONSTRAINT TASK_ID FOREIGN KEY TASK_ID REFERENCES task_table (ID) >>> >>> table entry_table: {PROJECT_ID: int, TASK_ID: int, DATE: time, TIME: >>> int} PRIMARY KEY (PROJECT_ID, TASK_ID, DATE) >>> CONSTRAINT PROJECT_ID FOREIGN KEY PROJECT_ID REFERENCES >>> project_table (ID), >>> CONSTRAINT TASK_ID FOREIGN KEY TASK_ID REFERENCES task_table (ID) >>> >>> datatype entry_cell = EntryCell of int * float >>> >>> datatype task_row = TaskRow of int * string * list entry_cell >>> >>> datatype project_row = ProjectRow of int * string * list task_row >>> >>> datatype time_sheet = TimeSheet of list project_row >>> >>> fun timeSheet userId = >>> projectIdTaskRowsPairs <- query (SELECT P.ID AS PROJECT_ID, T.ID AS >>> ID, T.NAME AS NAME >>> FROM project_table AS P >>> INNER JOIN project_task_table AS PT ON PT.PROJECT_ID = P.ID >>> INNER JOIN task_table AS T ON T.ID = PT.TASK_ID >>> WHERE P.USER_ID = {[userId]} >>> ORDER BY T.NAME) >>> (fn r projectIdTaskRowsPairs => >>> let val projectIdTaskRowsPair = (r.PROJECT_ID, TaskRow (r.ID, r.NAME, >>> [])) in >>> return (projectIdTaskRowsPair :: projectIdTaskRowsPairs) >>> end) >>> []; >>> >>> projectRows <- query (SELECT P.ID AS ID, P.NAME AS NAME >>> FROM project_table AS P >>> WHERE P.USER_ID = {[userId]} >>> ORDER BY P.NAME) >>> (fn r projectRows => >>> let val projectIdTaskRowsPairs = filter (fn (projectId, _) => >>> projectId = r.ID) projectIdTaskRowsPairs >>> val taskRows = mp (fn (_, taskRow) => taskRow) projectIdTaskRowsPairs >>> val projectRow = ProjectRow (r.ID, r.NAME, taskRows) >>> in >>> return (projectRow :: projectRows) >>> end) >>> []; >>> >>> return (TimeSheet projectRows) >>> >>> fun main () = >>> timeSheet <- timeSheet 1; >>> >>> return >>> <xml> >>> <body> >>> <table> >>> {case timeSheet of >>> TimeSheet (projectRows) => >>> mapX (fn projectRow => >>> case projectRow of >>> ProjectRow (projectId, projectName, taskRows) => >>> mapX (fn taskRow => >>> case taskRow of >>> TaskRow (taskId, taskName, _) => >>> <xml> >>> <tr> >>> <td>{[projectId]}</td> >>> <td>{[projectName]}</td> >>> <td>{[taskId]}</td> >>> <td>{[taskName]}</td> >>> </tr> >>> </xml>) >>> taskRows) >>> projectRows} >>> </table> >>> </body> >>> </xml> >>> >>> Does anyone knows how to circumvent it? Is it possible to configure the >>> size of the heap? >>> >>> Sincerely, >>> Saulo >>> >>> >> >> _______________________________________________ >> Ur mailing list >> [email protected] >> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur >> >> > > _______________________________________________ > Ur mailing list > [email protected] > http://www.impredicative.com/cgi-bin/mailman/listinfo/ur > >
_______________________________________________ Ur mailing list [email protected] http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
