module Database.MySQL.Simple.QueryResults
(
QueryResults(..)
, convertError
) where
import Control.Exception (throw)
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as B
import Database.MySQL.Base.Types (Field(fieldType, fieldName))
import Database.MySQL.Simple.Result (ResultError(..), Result(..))
import Database.MySQL.Simple.Types (Only(..))
class QueryResults a where
convertResults :: [Field] -> [Maybe ByteString] -> a
instance (Result a) => QueryResults (Only a) where
convertResults [fa] [va] = Only a
where !a = convert fa va
convertResults fs vs = convertError fs vs 1
instance (Result a, Result b) => QueryResults (a,b) where
convertResults [fa,fb] [va,vb] = (a,b)
where !a = convert fa va; !b = convert fb vb
convertResults fs vs = convertError fs vs 2
instance (Result a, Result b, Result c) => QueryResults (a,b,c) where
convertResults [fa,fb,fc] [va,vb,vc] = (a,b,c)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
convertResults fs vs = convertError fs vs 3
instance (Result a, Result b, Result c, Result d) =>
QueryResults (a,b,c,d) where
convertResults [fa,fb,fc,fd] [va,vb,vc,vd] = (a,b,c,d)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd
convertResults fs vs = convertError fs vs 4
instance (Result a, Result b, Result c, Result d, Result e) =>
QueryResults (a,b,c,d,e) where
convertResults [fa,fb,fc,fd,fe] [va,vb,vc,vd,ve] = (a,b,c,d,e)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve
convertResults fs vs = convertError fs vs 5
instance (Result a, Result b, Result c, Result d, Result e, Result f) =>
QueryResults (a,b,c,d,e,f) where
convertResults [fa,fb,fc,fd,fe,ff] [va,vb,vc,vd,ve,vf] = (a,b,c,d,e,f)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
convertResults fs vs = convertError fs vs 6
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g) =>
QueryResults (a,b,c,d,e,f,g) where
convertResults [fa,fb,fc,fd,fe,ff,fg] [va,vb,vc,vd,ve,vf,vg] =
(a,b,c,d,e,f,g)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg
convertResults fs vs = convertError fs vs 7
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h) =>
QueryResults (a,b,c,d,e,f,g,h) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh] [va,vb,vc,vd,ve,vf,vg,vh] =
(a,b,c,d,e,f,g,h)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh
convertResults fs vs = convertError fs vs 8
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i) =>
QueryResults (a,b,c,d,e,f,g,h,i) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi] [va,vb,vc,vd,ve,vf,vg,vh,vi] =
(a,b,c,d,e,f,g,h,i)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
convertResults fs vs = convertError fs vs 9
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j) =>
QueryResults (a,b,c,d,e,f,g,h,i,j) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj] =
(a,b,c,d,e,f,g,h,i,j)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj
convertResults fs vs = convertError fs vs 10
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk] =
(a,b,c,d,e,f,g,h,i,j,k)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk
convertResults fs vs = convertError fs vs 11
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl] =
(a,b,c,d,e,f,g,h,i,j,k,l)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
convertResults fs vs = convertError fs vs 12
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm] =
(a,b,c,d,e,f,g,h,i,j,k,l,m)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm
convertResults fs vs = convertError fs vs 13
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn] =
(a,b,c,d,e,f,g,h,i,j,k,l,m,n)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn
convertResults fs vs = convertError fs vs 14
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo] =
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
convertResults fs vs = convertError fs vs 15
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp] =
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp;
convertResults fs vs = convertError fs vs 16
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq] =
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq;
convertResults fs vs = convertError fs vs 17
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr] =
(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
convertResults fs vs = convertError fs vs 18
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs;
convertResults fs_ vs_ = convertError fs_ vs_ 19
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s, Result t) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,
ft]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,
vt]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs; !t = convert ft vt
convertResults fs_ vs_ = convertError fs_ vs_ 20
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s, Result t, Result u) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,
ft,fu]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,
vt,vu]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs; !t = convert ft vt; !u = convert fu vu
convertResults fs_ vs_ = convertError fs_ vs_ 21
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s, Result t, Result u, Result v) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,
ft,fu,fv]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,
vt,vu,vv]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs; !t = convert ft vt; !u = convert fu vu
!v = convert fv vv;
convertResults fs_ vs_ = convertError fs_ vs_ 22
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s, Result t, Result u, Result v, Result w) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,
ft,fu,fv,fw]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,
vt,vu,vv,vw]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs; !t = convert ft vt; !u = convert fu vu
!v = convert fv vv; !w = convert fw vw;
convertResults fs_ vs_ = convertError fs_ vs_ 23
instance (Result a, Result b, Result c, Result d, Result e, Result f,
Result g, Result h, Result i, Result j, Result k, Result l,
Result m, Result n, Result o, Result p, Result q, Result r,
Result s, Result t, Result u, Result v, Result w, Result x) =>
QueryResults (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x) where
convertResults [fa,fb,fc,fd,fe,ff,fg,fh,fi,fj,fk,fl,fm,fn,fo,fp,fq,fr,fs,
ft,fu,fv,fw,fx]
[va,vb,vc,vd,ve,vf,vg,vh,vi,vj,vk,vl,vm,vn,vo,vp,vq,vr,vs,
vt,vu,vv,vw,vx]
= (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x)
where !a = convert fa va; !b = convert fb vb; !c = convert fc vc
!d = convert fd vd; !e = convert fe ve; !f = convert ff vf
!g = convert fg vg; !h = convert fh vh; !i = convert fi vi
!j = convert fj vj; !k = convert fk vk; !l = convert fl vl
!m = convert fm vm; !n = convert fn vn; !o = convert fo vo
!p = convert fp vp; !q = convert fq vq; !r = convert fr vr
!s = convert fs vs; !t = convert ft vt; !u = convert fu vu
!v = convert fv vv; !w = convert fw vw; !x = convert fx vx;
convertResults fs_ vs_ = convertError fs_ vs_ 24
convertError :: [Field]
-> [Maybe ByteString]
-> Int
-> a
convertError fs vs n = throw $ ConversionFailed
(show (length fs) ++ " values: " ++ show (zip (map fieldType fs)
(map (fmap ellipsis) vs)))
(show n ++ " slots in target type")
(show (map (B.unpack . fieldName) fs))
"mismatch between number of columns to convert and number in target type"
ellipsis :: ByteString -> ByteString
ellipsis bs
| B.length bs > 15 = B.take 10 bs `B.append` "[...]"
| otherwise = bs