[Ur] SQL Question

Burton Samograd burton.samograd at gmail.com
Fri Oct 3 16:04:29 EDT 2014


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 <burton.samograd at gmail.com>
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 <maasha at gmail.com> 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
>> Ur at impredicative.com
>> http://www.impredicative.com/cgi-bin/mailman/listinfo/ur
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20141003/5d3cdb31/attachment-0001.html>


More information about the Ur mailing list