Now I really get what was going wrong :) I was defining a variable 'posts' that was then being queried rather than the table named 'posts'. I guess I thought that the SQL table and variable namespace was different than the Ur namespace, or I just didn't notice the variable and table names were the same.
I dream of having the ML knowledge and time to work on better error messages for Ur/Web. Maybe someday. I once worked on a small compiler and kept a log of bad error messages, the code and then the solution and possible error message to what the problem was so the messages could get better. Maybe we could start a place on the wiki or issue tracker for such a database. Burton On Fri, Oct 3, 2014 at 1:39 PM, Burton Samograd <[email protected]> wrote: > Looks like I have to take better care of my variable naming to prevent > clashes. > > Thanks. > > Burton > > On Fri, Oct 3, 2014 at 1:33 PM, mutaamba maasha <[email protected]> wrote: > >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA1 >> >> (* It seems the problem was the naming of the >> query result, the query result was colliding >> with the table. Let me know if this was the >> case and if the code below helps. >> >> Happy hacking >> *) >> >> (* adding the needed styles *) >> style topbar >> style postsList >> style post >> style postTitle >> style postAuthor >> style postBody >> style postBottom >> style postComments >> style postDate >> >> table posts : { Id : int, Title : string, Body : string, Created : time } >> PRIMARY KEY Id >> table userIdToPostIds : { UserId : int, PostId : int } >> PRIMARY KEY UserId >> table users : { Id : int, Username : string } >> PRIMARY KEY Id >> >> (* Adding this here so it compiles *) >> val blogName : string = "The finest culinary selections from the land >> of tofu." >> (* Using modules to so everything fits in one >> file. If you are curious about modules you >> can find out more about them here : >> http://www.impredicative.com/ur/tutorial/intro.html >> You want to remove this because you have the >> files page.ur* >> *) >> signature PAGE = sig >> val page' : string -> xbody -> page >> end >> structure Page : PAGE = struct >> fun page' (t : string) (b : xbody) : page= >> <xml> >> <head><title>{[t]}</title></head> >> <body> >> {[b]} >> </body> >> </xml> >> end >> (* The end of the module code/code you should remove *) >> >> >> fun blog () : transaction page = >> (* Changed the name of the query result - this is most likely >> what is was causing your problem. *) >> post_query_1 <- queryX (SELECT Posts.Title, Posts.Body, >> Users.Username, Posts.Created >> FROM posts, users, userIdToPostIds >> WHERE users.Id = userIdToPostIds.UserId >> AND posts.Id = userIdToPostIds.PostId) >> (fn row => post' row.Posts.Title >> row.Posts.Body row.Users.Username row.Posts.Created); >> (* changed the name of the query result *) >> post_query_2 <- queryX (SELECT Posts.Title, Posts.Body, >> Users.Username,Posts.Created >> FROM posts, users, userIdToPostIds >> WHERE users.Id = userIdToPostIds.UserId >> AND posts.Id = userIdToPostIds.PostId) >> (fn row => post' row.Posts.Title >> row.Posts.Body row.Users.Username row.Posts.Created); >> return (Page.page' blogName >> <xml> >> {topbar' ()} >> {posts' post_query_1} >> {posts' post_query_2} >> </xml>) >> >> and topbar' () : xbody = >> <xml><div class="topbar">{[blogName]}</div></xml> >> (* added type information here *) >> and posts' (posts : xbody) : xbody = >> <xml><div class="postsList"> >> {posts} >> </div></xml> >> (* Used the code from the previous email >> ... I am going to guess it is what you >> have. *) >> and post' (title : string) >> (body : string) >> (username : string) >> (created : time) : xbody = >> let >> val numComments = 0 >> in >> <xml> >> <div class="post"> >> <div class="postTitle">{[title]}</div> >> <div class="postAuthor">{[username]}</div> >> <div class="postBody">{[body]}</div> >> <div class="postBottom"> >> <div class="postComments"> >> <a link={comments ()}>{[numComments]} comments</a> >> </div> >> <div class="postDate">{[created]}</div> >> </div> >> </div> >> </xml> >> end >> and comments () : transaction page = error <xml>error : comment >> function not implemented</xml> >> >> >> fun main () = return <xml></xml> >> -----BEGIN PGP SIGNATURE----- >> Version: GnuPG v1 >> >> iQIcBAEBAgAGBQJULvn0AAoJEHxRxnzR1VWyyx4QALnOK3VgRpYNWK6wgBUxkPyz >> R+rKe0Vq0KCgzF3MjjyQPLaxwTxdfbg9gaXVZyXkpDnX8RIOhySYFmNOsN6BHGu3 >> f8I4uvtS+N4Wsa4FjHzmY35XoyGiDlki6kbE+Yw8Myp7Jv2iY+FXXuQvumS83Wvr >> JXlujVROxY+Iglsqsu3iAh5btw+VaBaNC2SQUQLHrrIeZTvUOsIS5A0+MW7SQn5p >> 6Aj77EDtbA2k0xpCyAADZ54UrSvzHFrMnLEheHAoLjAufNdrzl5+dyFyZukJRndg >> y/cc4dUgkqZhX/wsDEbMBkTqbW1R+vZvNxX0+lUSqDc53LxNYwDQQGgIuVrAqKBf >> yom/3IbvoS4Nkt1MF/2qZU7bptXK59rpBbWTk9zt00FO/nsf2/zR+nDU6Os6rkST >> 4DUTmBGOcGd9/e1RO6UdK819PoVVPOXdy7JsAyzHacp3aTMH3gEkAHia7wAsb/Iz >> wnljBwssuNOPY1vT3s4ul8BXDRCclOsg1cb66EedFiGEnZW1PyD1mYvWeRUjR4IK >> CzRa3xpsliE5XisYuZqEoplQ3gaovPInJ7CZEG3k8w350ts+D85VU2WqKATIG2gr >> gTi9SzzqlTlIS/H2dmlNwvMsEJG38byXuCZQar0ElX7wVg8nANlv4xqAEjIbJ+YH >> 039UXNim4rX2XSgGmg4P >> =6vna >> -----END PGP SIGNATURE----- >> >> _______________________________________________ >> 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
