-
Notifications
You must be signed in to change notification settings - Fork 35
/
QueryParams.hs
84 lines (69 loc) · 2.93 KB
/
QueryParams.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
-- |
-- Module: Database.MySQL.Simple.QueryParams
-- Copyright: (c) 2011 MailRank, Inc.
-- License: BSD3
-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
-- Stability: experimental
-- Portability: portable
--
-- The 'QueryParams' typeclass, for rendering a collection of
-- parameters to a SQL query.
--
-- Predefined instances are provided for tuples containing up to ten
-- elements.
module Database.MySQL.Simple.QueryParams
(
QueryParams(..)
) where
import Database.MySQL.Simple.Param (Action(..), Param(..))
import Database.MySQL.Simple.Types (Only(..))
-- | A collection type that can be turned into a list of rendering
-- 'Action's.
--
-- Instances should use the 'render' method of the 'Param' class
-- to perform conversion of each element of the collection.
class QueryParams a where
renderParams :: a -> [Action]
-- ^ Render a collection of values.
instance QueryParams () where
renderParams _ = []
instance (Param a) => QueryParams (Only a) where
renderParams (Only v) = [render v]
instance (Param a, Param b) => QueryParams (a,b) where
renderParams (a,b) = [render a, render b]
instance (Param a, Param b, Param c) => QueryParams (a,b,c) where
renderParams (a,b,c) = [render a, render b, render c]
instance (Param a, Param b, Param c, Param d) => QueryParams (a,b,c,d) where
renderParams (a,b,c,d) = [render a, render b, render c, render d]
instance (Param a, Param b, Param c, Param d, Param e)
=> QueryParams (a,b,c,d,e) where
renderParams (a,b,c,d,e) =
[render a, render b, render c, render d, render e]
instance (Param a, Param b, Param c, Param d, Param e, Param f)
=> QueryParams (a,b,c,d,e,f) where
renderParams (a,b,c,d,e,f) =
[render a, render b, render c, render d, render e, render f]
instance (Param a, Param b, Param c, Param d, Param e, Param f, Param g)
=> QueryParams (a,b,c,d,e,f,g) where
renderParams (a,b,c,d,e,f,g) =
[render a, render b, render c, render d, render e, render f, render g]
instance (Param a, Param b, Param c, Param d, Param e, Param f, Param g,
Param h)
=> QueryParams (a,b,c,d,e,f,g,h) where
renderParams (a,b,c,d,e,f,g,h) =
[render a, render b, render c, render d, render e, render f, render g,
render h]
instance (Param a, Param b, Param c, Param d, Param e, Param f, Param g,
Param h, Param i)
=> QueryParams (a,b,c,d,e,f,g,h,i) where
renderParams (a,b,c,d,e,f,g,h,i) =
[render a, render b, render c, render d, render e, render f, render g,
render h, render i]
instance (Param a, Param b, Param c, Param d, Param e, Param f, Param g,
Param h, Param i, Param j)
=> QueryParams (a,b,c,d,e,f,g,h,i,j) where
renderParams (a,b,c,d,e,f,g,h,i,j) =
[render a, render b, render c, render d, render e, render f, render g,
render h, render i, render j]
instance (Param a) => QueryParams [a] where
renderParams = map render