[Ur] SQL Question

mutaamba maasha maasha at gmail.com
Fri Oct 3 15:33:08 EDT 2014


-----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-----



More information about the Ur mailing list