SelectOneManyとかもうないのか...
二日酔いが続く中、Database.Persist.Query.Join (SelectOneMany (..), selectOneMany)のあたりの関数がごっそりなくなっていて、嗚咽を模様した今日この頃です。
この辺の記事(「Yesod Web Framework SQL Join」)がそれっぽいようなことを書いてあるような気配がするのですが、英語も読む気力がないので、どなたか訳してくれないでしょうか...Orz
そんなことはいいとして、適当に書き換えてみました、データベースに入っているデータを単純に読み込むだけですが
データはこんな感じ
cuomo@karky7 ~ $ mysql -u root SAMPLEDB Reading table information for completion of table and column names ... ... mysql> SELECT * FROM Person; +----+-------------------+------+ | id | name | age | +----+-------------------+------+ | 11 | Kazuto Ando | 40 | | 12 | Yoshirou Dorumaki | 41 | +----+-------------------+------+ 2 rows in set (0.00 sec) mysql>で、haskellのコード、Persistent MySQLを利用しています
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE FlexibleContexts #-}
import Database.Persist
import Database.Persist.MySQL
import Database.Persist.TH
import Data.Int
import Control.Monad.Logger (runNoLoggingT, MonadLogger)
import Control.Monad.IO.Class
import Control.Monad.Trans.Control (MonadBaseControl)
share [mkPersist sqlSettings] [persistUpperCase|
Person
name String
age Int Maybe
deriving(Show)
BlogPost
title String
authorId PersonId
deriving(Show)
|]
main :: IO ()
main = do
person <- getPerson 11
case person of
Just p -> dispPerson (personName p) (personAge p)
Nothing -> putStrLn "Nothing"
dispPerson :: String -> Maybe Int -> IO ()
dispPerson name (Just age) = putStrLn $ name ++ "\n" ++ show(age)
dispPerson name Nothing = putStrLn name
getPerson :: (MonadBaseControl IO m,
MonadIO m) => Int64 -> m (Maybe Person)
getPerson n = runNoLoggingT $ getConn $ runSqlConn $ do
get (toSqlKey n)
getConn :: (MonadBaseControl IO m,
MonadIO m,
MonadLogger m) => (SqlBackend -> m a) -> m a
getConn = withMySQLConn getConnection
getConnection :: ConnectInfo
getConnection = ConnectInfo {
connectHost = "localhost",
connectPort = 3306,
connectUser = "root",
connectPassword = "",
connectDatabase = "SAMPLEDB",
connectOptions = [],
connectPath = "",
connectSSL = Nothing
}
そしたら、11番目の「かずと」を抜いてみる、最近、プロマネ的な仕事をこなしているっぽい、出世したらしい
*Main> :load "/home/cuomo/Code/yesod/Persistent/PersistMySQL.hs" [1 of 1] Compiling Main ( /home/cuomo/Code/yesod/Persistent/PersistMySQL.hs, interpreted ) Ok, modules loaded: Main. *Main> main Kazuto Ando 40 *Main>こんだけです、気持ちが悪いので止めておきます...
0 件のコメント:
コメントを投稿