@@ -98,18 +98,47 @@ import Database.PostgreSQL.Entity.Internal
98
98
import Database.PostgreSQL.Entity.Types
99
99
100
100
{- $setup
101
- >>> :set -XQuasiQuotes
102
- >>> :set -XOverloadedStrings
103
- >>> :set -XOverloadedLists
104
- >>> :set -XTypeApplications
105
- >>> import Database.PostgreSQL.Entity
106
- >>> import Database.PostgreSQL.Entity.Types
107
- >>> import Database.PostgreSQL.Entity.Internal
108
- >>> import Database.PostgreSQL.Entity.Internal.BlogPost
109
- >>> import Database.PostgreSQL.Entity.Internal.QQ
110
- >>> import Database.PostgreSQL.Simple.Types (Query (..))
111
- >>> import Data.Vector (Vector)
112
- >>> import qualified Data.Vector as V
101
+ >>> :set -XQuasiQuotes
102
+ >>> :set -XOverloadedStrings
103
+ >>> :set -XOverloadedLists
104
+ >>> :set -XTypeApplications
105
+ >>> import Database.PostgreSQL.Entity
106
+ >>> import Database.PostgreSQL.Entity.Types
107
+ >>> import Database.PostgreSQL.Entity.Internal
108
+ >>> import Database.PostgreSQL.Entity.Internal.QQ
109
+ >>> import Database.PostgreSQL.Simple.Types (Query (..))
110
+ >>> import Data.Vector (Vector)
111
+ >>> import qualified Data.Vector as V
112
+ >>> import Data.Time (UTCTime)
113
+ >>> import GHC.Generics (Generic)
114
+ >>> :{
115
+ >>> data Author = Author
116
+ >>> { authorId :: Int
117
+ >>> , name :: Text
118
+ >>> , createdAt :: UTCTime
119
+ >>> }
120
+ >>> deriving stock (Eq, Generic, Ord, Show)
121
+ >>> deriving anyclass (FromRow, ToRow)
122
+ >>> deriving
123
+ >>> (Entity)
124
+ >>> via (GenericEntity '[PrimaryKey "author_id", TableName "authors"] Author)
125
+ >>>
126
+ >>> data BlogPost = BlogPost
127
+ >>> { blogPostId :: Int
128
+ >>> -- ^ Primary key
129
+ >>> , authorId :: Int
130
+ >>> -- ^ Foreign keys, for which we need an explicit type annotation
131
+ >>> , intList :: Vector Int
132
+ >>> , title :: Text
133
+ >>> , content :: Text
134
+ >>> , createdAt :: UTCTime
135
+ >>> }
136
+ >>> deriving stock (Eq, Generic, Ord, Show)
137
+ >>> deriving anyclass (FromRow, ToRow)
138
+ >>> deriving
139
+ >>> (Entity)
140
+ >>> via (GenericEntity '[PrimaryKey "blog_post_id", TableName "blogposts"] BlogPost)
141
+ >>> :}
113
142
-}
114
143
115
144
{- $highlevel
@@ -348,7 +377,7 @@ deleteByField fs values = void $ execute Delete (_deleteWhere @e fs) values
348
377
__Examples__
349
378
350
379
>>> _select @BlogPost
351
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\""
380
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\""
352
381
353
382
@since 0.0.1.0
354
383
-}
@@ -359,8 +388,8 @@ _select = textToQuery $ "SELECT " <> expandQualifiedFields @e <> " FROM " <> get
359
388
360
389
__Examples__
361
390
362
- >>> _selectWithFields @BlogPost [ [field| blogpost_id |], [field| created_at |] ]
363
- "SELECT \"blogposts\".\"blogpost_id \", \"blogposts\".\"created_at\" FROM \"\" blogposts\" \""
391
+ >>> _selectWithFields @BlogPost [ [field| blog_post_id |], [field| created_at |] ]
392
+ "SELECT \"blogposts\".\"blog_post_id \", \"blogposts\".\"created_at\" FROM \"blogposts\""
364
393
365
394
@since 0.0.1.0
366
395
-}
@@ -379,11 +408,11 @@ _selectWithFields fs = textToQuery $ "SELECT " <> expandQualifiedFields' fs tn <
379
408
380
409
__Examples__
381
410
382
- >>> _select @BlogPost <> _where [[field| blogpost_id |]]
383
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"blogpost_id \" = ?"
411
+ >>> _select @BlogPost <> _where [[field| blog_post_id |]]
412
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"blog_post_id \" = ?"
384
413
385
- >>> _select @BlogPost <> _where [ [field| uuid_list |] ]
386
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"uuid_list \" = ?"
414
+ >>> _select @BlogPost <> _where [ [field| int_list |] ]
415
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"int_list \" = ?"
387
416
388
417
@since 0.0.1.0
389
418
-}
@@ -397,10 +426,10 @@ _where fs' = textToQuery $ " WHERE " <> clauseFields
397
426
__Examples__
398
427
399
428
>>> _selectWhere @BlogPost [ [field| author_id |] ]
400
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" = ?"
429
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" = ?"
401
430
402
431
>>> _selectWhere @BlogPost [ [field| author_id |], [field| title |]]
403
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" = ? AND \"title\" = ?"
432
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" = ? AND \"title\" = ?"
404
433
405
434
@since 0.0.1.0
406
435
-}
@@ -411,7 +440,7 @@ _selectWhere fs = _select @e <> _where fs
411
440
r
412
441
413
442
>>> _selectWhereNotNull @BlogPost [ [field| author_id |] ]
414
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" IS NOT NULL"
443
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" IS NOT NULL"
415
444
416
445
@since 0.0.1.0
417
446
-}
@@ -421,7 +450,7 @@ _selectWhereNotNull fs = _select @e <> textToQuery (" WHERE " <> isNotNull fs)
421
450
{-| Produce a SELECT statement where the provided fields are checked for being null.
422
451
423
452
>>> _selectWhereNull @BlogPost [ [field| author_id |] ]
424
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" IS NULL"
453
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"author_id\" IS NULL"
425
454
426
455
@since 0.0.1.0
427
456
-}
@@ -431,7 +460,7 @@ _selectWhereNull fs = _select @e <> textToQuery (" WHERE " <> isNull fs)
431
460
{-| Produce a SELECT statement where the given field is checked aginst the provided array of values .
432
461
433
462
>>> _selectWhereIn @BlogPost [field| title |] [ "Unnamed", "Mordred's Song" ]
434
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"title\" IN ('Unnamed', 'Mordred''s Song')"
463
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" WHERE \"title\" IN ('Unnamed', 'Mordred''s Song')"
435
464
436
465
@since 0.0.2.0
437
466
-}
@@ -443,7 +472,7 @@ _selectWhereIn f values = _select @e <> textToQuery (" WHERE " <> isIn f values)
443
472
__Examples__
444
473
445
474
>>> _joinSelect @BlogPost @Author
446
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\", authors.\"author_id\", authors.\"name\", authors.\"created_at\" FROM \"blogposts\" INNER JOIN \"authors\" USING(author_id)"
475
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\", authors.\"author_id\", authors.\"name\", authors.\"created_at\" FROM \"blogposts\" INNER JOIN \"authors\" USING(author_id)"
447
476
448
477
@since 0.0.1.0
449
478
-}
@@ -510,7 +539,7 @@ _joinSelectWithFields fs1 fs2 =
510
539
__Examples__
511
540
512
541
>>> _joinSelectOneByField @BlogPost @Author [field| author_id |] [field| name |] :: Query
513
- "SELECT blogposts.\"blogpost_id \", blogposts.\"author_id\", blogposts.\"uuid_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" INNER JOIN \"authors\" ON \"blogposts\".\"author_id\" = \"authors\".\"author_id\" WHERE authors.\"name\" = ?"
542
+ "SELECT blogposts.\"blog_post_id \", blogposts.\"author_id\", blogposts.\"int_list \", blogposts.\"title\", blogposts.\"content\", blogposts.\"created_at\" FROM \"blogposts\" INNER JOIN \"authors\" ON \"blogposts\".\"author_id\" = \"authors\".\"author_id\" WHERE authors.\"name\" = ?"
514
543
515
544
@since 0.0.2.0
516
545
-}
@@ -544,7 +573,7 @@ _joinSelectOneByField pivotField whereField =
544
573
__Examples__
545
574
546
575
>>> _insert @BlogPost
547
- "INSERT INTO \"blogposts\" (\"blogpost_id \", \"author_id\", \"uuid_list \", \"title\", \"content\", \"created_at\") VALUES (?, ?, ?, ?, ?, ?)"
576
+ "INSERT INTO \"blogposts\" (\"blog_post_id \", \"author_id\", \"int_list \", \"title\", \"content\", \"created_at\") VALUES (?, ?, ?, ?, ?, ?)"
548
577
549
578
@since 0.0.1.0
550
579
-}
@@ -558,14 +587,14 @@ _insert = textToQuery $ "INSERT INTO " <> getTableName @e <> " " <> fs <> " VALU
558
587
559
588
__Examples__
560
589
561
- >>> _onConflictDoUpdate [[field| blogpost_id |]] [ [field| title |], [field| content |]]
562
- " ON CONFLICT (blogpost_id ) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
590
+ >>> _onConflictDoUpdate [[field| blog_post_id |]] [ [field| title |], [field| content |]]
591
+ " ON CONFLICT (blog_post_id ) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
563
592
564
- >>> _onConflictDoUpdate [[field| blogpost_id |], [field| author_id |]] [ [field| title |], [field| content |]]
565
- " ON CONFLICT (blogpost_id , author_id) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
593
+ >>> _onConflictDoUpdate [[field| blog_post_id |], [field| author_id |]] [ [field| title |], [field| content |]]
594
+ " ON CONFLICT (blog_post_id , author_id) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
566
595
567
- >>> _insert @BlogPost <> _onConflictDoUpdate [[field| blogpost_id |]] [ [field| title |], [field| content |]]
568
- "INSERT INTO \"blogposts\" (\"blogpost_id \", \"author_id\", \"uuid_list \", \"title\", \"content\", \"created_at\") VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (blogpost_id ) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
596
+ >>> _insert @BlogPost <> _onConflictDoUpdate [[field| blog_post_id |]] [ [field| title |], [field| content |]]
597
+ "INSERT INTO \"blogposts\" (\"blog_post_id \", \"author_id\", \"int_list \", \"title\", \"content\", \"created_at\") VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (blog_post_id ) DO UPDATE SET title = EXCLUDED.title, content = EXCLUDED.content"
569
598
570
599
@since 0.0.2.0
571
600
-}
@@ -586,7 +615,7 @@ _onConflictDoUpdate conflictTarget fieldsToReplace =
586
615
"UPDATE \"authors\" SET (\"name\", \"created_at\") = ROW(?, ?) WHERE \"author_id\" = ?"
587
616
588
617
>>> _update @BlogPost
589
- "UPDATE \"blogposts\" SET (\"author_id\", \"uuid_list \", \"title\", \"content\", \"created_at\") = ROW(?, ?, ?, ?, ?) WHERE \"blogpost_id \" = ?"
618
+ "UPDATE \"blogposts\" SET (\"author_id\", \"int_list \", \"title\", \"content\", \"created_at\") = ROW(?, ?, ?, ?, ?) WHERE \"blog_post_id \" = ?"
590
619
591
620
@since 0.0.1.0
592
621
-}
@@ -655,7 +684,7 @@ _updateFieldsBy fs' f =
655
684
__Examples__
656
685
657
686
>>> _delete @BlogPost
658
- "DELETE FROM \"blogposts\" WHERE \"blogpost_id \" = ?"
687
+ "DELETE FROM \"blogposts\" WHERE \"blog_post_id \" = ?"
659
688
660
689
@since 0.0.1.0
661
690
-}
0 commit comments