module Components.DataProcessors.ListDataProcessor (processReturnedValues,processAggReturnedValues) where

import Data.Text (Text,unpack,pack)
import Data.List (unzip4)
import Text.JSON (
    showJSON,
    showJSONs,
    JSValue,
    JSObject,
    toJSObject,
    encodeStrict,
    JSValue(JSNull),
    JSON(..),
    Result(Ok),
    decode
  )
import Control.Exception (throw)
import Data.Foldable (foldl',foldr')
import Data.Int (Int64)
import Model.ServerExceptions (
    VariableException(InvalidVariableTypeException),
    QueryException(ReadJsonException)
  )
import Model.ServerObjectTypes (
    NestedObject(..),
    Field,
    RootObject,
    ServerObject,
    ScalarType(..),
    Transformation,
    Argument,
    InlinefragmentObject(..)
  )
import Components.ObjectHandlers.ObjectsHandler (
    isServerObjectTable,
    getNestedObjectFieldLabel,
    getScalarFieldLabel,
    translateTableToObject,
    countTableIds
  )
import Components.Util (fst3,snd3,thd3,fst4,thd4,fth4)

-- root objects to one json representation of separate graphql results
processReturnedValues :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> [RootObject] -> [[[(Int,Bool,String)]]] -> [[[[[a]]]]] -> String
processReturnedValues :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Bool, String)]]]
-> [[[[[a]]]]]
-> String
processReturnedValues transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa robjs :: [RootObject]
robjs tbls :: [[[(Int, Bool, String)]]]
tbls rlts :: [[[[[a]]]]]
rlts = JSObject (JSObject JSValue) -> String
forall a. JSON a => a -> String
encodeStrict (JSObject (JSObject JSValue) -> String)
-> JSObject (JSObject JSValue) -> String
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
processReturnedValuesToJsonObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa [RootObject]
robjs [[[(Int, Bool, String)]]]
tbls [[[[[a]]]]]
rlts
processReturnedValuesToJsonObject :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> [RootObject] -> [[[(Int,Bool,String)]]] -> [[[[[a]]]]] -> JSObject (JSObject JSValue)
processReturnedValuesToJsonObject :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
processReturnedValuesToJsonObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa robjs :: [RootObject]
robjs tbls :: [[[(Int, Bool, String)]]]
tbls rlts :: [[[[[a]]]]]
rlts = [(String, JSObject JSValue)] -> JSObject (JSObject JSValue)
forall a. [(String, a)] -> JSObject a
toJSObject [("data", [(String, JSValue)] -> JSObject JSValue
forall a. [(String, a)] -> JSObject a
toJSObject [(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
processReturnedValueByRootObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa RootObject
a [[(Int, Bool, String)]]
b [[[[a]]]]
c | (a :: RootObject
a,b :: [[(Int, Bool, String)]]
b,c :: [[[[a]]]]
c) <- [RootObject]
-> [[[(Int, Bool, String)]]]
-> [[[[[a]]]]]
-> [(RootObject, [[(Int, Bool, String)]], [[[[a]]]])]
forall a b c. [a] -> [b] -> [c] -> [(a, b, c)]
zip3 [RootObject]
robjs [[[(Int, Bool, String)]]]
tbls [[[[[a]]]]]
rlts])]
-- qraphql query object and sql return data to json representation on graphql query results
processReturnedValueByRootObject :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> RootObject -> [[(Int,Bool,String)]] -> [[[[a]]]] -> (String, JSValue)
processReturnedValueByRootObject :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
processReturnedValueByRootObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa (NestedObject Nothing name :: String
name sobj :: String
sobj _ sfs :: SubFields
sfs) tbls :: [[(Int, Bool, String)]]
tbls rlts :: [[[[a]]]]
rlts = (String
name, [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ([JSValue] -> JSValue) -> [JSValue] -> JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls SubFields
sfs [[[[a]]]]
rlts)
processReturnedValueByRootObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa (NestedObject (Just alias :: String
alias) name :: String
name sobj :: String
sobj _ sfs :: SubFields
sfs) tbls :: [[(Int, Bool, String)]]
tbls rlts :: [[[[a]]]]
rlts = (String
alias, [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ([JSValue] -> JSValue) -> [JSValue] -> JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls SubFields
sfs [[[[a]]]]
rlts)
-- SubFields and data rows to json representation on qraphql query data
packageSubFields :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [[(Int,Bool,String)]] -> [Field] -> [[[[a]]]] -> [JSValue]
packageSubFields :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageSubFields transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Bool, String)]]
tbls sfs :: SubFields
sfs rlts :: [[[[a]]]]
rlts = (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageSubFieldsForEveryRow (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj SubFields
sfs [[([(Int, Bool, String)], ([[[a]]], Int))]]
grpdInstcByObjInst
  where
    dtaByInstCbntn :: [([(Int, Bool, String)], [[[a]]])]
dtaByInstCbntn = [[(Int, Bool, String)]]
-> [[[[a]]]] -> [([(Int, Bool, String)], [[[a]]])]
forall a b. [a] -> [b] -> [(a, b)]
zip [[(Int, Bool, String)]]
tbls [[[[a]]]]
rlts
    grpdInstcByObjInst :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
grpdInstcByObjInst = ([[([(Int, Bool, String)], ([[[a]]], Int))]]
 -> ([(Int, Bool, String)], [[[a]]])
 -> [[([(Int, Bool, String)], ([[[a]]], Int))]])
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Bool, String)], [[[a]]])]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\rlt :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
rlt (nInst :: [(Int, Bool, String)]
nInst,nDta :: [[[a]]]
nDta)->if ((Int, Bool, String) -> Bool
forall a b c. (a, b, c) -> b
snd3 ((Int, Bool, String) -> Bool) -> (Int, Bool, String) -> Bool
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head [(Int, Bool, String)]
nInst)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False then
          (([[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a]
init [[([(Int, Bool, String)], ([[[a]]], Int))]]
rlt)[[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[([[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> a
last [[([(Int, Bool, String)], ([[[a]]], Int))]]
rlt)[([(Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> [a] -> [a]
++[([(Int, Bool, String)]
nInst,([[[a]]]
nDta,([[[a]]], Int) -> Int
forall a b. (a, b) -> b
snd (([[[a]]], Int) -> Int) -> ([[[a]]], Int) -> Int
forall a b. (a -> b) -> a -> b
$ ([(Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int)
forall a b. (a, b) -> b
snd (([(Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int))
-> ([(Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int)
forall a b. (a -> b) -> a -> b
$ [([(Int, Bool, String)], ([[[a]]], Int))]
-> ([(Int, Bool, String)], ([[[a]]], Int))
forall a. [a] -> a
head ([([(Int, Bool, String)], ([[[a]]], Int))]
 -> ([(Int, Bool, String)], ([[[a]]], Int)))
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> ([(Int, Bool, String)], ([[[a]]], Int))
forall a b. (a -> b) -> a -> b
$ [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> a
last [[([(Int, Bool, String)], ([[[a]]], Int))]]
rlt))]])
        else
          [[([(Int, Bool, String)], ([[[a]]], Int))]]
rlt[[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[[([(Int, Bool, String)]
nInst,([[[a]]]
nDta,String -> [(String, [String], String)] -> Int
countTableIds ((Int, Bool, String) -> String
forall a b c. (a, b, c) -> c
thd3 ((Int, Bool, String) -> String) -> (Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head [(Int, Bool, String)]
nInst) [(String, [String], String)]
sodn))]]) [[(([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)]
forall a b. (a, b) -> a
fst (([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)])
-> ([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [([(Int, Bool, String)], [[[a]]])]
-> ([(Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Bool, String)], [[[a]]])]
dtaByInstCbntn,(([(Int, Bool, String)], [[[a]]]) -> [[[a]]]
forall a b. (a, b) -> b
snd (([(Int, Bool, String)], [[[a]]]) -> [[[a]]])
-> ([(Int, Bool, String)], [[[a]]]) -> [[[a]]]
forall a b. (a -> b) -> a -> b
$ [([(Int, Bool, String)], [[[a]]])]
-> ([(Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Bool, String)], [[[a]]])]
dtaByInstCbntn,String -> [(String, [String], String)] -> Int
countTableIds ((Int, Bool, String) -> String
forall a b c. (a, b, c) -> c
thd3 ((Int, Bool, String) -> String) -> (Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head ([(Int, Bool, String)] -> (Int, Bool, String))
-> [(Int, Bool, String)] -> (Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ ([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)]
forall a b. (a, b) -> a
fst (([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)])
-> ([(Int, Bool, String)], [[[a]]]) -> [(Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [([(Int, Bool, String)], [[[a]]])]
-> ([(Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Bool, String)], [[[a]]])]
dtaByInstCbntn) [(String, [String], String)]
sodn))]] ([([(Int, Bool, String)], [[[a]]])]
 -> [[([(Int, Bool, String)], ([[[a]]], Int))]])
-> [([(Int, Bool, String)], [[[a]]])]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a b. (a -> b) -> a -> b
$ [([(Int, Bool, String)], [[[a]]])]
-> [([(Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a]
tail [([(Int, Bool, String)], [[[a]]])]
dtaByInstCbntn
packageSubFieldsForEveryRow :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [Field] -> [[([(Int,Bool,String)],([[[a]]],Int))]] -> [JSValue]
packageSubFieldsForEveryRow :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageSubFieldsForEveryRow transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj (sf :: Field
sf:sfs :: SubFields
sfs) dt :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
dt = if [[([(Int, Bool, String)], ([[[a]]], Int))]] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [[([(Int, Bool, String)], ([[[a]]], Int))]]
objWInst then [] else [JSValue] -> [JSValue] -> [JSValue]
forall a. [a] -> [a] -> [a]
(++) [JSValue]
objects ([JSValue] -> [JSValue]) -> [JSValue] -> [JSValue]
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageSubFieldsForEveryRow (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj (Field
sfField -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:SubFields
sfs) [[([(Int, Bool, String)], ([[[a]]], Int))]]
remIs
  where
    (_,_,_,_,isNull :: a -> Bool
isNull) = (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx
    objInstWRw :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
objInstWRw = ([([(Int, Bool, String)], ([[[a]]], Int))]
 -> [([(Int, Bool, String)], ([[[a]]], Int))])
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a b. (a -> b) -> [a] -> [b]
map ((([(Int, Bool, String)], ([[[a]]], Int)) -> Bool)
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
forall a. (a -> Bool) -> [a] -> [a]
filter (\(_,(nDt :: [[[a]]]
nDt,_))->([[a]] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([[a]] -> Bool) -> [[a]] -> Bool
forall a b. (a -> b) -> a -> b
$ [[[a]]] -> [[a]]
forall a. [a] -> a
head [[[a]]]
nDt)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False)) [[([(Int, Bool, String)], ([[[a]]], Int))]]
dt
    objWInst :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
objWInst = ([([(Int, Bool, String)], ([[[a]]], Int))] -> Bool)
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool)
-> ([([(Int, Bool, String)], ([[[a]]], Int))] -> Bool)
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [([(Int, Bool, String)], ([[[a]]], Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null) [[([(Int, Bool, String)], ([[[a]]], Int))]]
objInstWRw
    (nxtObjsRw :: [([[(Int, Bool, String)]], [[[[a]]]])]
nxtObjsRw,remIs :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
remIs) = (([([[(Int, Bool, String)]], [[[[a]]]])],
  [[([(Int, Bool, String)], ([[[a]]], Int))]])
 -> [([(Int, Bool, String)], ([[[a]]], Int))]
 -> ([([[(Int, Bool, String)]], [[[[a]]]])],
     [[([(Int, Bool, String)], ([[[a]]], Int))]]))
-> ([([[(Int, Bool, String)]], [[[[a]]]])],
    [[([(Int, Bool, String)], ([[[a]]], Int))]])
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> ([([[(Int, Bool, String)]], [[[[a]]]])],
    [[([(Int, Bool, String)], ([[[a]]], Int))]])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(objRows :: [([[(Int, Bool, String)]], [[[[a]]]])]
objRows,remRows :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
remRows) nObj :: [([(Int, Bool, String)], ([[[a]]], Int))]
nObj->
      let (nObjRow :: [([(Int, Bool, String)], [[[a]]])]
nObjRow,nObjRem :: [([(Int, Bool, String)], ([[[a]]], Int))]
nObjRem) = (([([(Int, Bool, String)], [[[a]]])],
  [([(Int, Bool, String)], ([[[a]]], Int))])
 -> ([(Int, Bool, String)], ([[[a]]], Int))
 -> ([([(Int, Bool, String)], [[[a]]])],
     [([(Int, Bool, String)], ([[[a]]], Int))]))
-> ([([(Int, Bool, String)], [[[a]]])],
    [([(Int, Bool, String)], ([[[a]]], Int))])
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> ([([(Int, Bool, String)], [[[a]]])],
    [([(Int, Bool, String)], ([[[a]]], Int))])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(nInstRow :: [([(Int, Bool, String)], [[[a]]])]
nInstRow,nInstRem :: [([(Int, Bool, String)], ([[[a]]], Int))]
nInstRem) (tbls :: [(Int, Bool, String)]
tbls,(dSet :: [[[a]]]
dSet,idC :: Int
idC))->let (rowData :: [[[a]]]
rowData,remData :: [[[a]]]
remData) = (a -> Bool) -> Int -> [[[a]]] -> ([[[a]]], [[[a]]])
forall a.
Eq a =>
(a -> Bool) -> Int -> [[[a]]] -> ([[[a]]], [[[a]]])
separateGqlRow a -> Bool
isNull Int
idC [[[a]]]
dSet in ([([(Int, Bool, String)], [[[a]]])]
nInstRow[([(Int, Bool, String)], [[[a]]])]
-> [([(Int, Bool, String)], [[[a]]])]
-> [([(Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a] -> [a]
++[([(Int, Bool, String)]
tbls,[[[a]]]
rowData)],[([(Int, Bool, String)], ([[[a]]], Int))]
nInstRem[([(Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> [a] -> [a]
++[([(Int, Bool, String)]
tbls,([[[a]]]
remData,Int
idC))])) ([],[]) [([(Int, Bool, String)], ([[[a]]], Int))]
nObj
      in ([([[(Int, Bool, String)]], [[[[a]]]])]
objRows[([[(Int, Bool, String)]], [[[[a]]]])]
-> [([[(Int, Bool, String)]], [[[[a]]]])]
-> [([[(Int, Bool, String)]], [[[[a]]]])]
forall a. [a] -> [a] -> [a]
++[[([(Int, Bool, String)], [[[a]]])]
-> ([[(Int, Bool, String)]], [[[[a]]]])
forall a b. [(a, b)] -> ([a], [b])
unzip [([(Int, Bool, String)], [[[a]]])]
nObjRow],[[([(Int, Bool, String)], ([[[a]]], Int))]]
remRows[[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[[([(Int, Bool, String)], ([[[a]]], Int))]
nObjRem])) ([],[]) [[([(Int, Bool, String)], ([[[a]]], Int))]]
objWInst
    objects :: [JSValue]
objects = (([[(Int, Bool, String)]], [[[[a]]]]) -> JSValue)
-> [([[(Int, Bool, String)]], [[[[a]]]])] -> [JSValue]
forall a b. (a -> b) -> [a] -> [b]
map (\(nTbl :: [[(Int, Bool, String)]]
nTbl,nDt :: [[[[a]]]]
nDt)->JSObject JSValue -> JSValue
forall a. JSON a => a -> JSValue
showJSON (JSObject JSValue -> JSValue) -> JSObject JSValue -> JSValue
forall a b. (a -> b) -> a -> b
$ [(String, JSValue)] -> JSObject JSValue
forall a. [(String, a)] -> JSObject a
toJSObject ([(String, JSValue)] -> JSObject JSValue)
-> [(String, JSValue)] -> JSObject JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
nTbl (Field
sfField -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:SubFields
sfs) [[[[a]]]]
nDt) [([[(Int, Bool, String)]], [[[[a]]]])]
nxtObjsRw
packageSubFieldsForEveryRow transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj [] dt :: [[([(Int, Bool, String)], ([[[a]]], Int))]]
dt = []

makeOneGQLObject :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [[(Int,Bool,String)]] -> [Field] -> [[[[a]]]] -> [(String,JSValue)]
makeOneGQLObject :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject _ _ _ _ _ [] _ _ = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- no reference tables (unusual)/all removed
makeOneGQLObject _ _ _ _ _ ([]:_) _ _ = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- no reference tables in first varient (unusual)
makeOneGQLObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Bool, String)]]
tbls ((Left (ScalarType alias :: Maybe String
alias "__typename" trans :: Maybe String
trans arg :: Maybe String
arg)):b :: SubFields
b) dat :: [[[[a]]]]
dat = (ScalarType -> String
getScalarFieldLabel (ScalarType -> String) -> ScalarType -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType Maybe String
alias "__typename" Maybe String
trans Maybe String
arg, Text -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Text -> JSValue) -> Text -> JSValue
forall a b. (a -> b) -> a -> b
$ String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String -> [(String, [String], String)] -> String
translateTableToObject ((Int, Bool, String) -> String
forall a b c. (a, b, c) -> c
thd3 ((Int, Bool, String) -> String) -> (Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head ([(Int, Bool, String)] -> (Int, Bool, String))
-> [(Int, Bool, String)] -> (Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Bool, String)]] -> [(Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Bool, String)]]
tbls) [(String, [String], String)]
sodn)(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls SubFields
b [[[[a]]]]
dat)
makeOneGQLObject (fx1 :: a -> Text
fx1,fx2 :: a -> Double
fx2,fx3 :: a -> Int64
fx3,fx4 :: a -> Bool
fx4,isNull :: a -> Bool
isNull) sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Bool, String)]]
tbls ((Left (ScalarType alias :: Maybe String
alias name :: String
name trans :: Maybe String
trans arg :: Maybe String
arg)):b :: SubFields
b) ((((i :: a
i:j :: [a]
j):k :: [[a]]
k):l :: [[[a]]]
l):m :: [[[[a]]]]
m) = (ScalarType -> String
getScalarFieldLabel (ScalarType -> String) -> ScalarType -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType Maybe String
alias String
name Maybe String
trans Maybe String
arg, if a -> Bool
isNull a
i then JSValue
JSNull else (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> String -> a -> JSValue
forall a.
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> String -> a -> JSValue
castJSType (a -> Text
fx1,a -> Double
fx2,a -> Int64
fx3,a -> Bool
fx4,a -> Bool
isNull) (String
-> String
-> Maybe String
-> Maybe String
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> String
findPrimitiveScalarTypeType (String -> [(String, [String], String)] -> String
translateTableToObject ((Int, Bool, String) -> String
forall a b c. (a, b, c) -> c
thd3 ((Int, Bool, String) -> String) -> (Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head ([(Int, Bool, String)] -> (Int, Bool, String))
-> [(Int, Bool, String)] -> (Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Bool, String)]] -> [(Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Bool, String)]]
tbls) [(String, [String], String)]
sodn) String
name Maybe String
trans Maybe String
arg [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss) a
i)(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text
fx1,a -> Double
fx2,a -> Int64
fx3,a -> Bool
fx4,a -> Bool
isNull) [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls SubFields
b ((([a]
j[a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:[[a]]
k)[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:[[[a]]]
l)[[[a]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. a -> [a] -> [a]
:[[[[a]]]]
m))
makeOneGQLObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Bool, String)]]
tbls ((Right (Left (NestedObject alias :: Maybe String
alias name :: String
name nso :: String
nso ss :: SubSelection
ss sfs :: SubFields
sfs))):b :: SubFields
b) ((j :: [[a]]
j:k :: [[[a]]]
k):l :: [[[[a]]]]
l) = ((RootObject -> String
getNestedObjectFieldLabel (RootObject -> String) -> RootObject -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> String -> SubSelection -> SubFields -> RootObject
NestedObject Maybe String
alias String
name String
nso SubSelection
ss SubFields
sfs), [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
nso [[(Int, Bool, String)]]
nxtTbls SubFields
sfs [[[[a]]]]
nxtData))(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
remTbls SubFields
b [[[[a]]]]
remData)
  where
    (nxtTbls :: [[(Int, Bool, String)]]
nxtTbls,nxtData :: [[[[a]]]]
nxtData,remTbls :: [[(Int, Bool, String)]]
remTbls,remData :: [[[[a]]]]
remData) = [[(Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
forall a.
[[(Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
separateDataFrNstdObj [[(Int, Bool, String)]]
tbls (([[a]]
j[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:[[[a]]]
k)[[[a]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. a -> [a] -> [a]
:[[[[a]]]]
l)
makeOneGQLObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Bool, String)]]
tbls ((Right (Right (InlinefragmentObject ifo :: String
ifo sfs :: SubFields
sfs))):b :: SubFields
b) dat :: [[[[a]]]]
dat = if (String
-> String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> Bool
isServerObjectTable ((Int, Bool, String) -> String
forall a b c. (a, b, c) -> c
thd3 ((Int, Bool, String) -> String) -> (Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head ([(Int, Bool, String)] -> (Int, Bool, String))
-> [(Int, Bool, String)] -> (Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Bool, String)]] -> [(Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Bool, String)]]
tbls) String
ifo [(String, [String], String)]
sodn [(String, [String], [String])]
soa) then (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls (SubFields
sfsSubFields -> SubFields -> SubFields
forall a. [a] -> [a] -> [a]
++SubFields
b) [[[[a]]]]
dat else (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Bool, String)]]
tbls SubFields
b [[[[a]]]]
dat
makeOneGQLObject _ _ _ _ _ _ [] ((([]:_):_):_) = []  -- no columns (in first variant and first query) and no fields (done)
makeOneGQLObject _ _ _ _ _ _ _ (([]:_):_) = []  -- no rows (no data)
makeOneGQLObject _ _ _ _ _ _ ((Right (Left _)):[]) ([]:_) = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- field and no queries (unusual)
makeOneGQLObject _ _ _ _ _ _ _ ([]:_) = []  -- no queries (no data)
makeOneGQLObject _ _ _ _ _ _ _ [] = []  -- no instance combination (unusual)
makeOneGQLObject _ _ _ _ _ _ [] _ = [] -- columns and no fields (done or error)
makeOneGQLObject _ _ _ _ _ _ ((Left _):_) ((([]:_):_):_) = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- field and no result columns

separateDataFrNstdObj :: [[(Int,Bool,String)]] -> [[[[a]]]] -> ([[(Int,Bool,String)]],[[[[a]]]],[[(Int,Bool,String)]],[[[[a]]]])
separateDataFrNstdObj :: [[(Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
separateDataFrNstdObj info :: [[(Int, Bool, String)]]
info dat :: [[[[a]]]]
dat =
    (([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
  [[[[a]]]])
 -> ([(Int, Bool, String)], [[[a]]])
 -> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
     [[[[a]]]]))
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
-> [([(Int, Bool, String)], [[[a]]])]
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(nTbls :: [[(Int, Bool, String)]]
nTbls,nDt :: [[[[a]]]]
nDt,rTbls :: [[(Int, Bool, String)]]
rTbls,rDt :: [[[[a]]]]
rDt) (instMt :: [(Int, Bool, String)]
instMt,instDt :: [[[a]]]
instDt)->
      let
        nxtTblsInfo :: [(Int, Bool, String)]
nxtTblsInfo = [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
instMt
        tNxtTblsInfo :: [(Int, Bool, String)]
tNxtTblsInfo = [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
nxtTblsInfo
        (objLvl :: Int
objLvl,_,_) = [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head [(Int, Bool, String)]
nxtTblsInfo
        nestedObjCount :: Int
nestedObjCount = ((Int, Bool, String) -> Int -> Int)
-> Int -> [(Int, Bool, String)] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(nlvl :: Int
nlvl,_,_) rlt :: Int
rlt->if Int
nlvlInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
objLvl then 0 else Int
rltInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) 0 [(Int, Bool, String)]
tNxtTblsInfo
        fQrydPos :: Int
fQrydPos = ((Int, (Int, Bool, String)) -> Int -> Int)
-> Int -> [(Int, (Int, Bool, String))] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(idx :: Int
idx,(_,fst :: Bool
fst,_)) rlt :: Int
rlt->if Bool
fst then Int
idx else Int
rlt) (([(Int, Bool, String)] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [(Int, Bool, String)]
nxtTblsInfo)Int -> Int -> Int
forall a. Num a => a -> a -> a
-1) ([(Int, (Int, Bool, String))] -> Int)
-> [(Int, (Int, Bool, String))] -> Int
forall a b. (a -> b) -> a -> b
$ [Int] -> [(Int, Bool, String)] -> [(Int, (Int, Bool, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip [0..] [(Int, Bool, String)]
nxtTblsInfo
        hasQrd :: Bool
hasQrd = Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
(<=) Int
fQrydPos Int
nestedObjCount
        (nObjMeta :: [[(Int, Bool, String)]]
nObjMeta,nObjData :: [[[[a]]]]
nObjData,remMeta :: [[(Int, Bool, String)]]
remMeta,remData :: [[[[a]]]]
remData) = if Bool
hasQrd then
            ([[(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
instMt],[[[[a]]]
instDt],[],[])
          else
            ([],[],[([(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head [(Int, Bool, String)]
instMt)(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:(Int -> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. Int -> [a] -> [a]
drop (Int
nestedObjCountInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) ([(Int, Bool, String)] -> [(Int, Bool, String)])
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
instMt)],[[[[a]]]
instDt])
      in
        ([[(Int, Bool, String)]]
nTbls[[(Int, Bool, String)]]
-> [[(Int, Bool, String)]] -> [[(Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++[[(Int, Bool, String)]]
nObjMeta,[[[[a]]]]
nDt[[[[a]]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. [a] -> [a] -> [a]
++[[[[a]]]]
nObjData,[[(Int, Bool, String)]]
rTbls[[(Int, Bool, String)]]
-> [[(Int, Bool, String)]] -> [[(Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++[[(Int, Bool, String)]]
remMeta,[[[[a]]]]
rDt[[[[a]]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. [a] -> [a] -> [a]
++[[[[a]]]]
remData))
    ([[(Int, Bool, String)]
fstNObjMeta],[[[[a]]]
fstNObjData],[[(Int, Bool, String)]
fstRemMeta],[[[[a]]]
fstRemData]) ([([(Int, Bool, String)], [[[a]]])]
 -> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
     [[[[a]]]]))
-> [([(Int, Bool, String)], [[[a]]])]
-> ([[(Int, Bool, String)]], [[[[a]]]], [[(Int, Bool, String)]],
    [[[[a]]]])
forall a b. (a -> b) -> a -> b
$ 
    [([(Int, Bool, String)], [[[a]]])]
-> [([(Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a]
tail ([([(Int, Bool, String)], [[[a]]])]
 -> [([(Int, Bool, String)], [[[a]]])])
-> [([(Int, Bool, String)], [[[a]]])]
-> [([(Int, Bool, String)], [[[a]]])]
forall a b. (a -> b) -> a -> b
$ [[(Int, Bool, String)]]
-> [[[[a]]]] -> [([(Int, Bool, String)], [[[a]]])]
forall a b. [a] -> [b] -> [(a, b)]
zip [[(Int, Bool, String)]]
info [[[[a]]]]
dat
  where
    fstInstInfo :: [(Int, Bool, String)]
fstInstInfo = [[(Int, Bool, String)]] -> [(Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Bool, String)]]
info
    fstInstDat :: [[[a]]]
fstInstDat = [[[[a]]]] -> [[[a]]]
forall a. [a] -> a
head [[[[a]]]]
dat
    (fstL :: Int
fstL,fstF :: Bool
fstF,fstT :: String
fstT) = [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
head [(Int, Bool, String)]
fstInstInfo
    nObjPlusTblsInfo :: [(Int, Bool, String)]
nObjPlusTblsInfo = [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
fstInstInfo
    nObjLvl :: Int
nObjLvl = Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
fstL 1
    nstdObjsCount :: Int
nstdObjsCount = ((Int, Bool, String) -> Int -> Int)
-> Int -> [(Int, Bool, String)] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(nlvl :: Int
nlvl,_,_) rlt :: Int
rlt->if Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) Int
nlvl Int
nObjLvl then 1 else Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
rlt 1) 1 ([(Int, Bool, String)] -> Int) -> [(Int, Bool, String)] -> Int
forall a b. (a -> b) -> a -> b
$ [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Bool, String)]
nObjPlusTblsInfo
    fstNObjMeta :: [(Int, Bool, String)]
fstNObjMeta = Int -> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. Int -> [a] -> [a]
take Int
nstdObjsCount [(Int, Bool, String)]
nObjPlusTblsInfo
    nObjPlusDat :: [[[a]]]
nObjPlusDat = [[[a]]] -> [[[a]]]
forall a. [a] -> [a]
tail ([[[a]]] -> [[[a]]]) -> [[[a]]] -> [[[a]]]
forall a b. (a -> b) -> a -> b
$ [[[a]]]
fstInstDat
    fstNObjData :: [[[a]]]
fstNObjData = Int -> [[[a]]] -> [[[a]]]
forall a. Int -> [a] -> [a]
take Int
nstdObjsCount [[[a]]]
nObjPlusDat
    fstRemMeta :: [(Int, Bool, String)]
fstRemMeta = (Int
fstL,Bool
fstF,String
fstT)(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:(Int -> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. Int -> [a] -> [a]
drop Int
nstdObjsCount [(Int, Bool, String)]
nObjPlusTblsInfo)
    fstRemData :: [[[a]]]
fstRemData = ([[[a]]] -> [[a]]
forall a. [a] -> a
head ([[[a]]] -> [[a]]) -> [[[a]]] -> [[a]]
forall a b. (a -> b) -> a -> b
$ [[[a]]]
fstInstDat)[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:(Int -> [[[a]]] -> [[[a]]]
forall a. Int -> [a] -> [a]
drop Int
nstdObjsCount [[[a]]]
nObjPlusDat)

findPrimitiveScalarTypeType :: ServerObject -> String -> Transformation -> Argument -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> String
findPrimitiveScalarTypeType :: String
-> String
-> Maybe String
-> Maybe String
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> String
findPrimitiveScalarTypeType sobj :: String
sobj name :: String
name trans :: Maybe String
trans arg :: Maybe String
arg ((obj :: String
obj,flds :: [(String, String, [(String, [(String, String, String, String)])])]
flds):rst :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
rst) = if String
sobjString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
obj then String
-> Maybe String
-> Maybe String
-> [(String, String,
     [(String, [(String, String, String, String)])])]
-> String
findScalarTypeType String
name Maybe String
trans Maybe String
arg [(String, String, [(String, [(String, String, String, String)])])]
flds else String
-> String
-> Maybe String
-> Maybe String
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> String
findPrimitiveScalarTypeType String
sobj String
name Maybe String
trans Maybe String
arg [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
rst
findPrimitiveScalarTypeType _ _ _ _ [] = String -> String
forall a. HasCallStack => String -> a
error "Object is not found (source error)."
findScalarTypeType :: String -> Transformation -> Argument -> [(String,String,[(String,[(String,String,String,String)])])] -> String
findScalarTypeType :: String
-> Maybe String
-> Maybe String
-> [(String, String,
     [(String, [(String, String, String, String)])])]
-> String
findScalarTypeType name :: String
name Nothing _ ((sName :: String
sName,sType :: String
sType,opts :: [(String, [(String, String, String, String)])]
opts):rst :: [(String, String, [(String, [(String, String, String, String)])])]
rst) = if String
nameString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
sName then String
sType else String
-> Maybe String
-> Maybe String
-> [(String, String,
     [(String, [(String, String, String, String)])])]
-> String
findScalarTypeType String
name Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing [(String, String, [(String, [(String, String, String, String)])])]
rst
findScalarTypeType name :: String
name (Just trans :: String
trans) arg :: Maybe String
arg ((sName :: String
sName,sType :: String
sType,args :: [(String, [(String, String, String, String)])]
args):rst :: [(String, String, [(String, [(String, String, String, String)])])]
rst) = if String
nameString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
sName then String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> String
findArgumentOptionType String
trans Maybe String
arg [(String, [(String, String, String, String)])]
args else String
-> Maybe String
-> Maybe String
-> [(String, String,
     [(String, [(String, String, String, String)])])]
-> String
findScalarTypeType String
name (String -> Maybe String
forall a. a -> Maybe a
Just String
trans) Maybe String
arg [(String, String, [(String, [(String, String, String, String)])])]
rst
findScalarTypeType _ _ _ [] = String -> String
forall a. HasCallStack => String -> a
error "Scalar is not found (source error)."
findArgumentOptionType :: String -> Argument -> [(String,[(String,String,String,String)])] -> String
findArgumentOptionType :: String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> String
findArgumentOptionType trans :: String
trans Nothing ((aname :: String
aname,((_,typ :: String
typ,_,_):_)):rst :: [(String, [(String, String, String, String)])]
rst) = if String
transString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
aname then String
typ else String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> String
findArgumentOptionType String
trans Maybe String
forall a. Maybe a
Nothing [(String, [(String, String, String, String)])]
rst
findArgumentOptionType trans :: String
trans Nothing ((aname :: String
aname,[]):rst :: [(String, [(String, String, String, String)])]
rst) = if String
transString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
aname then String -> String
forall a. HasCallStack => String -> a
error "Scalar argument is not found (source error)." else String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> String
findArgumentOptionType String
trans Maybe String
forall a. Maybe a
Nothing [(String, [(String, String, String, String)])]
rst
findArgumentOptionType trans :: String
trans (Just arg :: String
arg) ((aname :: String
aname,opts :: [(String, String, String, String)]
opts):rst :: [(String, [(String, String, String, String)])]
rst) = if String
transString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
aname then String -> [(String, String, String, String)] -> String
findOptionType String
arg [(String, String, String, String)]
opts else String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> String
findArgumentOptionType String
trans (String -> Maybe String
forall a. a -> Maybe a
Just String
arg) [(String, [(String, String, String, String)])]
rst
findArgumentOptionType _ _ [] = String -> String
forall a. HasCallStack => String -> a
error "Scalar argument is not found (source error)."
findOptionType :: String -> [(String,String,String,String)] -> String
findOptionType :: String -> [(String, String, String, String)] -> String
findOptionType arg :: String
arg ((oname :: String
oname,typ :: String
typ,_,_):rst :: [(String, String, String, String)]
rst) = if String
argString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
oname then String
typ else String -> [(String, String, String, String)] -> String
findOptionType String
arg [(String, String, String, String)]
rst
findOptionType _ [] = String -> String
forall a. HasCallStack => String -> a
error "Scalar argument option is not found (source error)."

separateGqlRow :: (Eq a) => (a -> Bool) -> Int -> [[[a]]] -> ([[[a]]],[[[a]]])
separateGqlRow :: (a -> Bool) -> Int -> [[[a]]] -> ([[[a]]], [[[a]]])
separateGqlRow isNull :: a -> Bool
isNull idCnt :: Int
idCnt dat :: [[[a]]]
dat = if ((a -> Bool) -> [a] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all a -> Bool
isNull [a]
fstTblIds) then
                                    [([[a]], [[a]])] -> ([[[a]]], [[[a]]])
forall a b. [(a, b)] -> ([a], [b])
unzip [([],[[a]
row | [a]
row<-[[a]]
tbl, Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ (a -> Bool) -> [a] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all a -> Bool
isNull ([a] -> Bool) -> [a] -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
idCnt [a]
row]) | [[a]]
tbl<-[[[a]]]
dat]
                                  else
                                    Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]], [[[a]]])
forall a.
Eq a =>
Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]], [[[a]]])
getGqlRow Int
idCnt [a]
fstTblIds [[[a]]]
dat [] []
                                  where
                                    fstTblIds :: [a]
fstTblIds = Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
idCnt ([a] -> [a]) -> [a] -> [a]
forall a b. (a -> b) -> a -> b
$ [[a]] -> [a]
forall a. [a] -> a
head ([[a]] -> [a]) -> [[a]] -> [a]
forall a b. (a -> b) -> a -> b
$ [[[a]]] -> [[a]]
forall a. [a] -> a
head [[[a]]]
dat                    
getGqlRow :: (Eq a) => Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]],[[[a]]])
getGqlRow :: Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]], [[[a]]])
getGqlRow _ _ [] tblsRows :: [[[a]]]
tblsRows tblsRem :: [[[a]]]
tblsRem = ([[[a]]]
tblsRows,[[[a]]]
tblsRem)
getGqlRow idCnt :: Int
idCnt fstIds :: [a]
fstIds (tbl :: [[a]]
tbl:dat :: [[[a]]]
dat) tblsRows :: [[[a]]]
tblsRows tblsRem :: [[[a]]]
tblsRem = Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]], [[[a]]])
forall a.
Eq a =>
Int -> [a] -> [[[a]]] -> [[[a]]] -> [[[a]]] -> ([[[a]]], [[[a]]])
getGqlRow Int
idCnt [a]
fstIds [[[a]]]
dat ([[[a]]]
tblsRows[[[a]]] -> [[[a]]] -> [[[a]]]
forall a. [a] -> [a] -> [a]
++[[[a]]
nxtRow]) ([[[a]]]
tblsRem[[[a]]] -> [[[a]]] -> [[[a]]]
forall a. [a] -> [a] -> [a]
++[[[a]]
nxtRem])
                                                  where
                                                    (nxtRow :: [[a]]
nxtRow,nxtRem :: [[a]]
nxtRem) = Int -> [a] -> [[a]] -> [[a]] -> ([[a]], [[a]])
forall a. Eq a => Int -> [a] -> [[a]] -> [[a]] -> ([[a]], [[a]])
takeInstanceRow Int
idCnt [a]
fstIds [[a]]
tbl []
takeInstanceRow :: (Eq a) => Int -> [a] -> [[a]] -> [[a]] -> ([[a]],[[a]])
takeInstanceRow :: Int -> [a] -> [[a]] -> [[a]] -> ([[a]], [[a]])
takeInstanceRow idCnt :: Int
idCnt fstIds :: [a]
fstIds (row :: [a]
row:rem :: [[a]]
rem) rlt :: [[a]]
rlt =
  if [a] -> [a] -> Bool
forall a. Eq a => a -> a -> Bool
(==) [a]
fstIds ([a] -> Bool) -> [a] -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
take Int
idCnt [a]
row then
    Int -> [a] -> [[a]] -> [[a]] -> ([[a]], [[a]])
forall a. Eq a => Int -> [a] -> [[a]] -> [[a]] -> ([[a]], [[a]])
takeInstanceRow Int
idCnt [a]
fstIds [[a]]
rem ([[a]]
rlt[[a]] -> [[a]] -> [[a]]
forall a. [a] -> [a] -> [a]
++[Int -> [a] -> [a]
forall a. Int -> [a] -> [a]
drop Int
idCnt [a]
row])
  else
    ([[a]]
rlt,([a]
row[a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:[[a]]
rem))
takeInstanceRow _ _ _ rlt :: [[a]]
rlt = ([[a]]
rlt,[])

castJSType :: ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> String -> a -> JSValue
castJSType :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> String -> a -> JSValue
castJSType (toText :: a -> Text
toText,_,_,_,_) "Text" val :: a
val = Text -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Text -> JSValue) -> Text -> JSValue
forall a b. (a -> b) -> a -> b
$ a -> Text
toText a
val
castJSType (_,toNum :: a -> Double
toNum,_,_,_) "Double" val :: a
val = Double -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Double -> JSValue) -> Double -> JSValue
forall a b. (a -> b) -> a -> b
$ a -> Double
toNum a
val
castJSType (_,_,toInt :: a -> Int64
toInt,_,_) "Int64" val :: a
val = Int64 -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Int64 -> JSValue) -> Int64 -> JSValue
forall a b. (a -> b) -> a -> b
$ a -> Int64
toInt a
val
castJSType (_,_,_,toBool :: a -> Bool
toBool,_) "Boolean" val :: a
val = Bool -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Bool -> JSValue) -> Bool -> JSValue
forall a b. (a -> b) -> a -> b
$ a -> Bool
toBool a
val
castJSType _ _ _ = VariableException -> JSValue
forall a e. Exception e => e -> a
throw VariableException
InvalidVariableTypeException

processAggReturnedValues :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> [RootObject] -> [[[(Int,Int,Bool,String)]]] -> [[[[[a]]]]] -> String
processAggReturnedValues :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Int, Bool, String)]]]
-> [[[[[a]]]]]
-> String
processAggReturnedValues transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa robjs :: [RootObject]
robjs tbls :: [[[(Int, Int, Bool, String)]]]
tbls rlts :: [[[[[a]]]]]
rlts = JSObject (JSObject JSValue) -> String
forall a. JSON a => a -> String
encodeStrict (JSObject (JSObject JSValue) -> String)
-> JSObject (JSObject JSValue) -> String
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
processAggReturnedValuesToJsonObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa [RootObject]
robjs [[[(Int, Int, Bool, String)]]]
tbls [[[[[a]]]]]
rlts
processAggReturnedValuesToJsonObject :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> [RootObject] -> [[[(Int,Int,Bool,String)]]] -> [[[[[a]]]]] -> JSObject (JSObject JSValue)
processAggReturnedValuesToJsonObject :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [RootObject]
-> [[[(Int, Int, Bool, String)]]]
-> [[[[[a]]]]]
-> JSObject (JSObject JSValue)
processAggReturnedValuesToJsonObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa robjs :: [RootObject]
robjs tbls :: [[[(Int, Int, Bool, String)]]]
tbls rlts :: [[[[[a]]]]]
rlts = [(String, JSObject JSValue)] -> JSObject (JSObject JSValue)
forall a. [(String, a)] -> JSObject a
toJSObject [("data", [(String, JSValue)] -> JSObject JSValue
forall a. [(String, a)] -> JSObject a
toJSObject [(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
processAggReturnedValueByRootObject (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa RootObject
a [[(Int, Int, Bool, String)]]
b [[[[a]]]]
c | (a :: RootObject
a,b :: [[(Int, Int, Bool, String)]]
b,c :: [[[[a]]]]
c) <- [RootObject]
-> [[[(Int, Int, Bool, String)]]]
-> [[[[[a]]]]]
-> [(RootObject, [[(Int, Int, Bool, String)]], [[[[a]]]])]
forall a b c. [a] -> [b] -> [c] -> [(a, b, c)]
zip3 [RootObject]
robjs [[[(Int, Int, Bool, String)]]]
tbls [[[[[a]]]]]
rlts])]
processAggReturnedValueByRootObject :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> RootObject -> [[(Int,Int,Bool,String)]] -> [[[[a]]]] -> (String, JSValue)
processAggReturnedValueByRootObject :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> RootObject
-> [[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> (String, JSValue)
processAggReturnedValueByRootObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa (NestedObject Nothing name :: String
name sobj :: String
sobj _ sfs :: SubFields
sfs) tbls :: [[(Int, Int, Bool, String)]]
tbls rlts :: [[[[a]]]]
rlts = (String
name, [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ([JSValue] -> JSValue) -> [JSValue] -> JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageAggSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls SubFields
sfs [[[[a]]]]
rlts)
processAggReturnedValueByRootObject transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa (NestedObject (Just alias :: String
alias) name :: String
name sobj :: String
sobj _ sfs :: SubFields
sfs) tbls :: [[(Int, Int, Bool, String)]]
tbls rlts :: [[[[a]]]]
rlts = (String
alias, [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ([JSValue] -> JSValue) -> [JSValue] -> JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageAggSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls SubFields
sfs [[[[a]]]]
rlts)
packageAggSubFields :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [[(Int,Int,Bool,String)]] -> [Field] -> [[[[a]]]] -> [JSValue]
packageAggSubFields :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageAggSubFields transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Int, Bool, String)]]
tbls sfs :: SubFields
sfs rlts :: [[[[a]]]]
rlts = (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageAggSubFieldsForEveryRow (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj SubFields
sfs [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
grpdInstcByObjInst
  where
    dtaByInstCbntn :: [([(Int, Int, Bool, String)], [[[a]]])]
dtaByInstCbntn = [[(Int, Int, Bool, String)]]
-> [[[[a]]]] -> [([(Int, Int, Bool, String)], [[[a]]])]
forall a b. [a] -> [b] -> [(a, b)]
zip [[(Int, Int, Bool, String)]]
tbls [[[[a]]]]
rlts
    grpdInstcByObjInst :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
grpdInstcByObjInst = 
      ([[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
 -> ([(Int, Int, Bool, String)], [[[a]]])
 -> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]])
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\rlt :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
rlt (nInst :: [(Int, Int, Bool, String)]
nInst,nDta :: [[[a]]]
nDta)->if ((Int, Int, Bool, String) -> Bool
forall a b c d. (a, b, c, d) -> c
thd4 ((Int, Int, Bool, String) -> Bool)
-> (Int, Int, Bool, String) -> Bool
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head [(Int, Int, Bool, String)]
nInst)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False then
          (([[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a]
init [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
rlt)[[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[([[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> a
last [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
rlt)[([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> [a] -> [a]
++[([(Int, Int, Bool, String)]
nInst,([[[a]]]
nDta,([[[a]]], Int) -> Int
forall a b. (a, b) -> b
snd (([[[a]]], Int) -> Int) -> ([[[a]]], Int) -> Int
forall a b. (a -> b) -> a -> b
$ ([(Int, Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int)
forall a b. (a, b) -> b
snd (([(Int, Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int))
-> ([(Int, Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int)
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
forall a. [a] -> a
head ([([(Int, Int, Bool, String)], ([[[a]]], Int))]
 -> ([(Int, Int, Bool, String)], ([[[a]]], Int)))
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
forall a b. (a -> b) -> a -> b
$ [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> a
last [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
rlt))]])
        else
          [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
rlt[[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[[([(Int, Int, Bool, String)]
nInst,([[[a]]]
nDta,String -> [(String, [String], String)] -> Int
countTableIds ((Int, Int, Bool, String) -> String
forall a b c d. (a, b, c, d) -> d
fth4 ((Int, Int, Bool, String) -> String)
-> (Int, Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head [(Int, Int, Bool, String)]
nInst) [(String, [String], String)]
sodn))]]) [[(([(Int, Int, Bool, String)], [[[a]]]) -> [(Int, Int, Bool, String)]
forall a b. (a, b) -> a
fst (([(Int, Int, Bool, String)], [[[a]]])
 -> [(Int, Int, Bool, String)])
-> ([(Int, Int, Bool, String)], [[[a]]])
-> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], [[[a]]])]
-> ([(Int, Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Int, Bool, String)], [[[a]]])]
dtaByInstCbntn,(([(Int, Int, Bool, String)], [[[a]]]) -> [[[a]]]
forall a b. (a, b) -> b
snd (([(Int, Int, Bool, String)], [[[a]]]) -> [[[a]]])
-> ([(Int, Int, Bool, String)], [[[a]]]) -> [[[a]]]
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], [[[a]]])]
-> ([(Int, Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Int, Bool, String)], [[[a]]])]
dtaByInstCbntn,String -> [(String, [String], String)] -> Int
countTableIds ((Int, Int, Bool, String) -> String
forall a b c d. (a, b, c, d) -> d
fth4 ((Int, Int, Bool, String) -> String)
-> (Int, Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head ([(Int, Int, Bool, String)] -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ ([(Int, Int, Bool, String)], [[[a]]]) -> [(Int, Int, Bool, String)]
forall a b. (a, b) -> a
fst (([(Int, Int, Bool, String)], [[[a]]])
 -> [(Int, Int, Bool, String)])
-> ([(Int, Int, Bool, String)], [[[a]]])
-> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], [[[a]]])]
-> ([(Int, Int, Bool, String)], [[[a]]])
forall a. [a] -> a
head [([(Int, Int, Bool, String)], [[[a]]])]
dtaByInstCbntn) [(String, [String], String)]
sodn))]] ([([(Int, Int, Bool, String)], [[[a]]])]
 -> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]])
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], [[[a]]])]
-> [([(Int, Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a]
tail [([(Int, Int, Bool, String)], [[[a]]])]
dtaByInstCbntn
packageAggSubFieldsForEveryRow :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [Field] -> [[([(Int,Int,Bool,String)],([[[a]]],Int))]] -> [JSValue]  -- result is root-instance/table/row/column
packageAggSubFieldsForEveryRow :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageAggSubFieldsForEveryRow transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj (sf :: Field
sf:sfs :: SubFields
sfs) dt :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
dt = if [[([(Int, Int, Bool, String)], ([[[a]]], Int))]] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
objWInst then [] else [JSValue] -> [JSValue] -> [JSValue]
forall a. [a] -> [a] -> [a]
(++) [JSValue]
objects ([JSValue] -> [JSValue]) -> [JSValue] -> [JSValue]
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> SubFields
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [JSValue]
packageAggSubFieldsForEveryRow (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj (Field
sfField -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:SubFields
sfs) [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
remIs
  where
    (_,_,_,_,isNull :: a -> Bool
isNull) = (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx
    objInstWRw :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
objInstWRw = ([([(Int, Int, Bool, String)], ([[[a]]], Int))]
 -> [([(Int, Int, Bool, String)], ([[[a]]], Int))])
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a b. (a -> b) -> [a] -> [b]
map ((([(Int, Int, Bool, String)], ([[[a]]], Int)) -> Bool)
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
forall a. (a -> Bool) -> [a] -> [a]
filter (Bool -> Bool
not (Bool -> Bool)
-> (([(Int, Int, Bool, String)], ([[[a]]], Int)) -> Bool)
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[a]] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null ([[a]] -> Bool)
-> (([(Int, Int, Bool, String)], ([[[a]]], Int)) -> [[a]])
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
-> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [[[a]]] -> [[a]]
forall a. [a] -> a
head ([[[a]]] -> [[a]])
-> (([(Int, Int, Bool, String)], ([[[a]]], Int)) -> [[[a]]])
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
-> [[a]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([[[a]]], Int) -> [[[a]]]
forall a b. (a, b) -> a
fst (([[[a]]], Int) -> [[[a]]])
-> (([(Int, Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int))
-> ([(Int, Int, Bool, String)], ([[[a]]], Int))
-> [[[a]]]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(Int, Int, Bool, String)], ([[[a]]], Int)) -> ([[[a]]], Int)
forall a b. (a, b) -> b
snd)) [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
dt
    objWInst :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
objWInst = ([([(Int, Int, Bool, String)], ([[[a]]], Int))] -> Bool)
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a. (a -> Bool) -> [a] -> [a]
filter (\nObj :: [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObj->([([(Int, Int, Bool, String)], ([[[a]]], Int))] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObj)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
False) [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
objInstWRw

    (nxtObjsRw :: [([[(Int, Int, Bool, String)]], [[[[a]]]])]
nxtObjsRw,remIs :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
remIs) = (([([[(Int, Int, Bool, String)]], [[[[a]]]])],
  [[([(Int, Int, Bool, String)], ([[[a]]], Int))]])
 -> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
 -> ([([[(Int, Int, Bool, String)]], [[[[a]]]])],
     [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]))
-> ([([[(Int, Int, Bool, String)]], [[[[a]]]])],
    [[([(Int, Int, Bool, String)], ([[[a]]], Int))]])
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> ([([[(Int, Int, Bool, String)]], [[[[a]]]])],
    [[([(Int, Int, Bool, String)], ([[[a]]], Int))]])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(objRows :: [([[(Int, Int, Bool, String)]], [[[[a]]]])]
objRows,remRows :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
remRows) nObj :: [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObj->
      let (nObjRow :: [([(Int, Int, Bool, String)], [[[a]]])]
nObjRow,nObjRem :: [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObjRem) = (([([(Int, Int, Bool, String)], [[[a]]])],
  [([(Int, Int, Bool, String)], ([[[a]]], Int))])
 -> ([(Int, Int, Bool, String)], ([[[a]]], Int))
 -> ([([(Int, Int, Bool, String)], [[[a]]])],
     [([(Int, Int, Bool, String)], ([[[a]]], Int))]))
-> ([([(Int, Int, Bool, String)], [[[a]]])],
    [([(Int, Int, Bool, String)], ([[[a]]], Int))])
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> ([([(Int, Int, Bool, String)], [[[a]]])],
    [([(Int, Int, Bool, String)], ([[[a]]], Int))])
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(nInstRow :: [([(Int, Int, Bool, String)], [[[a]]])]
nInstRow,nInstRem :: [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nInstRem) (tbls :: [(Int, Int, Bool, String)]
tbls,(dSet :: [[[a]]]
dSet,idC :: Int
idC))->let (rowData :: [[[a]]]
rowData,remData :: [[[a]]]
remData) = (a -> Bool) -> Int -> [[[a]]] -> ([[[a]]], [[[a]]])
forall a.
Eq a =>
(a -> Bool) -> Int -> [[[a]]] -> ([[[a]]], [[[a]]])
separateGqlRow a -> Bool
isNull Int
idC [[[a]]]
dSet in ([([(Int, Int, Bool, String)], [[[a]]])]
nInstRow[([(Int, Int, Bool, String)], [[[a]]])]
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [([(Int, Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a] -> [a]
++[([(Int, Int, Bool, String)]
tbls,[[[a]]]
rowData)],[([(Int, Int, Bool, String)], ([[[a]]], Int))]
nInstRem[([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
-> [([(Int, Int, Bool, String)], ([[[a]]], Int))]
forall a. [a] -> [a] -> [a]
++[([(Int, Int, Bool, String)]
tbls,([[[a]]]
remData,Int
idC))])) ([],[]) [([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObj
      in ([([[(Int, Int, Bool, String)]], [[[[a]]]])]
objRows[([[(Int, Int, Bool, String)]], [[[[a]]]])]
-> [([[(Int, Int, Bool, String)]], [[[[a]]]])]
-> [([[(Int, Int, Bool, String)]], [[[[a]]]])]
forall a. [a] -> [a] -> [a]
++[[([(Int, Int, Bool, String)], [[[a]]])]
-> ([[(Int, Int, Bool, String)]], [[[[a]]]])
forall a b. [(a, b)] -> ([a], [b])
unzip [([(Int, Int, Bool, String)], [[[a]]])]
nObjRow],[[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
remRows[[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
-> [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
forall a. [a] -> [a] -> [a]
++[[([(Int, Int, Bool, String)], ([[[a]]], Int))]
nObjRem])) ([],[]) [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
objWInst

    objects :: [JSValue]
objects = ([JSValue]
 -> ([[(Int, Int, Bool, String)]], [[[[a]]]]) -> [JSValue])
-> [JSValue]
-> [([[(Int, Int, Bool, String)]], [[[[a]]]])]
-> [JSValue]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\rlt :: [JSValue]
rlt (nTbl :: [[(Int, Int, Bool, String)]]
nTbl,nDt :: [[[[a]]]]
nDt)->[JSValue]
rlt[JSValue] -> [JSValue] -> [JSValue]
forall a. [a] -> [a] -> [a]
++({-if null nTbl {-no instance-} then [] else -}if ((Int, Int, Bool, String) -> Int
forall a b c d. (a, b, c, d) -> a
fst4 ((Int, Int, Bool, String) -> Int)
-> (Int, Int, Bool, String) -> Int
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head ([(Int, Int, Bool, String)] -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Int, Bool, String)]] -> [(Int, Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Int, Bool, String)]]
nTbl)Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<2 then
            (JSObject JSValue -> JSValue) -> [JSObject JSValue] -> [JSValue]
forall a b. (a -> b) -> [a] -> [b]
map JSObject JSValue -> JSValue
forall a. JSON a => a -> JSValue
showJSON ([JSObject JSValue] -> [JSValue])
-> [JSObject JSValue] -> [JSValue]
forall a b. (a -> b) -> a -> b
$ Text -> [JSObject JSValue]
decodeTextToJSObj (Text -> [JSObject JSValue]) -> Text -> [JSObject JSValue]
forall a b. (a -> b) -> a -> b
$ (\(toTxt :: a -> Text
toTxt,_,_,_,_)->a -> Text
toTxt) (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx (a -> Text) -> a -> Text
forall a b. (a -> b) -> a -> b
$ [a] -> a
forall a. [a] -> a
head ([a] -> a) -> [a] -> a
forall a b. (a -> b) -> a -> b
$ [[a]] -> [a]
forall a. [a] -> a
head ([[a]] -> [a]) -> [[a]] -> [a]
forall a b. (a -> b) -> a -> b
$ [[[a]]] -> [[a]]
forall a. [a] -> a
head ([[[a]]] -> [[a]]) -> [[[a]]] -> [[a]]
forall a b. (a -> b) -> a -> b
$ [[[[a]]]] -> [[[a]]]
forall a. [a] -> a
head ([[[[a]]]] -> [[[a]]]) -> [[[[a]]]] -> [[[a]]]
forall a b. (a -> b) -> a -> b
$ [[[[a]]]]
nDt
          else
            [JSObject JSValue -> JSValue
forall a. JSON a => a -> JSValue
showJSON (JSObject JSValue -> JSValue) -> JSObject JSValue -> JSValue
forall a b. (a -> b) -> a -> b
$ [(String, JSValue)] -> JSObject JSValue
forall a. [(String, a)] -> JSObject a
toJSObject ([(String, JSValue)] -> JSObject JSValue)
-> [(String, JSValue)] -> JSObject JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
nTbl (Field
sfField -> SubFields -> SubFields
forall a. a -> [a] -> [a]
:SubFields
sfs) [[[[a]]]]
nDt])) [] [([[(Int, Int, Bool, String)]], [[[[a]]]])]
nxtObjsRw
packageAggSubFieldsForEveryRow transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj [] dt :: [[([(Int, Int, Bool, String)], ([[[a]]], Int))]]
dt = []
decodeTextToJSObj :: Text -> [JSObject JSValue]
decodeTextToJSObj :: Text -> [JSObject JSValue]
decodeTextToJSObj dta :: Text
dta = case String -> Result [JSObject JSValue]
forall a. JSON a => String -> Result a
decode (String -> Result [JSObject JSValue])
-> String -> Result [JSObject JSValue]
forall a b. (a -> b) -> a -> b
$ Text -> String
unpack Text
dta of
  (Ok rlt :: [JSObject JSValue]
rlt) -> [JSObject JSValue]
rlt :: [JSObject JSValue]
  _ -> QueryException -> [JSObject JSValue]
forall a e. Exception e => e -> a
throw QueryException
ReadJsonException

makeOneGQLObjFrmAgg :: (Eq a) => ((a -> Text),(a -> Double),(a -> Int64),(a -> Bool),(a -> Bool)) -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,[String],[String])] -> String -> [[(Int,Int,Bool,String)]] -> [Field] -> [[[[a]]]] -> [(String,JSValue)]
makeOneGQLObjFrmAgg :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg _ _ _ _ _ [] _ _ = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- no instance combinations
makeOneGQLObjFrmAgg _ _ _ _ _ ([]:_) _ _ = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- no reference tables in first instance combination
makeOneGQLObjFrmAgg transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Int, Bool, String)]]
tbls ((Left (ScalarType alias :: Maybe String
alias "__typename" trans :: Maybe String
trans arg :: Maybe String
arg)):b :: SubFields
b) dat :: [[[[a]]]]
dat = (ScalarType -> String
getScalarFieldLabel (ScalarType -> String) -> ScalarType -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType Maybe String
alias "__typename" Maybe String
trans Maybe String
arg, Text -> JSValue
forall a. JSON a => a -> JSValue
showJSON (Text -> JSValue) -> Text -> JSValue
forall a b. (a -> b) -> a -> b
$ String -> Text
pack (String -> Text) -> String -> Text
forall a b. (a -> b) -> a -> b
$ String -> [(String, [String], String)] -> String
translateTableToObject ((Int, Int, Bool, String) -> String
forall a b c d. (a, b, c, d) -> d
fth4 ((Int, Int, Bool, String) -> String)
-> (Int, Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head ([(Int, Int, Bool, String)] -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Int, Bool, String)]] -> [(Int, Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Int, Bool, String)]]
tbls) [(String, [String], String)]
sodn)(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls SubFields
b [[[[a]]]]
dat)
makeOneGQLObjFrmAgg (fx1 :: a -> Text
fx1,fx2 :: a -> Double
fx2,fx3 :: a -> Int64
fx3,fx4 :: a -> Bool
fx4,isNull :: a -> Bool
isNull) sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Int, Bool, String)]]
tbls ((Left (ScalarType alias :: Maybe String
alias name :: String
name trans :: Maybe String
trans arg :: Maybe String
arg)):b :: SubFields
b) ((((i :: a
i:j :: [a]
j):k :: [[a]]
k):l :: [[[a]]]
l):m :: [[[[a]]]]
m) = (ScalarType -> String
getScalarFieldLabel (ScalarType -> String) -> ScalarType -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType Maybe String
alias String
name Maybe String
trans Maybe String
arg, if a -> Bool
isNull a
i then JSValue
JSNull else (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> String -> a -> JSValue
forall a.
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> String -> a -> JSValue
castJSType (a -> Text
fx1,a -> Double
fx2,a -> Int64
fx3,a -> Bool
fx4,a -> Bool
isNull) (String
-> String
-> Maybe String
-> Maybe String
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> String
findPrimitiveScalarTypeType (String -> [(String, [String], String)] -> String
translateTableToObject ((Int, Int, Bool, String) -> String
forall a b c d. (a, b, c, d) -> d
fth4 ((Int, Int, Bool, String) -> String)
-> (Int, Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head ([(Int, Int, Bool, String)] -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Int, Bool, String)]] -> [(Int, Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Int, Bool, String)]]
tbls) [(String, [String], String)]
sodn) String
name Maybe String
trans Maybe String
arg [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss) a
i)(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text
fx1,a -> Double
fx2,a -> Int64
fx3,a -> Bool
fx4,a -> Bool
isNull) [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls SubFields
b ((([a]
j[a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:[[a]]
k)[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:[[[a]]]
l)[[[a]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. a -> [a] -> [a]
:[[[[a]]]]
m))


makeOneGQLObjFrmAgg transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Int, Bool, String)]]
tbls ((Right (Left (NestedObject alias :: Maybe String
alias name :: String
name nso :: String
nso ss :: SubSelection
ss sfs :: SubFields
sfs))):b :: SubFields
b) ((j :: [[a]]
j:k :: [[[a]]]
k):l :: [[[[a]]]]
l) = ((RootObject -> String
getNestedObjectFieldLabel (RootObject -> String) -> RootObject -> String
forall a b. (a -> b) -> a -> b
$ Maybe String
-> String -> String -> SubSelection -> SubFields -> RootObject
NestedObject Maybe String
alias String
name String
nso SubSelection
ss SubFields
sfs), [JSValue] -> JSValue
forall a. JSON a => [a] -> JSValue
showJSONs ([JSValue] -> JSValue) -> [JSValue] -> JSValue
forall a b. (a -> b) -> a -> b
$ (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [JSValue]
packageAggSubFields (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
nso [[(Int, Int, Bool, String)]]
objTbls SubFields
sfs [[[[a]]]]
objData)(String, JSValue) -> [(String, JSValue)] -> [(String, JSValue)]
forall a. a -> [a] -> [a]
:((a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
remTbls SubFields
b [[[[a]]]]
remData)
  where
    (objTbls :: [[(Int, Int, Bool, String)]]
objTbls,objData :: [[[[a]]]]
objData,remTbls :: [[(Int, Int, Bool, String)]]
remTbls,remData :: [[[[a]]]]
remData) = [[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Int, Bool, String)]], [[[[a]]]],
    [[(Int, Int, Bool, String)]], [[[[a]]]])
forall a.
[[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Int, Bool, String)]], [[[[a]]]],
    [[(Int, Int, Bool, String)]], [[[[a]]]])
sepAggDataFrNstdObj [[(Int, Int, Bool, String)]]
tbls (([[a]]
j[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:[[[a]]]
k)[[[a]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. a -> [a] -> [a]
:[[[[a]]]]
l)
makeOneGQLObjFrmAgg transFx :: (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx sss :: [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn soa :: [(String, [String], [String])]
soa sobj :: String
sobj tbls :: [[(Int, Int, Bool, String)]]
tbls ((Right (Right (InlinefragmentObject ifo :: String
ifo sfs :: SubFields
sfs))):b :: SubFields
b) dat :: [[[[a]]]]
dat = if String
-> String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> Bool
isServerObjectTable ((Int, Int, Bool, String) -> String
forall a b c d. (a, b, c, d) -> d
fth4 ((Int, Int, Bool, String) -> String)
-> (Int, Int, Bool, String) -> String
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head ([(Int, Int, Bool, String)] -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a b. (a -> b) -> a -> b
$ [[(Int, Int, Bool, String)]] -> [(Int, Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Int, Bool, String)]]
tbls) String
ifo [(String, [String], String)]
sodn [(String, [String], [String])]
soa then (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls (SubFields
sfsSubFields -> SubFields -> SubFields
forall a. [a] -> [a] -> [a]
++SubFields
b) [[[[a]]]]
dat else (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
forall a.
Eq a =>
(a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
-> [(String,
     [(String, String,
       [(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> String
-> [[(Int, Int, Bool, String)]]
-> SubFields
-> [[[[a]]]]
-> [(String, JSValue)]
makeOneGQLObjFrmAgg (a -> Text, a -> Double, a -> Int64, a -> Bool, a -> Bool)
transFx [(String,
  [(String, String,
    [(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, [String], [String])]
soa String
sobj [[(Int, Int, Bool, String)]]
tbls SubFields
b [[[[a]]]]
dat
makeOneGQLObjFrmAgg _ _ _ _ _ _ [] ((([]:_):_):_) = []  -- no columns (in first variant and first query) and no fields (done)
makeOneGQLObjFrmAgg _ _ _ _ _ _ _ (([]:_):_) = []  -- no rows (no data)
makeOneGQLObjFrmAgg _ _ _ _ _ _ ((Right (Left _)):[]) ([]:_) = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- field and no queries (unusual)
makeOneGQLObjFrmAgg _ _ _ _ _ _ _ ([]:_) = []  -- no queries (no data)
makeOneGQLObjFrmAgg _ _ _ _ _ _ _ [] = []  -- no variants (unusual)
makeOneGQLObjFrmAgg _ _ _ _ _ _ [] _ = [] -- columns and no fields (done or error)
makeOneGQLObjFrmAgg _ _ _ _ _ _ ((Left _):_) ((([]:_):_):_) = String -> [(String, JSValue)]
forall a. HasCallStack => String -> a
error "EOF data processing (source error)"  -- field and no result columns

sepAggDataFrNstdObj :: [[(Int,Int,Bool,String)]] -> [[[[a]]]] -> ([[(Int,Int,Bool,String)]],[[[[a]]]],[[(Int,Int,Bool,String)]],[[[[a]]]])
sepAggDataFrNstdObj :: [[(Int, Int, Bool, String)]]
-> [[[[a]]]]
-> ([[(Int, Int, Bool, String)]], [[[[a]]]],
    [[(Int, Int, Bool, String)]], [[[[a]]]])
sepAggDataFrNstdObj info :: [[(Int, Int, Bool, String)]]
info dat :: [[[[a]]]]
dat = ([[(Int, Int, Bool, String)]
fstNObjMeta][[(Int, Int, Bool, String)]]
-> [[(Int, Int, Bool, String)]] -> [[(Int, Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++([[[(Int, Int, Bool, String)]]] -> [[(Int, Int, Bool, String)]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[(Int, Int, Bool, String)]]]
nxtRowTbls),[[[[a]]]
fstNObjData][[[[a]]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. [a] -> [a] -> [a]
++([[[[[a]]]]] -> [[[[a]]]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[[[a]]]]]
nxtRowData),[[(Int, Int, Bool, String)]
fstRemMeta][[(Int, Int, Bool, String)]]
-> [[(Int, Int, Bool, String)]] -> [[(Int, Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++([[[(Int, Int, Bool, String)]]] -> [[(Int, Int, Bool, String)]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[(Int, Int, Bool, String)]]]
nxtRemTbls),[[[[a]]]
fstRemData][[[[a]]]] -> [[[[a]]]] -> [[[[a]]]]
forall a. [a] -> [a] -> [a]
++([[[[[a]]]]] -> [[[[a]]]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[[[a]]]]]
nxtRemData))
  where
    (nxtRowTbls :: [[[(Int, Int, Bool, String)]]]
nxtRowTbls,nxtRowData :: [[[[[a]]]]]
nxtRowData,nxtRemTbls :: [[[(Int, Int, Bool, String)]]]
nxtRemTbls,nxtRemData :: [[[[[a]]]]]
nxtRemData) = [([[(Int, Int, Bool, String)]], [[[[a]]]],
  [[(Int, Int, Bool, String)]], [[[[a]]]])]
-> ([[[(Int, Int, Bool, String)]]], [[[[[a]]]]],
    [[[(Int, Int, Bool, String)]]], [[[[[a]]]]])
forall a b c d. [(a, b, c, d)] -> ([a], [b], [c], [d])
unzip4 ([([[(Int, Int, Bool, String)]], [[[[a]]]],
   [[(Int, Int, Bool, String)]], [[[[a]]]])]
 -> ([[[(Int, Int, Bool, String)]]], [[[[[a]]]]],
     [[[(Int, Int, Bool, String)]]], [[[[[a]]]]]))
-> [([[(Int, Int, Bool, String)]], [[[[a]]]],
     [[(Int, Int, Bool, String)]], [[[[a]]]])]
-> ([[[(Int, Int, Bool, String)]]], [[[[[a]]]]],
    [[[(Int, Int, Bool, String)]]], [[[[[a]]]]])
forall a b. (a -> b) -> a -> b
$ (([(Int, Int, Bool, String)], [[[a]]])
 -> ([[(Int, Int, Bool, String)]], [[[[a]]]],
     [[(Int, Int, Bool, String)]], [[[[a]]]]))
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [([[(Int, Int, Bool, String)]], [[[[a]]]],
     [[(Int, Int, Bool, String)]], [[[[a]]]])]
forall a b. (a -> b) -> [a] -> [b]
map (\(instMt :: [(Int, Int, Bool, String)]
instMt,instDt :: [[[a]]]
instDt)->
      let
        nxtTblsInfo :: [(Int, Int, Bool, String)]
nxtTblsInfo = [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
instMt
        tNxtTblsInfo :: [(Int, Int, Bool, String)]
tNxtTblsInfo = [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
nxtTblsInfo

        (_,objLvl :: Int
objLvl,_,_) = [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head [(Int, Int, Bool, String)]
nxtTblsInfo
        nestedObjCount :: Int
nestedObjCount = ((Int, Int, Bool, String) -> Int -> Int)
-> Int -> [(Int, Int, Bool, String)] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(_,nlvl :: Int
nlvl,_,_) rlt :: Int
rlt->if Int
nlvlInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<=Int
objLvl then 0 else Int
rltInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) 0 [(Int, Int, Bool, String)]
tNxtTblsInfo
        fQrydPos :: Int
fQrydPos = ((Int, (Int, Int, Bool, String)) -> Int -> Int)
-> Int -> [(Int, (Int, Int, Bool, String))] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(idx :: Int
idx,(_,_,fst :: Bool
fst,_)) rlt :: Int
rlt->if Bool
fst then Int
idx else Int
rlt) (([(Int, Int, Bool, String)] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [(Int, Int, Bool, String)]
nxtTblsInfo)Int -> Int -> Int
forall a. Num a => a -> a -> a
-1) ([(Int, (Int, Int, Bool, String))] -> Int)
-> [(Int, (Int, Int, Bool, String))] -> Int
forall a b. (a -> b) -> a -> b
$ [Int]
-> [(Int, Int, Bool, String)] -> [(Int, (Int, Int, Bool, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip [0..] [(Int, Int, Bool, String)]
nxtTblsInfo
        hasQrd :: Bool
hasQrd = Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
(<=) Int
fQrydPos Int
nestedObjCount
      in
        if Bool
hasQrd then
            ([[(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
instMt],[[[[a]]]
instDt],[],[])
          else
            ([],[],[([(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head [(Int, Int, Bool, String)]
instMt)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:(Int -> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. Int -> [a] -> [a]
drop (Int
nestedObjCountInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) ([(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)])
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
instMt)],[[[[a]]]
instDt])
      ) ([([(Int, Int, Bool, String)], [[[a]]])]
 -> [([[(Int, Int, Bool, String)]], [[[[a]]]],
      [[(Int, Int, Bool, String)]], [[[[a]]]])])
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [([[(Int, Int, Bool, String)]], [[[[a]]]],
     [[(Int, Int, Bool, String)]], [[[[a]]]])]
forall a b. (a -> b) -> a -> b
$ [([(Int, Int, Bool, String)], [[[a]]])]
-> [([(Int, Int, Bool, String)], [[[a]]])]
forall a. [a] -> [a]
tail ([([(Int, Int, Bool, String)], [[[a]]])]
 -> [([(Int, Int, Bool, String)], [[[a]]])])
-> [([(Int, Int, Bool, String)], [[[a]]])]
-> [([(Int, Int, Bool, String)], [[[a]]])]
forall a b. (a -> b) -> a -> b
$ [[(Int, Int, Bool, String)]]
-> [[[[a]]]] -> [([(Int, Int, Bool, String)], [[[a]]])]
forall a b. [a] -> [b] -> [(a, b)]
zip [[(Int, Int, Bool, String)]]
info [[[[a]]]]
dat
    fstInstInfo :: [(Int, Int, Bool, String)]
fstInstInfo = [[(Int, Int, Bool, String)]] -> [(Int, Int, Bool, String)]
forall a. [a] -> a
head [[(Int, Int, Bool, String)]]
info
    fstInstDat :: [[[a]]]
fstInstDat = [[[[a]]]] -> [[[a]]]
forall a. [a] -> a
head [[[[a]]]]
dat
    (fstC :: Int
fstC,fstL :: Int
fstL,fstF :: Bool
fstF,fstT :: String
fstT) = [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
head [(Int, Int, Bool, String)]
fstInstInfo
    nObjPlusTblsInfo :: [(Int, Int, Bool, String)]
nObjPlusTblsInfo = [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
fstInstInfo
    nObjLvl :: Int
nObjLvl = Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
fstL 1
    nstdObjsCount :: Int
nstdObjsCount = ((Int, Int, Bool, String) -> Int -> Int)
-> Int -> [(Int, Int, Bool, String)] -> Int
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr' (\(_,nlvl :: Int
nlvl,_,_) rlt :: Int
rlt->if Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) Int
nlvl Int
nObjLvl then 1 else Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
rlt 1) 1 ([(Int, Int, Bool, String)] -> Int)
-> [(Int, Int, Bool, String)] -> Int
forall a b. (a -> b) -> a -> b
$ [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
tail [(Int, Int, Bool, String)]
nObjPlusTblsInfo
    fstNObjMeta :: [(Int, Int, Bool, String)]
fstNObjMeta = Int -> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. Int -> [a] -> [a]
take Int
nstdObjsCount [(Int, Int, Bool, String)]
nObjPlusTblsInfo
    nObjPlusDat :: [[[a]]]
nObjPlusDat = [[[a]]] -> [[[a]]]
forall a. [a] -> [a]
tail ([[[a]]] -> [[[a]]]) -> [[[a]]] -> [[[a]]]
forall a b. (a -> b) -> a -> b
$ [[[a]]]
fstInstDat
    fstNObjData :: [[[a]]]
fstNObjData = Int -> [[[a]]] -> [[[a]]]
forall a. Int -> [a] -> [a]
take Int
nstdObjsCount [[[a]]]
nObjPlusDat
    fstRemMeta :: [(Int, Int, Bool, String)]
fstRemMeta = (Int
fstC,Int
fstL,Bool
fstF,String
fstT)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:(Int -> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. Int -> [a] -> [a]
drop Int
nstdObjsCount [(Int, Int, Bool, String)]
nObjPlusTblsInfo)
    fstRemData :: [[[a]]]
fstRemData = ([[[a]]] -> [[a]]
forall a. [a] -> a
head ([[[a]]] -> [[a]]) -> [[[a]]] -> [[a]]
forall a b. (a -> b) -> a -> b
$ [[[a]]]
fstInstDat)[[a]] -> [[[a]]] -> [[[a]]]
forall a. a -> [a] -> [a]
:(Int -> [[[a]]] -> [[[a]]]
forall a. Int -> [a] -> [a]
drop Int
nstdObjsCount [[[a]]]
nObjPlusDat)