on c776efd help sign in
rel8/src/Rel8.hs
368 lines 6.8 kB history raw
1{-# language DuplicateRecordFields #-}
3module Rel8
4 ( -- * Database types
5 -- ** @DBType@
6 DBType(..)
8 -- *** Deriving-via helpers
9 -- **** @JSONEncoded@
10 , JSONEncoded(..)
11 , JSONBEncoded(..)
13 -- **** @ReadShow@
14 , ReadShow(..)
16 -- **** Generic
17 , Composite(..), DBComposite(..), compose, decompose
18 , Enum(..), DBEnum(..), Enumable
20 -- *** @TypeInformation@
21 , TypeInformation(..)
22 , mapTypeInformation
23 , parseTypeInformation
25 -- ** The @DBType@ hierarchy
26 , DBSemigroup(..)
27 , DBMonoid(..)
28 , DBNum
29 , DBIntegral
30 , DBFractional
31 , DBFloating
33 -- * Tables and higher-kinded tables
34 , Rel8able, KRel8able
35 , Column
36 , HADT
37 , HEither
38 , HMaybe
39 , HList
40 , HNonEmpty
41 , HThese
42 , Lift
44 , Table(..)
45 , HTable
46 , Recontextualize
47 , AltTable((<|>:))
48 , AlternativeTable( emptyTable )
49 , EqTable, (==:), (/=:)
50 , OrdTable, ascTable, descTable
51 , lit
52 , bool
53 , case_
55 -- ** @MaybeTable@
56 , MaybeTable
57 , maybeTable, ($?), nothingTable, justTable
58 , isNothingTable, isJustTable
59 , optional
60 , catMaybeTable
61 , traverseMaybeTable
62 , nameMaybeTable
64 -- ** @EitherTable@
65 , EitherTable
66 , eitherTable, leftTable, rightTable
67 , isLeftTable, isRightTable
68 , keepLeftTable
69 , keepRightTable
70 , bitraverseEitherTable
71 , nameEitherTable
73 -- ** @TheseTable@
74 , TheseTable
75 , theseTable, thisTable, thatTable, thoseTable
76 , isThisTable, isThatTable, isThoseTable
77 , hasHereTable, hasThereTable
78 , justHereTable, justThereTable
79 , alignBy
80 , keepHereTable, loseHereTable
81 , keepThereTable, loseThereTable
82 , keepThisTable, loseThisTable
83 , keepThatTable, loseThatTable
84 , keepThoseTable, loseThoseTable
85 , bitraverseTheseTable
86 , nameTheseTable
88 -- ** @ListTable@
89 , ListTable
90 , listTable
91 , nameListTable
92 , many
93 , manyExpr
94 , catListTable
95 , catList
97 -- ** @NonEmptyTable@
98 , NonEmptyTable
99 , nonEmptyTable
100 , nameNonEmptyTable
101 , some
102 , someExpr
103 , catNonEmptyTable
104 , catNonEmpty
106 -- ** @ADT@
107 , ADT, ADTable
108 , BuildADT, buildADT
109 , ConstructADT, constructADT
110 , DeconstructADT, deconstructADT
111 , NameADT, nameADT
112 , AggregateADT, aggregateADT
114 -- ** @HKD@
115 , HKD, HKDable
116 , BuildHKD, buildHKD
117 , ConstructHKD, constructHKD
118 , DeconstructHKD, deconstructHKD
119 , NameHKD, nameHKD
120 , AggregateHKD, aggregateHKD
122 -- ** Table schemas
123 , TableSchema(..)
124 , Name
125 , namesFromLabels
126 , namesFromLabelsWith
128 -- * Expressions
129 , Expr
130 , Sql
131 , litExpr
132 , unsafeCastExpr
133 , unsafeLiteral
135 -- ** @null@
136 , NotNull
137 , Nullable
138 , null
139 , nullify
140 , nullable
141 , isNull
142 , isNonNull
143 , mapNull
144 , liftOpNull
145 , catNull
146 , coalesce
148 -- ** Boolean operations
149 , DBEq
150 , true, false, not_
151 , (&&.), and_
152 , (||.), or_
153 , (==.), (/=.), (==?), (/=?)
154 , in_
155 , boolExpr, caseExpr
157 -- ** Ordering
158 , DBOrd
159 , (<.), (<=.), (>.), (>=.)
160 , (<?), (<=?), (>?), (>=?)
161 , leastExpr, greatestExpr
163 -- ** Functions
164 , Function
165 , function
166 , nullaryFunction
167 , binaryOperator
169 -- * Queries
170 , Query
171 , showQuery
173 -- ** Selecting rows
174 , Selects
175 , each
176 , values
178 -- ** Filtering
179 , filter
180 , where_
181 , present
182 , absent
183 , distinct
184 , distinctOn
185 , distinctOnBy
187 -- ** @LIMIT@/@OFFSET@
188 , limit
189 , offset
191 -- ** @UNION@
192 , union
193 , unionAll
195 -- ** @INTERSECT@
196 , intersect
197 , intersectAll
199 -- ** @EXCEPT@
200 , except
201 , exceptAll
203 -- ** @EXISTS@
204 , exists
205 , with
206 , withBy
207 , without
208 , withoutBy
210 -- ** Aggregation
211 , Aggregate
212 , Aggregates
213 , aggregate
214 , countRows
215 , groupBy
216 , listAgg, listAggExpr
217 , nonEmptyAgg, nonEmptyAggExpr
218 , DBMax, max
219 , DBMin, min
220 , DBSum, sum, sumWhere
221 , DBString, stringAgg
222 , count
223 , countStar
224 , countDistinct
225 , countWhere
226 , and
227 , or
229 -- ** Ordering
230 , orderBy
231 , Order
232 , asc
233 , desc
234 , nullsFirst
235 , nullsLast
237 -- * IO
238 , Serializable
239 , ToExprs(..)
240 , FromExprs
241 , Result
243 -- * Running statements
244 -- $running
246 -- ** @SELECT@
247 , select
249 -- ** @INSERT@
250 , Insert(..)
251 , OnConflict(..)
252 , insert
254 -- ** @DELETE@
255 , Delete(..)
256 , delete
258 -- ** @UPDATE@
259 , update
260 , Update(..)
262 -- ** @.. RETURNING@
263 , Returning(..)
265 -- ** @CREATE VIEW@
266 , createView
268 -- ** Sequences
269 , nextval
270 , evaluate
272 -- * Implementation details
273 , HKDT(..)
274 ) where
276-- base
277import Prelude ()
279-- rel8
280import Rel8.Aggregate
281import Rel8.Column
282import Rel8.Column.ADT
283import Rel8.Column.Either
284import Rel8.Column.Lift
285import Rel8.Column.List
286import Rel8.Column.Maybe
287import Rel8.Column.NonEmpty
288import Rel8.Column.These
289import Rel8.Expr
290import Rel8.Expr.Aggregate
291import Rel8.Expr.Bool
292import Rel8.Expr.Eq
293import Rel8.Expr.Function
294import Rel8.Expr.Null
295import Rel8.Expr.Opaleye (unsafeCastExpr, unsafeLiteral)
296import Rel8.Expr.Ord
297import Rel8.Expr.Order
298import Rel8.Expr.Serialize
299import Rel8.Expr.Sequence
300import Rel8.Generic.Rel8able ( KRel8able, Rel8able )
301import Rel8.Order
302import Rel8.Query
303import Rel8.Query.Aggregate
304import Rel8.Query.Distinct
305import Rel8.Query.Each
306import Rel8.Query.Either
307import Rel8.Query.Evaluate
308import Rel8.Query.Exists
309import Rel8.Query.Filter
310import Rel8.Query.Limit
311import Rel8.Query.List
312import Rel8.Query.Maybe
313import Rel8.Query.Null
314import Rel8.Query.Order
315import Rel8.Query.SQL (showQuery)
316import Rel8.Query.Set
317import Rel8.Query.These
318import Rel8.Query.Values
319import Rel8.Schema.HTable
320import Rel8.Schema.Name
321import Rel8.Schema.Null hiding ( nullable )
322import Rel8.Schema.Result ( Result )
323import Rel8.Schema.Table
324import Rel8.Statement.Delete
325import Rel8.Statement.Insert
326import Rel8.Statement.Returning
327import Rel8.Statement.Select
328import Rel8.Statement.Update
329import Rel8.Statement.View
330import Rel8.Table
331import Rel8.Table.ADT
332import Rel8.Table.Aggregate
333import Rel8.Table.Alternative
334import Rel8.Table.Bool
335import Rel8.Table.Either
336import Rel8.Table.Eq
337import Rel8.Table.HKD
338import Rel8.Table.List
339import Rel8.Table.Maybe
340import Rel8.Table.Name
341import Rel8.Table.NonEmpty
342import Rel8.Table.Ord
343import Rel8.Table.Order
344import Rel8.Table.Recontextualize
345import Rel8.Table.Rel8able ()
346import Rel8.Table.Serialize
347import Rel8.Table.These
348import Rel8.Type
349import Rel8.Type.Composite
350import Rel8.Type.Eq
351import Rel8.Type.Enum
352import Rel8.Type.Information
353import Rel8.Type.JSONBEncoded
354import Rel8.Type.JSONEncoded
355import Rel8.Type.Monoid
356import Rel8.Type.Num
357import Rel8.Type.Ord
358import Rel8.Type.ReadShow
359import Rel8.Type.Semigroup
360import Rel8.Type.String
361import Rel8.Type.Sum
364-- $running
365-- To run queries and otherwise interact with a PostgreSQL database, Rel8
366-- provides 'select', 'insert', 'update' and 'delete' functions. Note that
367-- 'insert', 'update' and 'delete' will generally need the
368-- `DuplicateRecordFields` language extension enabled.