aboutsummaryrefslogtreecommitdiff
path: root/fooes.hs
diff options
context:
space:
mode:
Diffstat (limited to 'fooes.hs')
-rw-r--r--fooes.hs42
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)