diff options
Diffstat (limited to 'fooes.hs')
-rw-r--r-- | fooes.hs | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/fooes.hs b/fooes.hs new file mode 100644 index 000000000..cc7a0f8c3 --- /dev/null +++ b/fooes.hs @@ -0,0 +1,42 @@ +{-# LANGUAGE QuasiQuotes, TypeFamilies, GeneralizedNewtypeDeriving, TemplateHaskell, + OverloadedStrings, GADTs, FlexibleContexts #-} +import Database.Persist.TH +import Database.Persist.Sqlite (runSqlite) +import Control.Monad.IO.Class (liftIO) +import Control.Monad +import Database.Esqueleto hiding (Key) + +share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase| +CachedKey + key String + UniqueKey key + deriving Show + +AssociatedFiles + key CachedKeyId Eq + file FilePath + UniqueKeyFile key file + deriving Show +|] + +main :: IO () +main = runSqlite "foo.db" $ do + runMigration migrateAll + if True then populate else return () + query + +populate = do + forM_ [1..30000] $ \i -> do + --delete $ from $ \f -> do + -- where_ (f ^. CachedKeyKey ==. val (show i)) + k <- insert $ CachedKey (show i) + liftIO $ print ("stored", k) + insert $ AssociatedFiles k ("file" ++show (i+1)) + --insert $ AssociatedFiles k ("otherfile" ++show (i+2)) + +query = forM_ [1..1000] $ \i -> do + r <- select $ from $ \(k, f) -> do + where_ (k ^. CachedKeyKey ==. val (show i)) + where_ (f ^. AssociatedFilesKey ==. k ^. CachedKeyId) + return (f ^. AssociatedFilesFile) + liftIO $ print ("got", r) |