[FIX] Order 1 and Order 2, node size ok.
[gargantext.git] / src / Gargantext / Database / Query / Join.hs
index dc33bd67eb0cb8dc1fe3c4477fdb1e64c17cde12..31f7891c19adffae292e87835bf0175dc3aa58d0 100644 (file)
@@ -12,26 +12,27 @@ Multiple Join functions with Opaleye.
 -}
 
 {-# OPTIONS_GHC -fno-warn-orphans        #-}
-{-# OPTIONS_GHC -fno-warn-name-shadowing #-}
+
 
 {-# LANGUAGE Arrows                    #-}
-{-# LANGUAGE DeriveGeneric             #-}
-{-# LANGUAGE FlexibleContexts          #-}
-{-# LANGUAGE FlexibleInstances         #-}
 {-# LANGUAGE FunctionalDependencies    #-}
-{-# LANGUAGE MultiParamTypeClasses     #-}
 {-# LANGUAGE QuasiQuotes               #-}
-{-# LANGUAGE NoImplicitPrelude         #-}
 {-# LANGUAGE NoMonomorphismRestriction #-}
-{-# LANGUAGE OverloadedStrings         #-}
 {-# LANGUAGE TemplateHaskell           #-}
 
 ------------------------------------------------------------------------
 
-module Gargantext.Database.Query.Join
+module Gargantext.Database.Query.Join ( leftJoin2
+                                      , leftJoin3
+                                      , leftJoin4
+                                      , leftJoin5
+                                      , leftJoin6
+                                      , leftJoin7
+                                      , leftJoin8
+                                      , leftJoin9
+                                      )
   where
 
-import Control.Applicative ((<*>))
 import Control.Arrow ((>>>))
 import Data.Profunctor.Product.Default
 import Gargantext.Prelude
@@ -39,53 +40,58 @@ import Opaleye
 import Opaleye.Internal.Join (NullMaker(..))
 import qualified Opaleye.Internal.Unpackspec()
 
---leftJoin3 :: Query columnsL1 -> Query columnsR -> Query columnsL
---     -> ((columnsL1, columnsR) -> Column PGBool)
---     -> ((columnsL, (columnsL1, nullableColumnsR1)) -> Column PGBool)
---     -> Query (columnsL, nullableColumnsR)
---leftJoin3 q1 q2 q3 cond12 cond23 = leftJoin q3 (leftJoin q1 q2 cond12) cond23
-join3 :: Query columnsA -> Query columnsB -> Query columnsC 
+------------------------------------------------------------------------
+leftJoin2 :: (Default Unpackspec fieldsL fieldsL,
+              Default Unpackspec fieldsR fieldsR,
+              Default NullMaker fieldsR nullableFieldsR) =>
+             Select fieldsL
+             -> Select fieldsR
+             -> ((fieldsL, fieldsR) -> Column PGBool)
+             -> Select (fieldsL, nullableFieldsR)
+leftJoin2 = leftJoin
+
+------------------------------------------------------------------------
+-- | LeftJoin3 in two ways to write it
+_leftJoin3 :: Query columnsA -> Query columnsB -> Query columnsC
       -> ((columnsA, columnsB, columnsC) -> Column PGBool) 
       -> Query (columnsA, columnsB, columnsC)
-join3 q1 q2 q3 cond = ((,,) <$> q1 <*> q2 <*> q3) >>> keepWhen cond
+_leftJoin3 q1 q2 q3 cond = ((,,) <$> q1 <*> q2 <*> q3) >>> keepWhen cond
+
+
+leftJoin3 :: ( Default Unpackspec b2 b2
+             , Default Unpackspec b3 b3
+             , Default Unpackspec fieldsL fieldsL
+             , Default Unpackspec fieldsR fieldsR
+             , Default NullMaker b3 b4
+             , Default NullMaker b2 b5
+             , Default NullMaker fieldsR b2) =>
+             Select fieldsR
+             -> Select b3
+             -> Select fieldsL
+             -> ((b3, fieldsR) -> Column PGBool)
+             -> ((fieldsL, (b3, b2)) -> Column PGBool)
+             -> Select (fieldsL, (b4, b5))
 
-------------------------------------------------------------------------
-leftJoin3
-  :: (Default Unpackspec fieldsL1 fieldsL1,
-      Default Unpackspec fieldsL2 fieldsL2,
-      Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-      Default Unpackspec fieldsR fieldsR,
-      Default NullMaker fieldsR nullableFieldsR1,
-      Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR2) =>
-     Opaleye.Select fieldsR
-     -> Opaleye.Select fieldsL2
-     -> Opaleye.Select fieldsL1
-     -> ((fieldsL2, fieldsR) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Opaleye.Select (fieldsL1, nullableFieldsR2)
 leftJoin3 q1 q2     q3
          cond12 cond23 =
   leftJoin q3 ( leftJoin q2 q1 cond12) cond23
 
 
-leftJoin4
-  :: (Default Unpackspec fieldsL1 fieldsL1,
-      Default Unpackspec fieldsL2 fieldsL2,
-      Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-      Default Unpackspec fieldsL3 fieldsL3,
-      Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-      Default Unpackspec fieldsR fieldsR,
-      Default NullMaker fieldsR nullableFieldsR2,
-      Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR3,
-      Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1) =>
-     Opaleye.Select fieldsR
-     -> Opaleye.Select fieldsL3
-     -> Opaleye.Select fieldsL2
-     -> Opaleye.Select fieldsL1
-     -> ((fieldsL3, fieldsR) -> Column PGBool)
-     -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Opaleye.Select (fieldsL1, nullableFieldsR3)
+leftJoin4 :: (Default Unpackspec b2 b2,
+              Default Unpackspec fieldsL fieldsL, Default Unpackspec b3 b3,
+              Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+              Default Unpackspec b6 b6, Default Unpackspec fieldsR fieldsR,
+              Default NullMaker b2 b7, Default NullMaker b5 b8,
+              Default NullMaker b6 b9, Default NullMaker b3 b5,
+              Default NullMaker b4 b6, Default NullMaker fieldsR b4) =>
+             Select fieldsR
+             -> Select b3
+             -> Select b2
+             -> Select fieldsL
+             -> ((b3, fieldsR) -> Column PGBool)
+             -> ((b2, (b3, b4)) -> Column PGBool)
+             -> ((fieldsL, (b2, (b5, b6))) -> Column PGBool)
+             -> Select (fieldsL, (b7, (b8, b9)))
 leftJoin4 q1 q2     q3     q4
          cond12 cond23 cond34 =
   leftJoin q4 ( leftJoin q3
@@ -95,28 +101,27 @@ leftJoin4 q1 q2     q3     q4
               ) cond34
 
 
-leftJoin5 :: ( Default Unpackspec fieldsL1 fieldsL1,
-               Default Unpackspec fieldsL2 fieldsL2,
-               Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-               Default Unpackspec fieldsL3 fieldsL3,
-               Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-               Default Unpackspec fieldsL4 fieldsL4,
-               Default Unpackspec nullableFieldsR3 nullableFieldsR3,
-               Default Unpackspec fieldsR fieldsR,
-               Default NullMaker fieldsR nullableFieldsR3,
-               Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR4,
-               Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1,
-               Default NullMaker (fieldsL4, nullableFieldsR3) nullableFieldsR2) =>
-               Query fieldsR
-               -> Query fieldsL4
-               -> Query fieldsL3
-               -> Query fieldsL2
-               -> Query fieldsL1
-               -> ((fieldsL4, fieldsR) -> Column PGBool)
-               -> ((fieldsL3, (fieldsL4, nullableFieldsR3)) -> Column PGBool)
-               -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-               -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-               -> Query (fieldsL1, nullableFieldsR4)
+leftJoin5 :: (Default Unpackspec b2 b2, Default Unpackspec b3 b3,
+            Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+            Default Unpackspec b6 b6, Default Unpackspec b7 b7,
+            Default Unpackspec fieldsL fieldsL, Default Unpackspec b8 b8,
+            Default Unpackspec b9 b9, Default Unpackspec b10 b10,
+            Default Unpackspec fieldsR fieldsR, Default NullMaker b7 b6,
+            Default NullMaker b6 b11, Default NullMaker b8 b12,
+            Default NullMaker b3 b13, Default NullMaker b2 b14,
+            Default NullMaker b9 b3, Default NullMaker b10 b2,
+            Default NullMaker b5 b9, Default NullMaker b4 b10,
+            Default NullMaker fieldsR b4) =>
+           Select fieldsR
+           -> Select b5
+           -> Select b7
+           -> Select b8
+           -> Select fieldsL
+           -> ((b5, fieldsR) -> Column PGBool)
+           -> ((b7, (b5, b4)) -> Column PGBool)
+           -> ((b8, (b7, (b9, b10))) -> Column PGBool)
+           -> ((fieldsL, (b8, (b6, (b3, b2)))) -> Column PGBool)
+           -> Select (fieldsL, (b12, (b11, (b13, b14))))
 leftJoin5 q1 q2     q3     q4     q5
          cond12 cond23 cond34 cond45 =
   leftJoin q5 ( leftJoin q4
@@ -128,32 +133,34 @@ leftJoin5 q1 q2     q3     q4     q5
                ) cond45
 
 
-leftJoin6 :: ( Default Unpackspec fieldsL1 fieldsL1,
-               Default Unpackspec fieldsL2 fieldsL2,
-               Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-               Default Unpackspec fieldsL3 fieldsL3,
-               Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-               Default Unpackspec fieldsL4 fieldsL4,
-               Default Unpackspec nullableFieldsR3 nullableFieldsR3,
-               Default Unpackspec fieldsL5 fieldsL5,
-               Default Unpackspec nullableFieldsR4 nullableFieldsR4,
-               Default Unpackspec fieldsR fieldsR,
-               Default NullMaker fieldsR nullableFieldsR4,
-               Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR5,
-               Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1,
-               Default NullMaker (fieldsL4, nullableFieldsR3) nullableFieldsR2,
-               Default NullMaker (fieldsL5, nullableFieldsR4) nullableFieldsR3) =>
-     Query fieldsR
-     -> Query fieldsL5
-     -> Query fieldsL4
-     -> Query fieldsL3
-     -> Query fieldsL2
-     -> Query fieldsL1 -> ((fieldsL5, fieldsR) -> Column PGBool)
-     -> ((fieldsL4, (fieldsL5, nullableFieldsR4)) -> Column PGBool)
-     -> ((fieldsL3, (fieldsL4, nullableFieldsR3)) -> Column PGBool)
-     -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Query (fieldsL1, nullableFieldsR5)
+leftJoin6 :: (Default Unpackspec b2 b2, Default Unpackspec b3 b3,
+              Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+              Default Unpackspec fieldsL fieldsL, Default Unpackspec b6 b6,
+              Default Unpackspec b7 b7, Default Unpackspec b8 b8,
+              Default Unpackspec b9 b9, Default Unpackspec b10 b10,
+              Default Unpackspec b11 b11, Default Unpackspec b12 b12,
+              Default Unpackspec b13 b13, Default Unpackspec b14 b14,
+              Default Unpackspec b15 b15, Default Unpackspec fieldsR fieldsR,
+              Default NullMaker b5 b4, Default NullMaker b4 b16,
+              Default NullMaker b6 b17, Default NullMaker b2 b18,
+              Default NullMaker b7 b2, Default NullMaker b3 b7,
+              Default NullMaker b12 b19, Default NullMaker b13 b20,
+              Default NullMaker b10 b12, Default NullMaker b11 b13,
+              Default NullMaker b14 b10, Default NullMaker b15 b11,
+              Default NullMaker b8 b14, Default NullMaker b9 b15,
+              Default NullMaker fieldsR b9) =>
+             Select fieldsR
+             -> Select b8
+             -> Select b3
+             -> Select b5
+             -> Select b6
+             -> Select fieldsL
+             -> ((b8, fieldsR) -> Column PGBool)
+             -> ((b3, (b8, b9)) -> Column PGBool)
+             -> ((b5, (b3, (b14, b15))) -> Column PGBool)
+             -> ((b6, (b5, (b7, (b10, b11)))) -> Column PGBool)
+             -> ((fieldsL, (b6, (b4, (b2, (b12, b13))))) -> Column PGBool)
+             -> Select (fieldsL, (b17, (b16, (b18, (b19, b20)))))
 leftJoin6 q1 q2     q3     q4     q5     q6
          cond12 cond23 cond34 cond45 cond56 =
   leftJoin q6 ( leftJoin q5
@@ -167,39 +174,43 @@ leftJoin6 q1 q2     q3     q4     q5     q6
               ) cond56
 
 
-leftJoin7
-  :: (Default Unpackspec fieldsL1 fieldsL1,
-      Default Unpackspec fieldsL2 fieldsL2,
-      Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-      Default Unpackspec fieldsL3 fieldsL3,
-      Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-      Default Unpackspec fieldsL4 fieldsL4,
-      Default Unpackspec nullableFieldsR3 nullableFieldsR3,
-      Default Unpackspec fieldsL5 fieldsL5,
-      Default Unpackspec nullableFieldsR4 nullableFieldsR4,
-      Default Unpackspec fieldsL6 fieldsL6,
-      Default Unpackspec nullableFieldsR5 nullableFieldsR5,
-      Default Unpackspec fieldsR fieldsR,
-      Default NullMaker fieldsR nullableFieldsR5,
-      Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR6,
-      Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1,
-      Default NullMaker (fieldsL4, nullableFieldsR3) nullableFieldsR2,
-      Default NullMaker (fieldsL5, nullableFieldsR4) nullableFieldsR3,
-      Default NullMaker (fieldsL6, nullableFieldsR5) nullableFieldsR4) =>
-     Opaleye.Select fieldsR
-     -> Opaleye.Select fieldsL6
-     -> Opaleye.Select fieldsL5
-     -> Opaleye.Select fieldsL4
-     -> Opaleye.Select fieldsL3
-     -> Opaleye.Select fieldsL2
-     -> Opaleye.Select fieldsL1
-     -> ((fieldsL6, fieldsR) -> Column PGBool)
-     -> ((fieldsL5, (fieldsL6, nullableFieldsR5)) -> Column PGBool)
-     -> ((fieldsL4, (fieldsL5, nullableFieldsR4)) -> Column PGBool)
-     -> ((fieldsL3, (fieldsL4, nullableFieldsR3)) -> Column PGBool)
-     -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Opaleye.Select (fieldsL1, nullableFieldsR6)
+leftJoin7 :: (Default Unpackspec b2 b2, Default Unpackspec b3 b3,
+              Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+              Default Unpackspec b6 b6, Default Unpackspec b7 b7,
+              Default Unpackspec b8 b8, Default Unpackspec b9 b9,
+              Default Unpackspec b10 b10, Default Unpackspec b11 b11,
+              Default Unpackspec b12 b12, Default Unpackspec b13 b13,
+              Default Unpackspec fieldsL fieldsL, Default Unpackspec b14 b14,
+              Default Unpackspec b15 b15, Default Unpackspec b16 b16,
+              Default Unpackspec b17 b17, Default Unpackspec b18 b18,
+              Default Unpackspec b19 b19, Default Unpackspec b20 b20,
+              Default Unpackspec b21 b21, Default Unpackspec fieldsR fieldsR,
+              Default NullMaker b11 b8, Default NullMaker b8 b10,
+              Default NullMaker b10 b9, Default NullMaker b9 b22,
+              Default NullMaker b16 b12, Default NullMaker b12 b17,
+              Default NullMaker b17 b23, Default NullMaker b13 b24,
+              Default NullMaker b15 b25, Default NullMaker b14 b15,
+              Default NullMaker b3 b26, Default NullMaker b2 b27,
+              Default NullMaker b18 b3, Default NullMaker b19 b2,
+              Default NullMaker b5 b18, Default NullMaker b4 b19,
+              Default NullMaker b20 b5, Default NullMaker b21 b4,
+              Default NullMaker b7 b20, Default NullMaker b6 b21,
+              Default NullMaker fieldsR b6) =>
+             Select fieldsR
+             -> Select b7
+             -> Select b11
+             -> Select b16
+             -> Select b14
+             -> Select b13
+             -> Select fieldsL
+             -> ((b7, fieldsR) -> Column PGBool)
+             -> ((b11, (b7, b6)) -> Column PGBool)
+             -> ((b16, (b11, (b20, b21))) -> Column PGBool)
+             -> ((b14, (b16, (b8, (b5, b4)))) -> Column PGBool)
+             -> ((b13, (b14, (b12, (b10, (b18, b19))))) -> Column PGBool)
+             -> ((fieldsL, (b13, (b15, (b17, (b9, (b3, b2))))))
+                 -> Column PGBool)
+             -> Select (fieldsL, (b24, (b25, (b23, (b22, (b26, b27))))))
 leftJoin7 q1 q2     q3     q4     q5     q6     q7
          cond12 cond23 cond34 cond45 cond56 cond67 =
   leftJoin q7 ( leftJoin q6
@@ -215,44 +226,52 @@ leftJoin7 q1 q2     q3     q4     q5     q6     q7
                 ) cond67
 
 
-leftJoin8
-  :: (Default Unpackspec fieldsL1 fieldsL1,
-      Default Unpackspec fieldsL2 fieldsL2,
-      Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-      Default Unpackspec fieldsL3 fieldsL3,
-      Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-      Default Unpackspec fieldsL4 fieldsL4,
-      Default Unpackspec nullableFieldsR3 nullableFieldsR3,
-      Default Unpackspec fieldsL5 fieldsL5,
-      Default Unpackspec nullableFieldsR4 nullableFieldsR4,
-      Default Unpackspec fieldsL6 fieldsL6,
-      Default Unpackspec nullableFieldsR5 nullableFieldsR5,
-      Default Unpackspec fieldsL7 fieldsL7,
-      Default Unpackspec nullableFieldsR6 nullableFieldsR6,
-      Default Unpackspec fieldsR fieldsR,
-      Default NullMaker fieldsR nullableFieldsR6,
-      Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR7,
-      Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1,
-      Default NullMaker (fieldsL4, nullableFieldsR3) nullableFieldsR2,
-      Default NullMaker (fieldsL5, nullableFieldsR4) nullableFieldsR3,
-      Default NullMaker (fieldsL6, nullableFieldsR5) nullableFieldsR4,
-      Default NullMaker (fieldsL7, nullableFieldsR6) nullableFieldsR5) =>
-     Opaleye.Select fieldsR
-     -> Opaleye.Select fieldsL7
-     -> Opaleye.Select fieldsL6
-     -> Opaleye.Select fieldsL5
-     -> Opaleye.Select fieldsL4
-     -> Opaleye.Select fieldsL3
-     -> Opaleye.Select fieldsL2
-     -> Opaleye.Select fieldsL1
-     -> ((fieldsL7, fieldsR) -> Column PGBool)
-     -> ((fieldsL6, (fieldsL7, nullableFieldsR6)) -> Column PGBool)
-     -> ((fieldsL5, (fieldsL6, nullableFieldsR5)) -> Column PGBool)
-     -> ((fieldsL4, (fieldsL5, nullableFieldsR4)) -> Column PGBool)
-     -> ((fieldsL3, (fieldsL4, nullableFieldsR3)) -> Column PGBool)
-     -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Opaleye.Select (fieldsL1, nullableFieldsR7)
+leftJoin8 :: (Default Unpackspec b2 b2, Default Unpackspec b3 b3,
+              Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+              Default Unpackspec b6 b6, Default Unpackspec b7 b7,
+              Default Unpackspec b8 b8, Default Unpackspec b9 b9,
+              Default Unpackspec b10 b10, Default Unpackspec fieldsL fieldsL,
+              Default Unpackspec b11 b11, Default Unpackspec b12 b12,
+              Default Unpackspec b13 b13, Default Unpackspec b14 b14,
+              Default Unpackspec b15 b15, Default Unpackspec b16 b16,
+              Default Unpackspec b17 b17, Default Unpackspec b18 b18,
+              Default Unpackspec b19 b19, Default Unpackspec b20 b20,
+              Default Unpackspec b21 b21, Default Unpackspec b22 b22,
+              Default Unpackspec b23 b23, Default Unpackspec b24 b24,
+              Default Unpackspec b25 b25, Default Unpackspec b26 b26,
+              Default Unpackspec b27 b27, Default Unpackspec b28 b28,
+              Default Unpackspec fieldsR fieldsR, Default NullMaker b8 b5,
+              Default NullMaker b5 b7, Default NullMaker b7 b6,
+              Default NullMaker b6 b29, Default NullMaker b13 b9,
+              Default NullMaker b9 b14, Default NullMaker b14 b30,
+              Default NullMaker b10 b31, Default NullMaker b12 b32,
+              Default NullMaker b11 b12, Default NullMaker b2 b33,
+              Default NullMaker b15 b2, Default NullMaker b3 b15,
+              Default NullMaker b16 b3, Default NullMaker b4 b16,
+              Default NullMaker b23 b34, Default NullMaker b24 b35,
+              Default NullMaker b21 b23, Default NullMaker b22 b24,
+              Default NullMaker b25 b21, Default NullMaker b26 b22,
+              Default NullMaker b19 b25, Default NullMaker b20 b26,
+              Default NullMaker b27 b19, Default NullMaker b28 b20,
+              Default NullMaker b17 b27, Default NullMaker b18 b28,
+              Default NullMaker fieldsR b18) =>
+             Select fieldsR
+             -> Select b17
+             -> Select b4
+             -> Select b8
+             -> Select b13
+             -> Select b11
+             -> Select b10
+             -> Select fieldsL
+             -> ((b17, fieldsR) -> Column PGBool)
+             -> ((b4, (b17, b18)) -> Column PGBool)
+             -> ((b8, (b4, (b27, b28))) -> Column PGBool)
+             -> ((b13, (b8, (b16, (b19, b20)))) -> Column PGBool)
+             -> ((b11, (b13, (b5, (b3, (b25, b26))))) -> Column PGBool)
+             -> ((b10, (b11, (b9, (b7, (b15, (b21, b22)))))) -> Column PGBool)
+             -> ((fieldsL, (b10, (b12, (b14, (b6, (b2, (b23, b24)))))))
+                 -> Column PGBool)
+             -> Select (fieldsL, (b31, (b32, (b30, (b29, (b33, (b34, b35)))))))
 leftJoin8 q1 q2     q3     q4     q5     q6     q7     q8
          cond12 cond23 cond34 cond45 cond56 cond67 cond78 =
   leftJoin q8 ( leftJoin q7
@@ -270,49 +289,65 @@ leftJoin8 q1 q2     q3     q4     q5     q6     q7     q8
               ) cond78
 
 
-leftJoin9
-  :: (Default Unpackspec fieldsL1 fieldsL1,
-      Default Unpackspec fieldsL2 fieldsL2,
-      Default Unpackspec nullableFieldsR1 nullableFieldsR1,
-      Default Unpackspec fieldsL3 fieldsL3,
-      Default Unpackspec nullableFieldsR2 nullableFieldsR2,
-      Default Unpackspec fieldsL4 fieldsL4,
-      Default Unpackspec nullableFieldsR3 nullableFieldsR3,
-      Default Unpackspec fieldsL5 fieldsL5,
-      Default Unpackspec nullableFieldsR4 nullableFieldsR4,
-      Default Unpackspec fieldsL6 fieldsL6,
-      Default Unpackspec nullableFieldsR5 nullableFieldsR5,
-      Default Unpackspec fieldsL7 fieldsL7,
-      Default Unpackspec nullableFieldsR6 nullableFieldsR6,
-      Default Unpackspec fieldsL8 fieldsL8,
-      Default Unpackspec nullableFieldsR7 nullableFieldsR7,
-      Default Unpackspec fieldsR fieldsR,
-      Default NullMaker fieldsR nullableFieldsR7,
-      Default NullMaker (fieldsL2, nullableFieldsR1) nullableFieldsR8,
-      Default NullMaker (fieldsL3, nullableFieldsR2) nullableFieldsR1,
-      Default NullMaker (fieldsL4, nullableFieldsR3) nullableFieldsR2,
-      Default NullMaker (fieldsL5, nullableFieldsR4) nullableFieldsR3,
-      Default NullMaker (fieldsL6, nullableFieldsR5) nullableFieldsR4,
-      Default NullMaker (fieldsL7, nullableFieldsR6) nullableFieldsR5,
-      Default NullMaker (fieldsL8, nullableFieldsR7) nullableFieldsR6) =>
-     Opaleye.Select fieldsR
-     -> Opaleye.Select fieldsL8
-     -> Opaleye.Select fieldsL7
-     -> Opaleye.Select fieldsL6
-     -> Opaleye.Select fieldsL5
-     -> Opaleye.Select fieldsL4
-     -> Opaleye.Select fieldsL3
-     -> Opaleye.Select fieldsL2
-     -> Opaleye.Select fieldsL1
-     -> ((fieldsL8, fieldsR) -> Column PGBool)
-     -> ((fieldsL7, (fieldsL8, nullableFieldsR7)) -> Column PGBool)
-     -> ((fieldsL6, (fieldsL7, nullableFieldsR6)) -> Column PGBool)
-     -> ((fieldsL5, (fieldsL6, nullableFieldsR5)) -> Column PGBool)
-     -> ((fieldsL4, (fieldsL5, nullableFieldsR4)) -> Column PGBool)
-     -> ((fieldsL3, (fieldsL4, nullableFieldsR3)) -> Column PGBool)
-     -> ((fieldsL2, (fieldsL3, nullableFieldsR2)) -> Column PGBool)
-     -> ((fieldsL1, (fieldsL2, nullableFieldsR1)) -> Column PGBool)
-     -> Opaleye.Select (fieldsL1, nullableFieldsR8)
+
+leftJoin9 :: (Default Unpackspec b2 b2, Default Unpackspec b3 b3,
+            Default Unpackspec b4 b4, Default Unpackspec b5 b5,
+            Default Unpackspec b6 b6, Default Unpackspec b7 b7,
+            Default Unpackspec b8 b8, Default Unpackspec b9 b9,
+            Default Unpackspec b10 b10, Default Unpackspec b11 b11,
+            Default Unpackspec b12 b12, Default Unpackspec b13 b13,
+            Default Unpackspec b14 b14, Default Unpackspec b15 b15,
+            Default Unpackspec b16 b16, Default Unpackspec b17 b17,
+            Default Unpackspec b18 b18, Default Unpackspec b19 b19,
+            Default Unpackspec b20 b20, Default Unpackspec b21 b21,
+            Default Unpackspec fieldsL fieldsL, Default Unpackspec b22 b22,
+            Default Unpackspec b23 b23, Default Unpackspec b24 b24,
+            Default Unpackspec b25 b25, Default Unpackspec b26 b26,
+            Default Unpackspec b27 b27, Default Unpackspec b28 b28,
+            Default Unpackspec b29 b29, Default Unpackspec b30 b30,
+            Default Unpackspec b31 b31, Default Unpackspec b32 b32,
+            Default Unpackspec b33 b33, Default Unpackspec b34 b34,
+            Default Unpackspec b35 b35, Default Unpackspec b36 b36,
+            Default Unpackspec fieldsR fieldsR, Default NullMaker b15 b10,
+            Default NullMaker b10 b14, Default NullMaker b14 b11,
+            Default NullMaker b11 b13, Default NullMaker b13 b12,
+            Default NullMaker b12 b37, Default NullMaker b28 b16,
+            Default NullMaker b16 b29, Default NullMaker b29 b17,
+            Default NullMaker b17 b30, Default NullMaker b30 b38,
+            Default NullMaker b21 b20, Default NullMaker b20 b39,
+            Default NullMaker b22 b40, Default NullMaker b18 b41,
+            Default NullMaker b23 b18, Default NullMaker b19 b23,
+            Default NullMaker b26 b42, Default NullMaker b25 b26,
+            Default NullMaker b27 b25, Default NullMaker b24 b27,
+            Default NullMaker b3 b43, Default NullMaker b2 b44,
+            Default NullMaker b31 b3, Default NullMaker b32 b2,
+            Default NullMaker b5 b31, Default NullMaker b4 b32,
+            Default NullMaker b33 b5, Default NullMaker b34 b4,
+            Default NullMaker b7 b33, Default NullMaker b6 b34,
+            Default NullMaker b35 b7, Default NullMaker b36 b6,
+            Default NullMaker b9 b35, Default NullMaker b8 b36,
+            Default NullMaker fieldsR b8) =>
+           Select fieldsR
+           -> Select b9
+           -> Select b15
+           -> Select b28
+           -> Select b24
+           -> Select b19
+           -> Select b21
+           -> Select b22
+           -> Select fieldsL
+           -> ((b9, fieldsR) -> Column PGBool)
+           -> ((b15, (b9, b8)) -> Column PGBool)
+           -> ((b28, (b15, (b35, b36))) -> Column PGBool)
+           -> ((b24, (b28, (b10, (b7, b6)))) -> Column PGBool)
+           -> ((b19, (b24, (b16, (b14, (b33, b34))))) -> Column PGBool)
+           -> ((b21, (b19, (b27, (b29, (b11, (b5, b4)))))) -> Column PGBool)
+           -> ((b22, (b21, (b23, (b25, (b17, (b13, (b31, b32)))))))
+               -> Column PGBool)
+           -> ((fieldsL, (b22, (b20, (b18, (b26, (b30, (b12, (b3, b2))))))))
+               -> Column PGBool)
+           -> Select
+                (fieldsL, (b40, (b39, (b41, (b42, (b38, (b37, (b43, b44))))))))
 leftJoin9   q1 q2    q3     q4     q5     q6      q7    q8     q9
           cond12 cond23 cond34 cond45 cond56 cond67 cond78 cond89 =
   leftJoin q9 ( leftJoin q8