1515{-# LANGUAGE TypeFamilies #-}
1616{-# LANGUAGE TypeOperators #-}
1717{-# LANGUAGE UndecidableInstances #-}
18+ {-# LANGUAGE OverloadedLabels #-}
1819
19- {-# OPTIONS_GHC -fplugin=Data.Record.Plugin.WithRDP #-}
20+ {-# OPTIONS_GHC -fplugin=Data.Record.Plugin #-}
2021
2122module Test.Record.Beam.Tutorial1 (
2223 tests
@@ -35,6 +36,7 @@ import Data.Record.Beam ()
3536import Data.Text (Text )
3637import Database.Beam hiding (Generic , countAll_ )
3738import Database.Beam.Schema.Tables
39+ import Optics.Core ((^.) )
3840
3941import qualified Data.List.NonEmpty as NE
4042import qualified Database.SQLite.Simple as SQLite
@@ -79,11 +81,11 @@ sam2 = User "
[email protected] " "Sam" "Sophitz" "332532dcfaa1cbf61e2a266bd723
7981sam3
= User " [email protected] " " Sam" " Jely" " 332532dcfaa1cbf61e2a266bd723612c" 8082
8183instance Table UserT where
82- data PrimaryKey UserT f = UserId (Columnar f Text )
84+ newtype PrimaryKey UserT f = UserId (Columnar f Text )
8385 deriving stock (GHC.Generic )
8486 deriving anyclass (Beamable )
8587
86- primaryKey tbl = UserId tbl. userEmail
88+ primaryKey tbl = UserId ( tbl ^. # userEmail)
8789
8890deriving instance Show (Columnar f Text ) => Show (PrimaryKey UserT f )
8991deriving instance Eq (Columnar f Text ) => Eq (PrimaryKey UserT f )
@@ -153,51 +155,51 @@ test_tutorial1_insertSelect = runInMemory $ \conn -> do
153155 liftIO $ SQLite. execute_ conn $
154156 " CREATE TABLE cart_users (email VARCHAR NOT NULL, first_name VARCHAR NOT NULL, last_name VARCHAR NOT NULL, password VARCHAR NOT NULL, PRIMARY KEY( email ));"
155157
156- runInsert $ insert shoppingCartDb. shoppingCartUsers $ insertValues [
158+ runInsert $ insert ( shoppingCartDb ^. # shoppingCartUsers) $ insertValues [
157159 james
158160 , betty
159161 , sam
160162 ]
161163
162- let allUsers = all_ (shoppingCartDb. shoppingCartUsers)
164+ let allUsers = all_ (shoppingCartDb ^. # shoppingCartUsers)
163165 users <- runSelectReturningList $ select allUsers
164166 liftIO $ assertEqual " users" [james, betty, sam] users
165167
166- let sortUsersByFirstName = orderBy_ (\ u -> (asc_ u . userFirstName, desc_ u . userLastName)) (all_ shoppingCartDb. shoppingCartUsers)
168+ let sortUsersByFirstName = orderBy_ (\ u -> (asc_ $ u ^. # userFirstName, desc_ $ u ^. # userLastName)) (all_ $ shoppingCartDb ^. # shoppingCartUsers)
167169 sorted <- runSelectReturningList $ select sortUsersByFirstName
168170 liftIO $ assertEqual " sorted" [betty, james, sam] sorted
169171
170172 let boundedQuery = limit_ 1 $ offset_ 1 $
171- orderBy_ (\ u -> asc_ u . userFirstName) $
172- all_ shoppingCartDb. shoppingCartUsers
173+ orderBy_ (\ u -> asc_ (u ^. # userFirstName) ) $
174+ all_ ( shoppingCartDb ^. # shoppingCartUsers)
173175
174176 bounded <- runSelectReturningList (select boundedQuery)
175177 liftIO $ assertEqual " bounded" [james] bounded
176178
177179 -- Tutorial has Int32 here, but that doesn't typecheck
178180 -- Don't think that is related to beam-large-records though..?
179181 -- (Maybe due to beam version mismatch between tutorial and our beam branch.)
180- let userCount = aggregate_ (\ _u -> as_ @ Int32 countAll_) (all_ shoppingCartDb. shoppingCartUsers)
182+ let userCount = aggregate_ (\ _u -> as_ @ Int32 countAll_) (all_ ( shoppingCartDb ^. # shoppingCartUsers) )
181183 Just c <- runSelectReturningOne $ select userCount
182184 liftIO $ assertEqual " userCount" 3 c
183185
184- runInsert $ insert shoppingCartDb. shoppingCartUsers $ insertValues [
186+ runInsert $ insert ( shoppingCartDb ^. # shoppingCartUsers) $ insertValues [
185187 james2
186188 , betty2
187189 , james3
188190 , sam2
189191 , sam3
190192 ]
191- let numberOfUsersByName = aggregate_ (\ u -> (group_ u . userFirstName, as_ @ Int32 countAll_)) $
192- all_ shoppingCartDb. shoppingCartUsers
193+ let numberOfUsersByName = aggregate_ (\ u -> (group_ (u ^. # userFirstName) , as_ @ Int32 countAll_)) $
194+ all_ ( shoppingCartDb ^. # shoppingCartUsers)
193195 countedByName <- runSelectReturningList $ select numberOfUsersByName
194196 liftIO $ assertEqual " countedByName" [(" Betty" ,2 ), (" James" ,3 ), (" Sam" ,3 )] countedByName
195197
196198-- Just a sanity check that RDS is working
197199-- (NOTE: RDS gets confused by nested multiline comments.)
198200test_tutorial1_recordDotSyntax :: Assertion
199201test_tutorial1_recordDotSyntax =
200- assertEqual
" " " [email protected] " u . userEmail
202+ assertEqual
" " " [email protected] " (u ^. # userEmail
) 201203 where
202204 u :: User
203205 u = User {
0 commit comments