module Components.QueryComposers.SQLQueryComposer (makeSqlQueries,makeSqlAggQueries) where
import Data.Map.Strict (fromList,Map,(!),insertWith)
import Control.Exception (throw)
import Data.List (foldl')
import Model.ServerObjectTypes (
RootObject,
NestedObject,
SubFields,
Argument,
ServerObject,
ScalarType(..),
InlinefragmentObject(..),
NestedObject(..),
Field,
FlagNode(..)
)
import Model.ServerExceptions (
ReferenceException(
RelationshipCardinalityException,
RelationshipLinkageIdException,
UnrecognisedObjectException,
UnrecognisedArgumentException,
UnrecognisedOptionException,
UnrecognisedScalarException
)
)
import Components.ObjectHandlers.ObjectsHandler (
translateServerObjectToDBName,
getSubSelectionArgument,
getSubSelectionField,
withSubSelection,
getDBObjectRelationships,
getServerObject,
isServerObjectTable,
getSubFields,
translateTableToObject,
getNestedObjectFieldLabel,
getScalarFieldLabel,
fetchTableIds
)
makeSqlQueries :: [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> [RootObject] -> ([[[(Int,Bool,String)]]],[[[String]]])
makeSqlQueries :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> [RootObject]
-> ([[[(Int, Bool, String)]]], [[[String]]])
makeSqlQueries sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa rojs :: [RootObject]
rojs = [([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip [[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> RootObject
-> ([[(Int, Bool, String)]], [[String]])
makeSqlQuerySet [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa RootObject
robj | RootObject
robj<-[RootObject]
rojs]
makeSqlQuerySet :: [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> RootObject -> ([[(Int,Bool,String)]],[[String]])
makeSqlQuerySet :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> RootObject
-> ([[(Int, Bool, String)]], [[String]])
makeSqlQuerySet sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa obj :: RootObject
obj = ([[(Int, Bool, String)]]
fstTbls[[(Int, Bool, String)]]
-> [[(Int, Bool, String)]] -> [[(Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++([[[(Int, Bool, String)]]] -> [[(Int, Bool, String)]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[(Int, Bool, String)]]]
nxtTbls),[[String]]
fstQrys[[String]] -> [[String]] -> [[String]]
forall a. [a] -> [a] -> [a]
++([[[String]]] -> [[String]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[String]]]
nxtQrys))
where
dbNames :: [([String], String)]
dbNames = String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [([String], String)]
translateServerObjectToDBName (RootObject -> String
getServerObject RootObject
obj) [(String, [String], String)]
sodn [(String, [String], [String])]
soa
(firstIds :: [String]
firstIds,firstTable :: String
firstTable) = [([String], String)] -> ([String], String)
forall a. [a] -> a
head [([String], String)]
dbNames
firstTableName :: String
firstTableName = String
firstTableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Integer -> String
forall a. Show a => a -> String
show 1)
(fstTbls :: [[(Int, Bool, String)]]
fstTbls,fstQrys :: [[String]]
fstQrys) = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields (RootObject -> SubFields
getSubFields RootObject
obj) ([(String, Int)] -> Map String Int
forall k a. Ord k => [(k, a)] -> Map k a
fromList [(String
firstTable,1)]) ("SELECT "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstIds "")) "" (" FROM"String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String -> Int -> String
makeSqlTablePhrase RootObject
obj String
firstTable 1)) (" ORDER BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstIds " ASC")) (((String
firstTable,1)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[])) [] [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa 0 Bool
True [] [] [] []
(nxtTbls :: [[[(Int, Bool, String)]]]
nxtTbls,nxtQrys :: [[[String]]]
nxtQrys) = [([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]]))
-> [([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]])
forall a b. (a -> b) -> a -> b
$ (([String], String) -> ([[(Int, Bool, String)]], [[String]]))
-> [([String], String)] -> [([[(Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> [a] -> [b]
map (\(xIds :: [String]
xIds,x :: String
x)->let xName :: String
xName=String
xString -> String -> String
forall a. [a] -> [a] -> [a]
++(Integer -> String
forall a. Show a => a -> String
show 1) in SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields (RootObject -> SubFields
getSubFields RootObject
obj) ([(String, Int)] -> Map String Int
forall k a. Ord k => [(k, a)] -> Map k a
fromList [(String
x,1)]) ("SELECT "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds "")) "" (" FROM"String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String -> Int -> String
makeSqlTablePhrase RootObject
obj String
x 1)) (" ORDER BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds " ASC")) ((String
x,1)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[]) [] [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa 0 Bool
True [] [] [] []) ([([String], String)] -> [([[(Int, Bool, String)]], [[String]])])
-> [([String], String)] -> [([[(Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> a -> b
$ [([String], String)] -> [([String], String)]
forall a. [a] -> [a]
tail [([String], String)]
dbNames
makeSqlTablePhrase :: NestedObject -> String -> Int -> String
makeSqlTablePhrase :: RootObject -> String -> Int -> String
makeSqlTablePhrase obj :: RootObject
obj name :: String
name number :: Int
number = if (RootObject -> Bool
withSubSelection RootObject
obj)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True then " (SELECT * FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++" WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
obj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
obj)String -> String -> String
forall a. [a] -> [a] -> [a]
++") AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++String
numStr else " "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++String
numStr
where
numStr :: String
numStr = Int -> String
forall a. Show a => a -> String
show Int
number
addSqlQueryFields :: SubFields -> Map String Int -> String -> String -> String -> String -> [(String,Int)] -> [SubFields] -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> Int -> Bool -> [(Int,Bool,String)] -> [(Int,Bool,String)] -> [(String,String,String,String)] -> [(String,String,String,String)] -> ([[(Int,Bool,String)]],[[String]])
addSqlQueryFields :: SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields ((Left (ScalarType _ "__typename" _ _)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
True [(Int, Bool, String)]
li [(Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addSqlQueryFields ((Left (ScalarType _ name :: String
name Nothing _)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
t Map String Int
counts String
ids (String
selectString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltableNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
True [(Int, Bool, String)]
li [(Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addSqlQueryFields ((Left (ScalarType _ name :: String
name (Just trans :: String
trans) arg :: Maybe String
arg)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
t Map String Int
counts String
ids (String
selectString -> String -> String
forall a. [a] -> [a] -> [a]
++String
prefixString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltableNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++String
suffixString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
True [(Int, Bool, String)]
li [(Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
where
(prefix :: String
prefix,suffix :: String
suffix) = String
-> String
-> String
-> Maybe String
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> (String, String)
getPrimitiveScalarTypeArgumentOptions (String -> [(String, [String], String)] -> String
translateTableToObject String
ltable [(String, [String], String)]
sodn) String
name String
trans Maybe String
arg [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss
addSqlQueryFields ((Right (Left h :: RootObject
h)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = if Int
tablesLenInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=1 then ([[(Int, Bool, String)]]
fstTbls[[(Int, Bool, String)]]
-> [[(Int, Bool, String)]] -> [[(Int, Bool, String)]]
forall a. [a] -> [a] -> [a]
++([[[(Int, Bool, String)]]] -> [[(Int, Bool, String)]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[(Int, Bool, String)]]]
nxtTbls),[[String]]
fstQrys[[String]] -> [[String]] -> [[String]]
forall a. [a] -> [a] -> [a]
++([[[String]]] -> [[String]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[String]]]
nxtQrys)) else SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
True [(Int, Bool, String)]
li ((Int
newLvl,Bool
True," ")(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Bool, String)]
ri) [(String, String, String, String)]
lqs (("","","SELECT * FROM (VALUES (NULL)) WHERE 1=0","")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
where
tables :: [([String], String)]
tables = String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [([String], String)]
translateServerObjectToDBName (RootObject -> String
getServerObject RootObject
h) [(String, [String], String)]
sodn [(String, [String], [String])]
soa
tablesLen :: Int
tablesLen = [([String], String)] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [([String], String)]
tables
(firstTableIds :: [String]
firstTableIds, firstTable :: String
firstTable) = [([String], String)] -> ([String], String)
forall a. [a] -> a
head [([String], String)]
tables
(firstTableNewCounts :: Map String Int
firstTableNewCounts,transition :: String
transition) = String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
makeTransitions (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
ltable (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
ltableNo) Map String Int
counts (String -> String -> [(String, String, [String])] -> [String]
getDBObjectRelationships String
ltable String
firstTable [(String, String, [String])]
sor) RootObject
h
firstTableNum :: Int
firstTableNum = (!) Map String Int
firstTableNewCounts String
firstTable
firstTableName :: String
firstTableName = String
firstTableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
firstTableNum)
newLvl :: Int
newLvl = Int
lvlInt -> Int -> Int
forall a. Num a => a -> a -> a
+1
objSfs :: SubFields
objSfs = RootObject -> SubFields
getSubFields RootObject
h
(fstTbls :: [[(Int, Bool, String)]]
fstTbls,fstQrys :: [[String]]
fstQrys) = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
objSfs Map String Int
firstTableNewCounts (String
idsString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstTableIds "")) "" (String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) (String
orderString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstTableIds " ASC")) ((String
firstTable,Int
firstTableNum)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:(String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) (SubFields
tSubFields -> [SubFields] -> [SubFields]
forall a. a -> [a] -> [a]
:[SubFields]
fields) [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
newLvl Bool
True ([(Int, Bool, String)]
li[(Int, Bool, String)]
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++[(Int
lvl,Bool
True,String
ltable)]) [(Int, Bool, String)]
ri ([(String, String, String, String)]
lqs[(String, String, String, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. [a] -> [a] -> [a]
++[(String
ids,String
select,String
from,String
order)]) [(String, String, String, String)]
rqs
(nxtTbls :: [[[(Int, Bool, String)]]]
nxtTbls,nxtQrys :: [[[String]]]
nxtQrys) = [([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]]))
-> [([[(Int, Bool, String)]], [[String]])]
-> ([[[(Int, Bool, String)]]], [[[String]]])
forall a b. (a -> b) -> a -> b
$ (([String], String) -> ([[(Int, Bool, String)]], [[String]]))
-> [([String], String)] -> [([[(Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> [a] -> [b]
map (\(xIds :: [String]
xIds,x :: String
x)->let
(newCounts :: Map String Int
newCounts,transition :: String
transition)=String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
makeTransitions (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
ltable (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
ltableNo) Map String Int
counts (String -> String -> [(String, String, [String])] -> [String]
getDBObjectRelationships String
ltable String
x [(String, String, [String])]
sor) RootObject
h
xNum :: Int
xNum=(!) Map String Int
newCounts String
x
xName :: String
xName=String
xString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
xNum)
emptyFlds :: [[a]]
emptyFlds = ([][a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:[[] | SubFields
_<-[SubFields]
fields])
flsLRcds :: [(Int, Bool, String)]
flsLRcds = (((Int, Bool, String) -> (Int, Bool, String))
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\(nlvl :: Int
nlvl,_,ntbl :: String
ntbl)->(Int
nlvl,Bool
False,String
ntbl)) [(Int, Bool, String)]
li)[(Int, Bool, String)]
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++[(Int
lvl,Bool
False,String
ltable)]
flsRRcds :: [(Int, Bool, String)]
flsRRcds = (((Int, Bool, String) -> (Int, Bool, String))
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\(nlvl :: Int
nlvl,_,ntbl :: String
ntbl)->(Int
nlvl,Bool
False,String
ntbl)) [(Int, Bool, String)]
ri)
in
SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
objSfs Map String Int
newCounts (String
idsString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds "")) "" (String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) (String
orderString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds " ASC")) ((String
x,Int
xNum)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:(String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
forall a. [[a]]
emptyFlds [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
newLvl Bool
True [(Int, Bool, String)]
flsLRcds [(Int, Bool, String)]
flsRRcds [("","","","") | (Int, Bool, String)
_<-[(Int, Bool, String)]
flsLRcds] [("","","","") | (Int, Bool, String)
_<-[(Int, Bool, String)]
flsRRcds]) ([([String], String)] -> [([[(Int, Bool, String)]], [[String]])])
-> [([String], String)] -> [([[(Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> a -> b
$ [([String], String)] -> [([String], String)]
forall a. [a] -> [a]
tail [([String], String)]
tables
addSqlQueryFields [] _ ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltbl :: String
ltbl,_):_) [] _ _ _ _ lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = ([[(Int, Bool, String)]
li[(Int, Bool, String)]
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++(((Int, (Int, Bool, String)) -> (Int, Bool, String))
-> [(Int, (Int, Bool, String))] -> [(Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (Int, (Int, Bool, String)) -> (Int, Bool, String)
forall a b. (a, b) -> b
snd [(Int, (Int, Bool, String))]
nri)],[[String]
lQrs[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++[String]
rQrs])
where
(nri :: [(Int, (Int, Bool, String))]
nri,nrqs :: [(String, String, String, String)]
nrqs) = [((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)])
forall a b. [(a, b)] -> ([a], [b])
unzip ([((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)]))
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)])
forall a b. (a -> b) -> a -> b
$ [((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a.
[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
reverseNeighbourQueries ([((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)),
(String, String, String, String))])
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [(Int, (Int, Bool, String))]
-> [(String, String, String, String)]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip (((Int, Bool, String) -> (Int, (Int, Bool, String)))
-> [(Int, Bool, String)] -> [(Int, (Int, Bool, String))]
forall a b. (a -> b) -> [a] -> [b]
map (\(nl :: Int
nl,nb :: Bool
nb,nt :: String
nt)->(Int
nl,(Int
nl,Bool
nb,String
nt))) ((Int
lvl,Bool
True,String
ltbl)(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Bool, String)]
ri)) ((String
ids,String
select,String
from,String
order)(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
lQrs :: [String]
lQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-[(String, String, String, String)]
lqs]
rQrs :: [String]
rQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-((String, String, String, String) -> Bool)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String, String, String, String)
-> (String, String, String, String) -> Bool
forall a. Eq a => a -> a -> Bool
(/=) ("","","","")) [(String, String, String, String)]
nrqs]
addSqlQueryFields [] counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltbl :: String
ltbl,_):b :: [(String, Int)]
b) (h :: SubFields
h:t :: [SubFields]
t) sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
h Map String Int
counts String
nids String
sel String
frm String
ord [(String, Int)]
b [SubFields]
t [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
nlvl Bool
nfst [(Int, Bool, String)]
nli [(Int, Bool, String)]
nri ([(String, String, String, String)]
-> [(String, String, String, String)]
forall a. [a] -> [a]
init [(String, String, String, String)]
lqs) [(String, String, String, String)]
nrqs
where
(nlvl :: Int
nlvl,nfst :: Bool
nfst,_) = [(Int, Bool, String)] -> (Int, Bool, String)
forall a. [a] -> a
last [(Int, Bool, String)]
li
(nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord) = [(String, String, String, String)]
-> (String, String, String, String)
forall a. [a] -> a
last [(String, String, String, String)]
lqs
nrqs :: [(String, String, String, String)]
nrqs = (String
ids,String
select,String
from,String
order)(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs
nli :: [(Int, Bool, String)]
nli = [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a]
init [(Int, Bool, String)]
li
nri :: [(Int, Bool, String)]
nri = (Int
lvl,Bool
True,String
ltbl)(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Bool, String)]
ri
addSqlQueryFields _ _ _ _ _ _ ((ltable :: String
ltable,_):_) _ _ _ _ _ lvl :: Int
lvl False li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri _ rqs :: [(String, String, String, String)]
rqs = ([[(Int, Bool, String)]
li[(Int, Bool, String)]
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++(((Int, (Int, Bool, String)) -> (Int, Bool, String))
-> [(Int, (Int, Bool, String))] -> [(Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (Int, (Int, Bool, String)) -> (Int, Bool, String)
forall a b. (a, b) -> b
snd [(Int, (Int, Bool, String))]
nri)],[[String]
rQrs])
where
(nri :: [(Int, (Int, Bool, String))]
nri,nrqs :: [(String, String, String, String)]
nrqs) = [((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)])
forall a b. [(a, b)] -> ([a], [b])
unzip ([((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)]))
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
-> ([(Int, (Int, Bool, String))],
[(String, String, String, String)])
forall a b. (a -> b) -> a -> b
$ [((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a.
[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
reverseNeighbourQueries ([((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)),
(String, String, String, String))])
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [(Int, (Int, Bool, String))]
-> [(String, String, String, String)]
-> [((Int, (Int, Bool, String)), (String, String, String, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip (((Int, Bool, String) -> (Int, (Int, Bool, String)))
-> [(Int, Bool, String)] -> [(Int, (Int, Bool, String))]
forall a b. (a -> b) -> [a] -> [b]
map (\(nl :: Int
nl,nb :: Bool
nb,nt :: String
nt)->(Int
nl,(Int
nl,Bool
nb,String
nt))) ((Int
lvl,Bool
False,String
ltable)(Int, Bool, String)
-> [(Int, Bool, String)] -> [(Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Bool, String)]
ri)) (("","","","")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
rQrs :: [String]
rQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-((String, String, String, String) -> Bool)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String, String, String, String)
-> (String, String, String, String) -> Bool
forall a. Eq a => a -> a -> Bool
(/=) ("","","","")) [(String, String, String, String)]
nrqs]
addSqlQueryFields ((Right (Right (InlinefragmentObject ifo :: String
ifo sfs :: SubFields
sfs))):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl True li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs
| String
-> String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> Bool
isServerObjectTable String
ltable String
ifo [(String, [String], String)]
sodn [(String, [String], [String])]
soa = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields (SubFields
sfsSubFields -> SubFields -> SubFields
forall a. [a] -> [a] -> [a]
++SubFields
t) Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
True [(Int, Bool, String)]
li [(Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addSqlQueryFields (_:t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa lvl :: Int
lvl fst :: Bool
fst li :: [(Int, Bool, String)]
li ri :: [(Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Int
-> Bool
-> [(Int, Bool, String)]
-> [(Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Bool, String)]], [[String]])
addSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Int
lvl Bool
fst [(Int, Bool, String)]
li [(Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addSqlQueryFields _ _ _ _ _ _ [] _ _ _ _ _ _ _ _ _ _ _ = String -> ([[(Int, Bool, String)]], [[String]])
forall a. HasCallStack => String -> a
error "No objects are here for remaining fields (EOF source error)."
removeLastChar :: String -> String
removeLastChar :: String -> String
removeLastChar "" = ""
removeLastChar str :: String
str = String -> String
forall a. [a] -> [a]
init String
str
getNewTables :: [String] -> [String]
getNewTables :: [String] -> [String]
getNewTables lnk :: [String]
lnk = [String] -> Int -> [String]
getNewTablesHelper ([String] -> [String]
forall a. [a] -> [a]
tail ([String] -> [String]) -> [String] -> [String]
forall a b. (a -> b) -> a -> b
$ [String] -> [String]
forall a. [a] -> [a]
tail [String]
lnk) 0
getNewTablesHelper :: [String] -> Int -> [String]
getNewTablesHelper :: [String] -> Int -> [String]
getNewTablesHelper (h :: String
h:t :: [String]
t) 0 = String
hString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String] -> Int -> [String]
getNewTablesHelper ([String] -> [String]
forall a. [a] -> [a]
tail [String]
t) 3
getNewTablesHelper (h :: String
h:t :: [String]
t) idx :: Int
idx = if Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
(==) 0 (Int -> Bool) -> Int -> Bool
forall a b. (a -> b) -> a -> b
$ Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
idx 3 then String
hString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String] -> Int -> [String]
getNewTablesHelper [String]
t (Int
idxInt -> Int -> Int
forall a. Num a => a -> a -> a
+1) else [String] -> Int -> [String]
getNewTablesHelper [String]
t (Int
idxInt -> Int -> Int
forall a. Num a => a -> a -> a
+1)
getNewTablesHelper [] _ = []
makeTransitions :: String -> Map String Int -> [String] -> NestedObject -> (Map String Int,String)
makeTransitions :: String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
makeTransitions frm :: String
frm counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:h6 :: String
h6:h7 :: String
h7:t :: [String]
t) nobj :: RootObject
nobj = String
-> String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
completeTransition (" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h5String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
frm (String -> [String]
sepColString String
h2) String
nxtTbl (String -> [String]
sepColString String
h6))) String
nxtTbl Map String Int
nxtCnt (String
h3String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h4String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h5String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h6String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h7String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t) RootObject
nobj
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h5 1 Map String Int
counts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h5 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h5
makeTransitions frm :: String
frm counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:_) nobj :: RootObject
nobj = (Map String Int
nxtCnt," INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++(if (RootObject -> Bool
withSubSelection RootObject
nobj)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True then "(SELECT * FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h3String -> String -> String
forall a. [a] -> [a] -> [a]
++" WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++")" else String
h3)String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
frm (String -> [String]
sepColString String
h2) String
nxtTbl (String -> [String]
sepColString String
h4)))
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h3 1 Map String Int
counts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h3 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h3
makeTransitions _ _ _ _ = ReferenceException -> (Map String Int, String)
forall a e. Exception e => e -> a
throw ReferenceException
RelationshipCardinalityException
completeTransition :: String -> String -> Map String Int -> [String] -> NestedObject -> (Map String Int,String)
completeTransition :: String
-> String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
completeTransition rlt :: String
rlt prevTbl :: String
prevTbl counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:h6 :: String
h6:h7 :: String
h7:h8 :: String
h8:t :: [String]
t) nobj :: RootObject
nobj = String
-> String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
completeTransition (String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h6String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
prevTbl (String -> [String]
sepColString String
h5) String
nxtTbl (String -> [String]
sepColString String
h7))) String
nxtTbl Map String Int
nxtCnt (String
h1String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h2String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h6String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h7String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h8String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t) RootObject
nobj
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h6 1 Map String Int
counts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h6 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h6
completeTransition rlt :: String
rlt prevTbl :: String
prevTbl counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:[]) nobj :: RootObject
nobj = (Map String Int
nxtCnt, String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++(if (RootObject -> Bool
withSubSelection RootObject
nobj)Bool -> Bool -> Bool
forall a. Eq a => a -> a -> Bool
==Bool
True then "(SELECT * FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++")" else String
h1)String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++String
table1NumStrString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
prevTbl (String -> [String]
sepColString String
h5) (String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++String
table1NumStr) (String -> [String]
sepColString String
h2)))
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h1 1 Map String Int
counts
table1NumStr :: String
table1NumStr = Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h1
completeTransition _ _ _ _ _ = ReferenceException -> (Map String Int, String)
forall a e. Exception e => e -> a
throw ReferenceException
RelationshipCardinalityException
makeEqColumns :: String -> [String] -> String -> [String] -> String
makeEqColumns :: String -> [String] -> String -> [String] -> String
makeEqColumns tb1 :: String
tb1 col1 :: [String]
col1 tb2 :: String
tb2 col2 :: [String]
col2 = if [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
col1 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= [String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [String]
col2 then ReferenceException -> String
forall a e. Exception e => e -> a
throw ReferenceException
RelationshipLinkageIdException else String -> String
forall a. [a] -> [a]
init (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ ((String, String) -> String) -> [(String, String)] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (\(nxt1 :: String
nxt1,nxt2 :: String
nxt2)->String
tb1String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxt1String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++String
tb2String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxt2String -> String -> String
forall a. [a] -> [a] -> [a]
++",") ([(String, String)] -> [String]) -> [(String, String)] -> [String]
forall a b. (a -> b) -> a -> b
$ [String] -> [String] -> [(String, String)]
forall a b. [a] -> [b] -> [(a, b)]
zip [String]
col1 [String]
col2
getFirstColumn :: String -> (String,String)
getFirstColumn :: String -> (String, String)
getFirstColumn str :: String
str = String -> String -> (String, String)
getFirstColumnHelper "" String
str
getFirstColumnHelper :: String -> String -> (String,String)
getFirstColumnHelper :: String -> String -> (String, String)
getFirstColumnHelper acc :: String
acc (' ':t :: String
t) = (String
acc,String
t)
getFirstColumnHelper acc :: String
acc (h :: Char
h:t :: String
t) = String -> String -> (String, String)
getFirstColumnHelper (String
accString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
h]) String
t
getFirstColumnHelper _ "" = ("","")
getPrimitiveScalarTypeArgumentOptions :: ServerObject -> String -> String -> Argument -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> (String,String)
getPrimitiveScalarTypeArgumentOptions :: String
-> String
-> String
-> Maybe String
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> (String, String)
getPrimitiveScalarTypeArgumentOptions obj :: String
obj st :: String
st trans :: String
trans arg :: Maybe String
arg ((h :: String
h,sts :: [(String, String, [(String, [(String, String, String, String)])])]
sts):rst :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
rst) = if String
hString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
obj then String
-> String
-> Maybe String
-> [(String, String,
[(String, [(String, String, String, String)])])]
-> (String, String)
getScalarTypeArgumentsOptions String
st String
trans Maybe String
arg [(String, String, [(String, [(String, String, String, String)])])]
sts else String
-> String
-> String
-> Maybe String
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> (String, String)
getPrimitiveScalarTypeArgumentOptions String
obj String
st String
trans Maybe String
arg [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
rst
getPrimitiveScalarTypeArgumentOptions _ _ _ _ [] = ReferenceException -> (String, String)
forall a e. Exception e => e -> a
throw ReferenceException
UnrecognisedObjectException
getScalarTypeArgumentsOptions :: String -> String -> Argument -> [(String,String,[(String,[(String,String,String,String)])])] -> (String,String)
getScalarTypeArgumentsOptions :: String
-> String
-> Maybe String
-> [(String, String,
[(String, [(String, String, String, String)])])]
-> (String, String)
getScalarTypeArgumentsOptions st :: String
st trans :: String
trans arg :: Maybe String
arg ((name :: String
name,_,args :: [(String, [(String, String, String, String)])]
args):t :: [(String, String, [(String, [(String, String, String, String)])])]
t) = if String
stString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
name then String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> (String, String)
getArgumentOptions String
trans Maybe String
arg [(String, [(String, String, String, String)])]
args else String
-> String
-> Maybe String
-> [(String, String,
[(String, [(String, String, String, String)])])]
-> (String, String)
getScalarTypeArgumentsOptions String
st String
trans Maybe String
arg [(String, String, [(String, [(String, String, String, String)])])]
t
getScalarTypeArgumentsOptions _ _ _ [] = ReferenceException -> (String, String)
forall a e. Exception e => e -> a
throw ReferenceException
UnrecognisedScalarException
getArgumentOptions :: String -> Argument -> [(String,[(String,String,String,String)])] -> (String,String)
getArgumentOptions :: String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> (String, String)
getArgumentOptions trans :: String
trans arg :: Maybe 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 Maybe String
-> [(String, String, String, String)] -> (String, String)
getArgumentOption Maybe String
arg [(String, String, String, String)]
opts else String
-> Maybe String
-> [(String, [(String, String, String, String)])]
-> (String, String)
getArgumentOptions String
trans Maybe String
arg [(String, [(String, String, String, String)])]
rst
getArgumentOptions _ _ [] = ReferenceException -> (String, String)
forall a e. Exception e => e -> a
throw ReferenceException
UnrecognisedArgumentException
getArgumentOption :: Argument -> [(String,String,String,String)] -> (String,String)
getArgumentOption :: Maybe String
-> [(String, String, String, String)] -> (String, String)
getArgumentOption Nothing ((_,_,prefix :: String
prefix,suffix :: String
suffix):_) = (String
prefix,String
suffix)
getArgumentOption (Just opt :: String
opt) ((name :: String
name,_,prefix :: String
prefix,suffix :: String
suffix):rst :: [(String, String, String, String)]
rst) = if String
optString -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
name then (String
prefix,String
suffix) else Maybe String
-> [(String, String, String, String)] -> (String, String)
getArgumentOption (String -> Maybe String
forall a. a -> Maybe a
Just String
opt) [(String, String, String, String)]
rst
getArgumentOption _ [] = ReferenceException -> (String, String)
forall a e. Exception e => e -> a
throw ReferenceException
UnrecognisedOptionException
makeTableIdentifier :: String -> [String] -> String -> String
makeTableIdentifier :: String -> [String] -> String -> String
makeTableIdentifier tbl :: String
tbl (fid :: String
fid:ids :: [String]
ids) ins :: String
ins = [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (\x :: String
x->String
tblString -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
xString -> String -> String
forall a. [a] -> [a] -> [a]
++String
insString -> String -> String
forall a. [a] -> [a] -> [a]
++",") (String
fidString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
ids)
makeTableIdentifier _ [] _ = []
reverseNeighbourQueries :: [((Int,a),(String,String,String,String))] -> [((Int,a),(String,String,String,String))]
reverseNeighbourQueries :: [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
reverseNeighbourQueries qrys :: [((Int, a), (String, String, String, String))]
qrys = let maxLvl :: Int
maxLvl = [((Int, a), (String, String, String, String))] -> Int
forall a. [((Int, a), (String, String, String, String))] -> Int
findMaxLevel [((Int, a), (String, String, String, String))]
qrys in Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a.
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
rearrangeQueriesAtLevel Int
maxLvl [] [((Int, a), (String, String, String, String))]
qrys
findMaxLevel :: [((Int,a),(String,String,String,String))] -> Int
findMaxLevel :: [((Int, a), (String, String, String, String))] -> Int
findMaxLevel qrys :: [((Int, a), (String, String, String, String))]
qrys = Int -> [((Int, a), (String, String, String, String))] -> Int
forall a.
Int -> [((Int, a), (String, String, String, String))] -> Int
recordMaxLevel 0 [((Int, a), (String, String, String, String))]
qrys
recordMaxLevel :: Int -> [((Int,a),(String,String,String,String))] -> Int
recordMaxLevel :: Int -> [((Int, a), (String, String, String, String))] -> Int
recordMaxLevel rlt :: Int
rlt (((nxt :: Int
nxt,_),_):t :: [((Int, a), (String, String, String, String))]
t) = Int -> [((Int, a), (String, String, String, String))] -> Int
forall a.
Int -> [((Int, a), (String, String, String, String))] -> Int
recordMaxLevel (Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
rlt Int
nxt) [((Int, a), (String, String, String, String))]
t
recordMaxLevel rlt :: Int
rlt _ = Int
rlt
rearrangeQueriesAtLevel :: Int -> [((Int,a),(String,String,String,String))] -> [((Int,a),(String,String,String,String))] -> [((Int,a),(String,String,String,String))]
rearrangeQueriesAtLevel :: Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
rearrangeQueriesAtLevel 0 clc :: [((Int, a), (String, String, String, String))]
clc [] = [((Int, a), (String, String, String, String))]
clc
rearrangeQueriesAtLevel lvl :: Int
lvl clc :: [((Int, a), (String, String, String, String))]
clc (((nLvl :: Int
nLvl,dat :: a
dat),qry :: (String, String, String, String)
qry):t :: [((Int, a), (String, String, String, String))]
t) = if Int
nLvlInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
lvl then
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a.
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
rearrangeQueriesAtLevel Int
lvl ([((Int, a), (String, String, String, String))]
clc[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a. [a] -> [a] -> [a]
++[((Int, a), (String, String, String, String))]
nOrd) [((Int, a), (String, String, String, String))]
rem
else
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a.
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
rearrangeQueriesAtLevel Int
lvl ([((Int, a), (String, String, String, String))]
clc[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a. [a] -> [a] -> [a]
++[((Int
nLvl,a
dat),(String, String, String, String)
qry)]) [((Int, a), (String, String, String, String))]
t
where
(nOrd :: [((Int, a), (String, String, String, String))]
nOrd,rem :: [((Int, a), (String, String, String, String))]
rem) = Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
forall a.
Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
collectQueriesAndRearrange Int
lvl [] (((Int
nLvl,a
dat),(String, String, String, String)
qry)((Int, a), (String, String, String, String))
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a. a -> [a] -> [a]
:[((Int, a), (String, String, String, String))]
t)
rearrangeQueriesAtLevel lvl :: Int
lvl clc :: [((Int, a), (String, String, String, String))]
clc [] = Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a.
Int
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
rearrangeQueriesAtLevel (Int
lvlInt -> Int -> Int
forall a. Num a => a -> a -> a
-1) [] [((Int, a), (String, String, String, String))]
clc
collectQueriesAndRearrange :: Int -> [[((Int,a),(String,String,String,String))]] -> [((Int,a),(String,String,String,String))] -> ([((Int,a),(String,String,String,String))],[((Int,a),(String,String,String,String))])
collectQueriesAndRearrange :: Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
collectQueriesAndRearrange lvl :: Int
lvl grps :: [[((Int, a), (String, String, String, String))]]
grps (((nLvl :: Int
nLvl,dat :: a
dat),qry :: (String, String, String, String)
qry):t :: [((Int, a), (String, String, String, String))]
t)
| Int
nLvlInt -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
lvl = Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
forall a.
Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
collectQueriesAndRearrange Int
lvl ([[((Int, a), (String, String, String, String))]]
grps[[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
forall a. [a] -> [a] -> [a]
++[[((Int
nLvl,a
dat),(String, String, String, String)
qry)]]) [((Int, a), (String, String, String, String))]
t
| Int
nLvlInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>Int
lvl = Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
forall a.
Int
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
-> ([((Int, a), (String, String, String, String))],
[((Int, a), (String, String, String, String))])
collectQueriesAndRearrange Int
lvl (([[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
forall a. [a] -> [a]
init [[((Int, a), (String, String, String, String))]]
grps)[[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
forall a. [a] -> [a] -> [a]
++[([[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
forall a. [a] -> a
last [[((Int, a), (String, String, String, String))]]
grps)[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a. [a] -> [a] -> [a]
++[((Int
nLvl,a
dat),(String, String, String, String)
qry)]]) [((Int, a), (String, String, String, String))]
t
| Bool
otherwise = ([[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))])
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
forall a. [a] -> [a]
reverse [[((Int, a), (String, String, String, String))]]
grps,((Int
nLvl,a
dat),(String, String, String, String)
qry)((Int, a), (String, String, String, String))
-> [((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
forall a. a -> [a] -> [a]
:[((Int, a), (String, String, String, String))]
t)
collectQueriesAndRearrange lvl :: Int
lvl grps :: [[((Int, a), (String, String, String, String))]]
grps [] = ([[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))])
-> [[((Int, a), (String, String, String, String))]]
-> [((Int, a), (String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [[((Int, a), (String, String, String, String))]]
-> [[((Int, a), (String, String, String, String))]]
forall a. [a] -> [a]
reverse [[((Int, a), (String, String, String, String))]]
grps,[])
makeSqlAggQueries :: [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> [[FlagNode]] -> [RootObject] -> ([[[(Int,Int,Bool,String)]]],[[[String]]])
makeSqlAggQueries :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> [[FlagNode]]
-> [RootObject]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
makeSqlAggQueries sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: [[FlagNode]]
flgs rojs :: [RootObject]
rojs = [([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip [[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> [FlagNode]
-> RootObject
-> ([[(Int, Int, Bool, String)]], [[String]])
makeSqlAggRootObjectQuerySet [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa [FlagNode]
oflgs RootObject
robj | (oflgs :: [FlagNode]
oflgs,robj :: RootObject
robj)<-[[FlagNode]] -> [RootObject] -> [([FlagNode], RootObject)]
forall a b. [a] -> [b] -> [(a, b)]
zip [[FlagNode]]
flgs [RootObject]
rojs]
makeSqlAggRootObjectQuerySet :: [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> [FlagNode] -> RootObject -> ([[(Int,Int,Bool,String)]],[[String]])
makeSqlAggRootObjectQuerySet :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> [FlagNode]
-> RootObject
-> ([[(Int, Int, Bool, String)]], [[String]])
makeSqlAggRootObjectQuerySet sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: [FlagNode]
flgs obj :: RootObject
obj = ([[[(Int, Int, Bool, String)]]] -> [[(Int, Int, Bool, String)]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[(Int, Int, Bool, String)]]]
tbls,[[[String]]] -> [[String]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[String]]]
qrys)
where
(tbls :: [[[(Int, Int, Bool, String)]]]
tbls,qrys :: [[[String]]]
qrys) = [([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]]))
-> [([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
forall a b. (a -> b) -> a -> b
$ ((FlagNode, ([String], String))
-> ([[(Int, Int, Bool, String)]], [[String]]))
-> [(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> [a] -> [b]
map (\(FlagNode val :: Int
val nds :: [FlagNode]
nds,(tblIds :: [String]
tblIds,tbl :: String
tbl))->let
tblName :: String
tblName=String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
tbl (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Integer -> String
forall a. Show a => a -> String
show 1
sfs :: SubFields
sfs = RootObject -> SubFields
getSubFields RootObject
obj in if Int
valInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<2 then ([[(Int
val,0,Bool
True,String
tbl)]],[[[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa ([(String, Int)] -> Map String Int
forall k a. Ord k => [(k, a)] -> Map k a
fromList []) [(String
tbl,0)] "result0 AS (SELECT JSON_GROUP_ARRAY(JSON_OBJECT(" (")) FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
tblString -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
tblString -> String -> String
forall a. [a] -> [a] -> [a]
++(Integer -> String
forall a. Show a => a -> String
show 0)) SubFields
sfs [] ((if RootObject -> Bool
withSubSelection RootObject
obj then " WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
tblString -> String -> String
forall a. [a] -> [a] -> [a]
++(Integer -> String
forall a. Show a => a -> String
show 0)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
obj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
obj) else "")String -> String -> String
forall a. [a] -> [a] -> [a]
++") SELECT "String -> String -> String
forall a. [a] -> [a] -> [a]
++((String -> String -> String) -> String -> [String] -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' String -> String -> String
forall a. [a] -> [a] -> [a]
(++) "" ["0," | String
_<-[String]
tblIds])String -> String -> String
forall a. [a] -> [a] -> [a]
++"* FROM result0;")]]) else SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
sfs ([(String, Int)] -> Map String Int
forall k a. Ord k => [(k, a)] -> Map k a
fromList [(String
tbl,1)]) ("SELECT "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
tblName [String]
tblIds "")) "" (" FROM"String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String -> Int -> String
makeSqlTablePhrase RootObject
obj String
tbl 1)) (" ORDER BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
tblName [String]
tblIds " ASC")) ((String
tbl,1)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[]) [] [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa (Int -> [FlagNode] -> FlagNode
FlagNode Int
val [FlagNode]
nds) [] 0 Bool
True [] [] [] []) ([(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])])
-> [(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> a -> b
$ [FlagNode]
-> [([String], String)] -> [(FlagNode, ([String], String))]
forall a b. [a] -> [b] -> [(a, b)]
zip [FlagNode]
flgs [([String], String)]
dbNames
dbNames :: [([String], String)]
dbNames = String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [([String], String)]
translateServerObjectToDBName (RootObject -> String
getServerObject RootObject
obj) [(String, [String], String)]
sodn [(String, [String], [String])]
soa
makeSqlAggQuery :: [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> Map String Int -> [(String,Int)] -> String -> String -> [Field] -> [(String,String,[Field])] -> String -> String
makeSqlAggQuery :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end [] [] filterGroupSelect :: String
filterGroupSelect = "WITH "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
forall a. [a] -> [a]
init String
def)String -> String -> String
forall a. [a] -> [a] -> [a]
++String
endString -> String -> String
forall a. [a] -> [a] -> [a]
++String
filterGroupSelect
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end [] ((ndef :: String
ndef,nend :: String
nend,nsfs :: SubFields
nsfs):rem :: [(String, String, SubFields)]
rem) filterGroupSelect :: String
filterGroupSelect = [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts [(String, Int)]
lTbls ((String -> String
forall a. [a] -> [a]
init String
def)String -> String -> String
forall a. [a] -> [a] -> [a]
++String
endString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ndef) String
nend SubFields
nsfs [(String, String, SubFields)]
rem String
filterGroupSelect
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end ((Left (ScalarType Nothing n :: String
n Nothing _)):sfs :: SubFields
sfs) rem :: [(String, String, SubFields)]
rem filterGroupSelect :: String
filterGroupSelect =
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) (String
defString -> String -> String
forall a. [a] -> [a] -> [a]
++"'"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nString -> String -> String
forall a. [a] -> [a] -> [a]
++"',"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltbString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltbNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
end SubFields
sfs [(String, String, SubFields)]
rem String
filterGroupSelect
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end ((Left (ScalarType (Just a :: String
a) n :: String
n Nothing _)):sfs :: SubFields
sfs) rem :: [(String, String, SubFields)]
rem filterGroupSelect :: String
filterGroupSelect =
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) (String
defString -> String -> String
forall a. [a] -> [a] -> [a]
++"'"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
aString -> String -> String
forall a. [a] -> [a] -> [a]
++"',"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltbString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltbNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
end SubFields
sfs [(String, String, SubFields)]
rem String
filterGroupSelect
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end ((Left (ScalarType a :: Maybe String
a n :: String
n (Just trans :: String
trans) arg :: Maybe String
arg)):sfs :: SubFields
sfs) rem :: [(String, String, SubFields)]
rem filterGroupSelect :: String
filterGroupSelect =
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) (String
defString -> String -> String
forall a. [a] -> [a] -> [a]
++"'"String -> String -> String
forall a. [a] -> [a] -> [a]
++(ScalarType -> String
getScalarFieldLabel (Maybe String
-> String -> Maybe String -> Maybe String -> ScalarType
ScalarType Maybe String
a String
n (String -> Maybe String
forall a. a -> Maybe a
Just String
trans) Maybe String
arg))String -> String -> String
forall a. [a] -> [a] -> [a]
++"',"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
prefixString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltbString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltbNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nString -> String -> String
forall a. [a] -> [a] -> [a]
++String
suffixString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
end SubFields
sfs [(String, String, SubFields)]
rem String
filterGroupSelect
where
(prefix :: String
prefix,suffix :: String
suffix) = String
-> String
-> String
-> Maybe String
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> (String, String)
getPrimitiveScalarTypeArgumentOptions (String -> [(String, [String], String)] -> String
translateTableToObject String
ltb [(String, [String], String)]
sodn) String
n String
trans Maybe String
arg [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end ((Right (Left (NestedObject a :: Maybe String
a n :: String
n so :: String
so ss :: SubSelection
ss nsfs :: SubFields
nsfs))):sfs :: SubFields
sfs) rem :: [(String, String, SubFields)]
rem filterGroupSelect :: String
filterGroupSelect =
if [([String], String)] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [([String], String)]
dbNames Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== 0 then
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
nCnts4 ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) (String
defString -> String -> String
forall a. [a] -> [a] -> [a]
++"'"String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getNestedObjectFieldLabel (Maybe String
-> String -> String -> SubSelection -> SubFields -> RootObject
NestedObject Maybe String
a String
n String
so SubSelection
ss SubFields
nsfs))String -> String -> String
forall a. [a] -> [a] -> [a]
++"',JSON_ARRAY(),") String
end SubFields
sfs [(String, String, SubFields)]
rem String
filterGroupSelect
else
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
nCnts4 ((String
tbl,Int
tblNum)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:(String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) (String
nxtNONameString -> String -> String
forall a. [a] -> [a] -> [a]
++" AS (SELECT JSON_GROUP_ARRAY(JSON_OBJECT(") ("))"String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
rltNameString -> String -> String
forall a. [a] -> [a] -> [a]
++","String -> String -> String
forall a. [a] -> [a] -> [a]
++String
idAndJoins) SubFields
nsfs ((String
groupByString -> String -> String
forall a. [a] -> [a] -> [a]
++"),"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
defString -> String -> String
forall a. [a] -> [a] -> [a]
++"'"String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getNestedObjectFieldLabel (Maybe String
-> String -> String -> SubSelection -> SubFields -> RootObject
NestedObject Maybe String
a String
n String
so SubSelection
ss SubFields
nsfs))String -> String -> String
forall a. [a] -> [a] -> [a]
++"',IFNULL(JSON("String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtNONameString -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
rltNameString -> String -> String
forall a. [a] -> [a] -> [a]
++"),JSON_ARRAY()),",String
endString -> String -> String
forall a. [a] -> [a] -> [a]
++" LEFT OUTER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtNONameString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
cnct,SubFields
sfs)(String, String, SubFields)
-> [(String, String, SubFields)] -> [(String, String, SubFields)]
forall a. a -> [a] -> [a]
:[(String, String, SubFields)]
rem) String
filterGroupSelect
where
dbNames :: [([String], String)]
dbNames = String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [([String], String)]
translateServerObjectToDBName String
so [(String, [String], String)]
sodn [(String, [String], [String])]
soa
(ids :: [String]
ids,tbl :: String
tbl) = [([String], String)] -> ([String], String)
forall a. [a] -> a
head [([String], String)]
dbNames
nxtNO :: String
nxtNO = String
ltbString -> String -> String
forall a. [a] -> [a] -> [a]
++String
tbl
nCnts :: Map String Int
nCnts = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
nxtNO 1 Map String Int
cnts
nxtNONum :: Int
nxtNONum = (!) Map String Int
nCnts String
nxtNO
nxtNOName :: String
nxtNOName = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
nxtNO (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
nxtNONum
nCnts2 :: Map String Int
nCnts2 = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) "result" 1 Map String Int
nCnts
rltNum :: Int
rltNum = (!) Map String Int
nCnts2 "result"
rltName :: String
rltName = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) "result" (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
rltNum
nCnts3 :: Map String Int
nCnts3 = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
tbl 1 (Map String Int
nCnts2)
tblNum :: Int
tblNum = (!) Map String Int
nCnts3 String
tbl
(nCnts4 :: Map String Int
nCnts4,idAndJoins :: String
idAndJoins,groupBy :: String
groupBy,cnct :: String
cnct) = [(String, [String], String)]
-> String
-> String
-> String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String, String, String)
makeAggLinks [(String, [String], String)]
sodn (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
tbl (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
tblNum) (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
ltb (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
ltbNo) String
nxtNOName Map String Int
nCnts3 (String -> String -> [(String, String, [String])] -> [String]
getDBObjectRelationships String
tbl String
ltb [(String, String, [String])]
sor) (Maybe String
-> String -> String -> SubSelection -> SubFields -> RootObject
NestedObject Maybe String
a String
n String
so SubSelection
ss SubFields
nsfs)
makeSqlAggQuery sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa cnts :: Map String Int
cnts ((ltb :: String
ltb,ltbNo :: Int
ltbNo):lTbls :: [(String, Int)]
lTbls) def :: String
def end :: String
end ((Right (Right (InlinefragmentObject so :: String
so nsfs :: SubFields
nsfs))):sfs :: SubFields
sfs) rem :: [(String, String, SubFields)]
rem filterGroupSelect :: String
filterGroupSelect =
if String -> [(String, [String], String)] -> String
translateTableToObject String
ltb [(String, [String], String)]
sodn String -> String -> Bool
forall a. Eq a => a -> a -> Bool
== String
so then
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) String
def String
end (SubFields
nsfsSubFields -> SubFields -> SubFields
forall a. [a] -> [a] -> [a]
++SubFields
sfs) [(String, String, SubFields)]
rem String
filterGroupSelect
else
[(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
cnts ((String
ltb,Int
ltbNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
lTbls) String
def String
end SubFields
sfs [(String, String, SubFields)]
rem String
filterGroupSelect
makeAggLinks :: [(String,[String],String)] -> String -> String -> String -> Map String Int -> [String] -> NestedObject -> (Map String Int,String,String,String)
makeAggLinks :: [(String, [String], String)]
-> String
-> String
-> String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String, String, String)
makeAggLinks sodn :: [(String, [String], String)]
sodn frmName :: String
frmName toName :: String
toName aggName :: String
aggName cnts :: Map String Int
cnts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:h6 :: String
h6:h7 :: String
h7:t :: [String]
t) nobj :: RootObject
nobj = [(String, [String], String)]
-> String
-> String
-> String
-> String
-> String
-> Map String Int
-> [String]
-> (Map String Int, String, String, String)
completeAggLinks [(String, [String], String)]
sodn (" FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++(if RootObject -> Bool
withSubSelection RootObject
nobj then "(SELECT * FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++") AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmName else String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmName)String -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h5String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
frmName (String -> [String]
sepColString String
h2) String
nxtTbl (String -> [String]
sepColString String
h6))) String
nxtTbl String
aggName String
toName String
frmName Map String Int
nxtCnt (String
h3String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h4String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h5String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h6String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h7String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t)
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h5 1 Map String Int
cnts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h5 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h5
makeAggLinks sodn :: [(String, [String], String)]
sodn frmName :: String
frmName toName :: String
toName aggName :: String
aggName cnts :: Map String Int
cnts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:_) nobj :: RootObject
nobj = (Map String Int
nxtCnt,String
uniqColsString -> String -> String
forall a. [a] -> [a] -> [a]
++" FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++(if RootObject -> Bool
withSubSelection RootObject
nobj then "(SELECT * FROM "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" WHERE "String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionField RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++"="String -> String -> String
forall a. [a] -> [a] -> [a]
++(RootObject -> String
getSubSelectionArgument RootObject
nobj)String -> String -> String
forall a. [a] -> [a] -> [a]
++") AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmName else String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmName)String -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h3String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
frmName (String -> [String]
sepColString String
h2) String
nxtTbl (String -> [String]
sepColString String
h4))," GROUP BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
uniqCols,String -> [String] -> String -> [String] -> String
makeEqColumns String
toName [String]
connIds String
aggName [String]
connIds)
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h3 1 Map String Int
cnts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h3 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h3
connIds :: [String]
connIds = String -> [(String, [String], String)] -> [String]
fetchTableIds String
h3 [(String, [String], String)]
sodn
uniqCols :: String
uniqCols = String -> [String] -> String
listIdFields String
nxtTbl [String]
connIds
makeAggLinks _ _ _ _ _ _ _ = ReferenceException -> (Map String Int, String, String, String)
forall a e. Exception e => e -> a
throw ReferenceException
RelationshipCardinalityException
listIdFields :: String -> [String] -> String
listIdFields :: String -> [String] -> String
listIdFields nm :: String
nm ids :: [String]
ids = String -> String
forall a. [a] -> [a]
tail (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [String] -> String
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ (String -> String) -> [String] -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (\nxt :: String
nxt->","String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nmString -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxt) [String]
ids
completeAggLinks :: [(String,[String],String)] -> String -> String -> String -> String -> String -> Map String Int -> [String] -> (Map String Int,String,String,String)
completeAggLinks :: [(String, [String], String)]
-> String
-> String
-> String
-> String
-> String
-> Map String Int
-> [String]
-> (Map String Int, String, String, String)
completeAggLinks sodn :: [(String, [String], String)]
sodn rlt :: String
rlt prevTbl :: String
prevTbl aggName :: String
aggName toName :: String
toName frmName :: String
frmName counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:h6 :: String
h6:h7 :: String
h7:h8 :: String
h8:t :: [String]
t) = [(String, [String], String)]
-> String
-> String
-> String
-> String
-> String
-> Map String Int
-> [String]
-> (Map String Int, String, String, String)
completeAggLinks [(String, [String], String)]
sodn (String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h6String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
prevTbl (String -> [String]
sepColString String
h5) String
nxtTbl (String -> [String]
sepColString String
h7))) String
nxtTbl String
aggName String
toName String
frmName Map String Int
nxtCnt (String
h1String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h2String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h6String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h7String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
h8String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t)
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h6 1 Map String Int
counts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h6 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h6
completeAggLinks sodn :: [(String, [String], String)]
sodn rlt :: String
rlt prevTbl :: String
prevTbl aggName :: String
aggName toName :: String
toName frmName :: String
frmName counts :: Map String Int
counts (h1 :: String
h1:h2 :: String
h2:h3 :: String
h3:h4 :: String
h4:h5 :: String
h5:[]) = (Map String Int
nxtCnt,String
uniqColsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++" INNER JOIN "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
h1String -> String -> String
forall a. [a] -> [a] -> [a]
++" AS "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nxtTblString -> String -> String
forall a. [a] -> [a] -> [a]
++" ON "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> [String] -> String
makeEqColumns String
prevTbl (String -> [String]
sepColString String
h5) String
nxtTbl (String -> [String]
sepColString String
h2))," GROUP BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++String
uniqCols,String -> [String] -> String -> [String] -> String
makeEqColumns String
toName [String]
connIds String
aggName [String]
connIds)
where
nxtCnt :: Map String Int
nxtCnt = (Int -> Int -> Int)
-> String -> Int -> Map String Int -> Map String Int
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) String
h1 1 Map String Int
counts
nxtTbl :: String
nxtTbl = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
h1 (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show (Int -> String) -> Int -> String
forall a b. (a -> b) -> a -> b
$ (!) Map String Int
nxtCnt String
h1
connIds :: [String]
connIds = String -> [(String, [String], String)] -> [String]
fetchTableIds String
h1 [(String, [String], String)]
sodn
uniqCols :: String
uniqCols = String -> [String] -> String
listIdFields String
nxtTbl [String]
connIds
completeAggLinks _ _ _ _ _ _ _ _ = ReferenceException -> (Map String Int, String, String, String)
forall a e. Exception e => e -> a
throw ReferenceException
RelationshipCardinalityException
sepColString :: String -> [String]
sepColString :: String -> [String]
sepColString str :: String
str = if Char -> String -> Bool
forall (t :: * -> *) a. (Foldable t, Eq a) => a -> t a -> Bool
elem ' ' String
str then ([String] -> Char -> [String]) -> [String] -> String -> [String]
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\(h :: String
h:t :: [String]
t) nChar :: Char
nChar->if Char
nCharChar -> Char -> Bool
forall a. Eq a => a -> a -> Bool
==' ' then (""String -> [String] -> [String]
forall a. a -> [a] -> [a]
:String
hString -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t) else ((String
hString -> String -> String
forall a. [a] -> [a] -> [a]
++[Char
nChar])String -> [String] -> [String]
forall a. a -> [a] -> [a]
:[String]
t)) [""] String
str else [String
str]
addAggSqlQueryFields :: SubFields -> Map String Int -> String -> String -> String -> String -> [(String,Int)] -> [SubFields] -> [(String,[(String,String,[(String,[(String,String,String,String)])])])] -> [(String,[String],String)] -> [(String,String,[String])] -> [(String,[String],[String])] -> FlagNode -> [FlagNode] -> Int -> Bool -> [(Int,Int,Bool,String)] -> [(Int,Int,Bool,String)] -> [(String,String,String,String)] -> [(String,String,String,String)] -> ([[(Int,Int,Bool,String)]],[[String]])
addAggSqlQueryFields :: SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields ((Left (ScalarType _ "__typename" _ _)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: FlagNode
flgs retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
flgs [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li [(Int, Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addAggSqlQueryFields ((Left (ScalarType _ name :: String
name Nothing _)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: FlagNode
flgs retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
counts String
ids (String
selectString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltableNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
flgs [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li [(Int, Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addAggSqlQueryFields ((Left (ScalarType _ name :: String
name (Just trans :: String
trans) arg :: Maybe String
arg)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: FlagNode
flgs retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
counts String
ids (String
selectString -> String -> String
forall a. [a] -> [a] -> [a]
++String
prefixString -> String -> String
forall a. [a] -> [a] -> [a]
++String
ltableString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
ltableNo)String -> String -> String
forall a. [a] -> [a] -> [a]
++"."String -> String -> String
forall a. [a] -> [a] -> [a]
++String
nameString -> String -> String
forall a. [a] -> [a] -> [a]
++String
suffixString -> String -> String
forall a. [a] -> [a] -> [a]
++",") String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
flgs [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li [(Int, Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
where
(prefix :: String
prefix,suffix :: String
suffix) = String
-> String
-> String
-> Maybe String
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> (String, String)
getPrimitiveScalarTypeArgumentOptions (String -> [(String, [String], String)] -> String
translateTableToObject String
ltable [(String, [String], String)]
sodn) String
name String
trans Maybe String
arg [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss
addAggSqlQueryFields ((Right (Left h :: RootObject
h)):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa (FlagNode val :: Int
val nds :: [FlagNode]
nds) retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = if Int
tablesLenInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>=1 then ([[(Int, Int, Bool, String)]]
fstTbls[[(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)]]]
nxtTbls),[[String]]
fstQrys[[String]] -> [[String]] -> [[String]]
forall a. [a] -> [a] -> [a]
++([[[String]]] -> [[String]]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [[[String]]]
nxtQrys)) else SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa (Int -> [FlagNode] -> FlagNode
FlagNode Int
val ([FlagNode] -> [FlagNode]
forall a. [a] -> [a]
tail [FlagNode]
nds)) [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li ((2,Int
newLvl,Bool
True," ")(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
ri) [(String, String, String, String)]
lqs (("","","SELECT * FROM (VALUES (NULL)) WHERE 1=0","")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
where
tables :: [([String], String)]
tables = String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> [([String], String)]
translateServerObjectToDBName (RootObject -> String
getServerObject RootObject
h) [(String, [String], String)]
sodn [(String, [String], [String])]
soa
tablesLen :: Int
tablesLen = [([String], String)] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [([String], String)]
tables
(firstTableIds :: [String]
firstTableIds, firstTable :: String
firstTable) = [([String], String)] -> ([String], String)
forall a. [a] -> a
head [([String], String)]
tables
(firstTableNewCounts :: Map String Int
firstTableNewCounts,transition :: String
transition) = String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
makeTransitions (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
ltable (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
ltableNo) Map String Int
counts (String -> String -> [(String, String, [String])] -> [String]
getDBObjectRelationships String
ltable String
firstTable [(String, String, [String])]
sor) RootObject
h
firstTableNum :: Int
firstTableNum = (!) Map String Int
firstTableNewCounts String
firstTable
firstTableName :: String
firstTableName = String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
firstTable (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
firstTableNum
newLvl :: Int
newLvl = Int
lvlInt -> Int -> Int
forall a. Num a => a -> a -> a
+1
objSfs :: SubFields
objSfs = RootObject -> SubFields
getSubFields RootObject
h
(fstTbls :: [[(Int, Int, Bool, String)]]
fstTbls,fstQrys :: [[String]]
fstQrys) = if Int
firstNodeFlgInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<2 then
SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
firstTableNewCounts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
retNode [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li ((Int
firstNodeFlg,Int
lvlInt -> Int -> Int
forall a. Num a => a -> a -> a
+1,Bool
True,String
firstTable)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
ri) [(String, String, String, String)]
lqs (("","",String
aggQry,"")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
else
SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
objSfs Map String Int
firstTableNewCounts (String
idsString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstTableIds "")) "" (String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) (String
orderString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
firstTableName [String]
firstTableIds " ASC")) ((String
firstTable,Int
firstTableNum)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:(String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) (SubFields
tSubFields -> [SubFields] -> [SubFields]
forall a. a -> [a] -> [a]
:[SubFields]
fields) [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa ([FlagNode] -> FlagNode
forall a. [a] -> a
head [FlagNode]
nds) (FlagNode
retNodeFlagNode -> [FlagNode] -> [FlagNode]
forall a. a -> [a] -> [a]
:[FlagNode]
retFlgs) Int
newLvl Bool
True ([(Int, Int, Bool, String)]
li[(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++[(Int
val,Int
lvl,Bool
True,String
ltable)][(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++[(Int, Int, Bool, String)]
ri) [] ([(String, String, String, String)]
lqs[(String, String, String, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. [a] -> [a] -> [a]
++[(String
ids,String
select,String
from,String
order)][(String, String, String, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. [a] -> [a] -> [a]
++[(String, String, String, String)]
rqs) []
where
aggQry :: String
aggQry = [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
firstTableNewCounts [(String
firstTable,Int
firstTableNum)] ("result0 AS ("String -> String -> String
forall a. [a] -> [a] -> [a]
++((String -> String -> String) -> String -> [String] -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\rlt :: String
rlt _->String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++"0,") String
ids [String]
firstTableIds)String -> String -> String
forall a. [a] -> [a] -> [a]
++"JSON_GROUP_ARRAY(JSON_OBJECT(") ("))"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) SubFields
objSfs [] (" GROUP BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
forall a. [a] -> [a]
init (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String -> String
forall a. Int -> [a] -> [a]
drop 7 String
ids)String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
order)String -> String -> String
forall a. [a] -> [a] -> [a]
++") SELECT * FROM result0")
firstNodeFlg :: Int
firstNodeFlg = (\(FlagNode val :: Int
val _)->Int
val) ([FlagNode] -> FlagNode
forall a. [a] -> a
head [FlagNode]
nds)
retNode :: FlagNode
retNode = Int -> [FlagNode] -> FlagNode
FlagNode Int
val ([FlagNode] -> FlagNode) -> [FlagNode] -> FlagNode
forall a b. (a -> b) -> a -> b
$ Int -> [FlagNode] -> [FlagNode]
forall a. Int -> [a] -> [a]
drop Int
tablesLen [FlagNode]
nds
(nxtTbls :: [[[(Int, Int, Bool, String)]]]
nxtTbls,nxtQrys :: [[[String]]]
nxtQrys) = [([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
forall a b. [(a, b)] -> ([a], [b])
unzip ([([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]]))
-> [([[(Int, Int, Bool, String)]], [[String]])]
-> ([[[(Int, Int, Bool, String)]]], [[[String]]])
forall a b. (a -> b) -> a -> b
$ ((FlagNode, ([String], String))
-> ([[(Int, Int, Bool, String)]], [[String]]))
-> [(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> [a] -> [b]
map (\((FlagNode nVal :: Int
nVal nNds :: [FlagNode]
nNds),(xIds :: [String]
xIds,x :: String
x))->let
(newCounts :: Map String Int
newCounts,transition :: String
transition)=String
-> Map String Int
-> [String]
-> RootObject
-> (Map String Int, String)
makeTransitions (String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
ltable (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String
forall a. Show a => a -> String
show Int
ltableNo) Map String Int
counts (String -> String -> [(String, String, [String])] -> [String]
getDBObjectRelationships String
ltable String
x [(String, String, [String])]
sor) RootObject
h
xNum :: Int
xNum=(!) Map String Int
newCounts String
x
xName :: String
xName=String
xString -> String -> String
forall a. [a] -> [a] -> [a]
++(Int -> String
forall a. Show a => a -> String
show Int
xNum)
(nInfo :: [[(Int, Int, Bool, String)]]
nInfo,nQrs :: [[String]]
nQrs) = if Int
nValInt -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<2 then
SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields [] Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
forall a. [[a]]
emptyFlds [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa (Int -> [FlagNode] -> FlagNode
FlagNode Int
val []) [FlagNode]
emptyFlgs Int
lvl Bool
False [(Int, Int, Bool, String)]
flsLRcds ((Int
nVal,Int
newLvl,Bool
True,String
x)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
flsRRcds) [(String, String, String, String)]
lStubQrys (("","",String
aggQry,"")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rStubQrys)
else
SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
objSfs Map String Int
newCounts (String
idsString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds "")) "" (String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) (String
orderString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> [String] -> String -> String
makeTableIdentifier String
xName [String]
xIds " ASC")) ((String
x,Int
xNum)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:(String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
forall a. [[a]]
emptyFlds [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa (Int -> [FlagNode] -> FlagNode
FlagNode Int
nVal [FlagNode]
nNds) ((Int -> [FlagNode] -> FlagNode
FlagNode Int
val [])FlagNode -> [FlagNode] -> [FlagNode]
forall a. a -> [a] -> [a]
:[FlagNode]
emptyFlgs) Int
newLvl Bool
True ([(Int, Int, Bool, String)]
flsLRcds[(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a] -> [a]
++[(Int
val,Int
lvl,Bool
False,String
ltable)]) [(Int, Int, Bool, String)]
flsRRcds [(String, String, String, String)]
lStubQrys [(String, String, String, String)]
rStubQrys
where
aggQry :: String
aggQry = [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> Map String Int
-> [(String, Int)]
-> String
-> String
-> SubFields
-> [(String, String, SubFields)]
-> String
-> String
makeSqlAggQuery [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa Map String Int
newCounts [(String
x,Int
xNum)] ("result0 AS ("String -> String -> String
forall a. [a] -> [a] -> [a]
++((String -> String -> String) -> String -> [String] -> String
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\rlt :: String
rlt _->String
rltString -> String -> String
forall a. [a] -> [a] -> [a]
++"0,") String
ids [String]
xIds)String -> String -> String
forall a. [a] -> [a] -> [a]
++"JSON_GROUP_ARRAY(JSON_OBJECT(") ("))"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
fromString -> String -> String
forall a. [a] -> [a] -> [a]
++String
transition) SubFields
objSfs [] (" GROUP BY "String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
forall a. [a] -> [a]
init (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ Int -> String -> String
forall a. Int -> [a] -> [a]
drop 7 String
ids)String -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
order)String -> String -> String
forall a. [a] -> [a] -> [a]
++") SELECT * FROM result0")
emptyFlds :: [[a]]
emptyFlds = ([][a] -> [[a]] -> [[a]]
forall a. a -> [a] -> [a]
:[[] | SubFields
_<-[SubFields]
fields])
emptyFlgs :: [FlagNode]
emptyFlgs = [Int -> [FlagNode] -> FlagNode
FlagNode Int
sVal [] | (FlagNode sVal :: Int
sVal _)<-[FlagNode]
retFlgs]
flsLRcds :: [(Int, Int, Bool, String)]
flsLRcds = (((Int, Int, Bool, String) -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\(nVal :: Int
nVal,nlvl :: Int
nlvl,_,ntbl :: String
ntbl)->(Int
nVal,Int
nlvl,Bool
False,String
ntbl)) [(Int, Int, Bool, String)]
li)
flsRRcds :: [(Int, Int, Bool, String)]
flsRRcds = ((Int, Int, Bool, String) -> (Int, Int, Bool, String))
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (\(nVal :: Int
nVal,nlvl :: Int
nlvl,_,ntbl :: String
ntbl)->(Int
nVal,Int
nlvl,Bool
False,String
ntbl)) [(Int, Int, Bool, String)]
ri
lStubQrys :: [(String, String, String, String)]
lStubQrys = [("","","","") | (Int, Int, Bool, String)
_<-[(Int, Int, Bool, String)]
flsLRcds]
rStubQrys :: [(String, String, String, String)]
rStubQrys = [("","","","") | (Int, Int, Bool, String)
_<-[(Int, Int, Bool, String)]
flsRRcds]
in
([[(Int, Int, Bool, String)]]
nInfo,[[String]]
nQrs)) ([(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])])
-> [(FlagNode, ([String], String))]
-> [([[(Int, Int, Bool, String)]], [[String]])]
forall a b. (a -> b) -> a -> b
$ [(FlagNode, ([String], String))]
-> [(FlagNode, ([String], String))]
forall a. [a] -> [a]
tail ([(FlagNode, ([String], String))]
-> [(FlagNode, ([String], String))])
-> [(FlagNode, ([String], String))]
-> [(FlagNode, ([String], String))]
forall a b. (a -> b) -> a -> b
$ [FlagNode]
-> [([String], String)] -> [(FlagNode, ([String], String))]
forall a b. [a] -> [b] -> [(a, b)]
zip [FlagNode]
nds [([String], String)]
tables
addAggSqlQueryFields [] _ ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltbl :: String
ltbl,_):_) [] _ _ _ _ (FlagNode val :: Int
val _) retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = ([[(Int, Int, Bool, String)]
li[(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))
-> [(Int, (Int, Int, Bool, String))] -> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (Int, (Int, Int, Bool, String)) -> (Int, Int, Bool, String)
forall a b. (a, b) -> b
snd [(Int, (Int, Int, Bool, String))]
nri)],[[String]
lQrs[String] -> [String] -> [String]
forall a. [a] -> [a] -> [a]
++[String]
rQrs])
where
(nri :: [(Int, (Int, Int, Bool, String))]
nri,nrqs :: [(String, String, String, String)]
nrqs) = [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)])
forall a b. [(a, b)] -> ([a], [b])
unzip ([((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)]))
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)])
forall a b. (a -> b) -> a -> b
$ [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a.
[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
reverseNeighbourQueries ([((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))])
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [(Int, (Int, Int, Bool, String))]
-> [(String, String, String, String)]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip (((Int, Int, Bool, String) -> (Int, (Int, Int, Bool, String)))
-> [(Int, Int, Bool, String)] -> [(Int, (Int, Int, Bool, String))]
forall a b. (a -> b) -> [a] -> [b]
map (\(nf :: Int
nf,nl :: Int
nl,nb :: Bool
nb,nt :: String
nt)->(Int
nl,(Int
nf,Int
nl,Bool
nb,String
nt))) ((Int
val,Int
lvl,Bool
True,String
ltbl)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
ri)) ((String
ids,String
select,String
from,String
order)(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
lQrs :: [String]
lQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-[(String, String, String, String)]
lqs]
rQrs :: [String]
rQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-((String, String, String, String) -> Bool)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String, String, String, String)
-> (String, String, String, String) -> Bool
forall a. Eq a => a -> a -> Bool
(/=) ("","","","")) [(String, String, String, String)]
nrqs]
addAggSqlQueryFields [] counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltbl :: String
ltbl,_):b :: [(String, Int)]
b) (h :: SubFields
h:t :: [SubFields]
t) sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa (FlagNode val :: Int
val _) retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
h Map String Int
counts String
nids String
sel String
frm String
ord [(String, Int)]
b [SubFields]
t [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa ([FlagNode] -> FlagNode
forall a. [a] -> a
head [FlagNode]
retFlgs) ([FlagNode] -> [FlagNode]
forall a. [a] -> [a]
tail [FlagNode]
retFlgs) Int
nlvl Bool
nfst [(Int, Int, Bool, String)]
nli [(Int, Int, Bool, String)]
nri ([(String, String, String, String)]
-> [(String, String, String, String)]
forall a. [a] -> [a]
init [(String, String, String, String)]
lqs) [(String, String, String, String)]
nrqs
where
(_,nlvl :: Int
nlvl,nfst :: Bool
nfst,_) = [(Int, Int, Bool, String)] -> (Int, Int, Bool, String)
forall a. [a] -> a
last [(Int, Int, Bool, String)]
li
(nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord) = [(String, String, String, String)]
-> (String, String, String, String)
forall a. [a] -> a
last [(String, String, String, String)]
lqs
nrqs :: [(String, String, String, String)]
nrqs = (String
ids,String
select,String
from,String
order)(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs
nli :: [(Int, Int, Bool, String)]
nli = [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. [a] -> [a]
init [(Int, Int, Bool, String)]
li
nri :: [(Int, Int, Bool, String)]
nri = (Int
val,Int
lvl,Bool
True,String
ltbl)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
ri
addAggSqlQueryFields _ _ _ _ _ _ ((ltable :: String
ltable,_):_) _ _ _ _ _ (FlagNode val :: Int
val _) _ lvl :: Int
lvl False li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri _ rqs :: [(String, String, String, String)]
rqs = ([[(Int, Int, Bool, String)]
li[(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))
-> [(Int, (Int, Int, Bool, String))] -> [(Int, Int, Bool, String)]
forall a b. (a -> b) -> [a] -> [b]
map (Int, (Int, Int, Bool, String)) -> (Int, Int, Bool, String)
forall a b. (a, b) -> b
snd [(Int, (Int, Int, Bool, String))]
nri)],[[String]
rQrs])
where
(nri :: [(Int, (Int, Int, Bool, String))]
nri,nrqs :: [(String, String, String, String)]
nrqs) = [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)])
forall a b. [(a, b)] -> ([a], [b])
unzip ([((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)]))
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> ([(Int, (Int, Int, Bool, String))],
[(String, String, String, String)])
forall a b. (a -> b) -> a -> b
$ [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a.
[((Int, a), (String, String, String, String))]
-> [((Int, a), (String, String, String, String))]
reverseNeighbourQueries ([((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))])
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a b. (a -> b) -> a -> b
$ [(Int, (Int, Int, Bool, String))]
-> [(String, String, String, String)]
-> [((Int, (Int, Int, Bool, String)),
(String, String, String, String))]
forall a b. [a] -> [b] -> [(a, b)]
zip (((Int, Int, Bool, String) -> (Int, (Int, Int, Bool, String)))
-> [(Int, Int, Bool, String)] -> [(Int, (Int, Int, Bool, String))]
forall a b. (a -> b) -> [a] -> [b]
map (\(nf :: Int
nf,nl :: Int
nl,nb :: Bool
nb,nt :: String
nt)->(Int
nl,(Int
nf,Int
nl,Bool
nb,String
nt))) ((Int
val,Int
lvl,Bool
False,String
ltable)(Int, Int, Bool, String)
-> [(Int, Int, Bool, String)] -> [(Int, Int, Bool, String)]
forall a. a -> [a] -> [a]
:[(Int, Int, Bool, String)]
ri)) (("","","","")(String, String, String, String)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. a -> [a] -> [a]
:[(String, String, String, String)]
rqs)
rQrs :: [String]
rQrs = [(String -> String
removeLastChar (String
nidsString -> String -> String
forall a. [a] -> [a] -> [a]
++String
sel))String -> String -> String
forall a. [a] -> [a] -> [a]
++String
frmString -> String -> String
forall a. [a] -> [a] -> [a]
++(String -> String
removeLastChar String
ord)String -> String -> String
forall a. [a] -> [a] -> [a]
++";" | (nids :: String
nids,sel :: String
sel,frm :: String
frm,ord :: String
ord)<-((String, String, String, String) -> Bool)
-> [(String, String, String, String)]
-> [(String, String, String, String)]
forall a. (a -> Bool) -> [a] -> [a]
filter ((String, String, String, String)
-> (String, String, String, String) -> Bool
forall a. Eq a => a -> a -> Bool
(/=) ("","","","")) [(String, String, String, String)]
nrqs]
addAggSqlQueryFields ((Right (Right (InlinefragmentObject ifo :: String
ifo sfs :: SubFields
sfs))):t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: FlagNode
flgs retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl True li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs
| String
-> String
-> [(String, [String], String)]
-> [(String, [String], [String])]
-> Bool
isServerObjectTable String
ltable String
ifo [(String, [String], String)]
sodn [(String, [String], [String])]
soa = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields (SubFields
sfsSubFields -> SubFields -> SubFields
forall a. [a] -> [a] -> [a]
++SubFields
t) Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
flgs [FlagNode]
retFlgs Int
lvl Bool
True [(Int, Int, Bool, String)]
li [(Int, Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addAggSqlQueryFields (_:t :: SubFields
t) counts :: Map String Int
counts ids :: String
ids select :: String
select from :: String
from order :: String
order ((ltable :: String
ltable,ltableNo :: Int
ltableNo):names :: [(String, Int)]
names) fields :: [SubFields]
fields sss :: [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss sodn :: [(String, [String], String)]
sodn sor :: [(String, String, [String])]
sor soa :: [(String, [String], [String])]
soa flgs :: FlagNode
flgs retFlgs :: [FlagNode]
retFlgs lvl :: Int
lvl fst :: Bool
fst li :: [(Int, Int, Bool, String)]
li ri :: [(Int, Int, Bool, String)]
ri lqs :: [(String, String, String, String)]
lqs rqs :: [(String, String, String, String)]
rqs = SubFields
-> Map String Int
-> String
-> String
-> String
-> String
-> [(String, Int)]
-> [SubFields]
-> [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
-> [(String, [String], String)]
-> [(String, String, [String])]
-> [(String, [String], [String])]
-> FlagNode
-> [FlagNode]
-> Int
-> Bool
-> [(Int, Int, Bool, String)]
-> [(Int, Int, Bool, String)]
-> [(String, String, String, String)]
-> [(String, String, String, String)]
-> ([[(Int, Int, Bool, String)]], [[String]])
addAggSqlQueryFields SubFields
t Map String Int
counts String
ids String
select String
from String
order ((String
ltable,Int
ltableNo)(String, Int) -> [(String, Int)] -> [(String, Int)]
forall a. a -> [a] -> [a]
:[(String, Int)]
names) [SubFields]
fields [(String,
[(String, String,
[(String, [(String, String, String, String)])])])]
sss [(String, [String], String)]
sodn [(String, String, [String])]
sor [(String, [String], [String])]
soa FlagNode
flgs [FlagNode]
retFlgs Int
lvl Bool
fst [(Int, Int, Bool, String)]
li [(Int, Int, Bool, String)]
ri [(String, String, String, String)]
lqs [(String, String, String, String)]
rqs
addAggSqlQueryFields _ _ _ _ _ _ [] _ _ _ _ _ _ _ _ _ _ _ _ _ = String -> ([[(Int, Int, Bool, String)]], [[String]])
forall a. HasCallStack => String -> a
error "Cannot find object for fields (source error)."